Staging
SceneNode is the Staging node under an old name — and it's all about the scene JSON
- Stage Data
SceneNode is one of those pages where the search result deserves an explanation before a tutorial. It isn't its own node. It's an early name for the Staging node in the ComfyUI-scene-camera-action pack - "Scene" was the pre-release concept (the pack's code and route names still show the lineage, including the older Unboring / UB naming) and the class registration is kept around so workflows that reference SceneNode still load. Drop a current Staging node on the canvas and you get the exact same class, same display name, same everything.
So the honest advice is the same as for the other alias pages: use Staging for new work, and don't feel compelled to "upgrade" old SceneNode graphs that already work.
Why "scene" is actually the right mental model
The alias is worth understanding because it points at what this node manages: a whole scene as data. Under the hood a stage is a JSON document - the format is a cube_stage with a nodes list of blocks, groups, and transforms, plus spawn points. One of those files is the scene, which is why the same content can ship as a preset (race_track.json, liberty_beach.json, gas_station.json …) and why the wire in and out of the node is a serialized JSON string rather than pixels.
That data-centric design opens a genuinely nice path the pack leans into: a bundled stage-builder skill (skills/stage-builder/SKILL.md in the repo) that teaches an AI coding agent - Antigravity, Claude Code, Cursor, whatever - how to write valid scene JSON. Give the agent "a rainy courthouse square with a car lane down the middle" and it emits a proportioned SceneState preset you drop into presets/ and load in the node. It's a clever shortcut for a beginner: instead of hand-placing fifty cubes, you describe the blockout in natural language and the scene materializes.
The practical rundown
Wire surface is minimal - one optional stage_data string in, one Stage Data output out - because the real work happens in the embedded three.js widget: preset dropdown, orbit/pan/zoom viewport, primitive placement, grouping. From there, Stage Data flows to an Acting node, where the scene becomes the ground an actor drives across.
Install via ComfyUI Manager (search "Scene Camera Action") or:
cd ComfyUI/custom_nodes
git clone https://github.com/arturitu/ComfyUI-scene-camera-action.git
pip install -r ComfyUI-scene-camera-action/requirements.txt
Restart and it appears under scene-camera-action as "Staging." No weights, no API keys, no GPU load for the 3D viewport itself.
Where people get tripped up with scenes-as-JSON: pasting a large scene blob straight into the stage_data field bypasses the widget's state management, and if it doesn't match the expected cube_stage shape you can end up with a node that loads but shows nothing. Let the widget or the stage-builder skill own the JSON, and treat manual edits as an advanced move.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| stage_dataopt | STRING | Serialized JSON data of the stage configurations |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Stage Data | * | — |