Spyke

Replies

Comment on

Can I sell Perchance-generated AI images and not get in trouble?

As stated in the Stable Diffusion License - Sec.3 Paragraph 6:

The Output You Generate. Except as set forth herein, Licensor claims no rights in the Output You generate using the Model. You are accountable for the Output you generate and its subsequent uses. No use of the output can contravene any provision as stated in the License.

Basically, you are free to do whatever you want with the image (but still adhering to the use-restrictions (see Attachment A on the license)) but if you get into trouble with it, Perchance and the creators of the model are not responsible, you are.

I would recommend having the AI generated content as a 'reference' or an 'idea' builder to base your images from and you would be more than free to commercialize your own work.

Comment on

Text to Image Plugin Gallery Moderation Example

🎉🎉🎉
Just a suggestion, can we have a hide button to only hide images for ourselves? i.e. to self moderate the images for ourselves?
We might not want to block the user generating them, but only hide some images that we don't want to see.

Also, possibly the RegEx formatting here can be applied to the RegEx for the comments-plugin, since we still can't use commas (,) on the RegEx for the banned words.

Edit: I think RegEx with Perchance Syntax ( square brackets, curly brackets, caret, etc) still doesn't work or at least it currently throws errors.

Thanks again for the amazing update!!! 💜💜💜

Comment on

What are the limits of the Random Dice Icon Plugin?

Reply in thread

Hello, sorry for late reply!

If you want to access individual dice output from the plugin, you can do so with:

[x = rIcon('2d6'), x.icons] [x.rolls[0].value] [x.rolls[1].value]

Where 0 is the first element in the rolls array returned by the plugin, and accessing its value with .value.

If you just want to add the same buffs to all of the individual dice, you can probably just do something like this:

[x = rIcon(numDice+'d6', 'solid'), x.icons] [x.sum + (numDice * buffs) + (numDice * debuffs)] 

Where numDice is the number of dice. We then get the sum of all values in the rolls and then add the appropriate increase and decrease to the value by multiplying the increase and decrease based on the number of dice rolled and adding them to the sum of the rolls.

Comment on

[Help] How to check if generator name exists

You can possibly use the API that retrieves the generator's stats for the generator cards. Though you need to make the function an async function.

async loadUserDataset() => // Need to change it to an Async function to wait for the data to be retrieved.
  ...
  if(userDataset != "") {
    let result = await fetch("/api/getGeneratorStats?names="+userDataset).then(r => r.json()); // Gets the Generator Stats
    let gens = result.data; // Returns an Array of Generator
    if (gens.length > 0) { // If there is data
      document.userDataset = userDataset;
    } else { // if not
      alert('Perchance Page Not Found');
      document.userDataset = 'template-fusion-generator-dataset' // or any default pages
    }
  }
  ...
  update() // to refresh the display, or you can use element.innerHTML = this new value

Comment on

[Help] T2i Styles tech question...

Reply in thread

Maybe, I don't actually understand what you said xD.
Remember if you use the styles, you need to bind the User input base prompt to the window.input.description variable and the User Input negative prompt to the window.input.negative variable so when you select the style, the base prompt and negative prompt is added to the styles.

Also, I recommend just using the update(imageCon) to just update the images and not the user inputs so you don't have to add a new function and new variable and just use the selectEl.value to get the value. Here is the demo of it

Comment on

[Help] Can't export with "Export user settings/data?" on No.

@[email protected] pinging dev. The problem is in the line 3269 on setting the usageStats.

...
// line 3269
    if(result.exportUserData === "no") {
      json.data.data.find(d => d.tableName === "usageStats").rows = []; // Throws error here
    } else {
      let usageStats = json.data.data.find(d => d.tableName === "usageStats");
      if(usageStats) {
        usageStats.rows = usageStats.rows.filter(entry => keepThreadCheck(entry.threadId) && keepCharacterCheck(entry.characterId));
      }
    }
...

Seems like on the DB Schema (line 2813), usageStats is no longer used, so maybe just removing them in the export fixes them.

Comment on

Help building a condition-based logic generator

Here is a modified generator.

So first, we store the selection from the tooth list in a variable called x. We use .evaluateItem on the tooth so we can have the 'string' / evaluated form of the item i.e. a text without the perchance syntax.

What we have on the surface list is what we call Dynamic Odds. Basically, it modifies the odds of the items in the list depending on the 'condition' that is on the odds. Essentially a 'If/Else' statement to control the odds/probability of an item to be chosen.

In this case, we use the value on the variable x and check if it 'includes' a certain string, which would be your conditions 'UL1' and 'LR2'.

On the first three items:

surface
  Mesio-occlusal (MO) ^[!x.includes('UL1') && !x.includes('LR2')]
  Disto-occlusal (DO)^[!x.includes('UL1') && !x.includes('LR2')]
  Mesio-occlusal-distal (MOD)^[!x.includes('UL1') && !x.includes('LR2')]
  ...

We use the native JavaScript method .includes() to check if the value on x includes a certain string, in this case it is checking for 'UL1' and 'LR2'. However, we are using the ! or 'NOT' notation to invert it, so we are checking if the string doesn't contain the following strings. We then use the && or 'AND' notation to only return a 'true' statement if and only if BOTH conditions are true.

In this case, it would be true if x doesn't include UL1 AND LR2. Which means other than UL1 and LR2, the engine wouldn't be able to 'pick' those first three items unless x doesn't includes UL1 and LR2

On the last items:

surface
  ...
  Buccal (B)^[x.includes('UL1') || x.includes('LR2')]
  Labial (L)^[x.includes('UL1') || x.includes('LR2')]
  Palatal (P)^[x.includes('UL1') || x.includes('LR2')]
  Distal (D)^[x.includes('UL1') || x.includes('LR2')]
  Mesial (M)^[x.includes('UL1') || x.includes('LR2')]
  ...

We do the opposite, we only allow the engine to select those items ONLY if x has UL1 OR LR2. The || is the OR operator in which it would return 'true' if only one of the items are 'true'.

I also added on the generator my 'debugging' utilities in which you can see the how the 'odds' are on the items depending on the value on x.

Here are some resources to read: