| import { app } from '../../../scripts/app.js' |
| |
| import { ComfyWidgets } from '../../../scripts/widgets.js' |
| import { $el } from '../../../scripts/ui.js' |
|
|
| function getRandomElements (arr, num) { |
| var result = [] |
| var len = arr.length |
|
|
| for (var i = 0; i < num; i++) { |
| var randomIndex = Math.floor(Math.random() * len) |
| result.push(arr[randomIndex]) |
| } |
|
|
| return result |
| } |
|
|
| const createPrompt = (node, prompts, items, sample) => { |
| const w = ComfyWidgets['STRING']( |
| node, |
| 'text', |
| ['STRING', { multiline: true }], |
| app |
| ).widget |
| w.inputEl.readOnly = true |
| w.inputEl.style.opacity = 0.6 |
|
|
| w.value = typeof prompts === 'string' ? prompts : prompts.join('\n\n') |
|
|
| const w2 = ComfyWidgets['STRING']( |
| node, |
| 'text', |
| ['STRING', { multiline: true }], |
| app |
| ).widget |
| w2.inputEl.readOnly = true |
| w2.inputEl.style.opacity = 0.6 |
|
|
| w2.value = typeof items === 'string' ? items : JSON.stringify(items, null, 2) |
|
|
| const w3 = ComfyWidgets['STRING']( |
| node, |
| 'text', |
| ['STRING', { multiline: true }], |
| app |
| ).widget |
| w3.inputEl.readOnly = true |
| w3.inputEl.style.opacity = 0.6 |
| w3.value = typeof sample === 'string' ? sample : sample.join('\n\n') |
| } |
|
|
| app.registerExtension({ |
| name: 'Mixlab.prompt.ClipInterrogator', |
| async beforeRegisterNodeDef (nodeType, nodeData, app) { |
| if (nodeData.name === 'ClipInterrogator') { |
| function populate (prompts, items, random_samples) { |
| if (this.widgets) { |
| for (let i = 0; i < this.widgets.length; i++) { |
| if (this.widgets[i].type !== 'combo') this.widgets[i].onRemove?.() |
| } |
| this.widgets.length = 2 |
| } |
|
|
| createPrompt(this, prompts, items, random_samples) |
|
|
| |
| requestAnimationFrame(() => { |
| const sz = this.computeSize() |
| if (sz[0] < this.size[0]) { |
| sz[0] = this.size[0] |
| } |
| if (sz[1] < this.size[1]) { |
| sz[1] = this.size[1] |
| } |
| this.onResize?.(sz) |
| app.graph.setDirtyCanvas(true, false) |
| }) |
| } |
|
|
| |
| const onExecuted = nodeType.prototype.onExecuted |
| nodeType.prototype.onExecuted = function (message) { |
| onExecuted?.apply(this, arguments) |
| |
| populate.call( |
| this, |
| message.prompt, |
| message.analysis, |
| message.random_samples |
| ) |
| } |
|
|
| this.serialize_widgets = true |
| } |
| }, |
| async loadedGraphNode (node, app) { |
| |
| |
|
|
| if (node.type === 'ClipInterrogator') { |
| try { |
| |
| let widgets_values = node.widgets_values |
| console.log(widgets_values ) |
| try { |
| if (widgets_values[2] && widgets_values[3] && widgets_values[4]) |
| createPrompt( |
| node, |
| widgets_values[2], |
| widgets_values[3], |
| widgets_values[4] |
| ) |
| } catch (error) { |
| console.log(error) |
| } |
| } catch (error) {} |
| } |
| } |
| }) |
|
|