Browse Source

fix: execution utility edge cases for loops and gallery refs

- copyLoopOutput: add console.warn for unrecognized target node types
- connectedInputs: exclude loop edges from easeCurve edge lookup
- mediaStorage: trim gallery image/video refs to match actual array
  lengths after item deletion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
handoff-20260429-1057
shrimbly 3 months ago
parent
commit
b9d4260acd
  1. 2
      src/store/utils/connectedInputs.ts
  2. 2
      src/store/utils/executionUtils.ts
  3. 8
      src/utils/mediaStorage.ts

2
src/store/utils/connectedInputs.ts

@ -369,7 +369,7 @@ export function getConnectedInputsPure(
// Extract easeCurve data from parent EaseCurve node (if not already set by router passthrough) // Extract easeCurve data from parent EaseCurve node (if not already set by router passthrough)
if (!easeCurve) { if (!easeCurve) {
const easeCurveEdge = edges.find( const easeCurveEdge = edges.find(
(e) => e.target === nodeId && e.targetHandle === "easeCurve" (e) => e.target === nodeId && e.targetHandle === "easeCurve" && !e.data?.isLoop
); );
if (easeCurveEdge) { if (easeCurveEdge) {
const sourceNode = nodes.find((n) => n.id === easeCurveEdge.source); const sourceNode = nodes.find((n) => n.id === easeCurveEdge.source);

2
src/store/utils/executionUtils.ts

@ -273,5 +273,7 @@ export function copyLoopOutput(
updateNodeData(targetNode.id, { prompt: value }); updateNodeData(targetNode.id, { prompt: value });
} else if (type === "audio" && targetNode.type === "audioInput") { } else if (type === "audio" && targetNode.type === "audioInput") {
updateNodeData(targetNode.id, { audioFile: value }); updateNodeData(targetNode.id, { audioFile: value });
} else {
console.warn(`[copyLoopOutput] Unrecognized target: type="${type}" → node.type="${targetNode.type}"`);
} }
} }

8
src/utils/mediaStorage.ts

@ -480,12 +480,16 @@ async function externalizeNodeMedia(
const hasImageRefs = galleryImageRefs.some(r => r && r !== ""); const hasImageRefs = galleryImageRefs.some(r => r && r !== "");
const hasVideoRefs = galleryVideoRefs.some(r => r && r !== ""); const hasVideoRefs = galleryVideoRefs.some(r => r && r !== "");
// Trim refs to match actual array lengths (stale trailing entries after deletions)
const trimmedImageRefs = galleryImageRefs.slice(0, d.images?.length || 0);
const trimmedVideoRefs = galleryVideoRefs.slice(0, d.videos?.length || 0);
newData = { newData = {
...d, ...d,
images: cleanedImages, images: cleanedImages,
imageRefs: hasImageRefs ? galleryImageRefs : undefined, imageRefs: hasImageRefs ? trimmedImageRefs : undefined,
videos: cleanedVideos, videos: cleanedVideos,
videoRefs: hasVideoRefs ? galleryVideoRefs : undefined, videoRefs: hasVideoRefs ? trimmedVideoRefs : undefined,
}; };
break; break;
} }

Loading…
Cancel
Save