BabylonJS/Babylon.js · error · Error

Could not find signal output with name ${name} in block ${cl

Error message

Could not find signal output with name ${name} in block ${className}

What it means

Thrown during FlowGraphExecutionBlock.deserialize when the serialization object lists a signal output whose name does not match any signal output currently registered on the block. The block refuses partial deserialization to keep the graph consistent.

Source

Thrown at packages/dev/core/src/FlowGraph/flowGraphExecutionBlock.ts:146

    /**
     * Deserializes from an object
     * @param serializationObject the object to deserialize from
     */
    public override deserialize(serializationObject: any) {
        for (let i = 0; i < serializationObject.signalInputs.length; i++) {
            const signalInput = this.getSignalInput(serializationObject.signalInputs[i].name);
            if (signalInput) {
                signalInput.deserialize(serializationObject.signalInputs[i]);
            } else {
                throw new Error("Could not find signal input with name " + serializationObject.signalInputs[i].name + " in block " + serializationObject.className);
            }
        }
        for (let i = 0; i < serializationObject.signalOutputs.length; i++) {
            const signalOutput = this.getSignalOutput(serializationObject.signalOutputs[i].name);
            if (signalOutput) {
                signalOutput.deserialize(serializationObject.signalOutputs[i]);
            } else {
                throw new Error("Could not find signal output with name " + serializationObject.signalOutputs[i].name + " in block " + serializationObject.className);
            }
        }
    }

    /**
     * @returns the class name
     */
    public override getClassName(): string {
        return "FlowGraphExecutionBlock";
    }
}

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Re-serialize the flow graph with the current library version
  2. Verify the payload belongs to the same block class being deserialized
  3. Migrate renamed signal outputs in stored serialization JSON
  4. Strip obsolete signal output entries from the payload

Example fix

// before
serializationObject.signalOutputs = [{ name: 'clicked_old' }];
// after
serializationObject.signalOutputs = [{ name: 'onClick' }];
Defensive patterns

Strategy: try-catch

Validate before calling

const missing = serializationObject.signalOutputs?.filter(
  (so: any) => !block.getSignalOutput(so.name)
) ?? [];
if (missing.length) throw new Error('Unknown signal outputs: ' + missing.map((m: any) => m.name).join(','));
block.deserialize(serializationObject);

Type guard

function hasAllSignalOutputs(block: FlowGraphExecutionBlock, ser: any): boolean {
  return (ser?.signalOutputs ?? []).every((so: any) => !!block.getSignalOutput(so.name));
}

Try / catch

try {
  block.deserialize(serializationObject);
} catch (e) {
  if (String(e.message).startsWith('Could not find signal output')) {
    // regenerate serialization or migrate renamed outputs
  }
}

Prevention

When it happens

Trigger: Calling block.deserialize(serializationObject) where serializationObject.signalOutputs[i].name has no match via getSignalOutput on the block.

Common situations: Serialized graph produced by a different library version where a signal output was renamed/deleted; mixing serialized payloads across block implementations; corrupted or hand-edited JSON.

Related errors


AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30). Data as JSON: /api/errors/46ad8299e110f88e. Report an issue: GitHub.