generateHTML = {import:fusion-t2i-framework-plugin-v2}  // <-- this is a little DIY 'framework' plugin that itself importes the text-to-image plugin and generates the user interface using the settings below
_at = {import:fusion-t2i-wildcards}
_numbers = {import:fusion-t2i-random-numbers}
_words = {import:fusion-t2i-word-categories}
commentsPlugin = {import:comments-plugin}

$meta
  title = Fusion Generator 🔸✨📝🔰🔹  // <-- notice that this shows up in the browser tab - it overrides the <h1> text
  description = Advanced Stable Diffusion AI image generator with token sampling and from-to-steps
  image = image = https://i.imgur.com/TPHIzaa.jpeg

//  <ul> <li> <p> ⚠️ This generator is undergoing an overhaul. Not all generation modes will be available for a short while </p> </li> </ul> 
// <ul> <li> <p> 🔁 This generator is currently undergoing an overhaul. Not all generation modes will be available for a while </p> </li> </ul> 

replaceKeywordsWithWildcards(text) => 
  result = text.replaceText(_at._common.keyword , _at._common.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._average.keyword , _at._average.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._uncommon.keyword , _at._uncommon.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._weird.keyword , _at._weird.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._exotic.keyword , _at._exotic.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._celebs.keyword , _at._celebs.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._color.keyword , _at._color.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._emotion.keyword , _at._emotion.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._lingerie.keyword , _at._lingerie.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._all.keyword , _at._all.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._allprefix.keyword , _at._allprefix.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._prefix.keyword , _at._prefix.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._firstName.keyword , _at._firstName.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._lastName.keyword , _at._lastName.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_at._fullName.keyword , _at._fullName.data.selectMany(Number(1)).joinItems(""));
  //-----//
  //0to9 1to4 5to12 13to18 5to18 18to25 25to40 18to40 40to65 25to65 18to65 65to90 0to99
  result = result.replaceText(_numbers._0to9.keyword , _numbers._0to9.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._1to4.keyword , _numbers._1to4.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._5to12.keyword , _numbers._5to12.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._13to18.keyword , _numbers._13to18.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._5to18.keyword , _numbers._5to18.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._18to25.keyword , _numbers._18to25.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._25to40.keyword , _numbers._25to40.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._18to40.keyword , _numbers._18to40.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._40to65.keyword , _numbers._40to65.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._25to65.keyword , _numbers._25to65.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._18to65.keyword , _numbers._18to65.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._65to90.keyword , _numbers._65to90.data.selectMany(Number(1)).joinItems(""));
  result = result.replaceText(_numbers._0to99.keyword , _numbers._0to99.data.selectMany(Number(1)).joinItems(""));
  //-----//
  //verb
  result = result.replaceText(_words._verb.keyword , _words._verb.data.selectMany(Number(1)).joinItems(""));
  //-----//
  return result.replaceText("</w>", " ")
  
getCurrentChatData() =>
  return {
    format: "perchance-ai-chat-v1",
    botName: botNameEl.value.trim(),
    userName: userNameEl.value.trim(),
    botDescription: botDescriptionEl.value.trim(),
    userDescription: userDescriptionEl.value.trim(),
    scenario: scenarioEl.value.trim(),
    chatLogs: chatLogsEl.value.trim(),
    writingInstructions: writingInstructionsEl.value.trim(),
  };
  
  //<div style="margin-top:3rem;">
    //<button onclick="saveChatDataToUsersDevice()">💾 save prompt (work in progress)</button>
    //<button onclick="loadChatDataFromUsersDevice()">📁 load a chat (work in progress)</button>
  //</div>
  
  //result = result.replaceText(_at._tokens14.keyword , _at._tokens14.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens13.keyword , _at._tokens13.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens12.keyword , _at._tokens12.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens11.keyword , _at._tokens11.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens10.keyword , _at._tokens10.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens9.keyword , _at._tokens9.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens8.keyword , _at._tokens8.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens7.keyword , _at._tokens7.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens6.keyword , _at._tokens6.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens5.keyword , _at._tokens5.data.selectMany(Number(1)).joinItems(""));  
  //result = result.replaceText(_at._tokens4.keyword , _at._tokens4.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens3.keyword , _at._tokens3.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens2.keyword , _at._tokens2.data.selectMany(Number(1)).joinItems(""));
  //result = result.replaceText(_at._tokens1.keyword , _at._tokens1.data.selectMany(Number(1)).joinItems(""));
  
loadDataIntoTextAreasAndLocalStorage(data) =>
  // put data in input boxes:
  prefix.value = data.prefix;
  suffix.value = data.suffix;
  base.value = data.base;
  main.value = data.main;
  negative.value = data.negative;
  promptA.value = data.promptA;
  promptB.value = data.promptB;
  promptC.botName = data.promptC;
  // put data in localstorage:
  
  localStorage.userName = data.userName;
  localStorage.botDescription = data.botDescription;
  localStorage.userDescription = data.userDescription;
  localStorage.scenario = data.scenario;
  localStorage.chatLogs = data.chatLogs;
  localStorage.writingInstructions = data.writingInstructions;
  
saveChatDataToUsersDevice() => 
  let data = getCurrentChatData();
  let filename = prompt("Choose a filename:", (data.userName+"-"+data.botName).replace(/[^a-zA-Z0-9\-_]/g, ""));
  if(filename === null) return;
  filename += ".ai-chat.json";
  let blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
  let url = URL.createObjectURL(blob);
  let a = document.createElement('a');
  a.href = url;
  a.download = filename;
  a.click();
  URL.revokeObjectURL(url);
  
async loadChatDataFromUsersDevice() =>
  return new Promise((resolve, reject) => {
    let input = document.createElement('input');
    input.type = 'file';
    input.accept = 'application/json, text/json, text/plain, application/JSON, .json';

    input.onchange = async (event) => {
      let file = event.target.files[0];
      if (file) {
        try {
          let content = await file.text();
          let data = JSON.parse(content);
          if(data.format === "perchance-ai-chat-v1") {
            if((botDescriptionEl.value+userDescriptionEl.value+scenarioEl.value+chatLogsEl.value+writingInstructionsEl.value).trim() !== "") {
              let confirmed = confirm("Loading this data will overwrite your current chat. Continue?");
              if(!confirmed) return;
            }
            loadDataIntoTextAreasAndLocalStorage(data);
          } else {
            alert("Unknown save file format.");
          }
        } catch (error) {
          alert("There was an error while loading that chat file.");
          reject(error);
        }
      }
    };

    input.click();
  });

  
//upload = {import:upload-plugin}
//copyText = {import:copy-text-plugin}



//Please wait 10min or use the dev-version: <a href="https://perchance.org/vak584flp5">https://perchance.org/vak584flp5</a>


//  <div class="text">
//  <br> <br>
//  </div>
  
//  <body> 
//    <h1>Show File-select Fields</h1> 
//    <h3> 
//        Show a file-select field which allows 
 //       only one file to be chosen: 
 //   </h3> 
  //  <form action="/action_page.php" 
   //     enctype="multipart/form-data">        
    //    <label for="myfile">Select a file:</label> 
     //   <input type="file" id="myfile" name="myfile" /> 
      //  <br /><br /> 
       // <input type="submit" /> 
   // </form> 
//</body> 

settings 
  pageTitle = Text-to-Image AI Generator - Fusion 🔸✨📝🔰🔹
  introMessage = Add a description, then click <b>generate</b>.<br><br><span style="font-size:80%; color:grey; max-width:370px; display:inline-block;">This generator was made using the <a href="https://perchance.org/text-to-image-plugin" target="_blank" style="white-space:pre;">text-to-image-plugin</a>.<br>The brain button feature uses the <a href="https://perchance.org/ai-text-plugin" target="_blank" style="white-space:pre;">ai-text-plugin</a>.</span>
  underImagesMessage = <div style="max-width:700px; margin:0 auto; padding:0 1rem; font-size:85%; opacity:0.7;">You might also like to try the <a href="https://perchance.org/ai-character-chat" target="_blank">AI Character Chat</a> (new version) or the <a href="https://perchance.org/ai-story-generator" target="_blank">AI Story Generator</a>.</div>
  numImages = [Number(input.numImages)]
  socialFeatures = button after 4 clicks // or 'button' or 'enabled' or 'disabled'
  
  // note: the t2i-framework-plugin makes all user inputs from the `userInputs` list accessible by name as [input.theNameOfTheInput], as shown here:
  
  imageOptions // <-- options for the text-to-image plugin that generates the images: https://perchance.org/text-to-image-plugin
    
    saveTitle = [input.saveName]
    prompt = [input.Mode?.before] \[ [input.Mode?.base] : [input.Mode?.main] : [input.Mode?.bracketNumber] \] [input.Mode?.outside.replaceText("<|endoftext|>&&&" , "").replaceText("&&&<|startoftext|>", "").replaceText("&&&" , "").replaceText("&&&", "")]
    saveDescription = prompt
    // .getName is a built-in Perchance property that gets the name of a given list/sublist/node
    //.replaceText("<|endoftext|>&&&" , "").replaceText("&&&<|startoftext|>", "")
    //.replaceText("<|endoftext|>&&&" , "").replaceText("&&&<|startoftext|>", "").replaceText("<|endoftext|>  <|startoftext|>","<|endoftext|><|startoftext|>").replaceText("<|endoftext|> <|startoftext|>","<|endoftext|><|startoftext|>").replaceText("<|endoftext|>&&&","").replaceText("<|endoftext|> &&&","").replaceText("<|endoftext|>  &&&","").replaceText("&&& <|startoftext|>","").replaceText("&&&  <|startoftext|>","").replaceText("&&&   <|startoftext|>","")]
    negativePrompt = \[ : [input._negative?.prompt] : [Number(input.shiftPercentageNegative)] \] [input.negativeFixed]
    resolution = [input.shape]
  
  userInputs // you can add more user inputs to this list, and then use them like [input.nameOfInput] in the `prompt`, `negativePrompt`, `artStyle.prompt`, etc.

    Main_favourites // Note: the 'remember' option storage is 'based on' this 'scratchpad' name, so if you change that name to something else like 'notepad', people will lose all their saved scratchpad text. But it's safe to change the 'label', below.
      label = ⭐ Main prompts
      tip = Place your favourite main prompts here. This field are kept in local storage like the Scratchpad. // this loads the default text, but you can delete it and add your own tip. Just change this line to "tip = You own cool tips."
      width = min(750px, 100%)
      type = paragraph
      remember = true // <-- the text that the user inputs will be remembered so it's still there even if they close/refresh the page
      height = 30vh
      takesUpFullRow = true
      foldToggleState = hidden // or 'shown' if you want it to start shown, or delete this line if you don't want it to be show-able/hide-able
      examples
        place main prompts here
     
    Base_favourites // Note: the 'remember' option storage is 'based on' this 'scratchpad' name, so if you change that name to something else like 'notepad', people will lose all their saved scratchpad text. But it's safe to change the 'label', below.
      label = ⭐ Base prompts
      width = min(750px, 100%)
      takesUpFullRow = true
      tip = Place your favourite base prompts here.This field are kept in local storage like the Scratchpad.  // this loads the default text, but you can delete it and add your own tip. Just change this line to "tip = You own cool tips."
      type = paragraph
      remember = true // <-- the text that the user inputs will be remembered so it's still there even if they close/refresh the page
      height = 30vh
      takesUpFullRow = true
      foldToggleState = hidden // or 'shown' if you want it to start shown, or delete this line if you don't want it to be show-able/hide-able
      examples
        place base prompts here

    Negative_favourites // Note: the 'remember' option storage is 'based on' this 'scratchpad' name, so if you change that name to something else like 'notepad', people will lose all their saved scratchpad text. But it's safe to change the 'label', below.
      label = ⭐ Negatives
      width = min(750px, 100%)
      tip = Place your favourite negatives here. This field are kept in local storage like the Scratchpad. // this loads the default text, but you can delete it and add your own tip. Just change this line to "tip = You own cool tips."
      type = paragraph
      remember = true // <-- the text that the user inputs will be remembered so it's still there even if they close/refresh the page
      height = 30vh
      takesUpFullRow = true
      foldToggleState = hidden // or 'shown' if you want it to start shown, or delete this line if you don't want it to be show-able/hide-able
      examples
        place negatives here
        
    Misc // Note: the 'remember' option storage is 'based on' this 'scratchpad' name, so if you change that name to something else like 'notepad', people will lose all their saved scratchpad text. But it's safe to change the 'label', below.
      label = ⭐ Misc
      width = min(750px, 100%)
      tip = Place whatever you like here. This field are kept in local storage like the Scratchpad. // this loads the default text, but you can delete it and add your own tip. Just change this line to "tip = You own cool tips."
      type = paragraph
      remember = true // <-- the text that the user inputs will be remembered so it's still there even if they close/refresh the page
      height = 30vh
      takesUpFullRow = true
      foldToggleState = hidden // or 'shown' if you want it to start shown, or delete this line if you don't want it to be show-able/hide-able
      examples
        place negatives here
        
    scratchpad // Note: the 'remember' option storage is 'based on' this 'scratchpad' name, so if you change that name to something else like 'notepad', people will lose all their saved scratchpad text. But it's safe to change the 'label', below.
      label = 🗒️ Pad
      width = min(750px, 100%)
      tip = [t2i.defaultText.scratchpadTip] // this loads the default text, but you can delete it and add your own tip. Just change this line to "tip = You own cool tips."
      type = paragraph
      remember = true // <-- the text that the user inputs will be remembered so it's still there even if they close/refresh the page
      height = 30vh
      foldToggleState = hidden // or 'shown' if you want it to start shown, or delete this line if you don't want it to be show-able/hide-able
      examples
        [t2i.defaultText.scratchpadPlaceholder]       


    prefix
      label = 🔸Prefix
      takesUpFullRow = true
      remember = true
      width = min(750px, 100%)
      tip =  The first word(s) in the prompt. Example: 'blurry candid cinematic'
      type = text
      examples
        Example: 'photography blurry candid cinematic'
    
    suffix
      label = 🔹Suffix
      takesUpFullRow = true
      remember = true
      width = min(750px, 100%)
      tip =  The last word(s) in the prompt. Example: 'protagonist seen from below stockphoto'
      type = text
      examples
        Example: 'protagonist seen from below stockphoto'

    base
      label = ✨ Base prompt before shift at given %
      type = paragraph
      width = min(750px, 100%)
      tip = 
      takesUpFullRow = true
      foldToggleState = show
      remember = true
      //modifiers = [input.artStyleBase?.modifiers || null]
      //modifierUpdates = event:description.input, event:artStyle.change
      enterKeyTriggersGeneration = true // <-- can still use shift+enter to create a new line
      // we use artstyle-specific random prompts if available, otherwise fall back to randomDescriptions list:           
      examples = This prompt sets the overall contrast and color scheme of the image.  Do not place parenthesis "()" symbols in this prompt, as that will override the prompt switching method. Run the base prompt at 99% to see if it any good.
      tip = This prompt sets the overall contrast and color scheme of the image.  Do not place parenthesis "()" symbols in this prompt, as that will override the prompt switching method. Run the base prompt at 99% to see if it is any good.  
     //[input.artStyle?.randomPrompt || randomDescription] // <-- the placeholder examples that rotate in the text box
      random
        [input.artStyleBase?.prefix][input.artStyleBase?.prompt ||  input._wildcard?.base.selectMany(input.artStyleBase?.numTokens || input.numTokensBase).joinItems("").replaceText("</w>", " ") || String("no random prompt found!")] // <-- added to the text box when the 'random' button gets clicked
    
    main
      label = 📝 Main prompt 
      tip = This is where you put the main prompt
      type = paragraph
      width = min(750px, 300%)
      foldToggleState = show
      takesUpFullRow = true
      remember = true
      //modifiers = [input.artStyleMain?.modifiers || null]
      enterKeyTriggersGeneration = true // <-- can still use shift+enter to create a new line
      // we use artstyle-specific random prompts if available, otherwise fall back to randomDescriptions list:
      examples = Main prompt goes here. Do not places parenthesis "()" symbols in this prompt, as that will override the prompt switching method.
      //[input.artStyle?.randomPrompt || randomDescription] // <-- the placeholder examples that rotate in the text box
      random
        [input.artStyleMain?.prefix][input.artStyleMain?.prompt ||  input._wildcard?.main.selectMany(input.artStyleMain?.numTokens || input.numTokensMain).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ] // <-- added to the text box when the 'random' button gets clicked

      //examples
        //examples : 'figurine' , 'croquis' , 'scifi' ,  'candy'

    promptA
      label = 🔰 Prompt A 
      tip = [String("Prompt merge field A")]
      remember = true
      type = paragraph
      foldToggleState = hidden
      width = min(750px, 100%)
      takesUpFullRow = true
      //modifiers = [null]
      //modifierUpdates = event:description.input, event:artStyle.change
      enterKeyTriggersGeneration = true // <-- can still use shift+enter to create a new line
      // we use artstyle-specific random prompts if available, otherwise fall back to randomDescriptions list:
      examples = [String("Prompt field A")]
      random
        [input.artStylePrompt?.prefix] [input.artStylePrompt?.prompt ||   input._wildcard?.prompt.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ")) || String("no random prompt found!") ] 
    promptB
      label = 🔰 Prompt B
      tip = [String("Prompt merge field B")]
      type = paragraph
      remember = true
      foldToggleState = hidden
      width = min(750px, 100%)
      takesUpFullRow = true
      enterKeyTriggersGeneration = true 
      examples = [String("Prompt merge field B")]
      random
        [input.artStylePrompt?.prefix] [input.artStylePrompt?.prompt ||  input._wildcard?.prompt.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ")  || String("no random prompt found!") ]
    promptC
      label = 🔰 Prompt C
      tip = [String("Prompt merge field C")]
      type = paragraph
      remember = true
      foldToggleState = hidden
      width = min(750px, 100%)
      takesUpFullRow = true
      enterKeyTriggersGeneration = true // <-- can still use shift+enter to create a new line
      // we use artstyle-specific random prompts if available, otherwise fall back to randomDescriptions list:
      examples = [String("Prompt field C")]
      random
        [input.artStylePrompt?.prefix] [input.artStylePrompt?.prompt || input._wildcard?.prompt.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ")  || String("no random prompt found!") ] 


    Mode
      label = Mode of operation
      type = select
      width = min(750px, 100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options        
        ✨-->(🔸, (📝?🔰🔰🔰) ,🔹) default
          tname = [String("FromToSteps")]
          before
            [String("")]  
          base
            [input._base?.prompt] 
          main
            [input._wildcardProcessed?.prefix][input._random?.mainABC][input._wildcardProcessed?.suffix]   
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        --Straights-----------------------------------
          tname
            [String("")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        🔸,✨,📝,🔰,🔰,🔰,🔹 Straight
          tname
            [String("Straight")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._wildcardProcessed?.prefix][input._base?.prompt][input._main?.prompt][input._promptA?.prompt][input._promptB?.prompt][input._promptC?.prompt][input._wildcardProcessed?.suffix]
 
        🔸,✨,(📝?🔰🔰🔰),🔹 R.Straight
          tname
            [String("Straight")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._wildcardProcessed?.prefix][input._base?.prompt][input._random?.mainABC][input._wildcardProcessed?.suffix]
                           
        🔸,✨,🔰,🔰,🔰, 📝,🔹 P.Straight
          tname
            [String("Straight")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._wildcardProcessed?.prefix][input._base?.prompt][input._promptA?.prompt][input._promptB?.prompt][input._promptC?.prompt][input._main?.prompt][input._wildcardProcessed?.suffix]
        
        🔸,🔰,🔰,🔰,✨,📝,🔹 V.Straight
          tname
            [String("Straight")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._wildcardProcessed?.prefix][input._promptA?.prompt][input._promptB?.prompt][input._promptC?.prompt][input._base?.prompt][input._main?.prompt][input._wildcardProcessed?.suffix]
          
        🔰,🔰,🔰,🔸,✨,📝,🔹 A.Straight
          tname
            [String("Straight")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._promptA?.prompt][input._promptB?.prompt][input._promptC?.prompt][input._wildcardProcessed?.prefix][input._base?.prompt][input._main?.prompt][input._wildcardProcessed?.suffix]
          
        --Merges-----------------------------------
          tname
            [String("")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
            
        ((✨📝)U🔰U🔰U🔰) M.Straight
          tname
            [String("Straight-Merge")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._wildcardProcessed?.prefix][input._base?.prompt][input._main?.prompt][input._wildcardProcessed?.suffix][input._cutoff?.end][input._merge?.ABC]
          
        📝U✨U🔰U🔰U🔰 Full Merge
          tname
            [String("Merge")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._merge?.all]
            
        --FromToSteps------------------
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
           
           
        ✨-->(🔸,📝,🔰,🔰,🔰,🔹) FTS
          tname
            [String("FromToSteps")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._base.prompt]
          main
            [input._wildcardProcessed?.prefix][input._main.prompt][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        ✨-->(🔸,🔰,🔰,🔰,📝🔹) P.FTS
          tname
            [String("FromToSteps")]      
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._base.prompt]
          main
            [input._wildcardProcessed?.prefix][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        (🔰,🔰,🔰,✨)-->(🔸,📝,🔹) V.FTS
          tname
            [String("FromToSteps")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._base.prompt]
          main
            [input._wildcardProcessed?.prefix][input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        ✨-->(🔰,🔰,🔰,🔸,📝🔹) A.FTS
          tname
            [String("FromToSteps")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._base.prompt]
          main
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._wildcardProcessed?.prefix][input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        ✨-->(🔸, (📝?🔰🔰🔰) ,🔹) R.FTS
          tname
            [String("FromToSteps")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._base.prompt] 
          main
            [input._wildcardProcessed?.prefix][input._random?.mainABC][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
              
            
        --Dropshots------------------------------------
          tname
            [String("")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
           
            
        (🔸✨-->🔹),📝,🔰,🔰,🔰 Dropshot
          tname
            [String("Dropshot")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._main.prompt][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
        
        (🔸✨-->🔹),(📝?🔰🔰🔰) R.DS
          tname
            [String("Dropshot")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._random?.mainABC]
            
        (🔸✨-->🔹),🔰,🔰,🔰,📝 P.DS
          tname
            [String("Dropshot")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._main.prompt]
            
        🔰,🔰,🔰,(🔸✨-->🔹),📝 G.DS
          tname
            [String("Dropshot")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._main.prompt]
            
            
        🔰,🔰,🔰,📝,(🔸✨-->🔹) Inv.DS
          tname
            [String("Dropshot")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._main.prompt]
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
            
        (📝?🔰🔰🔰),(🔸✨-->🔹) R.Inv.DS
          tname
            [String("Dropshot")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._random?.mainABC] 
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
            
        --Overlays--------------------------------------
          tname
            [String("")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]
          base
            [String("")]
          main
            [String("")]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
            
        (🔸,✨)-->(📝,🔰,🔰,🔰,🔹) Overlay
          tname
            [String("Overlay")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._main.prompt][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        (🔸,✨)-->(🔰,🔰,🔰,📝,🔹) P.Overlay
          tname
            [String("Overlay")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        (🔸,✨)-->((📝?🔰🔰🔰) ,🔹) R.Overlay
          tname
            [String("Overlay")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt] 
          main
            [input._random?.mainABC][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        🔰,🔰,🔰,(🔸,✨)-->(📝,🔹) G.Overlay
          tname
            [String("Overlay")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
            
        --Scatters-----------------------
        
        (🔸,✨,🔰,🔰,🔰)-->(📝,🔹) Scatter
          tname
            [String("Scatter")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          main
            [input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        (🔸,🔰,🔰,🔰, ✨)-->(📝,🔹) V.Scatter
          tname
            [String("Scatter")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._base.prompt]
          main
            [input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        (🔰,🔰,🔰,🔸, ✨)-->(📝,🔹) A.Scatter
          tname
            [String("Scatter")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        🔰,🔰,🔰,(🔸, ✨)-->(📝,🔹) G.Scatter
          tname
            [String("Scatter")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          base
            [input._wildcardProcessed?.prefix][input._base.prompt]
          main
            [input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]   
            
        --Mavericks--------------------------
        
        (✨)-->(🔸,📝🔹),🔰,🔰,🔰 Maverick
          tname
            [String("Maverick")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._base.prompt]
          main
            [input._wildcardProcessed?.prefix][input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
            
        🔰,🔰,🔰,(✨)-->(🔸,📝🔹) G.Maverick
          tname
            [String("Maverick")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          base
            [input._base.prompt]
          main
            [input._wildcardProcessed?.prefix][input._main.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        --Stylemakers-------------------------
            
        (🔸,✨,📝,🔰,🔰,🔰)-->🔹 SM
          tname
            [String("Stylemaker")]
          start
            [String("")]
          end
            [String("")] 
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt][input._main.prompt][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
            
        (🔸,✨,🔰,🔰,🔰,📝)-->🔹 P.SM-A
          tname
            [String("Stylemaker")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._main.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
            
        (🔸,✨,(📝?🔰🔰🔰))-->🔹 R.SM
          tname
            [String("Stylemaker")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._base.prompt][input._random?.mainABC]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)]
          outside
            [String("")]
            
        (🔸,🔰,🔰,🔰,✨,📝)-->🔹 P.SM-B
          tname
            [String("Stylemaker")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._wildcardProcessed?.prefix][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._base.prompt][input._main.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
            
        (🔰,🔰,🔰,🔸,✨,📝)-->🔹 G.SM-A
          tname
            [String("Stylemaker")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]  
          base
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._wildcardProcessed?.prefix][input._base.prompt][input._main.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
            
        🔰,🔰,🔰,(🔸,✨,📝)-->🔹 G.SM-B
          tname
            [String("Stylemaker")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          base
            [input._wildcardProcessed?.prefix][input._base.prompt][input._main.prompt]
          main
            [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [String("")]
            
        --Artify-------------------------------------
            
        (🔸-->✨🔹),📝,🔰,🔰,🔰 Artify
          tname
            [String("Artify")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]
          base
            [input._wildcardProcessed?.prefix]
          main
            [input._base.prompt] [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._main.prompt][input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
            
        (🔸-->✨🔹),🔰,🔰,🔰,📝 P.Artify
          tname
            [String("Artify")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]
          base
            [input._wildcardProcessed?.prefix]
          main
            [input._base.prompt] [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._main.prompt]
            
        (🔸-->✨🔹),(📝?🔰🔰🔰) R.Artify
          tname
            [String("Artify")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]
          base
            [input._wildcardProcessed?.prefix]
          main
            [input._base.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._random?.mainABC]
            
        (🔰,🔰,🔰,🔸)-->(✨🔹),📝 A.Artify
          tname
            [String("Artify")]
          start
            [String("")]
          end
            [String("")]
          before
            [String("")]
          base
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt][input._wildcardProcessed?.prefix]
          main
            [input._base.prompt][input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._main.prompt]
            
            
        🔰,🔰,🔰,(🔸)-->(✨🔹),📝 G.Artify
          tname
            [String("Artify")]
          start
            [String("")]
          end
            [String("")]
          before
            [input._promptA.prompt][input._promptB.prompt][input._promptC.prompt]
          base
            [input._wildcardProcessed?.prefix]
          main
            [input._base.prompt] [input._wildcardProcessed?.suffix]
          bracketNumber
            [Number(input.shiftPercentage)] //We let SD interpret an empty fromtostatement in order to get rid of the bracket symbols from interfering with the rest of the prompt
          outside
            [input._main.prompt]         
   
    artStyleMain
      label = 🎲 (📝 Main prompt )
      type = select
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        meta:import
          from = {import:fusion-t2i-styles}
        meta:import
          from = {import:fusion-t2i-wildcards}
        meta:import
          from = {import:fusion-t2i-random-numbers}
        meta:import
          from = {import:fusion-t2i-word-categories}
          
    artStyleNegative
      label = 🎲 (🚫 Negative prompt )
      type = select
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        meta:import
          from = {import:fusion-t2i-styles}
        meta:import
          from = {import:fusion-t2i-wildcards}
        meta:import
          from = {import:fusion-t2i-random-numbers}
        meta:import
          from = {import:fusion-t2i-word-categories}
          
          
    artStyleBase
      label = 🎲  (✨ Base prompt )
      type = select
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        meta:import
          from = {import:fusion-t2i-styles}
        meta:import
          from = {import:fusion-t2i-wildcards}
        meta:import
          from = {import:fusion-t2i-random-numbers}
        meta:import
          from = {import:fusion-t2i-word-categories}
          
    artStylePrompt
      label = 🎲  (🔰 Prompt)
      type = select
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        meta:import
          from = {import:fusion-t2i-styles}
        meta:import
          from = {import:fusion-t2i-wildcards}
        meta:import
          from = {import:fusion-t2i-random-numbers}
        meta:import
          from = {import:fusion-t2i-word-categories}

          
    //A dummy selector to hold randomized values
    _random
      label = NOT VISIBLE
      width = 150px
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        prompts
          promptA
            [input._promptA.prompt]^2
            [String("")]
          promptB
            [input._promptB.prompt]^2
            [String("")]            
          promptC
            [input._promptC.prompt]^2
            [String("")]                        
          mainABC 
            [input._main?.prompt][input._random?.promptA][input._random?.promptB][input._random?.promptC]
            [input._random?.promptA][input._main?.prompt][input._random?.promptB][input._random?.promptC]
            [input._random?.promptA][input._random?.promptB][input._main?.prompt][input._random?.promptC]
            [input._random?.promptA][input._random?.promptB][input._random?.promptC][input._main?.prompt]
            [input._main?.prompt][input._random?.promptA][input._random?.promptC][input._random?.promptB]
            [input._random?.promptA][input._main?.prompt][input._random?.promptC][input._random?.promptB]
            [input._random?.promptA][input._random?.promptC][input._main?.prompt][input._random?.promptB]
            [input._random?.promptA][input._random?.promptC][input._random?.promptB][input._main?.prompt]       
            [input._main?.prompt][input._random?.promptB][input._random?.promptA][input._random?.promptC]
            [input._random?.promptB][input._main?.prompt][input._random?.promptA][input._random?.promptC]
            [input._random?.promptB][input._random?.promptA][input._main?.prompt][input._random?.promptC]
            [input._random?.promptB][input._random?.promptA][input._random?.promptC][input._main?.prompt]        
            [input._main?.prompt][input._random?.promptB][input._random?.promptC][input._random?.promptA]
            [input._random?.promptB][input._main?.prompt][input._random?.promptC][input._random?.promptA]
            [input._random?.promptB][input._random?.promptC][input._main?.prompt][input._random?.promptA]
            [input._random?.promptB][input._random?.promptC][input._random?.promptA][input._main?.prompt]            
            [input._main?.prompt][input._random?.promptC][input._random?.promptA][input._random?.promptB]
            [input._random?.promptC][input._main?.prompt][input._random?.promptA][input._random?.promptB]
            [input._random?.promptC][input._random?.promptA][input._main?.prompt][input._random?.promptB]
            [input._random?.promptC][input._random?.promptA][input._random?.promptB][input._main?.prompt]         
            [input._main?.prompt][input._random?.promptC][input._random?.promptB][input._random?.promptA]
            [input._random?.promptC][input._main?.prompt][input._random?.promptB][input._random?.promptA]
            [input._random?.promptC][input._random?.promptB][input._main?.prompt][input._random?.promptA]
            [input._random?.promptC][input._random?.promptB][input._random?.promptA][input._main?.prompt]        
      visible() =>
        return false; 
  
    _wildcard
      label = NOT VISIBLE
      type = select
      options
        prompts
          main
            [input._separator?.space][input.artStyleMain?.data.replaceText("</w>", input._separator?.symbol)]
          base
            [input._separator?.space][input.artStyleBase?.data.replaceText("</w>", input._separator?.symbol)]
          promptA
            [input._separator?.space][input.artStylePrompt?.data.replaceText("</w>", input._separator?.symbol)]
          promptB
            [input._separator?.space][input.artStylePrompt?.data.replaceText("</w>", input._separator?.symbol)]
          promptC
            [input._separator?.space][input.artStylePrompt?.data.replaceText("</w>", input._separator?.symbol)]
          negative
            [input._separator?.space][input.artStyleNegative?.data.replaceText("</w>", input._separator?.symbol)]
      visible() =>
        return false; 

    //A dummy selector to hold merge prompts
    _merge
      label = NOT VISIBLE
      width = 150px
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        prompts
          main
            [input._cutoff?.start][input._wildcardProcessed?.prefix]([input._main?.prompt]:[Number(input.shiftStrength - input.shiftStrength*input.shiftPercentage)])[input._wildcardProcessed?.suffix][input._cutoff?.end]
          base
            [input._cutoff?.start][input._wildcardProcessed?.prefix]([input._base?.prompt]:[Number(input.shiftStrength*input.shiftPercentage)])[input._wildcardProcessed?.suffix][input._cutoff?.end]
          _promptA
            [input._cutoff?.start][input._wildcardProcessed?.prefix][input._promptA?.prompt][input._wildcardProcessed?.suffix][input._cutoff?.end]
          _promptB
            [input._cutoff?.start][input._wildcardProcessed?.prefix][input._promptB?.prompt][input._wildcardProcessed?.suffix][input._cutoff?.end]
          _promptC
            [input._cutoff?.start][input._wildcardProcessed?.prefix][input._promptC?.prompt][input._wildcardProcessed?.suffix][input._cutoff?.end]
          _empty
            [input._cutoff?.start][input._wildcardProcessed?.prefix][input._wildcardProcessed?.suffix][input._cutoff?.end]
          promptA
            [input._merge?._promptA.replaceText(input._merge?._empty, "")]
          promptB
            [input._merge?._promptB.replaceText(input._merge?._empty, "")]
          promptC
            [input._merge?._promptC.replaceText(input._merge?._empty, "")]     
            
          _all
            [input._cutoff?.edge][input._merge?.main][input._merge?.base][input._merge?.promptA][input._merge?.promptB][input._merge?.promptC][input._cutoff?.edge]
          all
            [input._merge?._all.replaceText("<|endoftext|>&&&" , "").replaceText("&&&<|startoftext|>", "").replaceText("&&&" , "")]          
          _ABC
            [input._merge?.promptA][input._merge?.promptB][input._merge?.promptC][input._cutoff?.edge]
          ABC
            [input._merge?._ABC.replaceText("<|endoftext|>&&&" , "").replaceText("&&&<|startoftext|>", "").replaceText("&&&" , "")]
      visible() =>
        return false; // so this input only shows up after they've clicked generate a couple of times (to reduce confusion/clutter for newbies)
    
          

    numTokensMain
      label = 🎲 No.Tokens?
      tip = [String("Number to tokens generated per randomization. Some randomizations have a fixed number of tokens regardless of this setting.")]
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        5 Tokens 📝 = 5
        1 Token 📝 = 1
        2 Tokens 📝 = 2
        3 Tokens 📝 = 3
        4 Tokens 📝 = 4
        5 Tokens 📝 = 5
        6 Tokens 📝 = 6
        7 Tokens 📝 = 7
        8 Tokens 📝 = 8
        9 Tokens 📝 = 9
        10 Tokens 📝 = 10
      visible() =>
        return Number(localStorage.generateClickCount) > 1; // so this input only shows up after they've clicked generate a couple of times (to reduce confusion/clutter for newbies)
     
    numTokensNegative
      label = 🎲 No.Tokens?
      tip = [String("Number to tokens generated per randomization. Some randomizations have a fixed number of tokens regardless of this setting.")]
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        1 Token 🚫 = 1
        2 Tokens 🚫 = 2
        3 Tokens 🚫 = 3
        4 Tokens 🚫 = 4
        5 Tokens 🚫 = 5
        6 Tokens 🚫 = 6
        7 Tokens 🚫 = 7
        8 Tokens 🚫 = 8
        9 Tokens 🚫 = 9
        10 Tokens 🚫 = 10

    numTokensBase
      label = 🎲 No.Tokens?
      tip = [String("Number to tokens generated per randomization. Some randomizations have a fixed number of tokens regardless of this setting.")]
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        5 Tokens ✨ = 5
        1 Token ✨ = 1
        2 Tokens ✨ = 2
        3 Tokens ✨ = 3
        4 Tokens ✨ = 4
        5 Tokens ✨ = 5
        6 Tokens ✨ = 6
        7 Tokens ✨ = 7
        8 Tokens ✨ = 8
        9 Tokens ✨ = 9
        10 Tokens ✨ = 10
        
    numTokensPrompt
      label = 🎲 No.Tokens?
      tip = [String("Number to tokens generated per randomization. Some randomizations have a fixed number of tokens regardless of this setting.")]
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        3 Tokens 🔰 = 3
        1 Token 🔰 = 1
        2 Tokens 🔰 = 2
        3 Tokens 🔰 = 3
        4 Tokens 🔰 = 4
        5 Tokens 🔰 = 5
        6 Tokens 🔰 = 6
        7 Tokens 🔰 = 7
        8 Tokens 🔰 = 8
        9 Tokens 🔰 = 9
        10 Tokens 🔰 = 10

    shiftPercentage
      label = ✨->📝Base to Main Shift?
      width = 150px
      type = select
      remember = true
      options
        default (10%) = 0.10
        0% = 0.00
        0.1% = 0.001
        0.5% = 0.005
        1% = 0.01
        2% = 0.02
        5% = 0.05
        7% = 0.07
        10% = 0.10
        12% = 0.12
        15% = 0.15
        20%= 0.20
        25%= 0.25
        30% = 0.3
        35% = 0.3
        40% = 0.4
        50%= 0.5
        60% = 0.6
        70% = 0.7
        80% = 0.8
        85% = 0.85
        90% = 0.90
        95% = 0.95
        99% = 0.99
        Random 🔀->.2
          [Number(0.00)]
          [Number(0.001)]
          [Number(0.005)]
          [Number(0.01)]
          [Number(0.02)]
          [Number(0.05)]
          [Number(0.07)]
          [Number(0.10)]
          [Number(0.12)]
          [Number(0.15)]
          [Number(0.20)]
        Random 🔀->.4
          [Number(0.00)]
          [Number(0.001)]
          [Number(0.005)]
          [Number(0.01)]
          [Number(0.02)]
          [Number(0.05)]
          [Number(0.07)]
          [Number(0.10)]
          [Number(0.12)]
          [Number(0.15)]
          [Number(0.20)]
          [Number(0.25)]
          [Number(0.3)]
          [Number(0.3)]
          [Number(0.4)]
        Random 🔀->1
          [Number(0.00)]
          [Number(0.001)]
          [Number(0.005)]
          [Number(0.01)]
          [Number(0.02)]
          [Number(0.05)]
          [Number(0.07)]
          [Number(0.10)]
          [Number(0.12)]
          [Number(0.15)]
          [Number(0.20)]
          [Number(0.25)]
          [Number(0.3)]
          [Number(0.3)]
          [Number(0.4)]
          [Number(0.5)]
          [Number(0.6)]
          [Number(0.7)]
          [Number(0.8)]
          [Number(0.85)]
          [Number(0.90)]
          [Number(0.95)]
          [Number(0.99)]
      
    shiftPercentageNegative
      label = ->🚫 Neg. shift?
      type = select
      remember = true
      options
        default (70%) = 0.70
        99.9% = 0.999
        99% = 0.99
        90% = 0.9
        80% = 0.8
        70% = 0.7
        60% = 0.6
        50%= 0.5
        40% = 0.4
        30% = 0.3
        20%= 0.2
        10% = 0.1
        5% = 0.05
        2% = 0.02
        Random .7<-🔀
          [Number(0.7)]
          [Number(0.72)]
          [Number(0.75)]
          [Number(0.77)]
          [Number(0.8)]
          [Number(0.82)]
          [Number(0.85)]
          [Number(0.87)]
          [Number(0.90)]
          [Number(0.93)]
          [Number(0.95)]
          [Number(0.97)]
          [Number(0.99)]
        Random .5<-🔀
          [Number(0.5)]
          [Number(0.55)]
          [Number(0.6)]
          [Number(0.65)]
          [Number(0.7)]
          [Number(0.75)]
          [Number(0.8)]
          [Number(0.85)]
          [Number(0.90)]
          [Number(0.95)]
          [Number(0.99)]
        Random 🔀->1
          [Number(0.00)]
          [Number(0.001)]
          [Number(0.005)]
          [Number(0.01)]
          [Number(0.02)]
          [Number(0.05)]
          [Number(0.07)]
          [Number(0.10)]
          [Number(0.12)]
          [Number(0.15)]
          [Number(0.20)]
          [Number(0.25)]
          [Number(0.3)]
          [Number(0.3)]
          [Number(0.4)]
          [Number(0.5)]
          [Number(0.6)]
          [Number(0.7)]
          [Number(0.8)]
          [Number(0.85)]
          [Number(0.90)]
          [Number(0.95)]
          [Number(0.99)]
          
    _comma
      label = ✳️ Preposition rate ?
      tip = [String("Likelihood % of placing a preposition (e.g 'to' , 'with' , 'behind' or a comma ',' ) between two tokens during randomization. A decent % of prepostions will yield good consistency in the image, but if it gets too high the results can get 'boring'.")]
      type = select
      remember = true
      options
        100%
          rate = [Number(1)]
          nonrate = [Number(1 - input._comma?.rate)]
        90%
          rate = [Number(0.9)]
          nonrate = [Number(1 - input._comma?.rate)]
        80%
          rate = [Number(0.8)]
          nonrate = [Number(1 - input._comma?.rate)]
        70%
          rate = [Number(0.7)]
          nonrate = [Number(1 - input._comma?.rate)]
        60%
          rate = [Number(0.6)]
          nonrate = [Number(1 - input._comma?.rate)]
        50%
          rate = [Number(0.5)]
          nonrate = [Number(1 - input._comma?.rate)]
        40%
          rate = [Number(0.4)]
          nonrate = [Number(1 - input._comma?.rate)]
        30%
          rate = [Number(0.3)]
          nonrate = [Number(1 - input._comma?.rate)]
        20%
          rate = [Number(0.2)]
          nonrate = [Number(1 - input._comma?.rate)]
        10%
          rate = [Number(0.1)]
          nonrate = [Number(1 - input._comma?.rate)]
        0%
          rate = [Number(0)]
          nonrate = [Number(1 - input._comma?.rate)]
          
    artStylePreposition
      label = ✳️ Preposition type
      type = select
      remember = true
      options
        meta:import
          from = {import:fusion-t2i-prepositions}
          
    
    _cutoff
      label = ✋Cutoff?
      type = select
      width = min(100px,100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        ✔️
          start = [String("<|startoftext|>")]
          end = [String("<|endoftext|>")]
          edge = [String("&&&")]  //The &&& sign is used to shear of the <|start of text|> at the beginning and <|endoftext|> at the end. 
        ❌
          start =  [String("")]
          end = [String("")]
          edge = [String("")]         

    shiftStrength
      label = Merge Str.
      width = min(100px,100%)
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        1x = 1
        0.01x = 0.01
        0.1x = 0.1
        0.2x = 0.2
        0.5x = 0.5
        0.7x = 0.7
        1x = 1
        1.2x = 1.2
        1.5x = 1.5
        1.7x = 1.7
        2x = 2
        2.5x= 2.5
        3x = 3
        3.5x = 3.5
        4x = 4
        5x = 5
        6x=  6
        7x = 7
        8x = 8
        10x = 10

//////      


    negative
      type =  paragraph
      label = 🚫 Negatives
      takesUpFullRow = true
      foldToggleState = show
      remember = true
      width = min(750px, 100%)
      tip =  [String("Negatives are vectors which the SD model will 'stay clear of'. This can be done to exclude certain items in early generation % , or create more unique variants of an item at late generation %. Example: adding face at early generation % will eliminate a face, but adding 'face' at late generation % will create a less average looking face. There is no association between tokens written in the negatives, meaning you do not have to worry about prompt order. This also means that a negative such as 'bad face' will be interpreted as 'bad' and 'face', and not 'bad face'.")]
      examples =  [String("Negatives here")]
      random
        [input.artStyleNegative?.prefix][input.artStyleNegative?.prompt || input._wildcard?.negative.selectMany(input.artStyleNegative?.numTokens || input.artStyleNegative?.numTokens || input.numTokensNegative).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]

    _main
      label = 📝Main
      type = select
      tip =  [String("Choose if you want the main prompt field enabled and/or if you wish to randomize the main prompt field")]
      width = max(100px,100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options   
        Prompt input ✏️
          prompt
            [input._wildcardProcessed?.main]
        Append B. ✏️,🔀
          prompt
            [input._wildcardProcessed?.main] [input.artStyleMain?.prefix][input.artStyleMain?.prompt || input._wildcard?.main.selectMany(input.artStyleMain?.numTokens || input.numTokensMain).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Append A. 🔀,✏️
          prompt
            [input.artStyleMain?.prefix][input.artStyleMain?.prompt || input._wildcard?.main.selectMany(input.artStyleMain?.numTokens || input.numTokensMain).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ] [input._wildcardProcessed?.main]
        Random🔀
          prompt
            [input.artStyleMain?.prefix][input.artStyleMain?.prompt || input._wildcard?.main.selectMany(input.artStyleMain?.numTokens || input.numTokensMain).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        OFF
          prompt
            [String("")]

    _negative
      label = 🚫Negatives
      type = select
      tip = [String("Randomize the 🚫 negatives for every image generation")]
      width = min(100px,100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        Prompt input✏️
          prompt
            [input._wildcardProcessed?.negative]
        Append B. ✏️,🔀
          prompt
            [input._wildcardProcessed?.negative] [input.artStyleNegative?.prefix][input.artStyleNegative?.prompt || input._wildcard?.negative.selectMany(input.artStyleNegative?.numTokens || input.numTokensNegative).joinItems("").replaceText("</w>", " ").replaceText(",", " ") || String("no random prompt found!") ] 
        Random🔀
          prompt
            [input.artStyleNegative?.prefix][input.artStyleNegative?.prompt || input._wildcard?.negative.selectMany(input.artStyleNegative?.numTokens || input.numTokensNegative).joinItems("").replaceText("</w>", " ").replaceText(",", " ") || String("no random prompt found!") ]
        Append A. 🔀,✏️
          prompt
            [input.artStyleNegative?.prefix][input.artStyleNegative?.prompt || input._wildcard?.negative.selectMany(input.artStyleNegative?.numTokens || input.numTokensNegative).joinItems("").replaceText("</w>", " ").replaceText(",", " ") || String("no random prompt found!") ] [input._wildcardProcessed?.negative]        
        OFF
          prompt
            [String("")]
                   
    _base
      label = ✨Base
      type = select
      tip =  [String("Choose if you want the main prompt field enabled and/or if you wish to randomize the prompt ✨ base field")]
      width = min(100px,100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        Prompt input✏️
          prompt
            [input._wildcardProcessed?.base]
        Random🔀
          prompt
            [input.artStyleBase?.prefix][input.artStyleBase?.prompt || input._wildcard?.base.selectMany(input.artStyleBase?.numTokens || input.numTokensBase).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Append B. ✏️,🔀
          prompt
            [input._wildcardProcessed?.base] [input.artStyleBase?.prefix][input.artStyleBase?.prompt || input._wildcard?.base.selectMany(input.artStyleBase?.numTokens || input.numTokensBase).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]    
        Append A. 🔀,✏️
          prompt
            [input.artStyleBase?.prefix][input.artStyleBase?.prompt || input._wildcard?.base.selectMany(input.artStyleBase?.numTokens || input.numTokensBase).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ] [input._wildcardProcessed?.base]   
        OFF
          prompt
            [String("")]
      
    _promptA
      label = 🔰Prompt A
      type = select
      tip =  [String("Choose if you want the main prompt field enabled and/or if you wish to randomize the 🔰 prompt A field")]
      width = min(100px,100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options    
        OFF
          prompt
            [String("")]  
        Append B. ✏️,🔀
          prompt
            [input._wildcardProcessed?.promptA] [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptA.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Random🔀
          prompt
            [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptA.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Append A. 🔀,✏️
          prompt
            [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptA.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ] [input._wildcardProcessed?.promptA]        
        Prompt input✏️
          prompt
            [input._wildcardProcessed?.promptA]  
            
    _promptB
      label = 🔰Prompt B
      tip =  [String("Choose if you want the main prompt field enabled and/or if you wish to randomize the 🔰 prompt B field")]
      type = select
      width = min(100px,100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        OFF
          prompt
            [String("")] 
        Append B. ✏️,🔀
          prompt
            [input._wildcardProcessed?.promptB] [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptB.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Random🔀
          prompt
            [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptB.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Append A. 🔀,✏️
          prompt
            [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptB.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ] [input._wildcardProcessed?.promptB]        
        Prompt input✏️
          prompt
            [input._wildcardProcessed?.promptB]    
          
    _promptC
      label = 🔰Prompt C
      tip =  [String("Choose if you want the main prompt field enabled and/or if you wish to randomize the 🔰 prompt C field")]
      type = select
      width = min(100px,100%)
      remember = true // <-- makes it so the selected option will be remembered even if the user refreshes/closes the page
      options
        OFF
          prompt
            [String("")]
        Append B. ✏️,🔀
          prompt
            [input._wildcardProcessed?.promptC] [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptC.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Random🔀
          prompt
            [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptC.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ]
        Append A. 🔀,✏️
          prompt
            [input.artStylePrompt?.prefix][input.artStylePrompt?.prompt || input._wildcard?.promptC.selectMany(input.artStylePrompt?.numTokens || input.numTokensPrompt).joinItems("").replaceText("</w>", " ") || String("no random prompt found!") ] [input._wildcardProcessed?.promptC]        
        Prompt input✏️
          prompt
            [input._wildcardProcessed?.promptC]
            
 
/////
    negativeFixed
      label = Optional :Fixed Negatives
      examples = weighted negatives here e.g (gray : 0.1). These nagatives are enabled regardless of %
      takesUpFullRow = true
      foldToggleState = hidden
      remember = true
      width = 200px
      type = text
      tip = [String("weighted negatives here e.g (gray : 0.1). These negatives are always active and can be used to exclude certain items from generation. It is recommended to keep this field empty as the SD model will want to have maximum freedom in early generation %")]     
      visible() =>
        return false; 
    
    saveName
      label = 💾 Image Save Name
      examples = [String("savename for image")]
      remember = true
      width = 250px
      type = text
      tip = [String("You can set the save name of the generated image here")]
          
    _wildcardProcessed
      label = 🎴 Wildcard Enable?
      tip = [String("Wildcard can be invoked by writing #wildcardname# in the prompt. Example : '#prefix#film of a #weird# as#18to25#yo #fullname# fujifilm stockphoto' ")]
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        yes
          main
            [replaceKeywordsWithWildcards(input.main)]
          base
            [replaceKeywordsWithWildcards(input.base)]
          promptA
            [replaceKeywordsWithWildcards(input.promptA)]
          promptB
            [replaceKeywordsWithWildcards(input.promptB)]
          promptC
            [replaceKeywordsWithWildcards(input.promptC)]
          negative
            [replaceKeywordsWithWildcards(input.negative)]
          prefix
            [replaceKeywordsWithWildcards(input.prefix)]
          suffix
            [replaceKeywordsWithWildcards(input.suffix)]
        no
          main
            [input.main]
          base
            [input.base]
          promptA
            [input.promptA]
          promptB
            [input.promptB]
          promptC
            [input.promptC]
          negative
            [input.negative]
          prefix
            [input.prefix]
          suffix
            [input.suffix]
            
    shape
      label = 🖼️ Shape
      type = select
      width = 150px
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        Portrait = 512x768
        Square = 512x512
        Landscape = 768x512
        
    numImages
      label = How many?
      width = 150px
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        1 = 1
        2 = 2
        3 = 3
        4 = 4
        5 = 5
        6 = 6
        7 = 7
        8 = 8
        9 = 9
        10 = 10

    _userSymbolText
      label = ✳️ Set blank comma token replacement
      examples = [String("Example : Any short single token word")]
      remember = true
      width = 300px
      type = text
      tip = [String("Commas act as 'padding' between the tokens. This can both be good and bad. To allow you to test out which configuration works best you can set the likelyhood of a comma between tokens using adjecent boxes with the ✳️ symbol. If a comma is NOT placed, a blank string ' ' will be placed there. You can replace that blank string with something else by writing it in this box. ")]
      visible() =>
        return false; //Removing this to avoid confusing users
    _separator
      label = NOT VISIBLE
      type = select
      remember = true // <-- the selected option will be remembered even if the user refreshes/closes the page
      options
        prompts
          symbol
            [input.artStylePreposition.data.selectMany(Number(1)).joinItems("").replaceText("</w>", " ")]^[Number(100*input._comma?.rate * input._userSymbol?.nonrate)]
            [String("")]^[Number(100*input._comma?.nonrate*input._userSymbol?.nonrate)]
            [input._userSymbolText]^[Number(100*input._userSymbol?.rate)]
        //Small hack to prevent prefix tokens from forming too large groups which will make the image bad
          space
            [String("</w>")]
            [String("")]^2
      visible() =>
        return false; 
        
    _userSymbol
      label = ✳️ Replacement rate
      tip =  [String("Set the % of times a skipped comma placement will become the symbol written in the '✳️ Set blank comma token replacement' field instead of the normal whitespace ' ' ")]
      type = select
      remember = true
      options
        default (0%)
          rate = [Number(0*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        0%
          rate = [Number(0*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        10%
          rate = [Number(0.1*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        20%
          rate = [Number(0.2*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        30%
          rate = [Number(0.3*input._comma?.rate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        40%
          rate = [Number(0.4*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        50%
          rate = [Number(0.5*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        60%
          rate = [Number(0.6*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        70%
          rate = [Number(0.7*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        80%
          rate = [Number(0.8*input._comma?.nonrate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        90%
          rate = [Number(0.9*input._comma?.rate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
        100%
          rate = [Number(1*input._comma?.rate)]
          nonrate = [Number(1 - input._userSymbol?.rate)]
      visible() =>
        return false; //Removing this to avoid confusing users
      
      
    //removeFromPublicPrompt // Note: the 'remember' option storage is 'based on' this 'scratchpad' name, so if you change that name to something else like 'notepad', people will lose all their saved scratchpad text. But it's safe to change the 'label', below.
      //label = This field does nothing
      //tip = This field does nothing // this loads the default text, but you can delete it and add your own tip. Just change this line to "tip = You own cool tips."
      //type = paragraph
      //remember = true // <-- the text that the user inputs will be remembered so it's still there even if they close/refresh the page
      //height = 30vh
      //foldToggleState = hidden // or 'shown' if you want it to start shown, or delete this line if you don't want it to be show-able/hide-able
      //visible() =>
      //  return Number(localStorage.generateClickCount) > 1; // so the scratchpad only shows up after they've clicked generate a couple of times (to reduce confusion/clutter for newbies)
      //examples
      //  [t2i.defaultText.scratchpadPlaceholder]       
   
  defaultCommentOptions // for comments plugin: https://perchance.org/comments-plugin
    width = 100%
    height = 400
    commentPlaceholderText = Type a friendly comment...
    submitButtonText = submit comment
    bannedUsers = [bannedUsersList]
    
  commentChannels
    general
      label = General
    chat1
      label = Room 1
    chat2
      label = Room 2
    chat3
      label = Room 3
    prompts
      label = Prompts
      commentPlaceholderText = Share a cool prompt/style. If it's good, it may get added to the Art Style selector.
      submitButtonText = share prompt
  
  galleryOptions
    gallery = true
    sort = trending
    hideIfScoreIsBelow = -10
    adaptiveHeight = true // <-- expand gallery height so it never has its own scrollbar
    contentFilter = none // <-- or 'none' for no default filter
  
  showFeedback = true // you can temporarily change this to 'true' and then click the feedback button to view feedback

errorMessageRandom = [String("(no random prompt found)")]

bannedUsersList
  bc1fcaee323bb814a90b





    









