import { app } from "../../scripts/app.js"; // Allows for simple dynamic prompt replacement // Inputs in the format {a|b} will have a random value of a or b chosen when the prompt is queued. app.registerExtension({ name: "Comfy.DynamicPrompts", nodeCreated(node) { // TODO: Change this to replace the value and restore it after posting if (node.widgets) { // Locate dynamic prompt text widgets // Include any widgets with dynamicPrompts set to true, and customtext const widgets = node.widgets.filter( (n) => (n.type === "customtext" && n.dynamicPrompts !== false) || n.dynamicPrompts ); for (const widget of widgets) { // Override the serialization of the value to resolve dynamic prompts for all widgets supporting it in this node widget.serializeValue = () => { let prompt = widget.value; while (prompt.replace("\\{", "").includes("{") && prompt.replace("\\}", "").includes("}")) { const startIndex = prompt.replace("\\{", "00").indexOf("{"); const endIndex = prompt.replace("\\}", "00").indexOf("}"); const optionsString = prompt.substring(startIndex + 1, endIndex); const options = optionsString.split("|"); const randomIndex = Math.floor(Math.random() * options.length); const randomOption = options[randomIndex]; prompt = prompt.substring(0, startIndex) + randomOption + prompt.substring(endIndex + 1); } return prompt; }; } } }, });