This commit is contained in:
Shaun Johnston
2025-12-28 15:24:05 +10:00
parent c56d653729
commit 3f74da647d
2 changed files with 65 additions and 48 deletions
+28 -9
View File
@@ -41,6 +41,21 @@ class FriendlyPipeEdit:
def execute(self, pipe, slot_count=0, slot_names="{}", incoming_slot_count=0, **kwargs):
import json
import os
import re
# Read debug setting from js/config.js
debug = False
config_path = os.path.join(os.path.dirname(__file__), "js", "config.js")
try:
with open(config_path, "r") as f:
content = f.read()
# Parse debug: true or debug: false from the JS config
match = re.search(r'debug:\s*(true|false)', content)
if match:
debug = match.group(1) == "true"
except:
pass
# Convert slot_count and incoming_slot_count to int if they're strings
if isinstance(slot_count, str):
@@ -48,12 +63,13 @@ class FriendlyPipeEdit:
if isinstance(incoming_slot_count, str):
incoming_slot_count = int(incoming_slot_count) if incoming_slot_count else 0
# Debug: print what we received
print(f"[FriendlyPipeEdit] execute called")
print(f"[FriendlyPipeEdit] slot_count={slot_count}, incoming_slot_count={incoming_slot_count}")
print(f"[FriendlyPipeEdit] pipe data: {pipe}")
print(f"[FriendlyPipeEdit] kwargs keys: {list(kwargs.keys())}")
print(f"[FriendlyPipeEdit] kwargs: {kwargs}")
# Debug logging
if debug:
print(f"[FriendlyPipeEdit] execute called")
print(f"[FriendlyPipeEdit] slot_count={slot_count}, incoming_slot_count={incoming_slot_count}")
print(f"[FriendlyPipeEdit] pipe data: {pipe}")
print(f"[FriendlyPipeEdit] kwargs keys: {list(kwargs.keys())}")
print(f"[FriendlyPipeEdit] kwargs: {kwargs}")
# Parse slot names from JSON string
try:
@@ -96,10 +112,12 @@ class FriendlyPipeEdit:
# Override incoming slots if exposed inputs are connected
for i in range(1, actual_incoming_count + 1):
incoming_key = f"incoming_slot_{i}"
print(f"[FriendlyPipeEdit] Checking {incoming_key}: present={incoming_key in kwargs}, value={kwargs.get(incoming_key, 'NOT_PRESENT')}")
if debug:
print(f"[FriendlyPipeEdit] Checking {incoming_key}: present={incoming_key in kwargs}, value={kwargs.get(incoming_key, 'NOT_PRESENT')}")
if incoming_key in kwargs and kwargs[incoming_key] is not None:
pipe_data["slots"][i] = kwargs[incoming_key]
print(f"[FriendlyPipeEdit] Overriding slot {i} with {kwargs[incoming_key]}")
if debug:
print(f"[FriendlyPipeEdit] Overriding slot {i} with {kwargs[incoming_key]}")
# Find the highest slot we're adding
max_new_slot = 0
@@ -122,6 +140,7 @@ class FriendlyPipeEdit:
# Calculate final slot count
pipe_data["slot_count"] = actual_incoming_count + max(slot_count, max_new_slot)
print(f"[FriendlyPipeEdit] Final pipe_data: {pipe_data}")
if debug:
print(f"[FriendlyPipeEdit] Final pipe_data: {pipe_data}")
return (pipe_data,)
+37 -39
View File
@@ -1,12 +1,8 @@
import { app } from "../../scripts/app.js";
import { config } from "./config.js";
console.log("[FriendlyPipe] Script file loaded");
// Configuration - edit this directly to enable debug
const config = {
debug: false,
};
// Debug logging helper
function debugLog(...args) {
if (config.debug) {
@@ -1273,43 +1269,43 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
sourceNode = graph.getNodeById(link.origin_id);
}
console.log("[FriendlyPipeEdit] syncWithSource - sourceNode:", sourceNode?.type, sourceNode?.id);
console.log("[FriendlyPipeEdit] syncWithSource - sourceNode.slotCount:", sourceNode?.slotCount);
console.log("[FriendlyPipeEdit] syncWithSource - sourceNode.slotNames:", JSON.stringify(sourceNode?.slotNames));
debugLog("syncWithSource - sourceNode:", sourceNode?.type, sourceNode?.id);
debugLog("syncWithSource - sourceNode.slotCount:", sourceNode?.slotCount);
debugLog("syncWithSource - sourceNode.slotNames:", JSON.stringify(sourceNode?.slotNames));
if (!sourceNode) return;
console.log("[FriendlyPipeEdit] sourceNode.type exact value:", JSON.stringify(sourceNode.type));
console.log("[FriendlyPipeEdit] Is FriendlyPipeOut?", sourceNode.type === "FriendlyPipeOut");
debugLog("sourceNode.type exact value:", JSON.stringify(sourceNode.type));
debugLog("Is FriendlyPipeOut?", sourceNode.type === "FriendlyPipeOut");
// Special case: if connected to a FriendlyPipeOut's output slot, check if that slot
// contains a FRIENDLY_PIPE and trace back to its original source
if (sourceNode.type === "FriendlyPipeOut") {
// originSlot is 0-indexed, but slotTypes/slotSources are 1-indexed
const slotNum = originSlot + 1;
console.log("[FriendlyPipeEdit] Connected to FriendlyPipeOut, originSlot:", originSlot, "slotNum:", slotNum);
debugLog("Connected to FriendlyPipeOut, originSlot:", originSlot, "slotNum:", slotNum);
const slotType = sourceNode.slotTypes?.[slotNum];
console.log("[FriendlyPipeEdit] FriendlyPipeOut slot type:", slotType);
debugLog("FriendlyPipeOut slot type:", slotType);
if (slotType === "FRIENDLY_PIPE") {
console.log("[FriendlyPipeEdit] Slot contains FRIENDLY_PIPE, tracing back...");
debugLog("Slot contains FRIENDLY_PIPE, tracing back...");
// Need to find the original source of this nested pipe
const pipeOutInput = sourceNode.inputs?.[0];
console.log("[FriendlyPipeEdit] pipeOutInput:", pipeOutInput);
debugLog("pipeOutInput:", pipeOutInput);
if (pipeOutInput && pipeOutInput.link) {
const sourceGraph = sourceNode.graph || graph;
const pipeOutLink = sourceGraph.links instanceof Map
? sourceGraph.links.get(pipeOutInput.link)
: sourceGraph.links?.[pipeOutInput.link];
console.log("[FriendlyPipeEdit] pipeOutLink:", pipeOutLink);
debugLog("pipeOutLink:", pipeOutLink);
if (pipeOutLink) {
let pipeInNode = null;
// Handle negative origin_id (subgraph input boundary)
if (pipeOutLink.origin_id < 0) {
console.log("[FriendlyPipeEdit] pipeOutLink has negative origin_id");
debugLog("pipeOutLink has negative origin_id");
const parentInfo = getParentSubgraphInfo(sourceNode);
if (parentInfo) {
const { parentNode, parentGraph } = parentInfo;
@@ -1326,15 +1322,15 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
} else {
pipeInNode = sourceGraph.getNodeById(pipeOutLink.origin_id);
}
console.log("[FriendlyPipeEdit] pipeInNode:", pipeInNode?.type, pipeInNode?.id);
debugLog("pipeInNode:", pipeInNode?.type, pipeInNode?.id);
if (pipeInNode) {
const pipeSource = findOriginalSource(pipeInNode, pipeOutLink.origin_slot);
console.log("[FriendlyPipeEdit] pipeSource:", pipeSource?.type, pipeSource?.id);
debugLog("pipeSource:", pipeSource?.type, pipeSource?.id);
if (pipeSource && pipeSource.getSlotSource) {
const slotSource = pipeSource.getSlotSource(slotNum);
console.log("[FriendlyPipeEdit] slotSource:", slotSource?.type, slotSource?.id, "slotCount:", slotSource?.slotCount);
debugLog("slotSource:", slotSource?.type, slotSource?.id, "slotCount:", slotSource?.slotCount);
if (slotSource) {
if (slotSource.updateSlotTypes) {
@@ -1368,10 +1364,10 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
const originalSource = findOriginalSource(sourceNode, originSlot);
const effectiveSource = originalSource || sourceNode;
console.log("[FriendlyPipeEdit] syncWithSource - effectiveSource:", effectiveSource?.type, effectiveSource?.id);
console.log("[FriendlyPipeEdit] syncWithSource - effectiveSource.slotCount:", effectiveSource?.slotCount);
console.log("[FriendlyPipeEdit] syncWithSource - effectiveSource.slotNames:", JSON.stringify(effectiveSource?.slotNames));
console.log("[FriendlyPipeEdit] syncWithSource - has getTotalSlotCount:", !!effectiveSource?.getTotalSlotCount);
debugLog("syncWithSource - effectiveSource:", effectiveSource?.type, effectiveSource?.id);
debugLog("syncWithSource - effectiveSource.slotCount:", effectiveSource?.slotCount);
debugLog("syncWithSource - effectiveSource.slotNames:", JSON.stringify(effectiveSource?.slotNames));
debugLog("syncWithSource - has getTotalSlotCount:", !!effectiveSource?.getTotalSlotCount);
// Get combined slot info from source (could be FriendlyPipeIn or another FriendlyPipeEdit)
if (effectiveSource.slotCount !== undefined) {
@@ -1381,7 +1377,7 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
this.incomingSlotNames = effectiveSource.getCombinedSlotNames();
this.incomingSlotTypes = effectiveSource.getCombinedSlotTypes();
this.incomingSlotSources = effectiveSource.getCombinedSlotSources ? effectiveSource.getCombinedSlotSources() : {};
console.log("[FriendlyPipeEdit] Got from getTotalSlotCount:", this.incomingSlotCount);
debugLog("Got from getTotalSlotCount:", this.incomingSlotCount);
} else {
this.incomingSlotCount = effectiveSource.slotCount;
this.incomingSlotNames = effectiveSource.slotNames || {};
@@ -1391,10 +1387,10 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
}
this.incomingSlotTypes = effectiveSource.slotTypes || {};
this.incomingSlotSources = effectiveSource.slotSources || {};
console.log("[FriendlyPipeEdit] Got from slotCount:", this.incomingSlotCount);
debugLog("Got from slotCount:", this.incomingSlotCount);
}
console.log("[FriendlyPipeEdit] After sync - incomingSlotCount:", this.incomingSlotCount);
console.log("[FriendlyPipeEdit] After sync - incomingSlotNames:", JSON.stringify(this.incomingSlotNames));
debugLog("After sync - incomingSlotCount:", this.incomingSlotCount);
debugLog("After sync - incomingSlotNames:", JSON.stringify(this.incomingSlotNames));
}
// Update exposed incoming slot inputs
@@ -1407,11 +1403,11 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
nodeType.prototype.updateExposedIncomingSlots = function() {
const node = this;
console.log("[FriendlyPipeEdit] updateExposedIncomingSlots called");
console.log("[FriendlyPipeEdit] incomingSlotCount:", this.incomingSlotCount);
console.log("[FriendlyPipeEdit] incomingSlotNames:", JSON.stringify(this.incomingSlotNames));
console.log("[FriendlyPipeEdit] slotCount:", this.slotCount);
console.log("[FriendlyPipeEdit] slotNames:", JSON.stringify(this.slotNames));
debugLog("updateExposedIncomingSlots called");
debugLog("incomingSlotCount:", this.incomingSlotCount);
debugLog("incomingSlotNames:", JSON.stringify(this.incomingSlotNames));
debugLog("slotCount:", this.slotCount);
debugLog("slotNames:", JSON.stringify(this.slotNames));
// Calculate expected input structure:
// Index 0: pipe input
@@ -1465,9 +1461,11 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
this.removeInput(this.inputs.length - 1);
}
console.log("[FriendlyPipeEdit] Final inputs:");
for (let i = 0; i < this.inputs.length; i++) {
console.log(` [${i}] name=${this.inputs[i].name}, label=${this.inputs[i].label}, link=${this.inputs[i].link}, type=${this.inputs[i].type}`);
if (config.debug) {
console.log("[FriendlyPipe] Final inputs:");
for (let i = 0; i < this.inputs.length; i++) {
console.log(` [${i}] name=${this.inputs[i].name}, label=${this.inputs[i].label}, link=${this.inputs[i].link}, type=${this.inputs[i].type}`);
}
}
this.exposedIncomingSlots = {};
@@ -1720,10 +1718,10 @@ function setupFriendlyPipeEdit(nodeType, nodeData, app) {
}
// Debug: log input state at execution time
console.log("[FriendlyPipeEdit] onExecutionStart");
console.log("[FriendlyPipeEdit] incomingSlotCount:", this.incomingSlotCount);
console.log("[FriendlyPipeEdit] slotCount:", this.slotCount);
console.log("[FriendlyPipeEdit] inputs:", this.inputs?.map((inp, idx) => ({
debugLog("onExecutionStart");
debugLog("incomingSlotCount:", this.incomingSlotCount);
debugLog("slotCount:", this.slotCount);
debugLog("inputs:", this.inputs?.map((inp, idx) => ({
idx,
name: inp.name,
label: inp.label,