fix: forward partial execution targets in queuePrompt wrapper
The api.queuePrompt wrapper introduced in PR #91 only forwarded 2 of 3 arguments, dropping the options object that carries partialExecutionTargets. This caused the server to execute all output nodes instead of just the targeted branch. Also removes debug console.log and print statements added during development. Fixes #94
This commit is contained in:
@@ -169,13 +169,6 @@ class PromptManager(ComfyNodeABC):
|
||||
Raises:
|
||||
RuntimeError: If clip input is invalid
|
||||
"""
|
||||
# Debug: Log text being encoded - this should print EVERY time the node executes
|
||||
import time
|
||||
print(f"\n{'='*60}")
|
||||
print(f"[PromptManager] encode_prompt() CALLED at {time.time()}")
|
||||
print(f"[PromptManager] text = {repr(text)[:100]}")
|
||||
print(f"{'='*60}\n")
|
||||
|
||||
# Combine prepend, main text, and append text
|
||||
final_text = ""
|
||||
if prepend_text and prepend_text.strip():
|
||||
|
||||
+7
-52
@@ -57,7 +57,7 @@ function addPMTopBarButton() {
|
||||
|
||||
// Check if app.menu exists (new frontend)
|
||||
if (!app.menu?.settingsGroup?.element) {
|
||||
console.log("[PromptManager] New frontend menu not found, trying legacy approach");
|
||||
// New frontend menu not found, try legacy approach
|
||||
addPMTopBarButtonLegacy();
|
||||
return;
|
||||
}
|
||||
@@ -102,7 +102,6 @@ function addPMTopBarButton() {
|
||||
|
||||
// Insert before the settings group
|
||||
app.menu.settingsGroup.element.before(pmButtonGroup);
|
||||
console.log("[PromptManager] Top bar button added (new frontend)");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -152,7 +151,6 @@ function addPMTopBarButtonLegacy() {
|
||||
};
|
||||
|
||||
topBar.appendChild(btn);
|
||||
console.log("[PromptManager] Toolbar button added (legacy frontend)");
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
@@ -189,9 +187,7 @@ function syncPromptManagerWidgets() {
|
||||
widget.value = actualValue;
|
||||
}
|
||||
|
||||
if (widget.name === "text" && oldValue !== actualValue) {
|
||||
console.log(`[PromptManager] graphToPrompt sync: "${String(oldValue).substring(0, 30)}..." -> "${String(actualValue).substring(0, 30)}..."`);
|
||||
}
|
||||
// text widget value synced from DOM
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -213,18 +209,16 @@ app.registerExtension({
|
||||
// This runs before any other extension's wrapper can access stale data
|
||||
const originalGraphToPrompt = app.graphToPrompt.bind(app);
|
||||
app.graphToPrompt = async function(...args) {
|
||||
console.log("[PromptManager] graphToPrompt intercepted - syncing widgets NOW");
|
||||
syncPromptManagerWidgets();
|
||||
return originalGraphToPrompt(...args);
|
||||
};
|
||||
console.log("[PromptManager] Wrapped app.graphToPrompt for value sync");
|
||||
|
||||
// CRITICAL FIX: Intercept api.queuePrompt to fix prompt data at the LAST moment
|
||||
// This catches any cached/stale data that other extensions might have passed through
|
||||
// NOTE: The third parameter (...rest) carries partialExecutionTargets and previewMethod
|
||||
// which ComfyUI uses for branch execution. Dropping it breaks partial execution.
|
||||
const originalQueuePrompt = api.queuePrompt.bind(api);
|
||||
api.queuePrompt = async function(number, { output, workflow }) {
|
||||
console.log("[PromptManager] api.queuePrompt intercepted - fixing prompt data");
|
||||
|
||||
api.queuePrompt = async function(number, { output, workflow }, ...rest) {
|
||||
// Find PromptManager nodes in the output and fix their text values
|
||||
const graph = app.graph;
|
||||
if (graph && output) {
|
||||
@@ -239,7 +233,6 @@ app.registerExtension({
|
||||
|
||||
// The output structure has "inputs" with widget values
|
||||
if (outputNode.inputs && outputNode.inputs.text !== currentValue) {
|
||||
console.log(`[PromptManager] FIXING node ${node.id} text: "${String(outputNode.inputs.text).substring(0, 30)}..." -> "${currentValue.substring(0, 30)}..."`);
|
||||
outputNode.inputs.text = currentValue;
|
||||
}
|
||||
}
|
||||
@@ -247,23 +240,19 @@ app.registerExtension({
|
||||
}
|
||||
}
|
||||
|
||||
return originalQueuePrompt(number, { output, workflow });
|
||||
return originalQueuePrompt(number, { output, workflow }, ...rest);
|
||||
};
|
||||
console.log("[PromptManager] Wrapped api.queuePrompt for final data fix");
|
||||
},
|
||||
|
||||
/**
|
||||
* CRITICAL: Also hook beforeQueuePrompt as a backup sync point
|
||||
*/
|
||||
async beforeQueuePrompt(promptInfo) {
|
||||
console.log("[PromptManager] beforeQueuePrompt - additional sync");
|
||||
syncPromptManagerWidgets();
|
||||
},
|
||||
|
||||
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
||||
if (nodeData.name === "PromptManager" || nodeData.name === "PromptManagerText") {
|
||||
console.log(`[PromptManager] Patching node type for custom UI: ${nodeData.name}`);
|
||||
|
||||
// Store original methods
|
||||
const onNodeCreated = nodeType.prototype.onNodeCreated;
|
||||
|
||||
@@ -279,8 +268,6 @@ app.registerExtension({
|
||||
setTimeout(() => {
|
||||
const textWidget = self.widgets?.find((w) => w.name === "text");
|
||||
if (textWidget) {
|
||||
console.log("[PromptManager] Patching text widget for proper serialization");
|
||||
|
||||
// Store reference to the widget for the closure
|
||||
const widgetRef = textWidget;
|
||||
const originalSerializeValue = textWidget.serializeValue;
|
||||
@@ -292,11 +279,8 @@ app.registerExtension({
|
||||
const currentValue = widgetRef.inputEl.value;
|
||||
// Sync widget.value as well
|
||||
widgetRef.value = currentValue;
|
||||
console.log(`[PromptManager] serializeValue returning: "${currentValue.substring(0, 50)}..."`);
|
||||
return currentValue;
|
||||
}
|
||||
// Fallback to widget.value
|
||||
console.log(`[PromptManager] serializeValue fallback to widget.value: "${String(widgetRef.value).substring(0, 50)}..."`);
|
||||
return widgetRef.value;
|
||||
};
|
||||
|
||||
@@ -323,8 +307,6 @@ app.registerExtension({
|
||||
|
||||
// Initial sync
|
||||
syncValue();
|
||||
|
||||
console.log("[PromptManager] Added comprehensive input listeners to text widget");
|
||||
}
|
||||
}
|
||||
}, 50); // Shorter delay to beat other extensions
|
||||
@@ -403,7 +385,6 @@ app.registerExtension({
|
||||
const originalOnResize = this.onResize;
|
||||
this.onResize = function (size) {
|
||||
this._userHasResized = true;
|
||||
console.log("[PromptManager] User resized to:", size);
|
||||
if (originalOnResize) {
|
||||
originalOnResize.call(this, size);
|
||||
}
|
||||
@@ -432,7 +413,6 @@ app.registerExtension({
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log(`[PromptManager] serialize: Synced ${this.widgets.length} widget values`);
|
||||
}
|
||||
|
||||
const data = originalSerialize ? originalSerialize.call(this) : {};
|
||||
@@ -677,9 +657,7 @@ app.registerExtension({
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(
|
||||
"[PromptManager] Could not load settings, using defaults",
|
||||
);
|
||||
// Settings not available, use defaults
|
||||
}
|
||||
};
|
||||
|
||||
@@ -855,11 +833,6 @@ app.registerExtension({
|
||||
if (textWidget) {
|
||||
const textWidgetIndex = this.widgets.indexOf(textWidget);
|
||||
|
||||
console.log(`[PromptManager] DEBUG: Setting prompt on node ${this.id}`);
|
||||
console.log(`[PromptManager] DEBUG: textWidget found at index ${textWidgetIndex}`);
|
||||
console.log(`[PromptManager] DEBUG: Old value: ${textWidget.value?.substring(0, 50)}...`);
|
||||
console.log(`[PromptManager] DEBUG: New value: ${prompt.text.substring(0, 50)}...`);
|
||||
|
||||
// Set the widget value
|
||||
textWidget.value = prompt.text;
|
||||
|
||||
@@ -867,20 +840,17 @@ app.registerExtension({
|
||||
// graphToPrompt calls serializeValue() which reads from inputEl.value
|
||||
if (textWidget.inputEl) {
|
||||
textWidget.inputEl.value = prompt.text;
|
||||
console.log(`[PromptManager] DEBUG: Updated inputEl.value directly`);
|
||||
}
|
||||
|
||||
// CRITICAL: Also update widgets_values array if it exists
|
||||
// ComfyUI's graphToPrompt reads from this array for execution
|
||||
if (this.widgets_values && textWidgetIndex >= 0) {
|
||||
this.widgets_values[textWidgetIndex] = prompt.text;
|
||||
console.log(`[PromptManager] DEBUG: Updated widgets_values[${textWidgetIndex}]`);
|
||||
}
|
||||
|
||||
// Trigger widget callback to notify ComfyUI of value change
|
||||
if (textWidget.callback) {
|
||||
textWidget.callback(prompt.text, app.canvas, this, null, null);
|
||||
console.log(`[PromptManager] DEBUG: Called textWidget.callback`);
|
||||
}
|
||||
|
||||
// Also set metadata if available
|
||||
@@ -930,11 +900,6 @@ app.registerExtension({
|
||||
app.graph.setDirtyCanvas(true, true);
|
||||
}
|
||||
|
||||
console.log(
|
||||
`[PromptManager] Loaded prompt: ${prompt.text.substring(0, 50)}...`,
|
||||
);
|
||||
console.log(`[PromptManager] DEBUG: Final widget value: ${textWidget.value?.substring(0, 50)}...`);
|
||||
console.log(`[PromptManager] DEBUG: widgets_values: ${JSON.stringify(this.widgets_values?.slice(0, 3))}...`);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1099,16 +1064,11 @@ app.registerExtension({
|
||||
const newWindow = window.open(webUrl, "_blank");
|
||||
|
||||
if (newWindow) {
|
||||
console.log("[PromptManager] Web interface opened in new tab");
|
||||
this.showNotification(
|
||||
"Web interface opened in new tab",
|
||||
"success",
|
||||
);
|
||||
} else {
|
||||
// Fallback if popup was blocked
|
||||
console.log(
|
||||
"[PromptManager] Popup blocked, trying alternative method",
|
||||
);
|
||||
window.location.href = webUrl;
|
||||
}
|
||||
} else {
|
||||
@@ -1120,13 +1080,8 @@ app.registerExtension({
|
||||
);
|
||||
|
||||
if (newWindow) {
|
||||
console.log("[PromptManager] Web interface opened in popup");
|
||||
this.showNotification("Web interface opened in popup", "success");
|
||||
} else {
|
||||
// Fallback if popup was blocked
|
||||
console.log(
|
||||
"[PromptManager] Popup blocked, trying alternative method",
|
||||
);
|
||||
window.location.href = webUrl;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user