ComfyBlockout
A 3D previs editor that lives inside your ComfyUI graph
- image
- video
- prompt
The problem ComfyBlockout solves is one anyone who's burned ten minutes on image-to-video has felt: you type a prompt, the model decides the camera for you. It pans when you wanted a push-in, it drifts off your subject, and there is no knob to tell it "no, the camera goes from here to here, and that cube is a car that moves at second two." Blockout is the fix - a real 3D editor that runs inside the node, where you build a rough scene with primitives, keyframe the camera and per-object motion, record it, and pipe the result into Seedance, Wan, Nano Banana, or Flux as the reference they're supposed to obey.
It's basically previsualization for local generation. Filmmakers have done this forever - shoot a grey-box animatic, then hand it to the VFX team. Here the grey boxes are cubes and capsules, and the "VFX team" is a diffusion model that's actually quite good at matching a start frame and camera path once you hand it one. For the video models of 2026, where the strongest local workflows are image-to-video and R2V, anchoring the first frame to something you drew instead of something the model invented is a huge consistency win.
How it works
The node is a three.js editor iframed into your canvas - a live viewport in the node body, plus a fullscreen editor with the whole toolset. When you hit Record, the browser does canvas.captureStream() into a MediaRecorder, uploads the file to a server route (/comfyblockout/save_video), and ffmpeg converts it to an h264 mp4 with yuv420p and +faststart so it plays literally anywhere. A first frame gets pulled with opencv-python for the image output. Everything is stored keyed by a stable per-node UUID, so re-opening a workflow restores your scene, assets, keyframes, and background image - that round-trip persistence is the sort of thing most editor nodes forget and this one got right.
Ground truth on the inputs: there are only two, both optional STRINGs, and you basically never touch them. scene carries the node's UUID from the frontend so the backend can find your saved recording, and video_ref is a fallback path to a video if the stored one isn't found. Leave them alone. This is an output-first node.
The three outputs are what you wire:
image(IMAGE) - the first frame or snapshot. Goes into Seedance'simage_Nslots, Nano Banana'simages, or Flux as a start image.video(VIDEO) - the recorded mp4. Seedancevideo_1, Wan motion ref, LTX.prompt(STRING) - an editable system prompt with a model-tuned default. Worth reading once: it tells the model to match your camera, composition, and scale but not your blockout colors or style. The author's own framing, and it's the right instinct.
Install
No model downloads here - this is pure tooling, zero weights. ComfyUI Manager: search "ComfyBlockout" and install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/spiritform/comfyblockout
Restart ComfyUI and the node appears under video. Manager pulls the Python deps (imageio-ffmpeg, opencv-python, Pillow, numpy) automatically. A system ffmpeg on PATH is recommended - faster than the bundled imageio-ffmpeg fallback. You need a recent browser: WebGL 2, three years old or newer.
Where people get burned
- No ffmpeg at all and your recording stays
.webm- which Seedance will flatly refuse. If the mp4 never lands, check you have ffmpeg on PATH orpip install imageio-ffmpeg. - Black image output usually means opencv-python didn't install.
- On older ComfyUI installs the VIDEO output can degrade to a plain path string, and Seedance throws
'str' object has no attribute 'get_dimensions'. That's the "your ComfyUI is too old forVideoFromFile" tell - upgrade rather than chasing it. - Wire something into
videobefore you've recorded and you'll get a hard error; that's the node's way of telling you to hit Record. - Note the data (scenes, recordings, projects) currently lives in
custom_nodes/ComfyBlockout/data/, not temp - the README still says temp, but the code migrated it so the Desktop build doesn't wipe your work.
It's brand new - the announcement thread is barely older than this article - so expect rough edges and fast fixes. But if you've ever wanted to point a video model at a camera move you chose, this is the only node I know that does it without leaving ComfyUI.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| sceneopt | STRING | — | |
| video_refopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| video | VIDEO | — |
| prompt | STRING | — |