H3ZeroStudio · Timeline
Turn a Pile of 15-Second H3 Clips Into One Video Without the Seams Showing
- model
- clip
- vae
- audio_vae
- audio
- images
- audio
- latent
The wall everyone hits two minutes into an H3 video
MiniMax H3 hands you 4–15 seconds at a time (124–362 frames at 24fps), generates stereo audio jointly with the picture, and starts every run from zero memory - the independence problem our character-consistency essay covers for images, now with motion and sound attached. You get one gorgeous 12-second shot, then generation two hands you a different jacket, a different room tone, and a cut to hide.
H3ZeroStudio's answer is to stop treating each clip as a job. The node is a CapCut-style timeline: segments with their own prompt and reference images, continuation links between them, up to 12 takes each, a draft pass and a final pass, export. Double-click and the editor fills your screen; everything comes back on three output wires.
What's actually worth reaching for isn't the pretty timeline. It's Extend plus the cache: add a continuation and the previous shot's tail survives into the next one instead of being reinvented.
How continuation actually works
Each segment is still an ordinary H3 sample, except an "extend" segment is sampled with the previous segment's latent tail already sitting in its first 5o+2 latent frames. Those frames become a keyframe at frame 0, and a model wrapper swaps the predicted x0 back to the locked values every step, so only the masked middle gets denoised. Audio rides H3's own audio_denoise_mask, which continues the same music and voice rather than crossfading two unrelated tracks. A "new scene" is just a butt join.
That's why the numbers look odd: H3 works on a 17k+5 pixel-frame grid (5k+2 latent), audio latents run at 40 fps, canvases snap to multiples of 32, and a prompt takes at most 9 reference pictures. Hence overlaps of 22, 39, 56… frames.
The whole project - segments, takes, markers, audio, settings - is serialized into the single project widget, so it travels inside the workflow (plus a copy in output/h3zerostudio/_projects). The editor is plain JS over the pack's /h3zero/* routes, which is how the live preview survives a tab reload.
The inputs that matter
You wire five things and touch one widget:
project- required, and you never type it. The editor writes the JSON.model,clip,vae- the H3 diffusion model, its Qwen3-VL text encoder, the video VAE. Optional only because a model preset can name files for you; a wired input always wins, and the preset's LoRAs apply on top.audio_vae- the H3 audio VAE. Skip it and you get silent video: it feeds preview sound, theaudiooutput and the audio lanes.audio- an incoming timeline track. As a reference it becomes<Audio 1>in every segment; in "main" mode it's kept as-is and the video is generated to follow it, which is how you get lip-sync.
Outputs: images (every frame of the assembled video, 24fps), audio (from the audio VAE, else your input, else silence), and latent - the stitched audiovisual latent, handy for your own refine pass. With hard cuts it isn't 5k+2 long, so don't feed it to anything that assumes it is.
Install
Manager → Custom Nodes Manager → search H3ZeroStudio → Install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/zeroleloushe/H3ZeroStudio.git ComfyUI-H3ZeroStudio
No pip step: requirements.txt is comments only - torch, numpy, Pillow, av and aiohttp ship with ComfyUI. What you do need is a ComfyUI recent enough for native H3 support, plus the H3 weights (model, text encoder, video VAE, audio VAE). The node lands under MiniMax H3/H3ZeroStudio as "H3ZeroStudio · Timeline".
Optional: minimax_h3_latent_upscaler_3d_bf16.safetensors in models/latent_upscale_models plus the Comfyui_Minimax_h3_latent_Upscaler pack (what the draft→final and upscale paths use), taeh3.safetensors in models/vae_approx for decent previews, and pip install nvidia-vfx on an RTX card.
Where people get burned
Nothing runs, nothing gets saved. This node isn't an output node. Generate queues the whole graph, so wire images and audio into a save/capture node first, or ComfyUI has nothing to execute.
Generate is greyed out on a continuation segment. Correct behaviour: an extend needs a finished take from the segment before it - there's no tail to pin yet. Generate segment one, or make it a "new scene".
"Upscale unavailable", final pass won't start. You have neither the learned latent upscaler (file and node) nor nvidia-vfx on an RTX card. Settings → Models lists what it actually found.
Previews are smeared and colour-shifted. That's the crude latent→RGB fallback. Drop taeh3 into models/vae_approx.
Excruciating runtimes. H3 is 33B, roughly 42.5GB of weights, no published consumer-VRAM floor; release day was mostly people asking whether their 3060 would finish before the next GPU generation. Chunked upscale and VRAM headroom keep a 12GB card inside budget on long clips, but nothing here makes H3 cheap. Use the draft pass, stay in the 124–362 frame range, shrink the tile rather than the ambition.
One non-technical wrinkle: H3's community licence excludes the US, EU, UK and South Korea. A model problem, not a node one - but people find out after rendering forty segments.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| project | STRING | H3ZeroStudio project (JSON). Edited in the full-screen editor, stored inside the workflow. | |
| modelopt | MODEL | MiniMax H3 model (Ref2VA, turbo LoRA optional). Optional when a model preset is selected; a wired model wins over the preset (the preset's LoRAs are applied on top). | |
| clipopt | CLIP | H3 text encoder (Qwen3-VL): encodes the segment prompt together with the references. Optional when the preset sets an encoder; a wire wins. | |
| vaeopt | VAE | H3 video VAE: encodes references, decodes segments. Optional when the project's preset sets a VAE; a wire wins. | |
| audio_vaeopt | VAE | H3 audio VAE (minimax_h3_audio_vae). Needed for sound in the preview and the AUDIO output, and for the audio track. | |
| audioopt | AUDIO | Timeline audio track: “reference” mode (<Audio 1> in every segment) or “main” (the sound stays as is, video follows it). Needs audio_vae. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | All frames of the assembled video (24 fps). |
| audio | AUDIO | The video's sound (from the audio VAE, else the input audio, else silence). |
| latent | LATENT | H3 AV latent of the assembled video (video + audio). With hard cuts (no extension) the length is not 5k+2. |