Files
2026-06-15 00:40:13 +02:00

60 lines
1.3 KiB
JavaScript

import { createPresetManager } from "./preset_manager.js";
import { findWidget, registerNode, waitForWidgets } from "./utils.js";
// --- Constants ---
const NODE_NAME = "PromptSceneBuilder";
const COMBO_FIELDS = [
"focus",
"view",
"angle",
"framing",
"time",
"sky",
"location",
"effect",
];
// --- Capture / Recall ---
const captureState = (node) => {
const state = {};
for (const field of COMBO_FIELDS) {
const w = findWidget(node, field);
if (w) state[field] = w.value ?? "";
}
return state;
};
const recallState = (node, state) => {
for (const field of COMBO_FIELDS) {
if (!(field in state)) continue;
const w = findWidget(node, field);
if (!w) continue;
w.value = state[field];
w.callback?.(state[field]);
}
if (node.graph) node.graph.setDirtyCanvas(true, true);
};
// --- Attach ---
const attachSceneBuilder = (node) => {
// --- Preset manager ---
const { presetRow, exportImportRow } = createPresetManager(node, {
nodeLabel: NODE_NAME,
onCapture: () => captureState(node),
onRecall: (state) => recallState(node, state),
});
node.widgets.push(presetRow);
node.widgets.push(exportImportRow);
};
// --- Registration ---
registerNode(NODE_NAME, (node) => waitForWidgets(node, attachSceneBuilder));