| import { app } from "../../scripts/app.js";
|
|
|
|
|
|
|
|
|
| |
| |
|
|
| function stripComments(str) {
|
| return str.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g,'');
|
| }
|
|
|
| app.registerExtension({
|
| name: "Comfy.DynamicPrompts",
|
| nodeCreated(node) {
|
| if (node.widgets) {
|
|
|
|
|
| const widgets = node.widgets.filter(
|
| (n) => n.dynamicPrompts
|
| );
|
| for (const widget of widgets) {
|
|
|
| widget.serializeValue = (workflowNode, widgetIndex) => {
|
| let prompt = stripComments(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);
|
| }
|
|
|
|
|
| if (workflowNode?.widgets_values)
|
| workflowNode.widgets_values[widgetIndex] = prompt;
|
|
|
| return prompt;
|
| };
|
| }
|
| }
|
| },
|
| });
|
|
|