Grey Box Shot
Block the Shot Before You Spend a Single H3 Render
- frames
- depth
- mask
- sheet
- video_ref
Video models are bad at what storyboard artists take for granted: where people stand, where the camera is, and how both move. Ask H3 for "she walks to the counter" and you'll get an interpretation of that, three times out of three. Grey Box Shot is how you stop asking - it renders the geometry first, cheaply, and hands H3 a reference that says this layout, this camera move.
What it actually renders
You point it at a scene file - plain JSON describing a set of simple shapes, a cast moving between named marks, and a camera per shot - and it rasterises one shot as grey video. No meshes, no external 3D engine: the pack's core does exact ray–shape intersection against boxes, cylinders, spheres and capsules, on your torch device. Which is why there is nothing extra to install for this. It's all in the pack.
The full editor for building those scenes is Grey Box Studio; this node is the same renderer with sockets, for when you want blocking coming out of a graph instead of a panel.
The inputs that matter
scene- the scene file, either under ComfyUI's user folder or a pack example (the default points at the shippedexamples/midnight-spoon/scenes/mika-arrives.json). Good place to start poking.shot- the shot's name inside that scene,1Aby default.width/height- the render size, default 832×480, snapped to 16. Match your generation size here; a reference at the wrong aspect is a reference you'll fight.save- on by default. Writes the grey mp4 tooutput/greyboxso you can drop it into H3 as media.mask_actor- optional. Give it a character like@renand you get a mask of that figure. Leave it empty and you get an empty mask.
What comes out
Five outputs, and they map onto different jobs in your workflow:
frames- the grey video as images. Feed it into H3 as a blocking or layout reference.depth- the same shot rendered as depth. This is the one to reach for when you want the H3 Fun ControlNet to steer the layout instead of H3 looking at a grey box.mask- your chosen character, isolated per frame, for compositing or region work.sheet- a contact sheet: every shot's frames plus the plan view from above. Read it before you render anything expensive. It's how you catch someone locked behind the counter.video_ref- the saved file as a media ref string, ready to paste into H3 Studio's references.
One detail worth knowing: the node fingerprints the mtimes of the scene file, the set files and cast.json. Edit the JSON outside ComfyUI, queue again, and it re-renders without you touching a widget.
Wiring it in
The interesting path is depth-as-control. Put a grey/depth render in a scene as a Control video, load the H3 Fun ControlNet on Setup, and H3 keeps your staging and camera move while drawing the look from your picture references instead. That fixes blocking's one real catch: shown to H3 as an ordinary reference, a grey box tends to come back looking like a grey box.
Installing and troubleshooting
Same pack, same steps for every node here:
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzH3
Then restart. You'll need ComfyUI 0.30.0 or newer. Cloning by hand also needs pnpm install && pnpm build for the editor frontend; ComfyUI Manager's registry package already contains the built bundle.
"No shot 'X' in …" - the shot name doesn't exist in the scene. The error lists the shots that do. Use one of those.
The render looks right but H3 ignores it - you're probably feeding frames as a plain reference. Grey video as a look is a weak signal. depth into a Control video is the strong one.
Nothing re-renders after you edit the scene - you edited a file outside the fingerprint's view, or the scene path resolves somewhere unexpected. save off also means no video_ref, so nothing downstream can find the mp4.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| scene | STRING | examples/midnight-spoon/scenes/mika-arrives.json | The scene file: under ComfyUI's user folder, or a pack example. |
| shot | STRING | 1A | The shot's name in the scene. |
| width | INT | 83264–2048 | — |
| height | INT | 48064–2048 | — |
| save | BOOLEAN | true | Save the grey video to output/greybox (to add as an H3 Studio reference). |
| mask_actoropt | STRING | A character ("@ren") to output a mask of. Empty: an empty mask. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| depth | IMAGE | — |
| mask | MASK | — |
| sheet | IMAGE | Every shot's frames and the plan. |
| video_ref | STRING | The saved video, as a media ref. |