ComfyUI Node

Reactor Render

Turn a chained sequence of segments into one video

By reactor-team·Created about a month ago·Updated about 11 hours ago· 7
Reactor Render
  • sequence
  • VIDEO
◄seed42►

Segment nodes are where you write the story. Reactor Render is where it becomes a file. You chain Reactor … Segment nodes together through their sequence sockets, plug the last one in here, hit queue, and get a VIDEO out.

What it's for

This is the scripted half of the pack, and the half that behaves like a normal ComfyUI node: deterministic, queueable, re-runnable. Reactor Realtime is for playing a model live in a browser window; Render is for everything you want to run while you make coffee. The same models are behind both, so a world you liked in a live take can be re-staged as a sequence of camera moves and rendered properly, with a seed you can pin down.

Because every segment input is an ordinary ComfyUI input, Render also inherits the thing that makes this whole design worth it: a text node can write the prompts, an image node can make the references, a switch can branch the story. The prompt box on a segment is a socket like any other.

How it actually works

Render takes the sequence you hand it, compiles it into a plan for that model, and runs one Reactor session. For chunk-based models - LingBot, Helios, Visko Orbis, LongLive - the timeline gets scheduled onto the model's actual chunk grid, so segment boundaries and camera moves snap to chunk edges rather than landing on arbitrary frames. That's why the frame counts on those nodes step in 24s or 33s. The session streams video (and audio, on the models that have it) back, and the plugin encodes it to a video file.

The node waits its turn. ComfyUI runs async nodes side by side, and each run takes a Reactor session, so with the default MAX_CONCURRENT = 1 a second render queues behind the first and the node shows "Waiting for another Reactor session to finish" - Cancel still works while it waits. Progress appears on the node with preview frames as they arrive, so you're not staring at a dead graph for a three-minute render.

Inputs and outputs

  • sequence - the last segment of a chain, or a Reactor Sequence Join. This is the only real input.
  • seed - 0 to 2³¹−1, with the usual after-generate control. Same seed plus same sequence means the same render.
  • VIDEO (output) - wire it into SaveVideo (or a video preview). Render doesn't write into your output folder by itself.

Install

Manager search comfyui-reactor-api, or:

cd ComfyUI/custom_nodes
git clone https://github.com/reactor-team/comfyui-reactor-api
pip install -r comfyui-reactor-api/requirements.txt

Then set your key - config.ini under [API] (REACTOR_API_KEY = ...) or the REACTOR_API_KEY environment variable, which wins. Restart ComfyUI. There's only one dependency (reactor-sdk>=1.6) and nothing to download: the models are Reactor's, running on Reactor's hardware.

Where people get burned

No API key. This is the node that notices. Missing key is reported on the node as a configuration error naming config.ini, not a crash - so if you see a complaint about a key, that's the fix.

Segment errors land here, not on the segment. The compiler validates the whole sequence at render time, and its messages are blunt: "The sequence has no segments", "X needs an image on the first segment", "X needs a video on the first segment", "X has no hard cuts; use a shot segment instead". If a render refuses to start, read the error - it names the model and the offending segment.

Images on the wrong segment get dropped. Models that read a reference only at the start will discard an image you attached to segment three, with a warning in the console rather than a failure. Silent-ish. For those models, put the image on the first segment.

Don't expect round numbers. Frame counts are the model's, not yours. A six-second FastH3 clip is around 158 frames rather than 144, and a chunked model's first chunk is shorter than the rest (29 then 32 on LongLive-2.0). The render keeps what the model emits.

The sequence socket is directional. Output goes downstream only. Feeding a later segment back into an earlier one isn't a thing; chain them in order and send the last one to Render.

No key, but a local model? The plugin also honours REACTOR_LOCAL=1 (plus optional REACTOR_API_URL) to point at a model you're serving yourself with reactor run. Nothing in the README, but it's in the source, and it's the one way to render without a key.

CategoryReactor

Inputs (2)

NameTypeDefaultDescription
sequenceREACTOR_SEQUENCEThe last segment of a sequence, or a Reactor Sequence Join.
seedINT420–2147483647—

Outputs (1)

NameTypeDescription
VIDEOVIDEO—