CineStack H3 Director Group (Reference to Video)
Nine Pictures, Three Videos, Three Audios — One Node per Reference Shot
- ref_images
- ref_videos
- ref_video_audios
- ref_audios
- group
Reference-to-video is the H3 task where the model reads tagged material instead of just words: <Picture 1> for a face, <Video 1> for a motion reference, <Audio 1> for a voice. In the official graph you wire all of that into one enormous node with autogrowing slots. In CineStack, the Director already holds a shot list - so this node is the same material set, scoped to one shot, packable into a list.
CineStack H3 Director Group (Reference to Video) outputs a single group that the Director's r2v_groups socket accepts. Same idea as its Image to Video sibling, with the reference slots bolted on.
The slots
Four autogrow inputs, and the caps are the official ones - connect into the last empty slot and another appears:
ref_imagesup to 9, mapping to<Picture 1>…<Picture 9>ref_videosup to 3, as IMAGE batches, mapping to<Video 1>…<Video 3>ref_video_audiosup to 3, the soundtrack paired with the same-numbered reference video - so slot 2's audio attaches to video 2ref_audiosup to 3 standalone audios, mapping to<Audio 1>…<Audio 3>
That distinction between ref_video_audios and ref_audios is the one that confuses people. A reference video with dialogue in it wants its audio in the paired slot. A voice you want the model to imitate wants the standalone slot. Get it wrong and the model hears a soundtrack where you meant a performance.
The required prompt is where those tags earn their keep - the tags are how the model knows which element you're talking about, so "the woman in <Picture 1> walks as in <Video 1>" is the shape of a working prompt. duration_sec is per-group, defaults to 5 seconds, and snaps to H3's 17k+5 frame grid at the Director's frame rate.
ref_image_size is the one real decision
Every group carries its own ref_image_size, and the Director honours the per-group value. match downscales references to roughly the generation pixel area, which is the fast default and the one to use while you're iterating. The numeric options (1024, 1280, 1536) cap the long edge before the official maximum; max is the official 2048 short-edge treatment.
Higher looks better and costs you real time and VRAM on encode. If a shot has nine reference images at max, you've just made the most expensive node in your graph a text-encode-adjacent step.
first_pass_seed is the usual decimal STRING: full uint64 range, blank inherits the Director card then the global seed, 0 means zero.
Output
One group, type MMX_DIR_GROUP. Into the Director's r2v_groups for a single shot, or into a Groups Combine for a sequence. Output size stays on the Director - this node packs material, not canvas.
Worth knowing: these groups feed the reference material side. Source-video modes (v2v and rv2v) still get their source clip from the Director's own timeline panel with its segmentation, so the group node is for the reference sets, not for the source footage.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/guomenghao/ComfyUI-CineStack-H3.git
python -m pip install -r ComfyUI-CineStack-H3/requirements.txt
Restart, then find it under CineStack/H3/Groups. Reference modes need the ref2va UNET rather than the fl2va one, plus the minimax CLIP and both VAEs - the audio VAE isn't optional once references are in play. There's a working template in the repo at example_workflows/minimax_h3_director_external_groups_r2v.json, and it's a wiring template, not a preset.
Where people get burned
"It says the reference conditioning needs audio_vae." You connected a reference image, video or audio and left the audio VAE off the Director. The reference path builds an audio+video latent and can't do that without it.
The tag does nothing. Either the number is wrong (<Picture 2> with only one image connected) or the material is in the wrong slot family. Tags are positional - the model doesn't guess.
Nine references and the shot changed character. More reference images is not more fidelity; it's more context competing for attention. Two or three clear images usually beats nine mediocre ones, and ref_image_size: match at least keeps the encode honest.
Nothing you edit on the Director's cards takes effect. External groups override the UI cards. That is the documented priority order, not a bug.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Prompt; use <Picture N> / <Video K> / <Audio J> tags. | |
| duration_sec | FLOAT | 5.00.2–120 | Clip duration in seconds (snapped to MiniMax 17k+5 frames @ fps). |
| ref_image_size | COMBO | match | Per-group ref sizing (Director reads this). match: downscale to the generation pixel area. 1024/1280/1536: cap the long edge, then official max. max: official 2048 short-edge. Default match; smaller is faster. |
| ref_imagesopt | COMFY_AUTOGROW_V3 | Reference images → <Picture N>. Connect to grow another slot. | |
| ref_videosopt | COMFY_AUTOGROW_V3 | Reference video frame batches → <Video K>. | |
| ref_video_audiosopt | COMFY_AUTOGROW_V3 | Soundtrack paired with the same-numbered reference video. | |
| ref_audiosopt | COMFY_AUTOGROW_V3 | Standalone reference audio → <Audio J>. | |
| first_pass_seedopt | STRING | Fixed first-pass seed; empty inherits the Director card/global seed. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| group | MMX_DIR_GROUP | — |