diff --git a/src/components/nodes/ControlPanel.tsx b/src/components/nodes/ControlPanel.tsx
index aa526284..370ac04e 100644
--- a/src/components/nodes/ControlPanel.tsx
+++ b/src/components/nodes/ControlPanel.tsx
@@ -236,9 +236,17 @@ function GenerateImageControls({ node }: { node: Node }) {
try {
const capabilities = IMAGE_CAPABILITIES.join(",");
const headers: HeadersInit = {};
- if (replicateApiKey) headers["X-Replicate-Key"] = replicateApiKey;
- if (falApiKey) headers["X-Fal-Key"] = falApiKey;
- if (kieApiKey) headers["X-Kie-Key"] = kieApiKey;
+ switch (currentProvider) {
+ case "replicate":
+ if (replicateApiKey) headers["X-Replicate-Key"] = replicateApiKey;
+ break;
+ case "fal":
+ if (falApiKey) headers["X-Fal-Key"] = falApiKey;
+ break;
+ case "kie":
+ if (kieApiKey) headers["X-Kie-Key"] = kieApiKey;
+ break;
+ }
const response = await deduplicatedFetch(`/api/models?provider=${currentProvider}&capabilities=${capabilities}`, { headers });
if (response.ok) {
@@ -832,14 +840,14 @@ function LLMControls({ node }: { node: Node }) {
diff --git a/src/components/nodes/PromptConstructorNode.tsx b/src/components/nodes/PromptConstructorNode.tsx
index 9ef79bb7..91f299cb 100644
--- a/src/components/nodes/PromptConstructorNode.tsx
+++ b/src/components/nodes/PromptConstructorNode.tsx
@@ -119,21 +119,16 @@ export function PromptConstructorNode({ id, data, selected }: NodeProps
{
- let resolved = localTemplate;
- availableVariables.forEach((v) => {
- resolved = resolved.replace(new RegExp(`@${v.name}`, 'g'), v.value);
- });
- return resolved;
+ const valueMap = new Map(availableVariables.map(v => [v.name, v.value]));
+ return localTemplate.replace(/@(\w+)/g, (match, name) => valueMap.get(name) ?? match);
}, [localTemplate, availableVariables]);
// Sync resolved text to outputText so downstream nodes can read it before execution
useEffect(() => {
- let resolved = nodeData.template;
- availableVariables.forEach((v) => {
- resolved = resolved.replace(new RegExp(`@${v.name}`, 'g'), v.value);
- });
+ const valueMap = new Map(availableVariables.map(v => [v.name, v.value]));
+ const resolved = nodeData.template.replace(/@(\w+)/g, (match, name) => valueMap.get(name) ?? match);
const outputValue = resolved || null;
if (outputValue !== nodeData.outputText) {
updateNodeData(id, { outputText: outputValue });