H3ZeroStudio · Timeline
ZL_H3Studio Is a Deprecated Alias — Here's Why Your Old Workflow Still Loads It
- model
- clip
- vae
- audio_vae
- audio
- images
- audio
- latent
If you're here because your node says [DEPR], you're in the right place
ZL_H3Studio isn't a separate tool and it isn't broken. It's the original class id from the first release of H3ZeroStudio, back when the node was called "H3 Studio". The author kept it registered so old workflows still load, then marked it deprecated. In the current source it's four lines of Python:
LEGACY_NODE_ID = "ZL_H3Studio" # first MVP name ("H3 Studio"), kept so old workflows still load
class ZL_H3StudioLegacy(ZL_H3ZeroStudio):
DEPRECATED = True
It subclasses the live node, so it inherits the same inputs, the same outputs and even the same display name, "H3ZeroStudio · Timeline". The only differences you can observe: the [DEPR] badge in the compact node view, and the fact that it doesn't appear when you search the add-node menu. That's the whole story - anything you read about ZL_H3ZeroStudio applies here verbatim.
The rename had a boring, sensible reason, straight from the author's comment: other packs already use H3Studio* names. So if you go hunting for an "H3 Studio" node and find two unrelated projects, the one you want is zeroleloushe/H3ZeroStudio. Its ids are namespaced (ZL_ prefix, h3z- web assets, /h3zero/ server routes) so it can't collide with whatever the other thing is.
Fix it in one click
Open the workflow containing the old node. In the compact node body, next to "Expand", there's a ⇪ Update node button (Russian UI: "⇪ Обновить ноду"). Click it.
Under the hood that button builds a fresh ZL_H3ZeroStudio, copies every widget value across - including the project widget, which is your timeline - keeps the node's title, position and size, rewires every inbound and outbound link by slot name, then deletes the dead node. Your segments, takes, markers and audio lanes come with it, because they live inside that JSON string rather than in the class.
Don't rebuild the node by hand. A hand-made replacement opens an empty editor and loses the project.
What the node actually does
Same as its current id: it's a CapCut-style timeline for MiniMax H3. H3 produces 4–15 second clips (124–362 frames at 24fps) with native stereo audio and no memory between runs, so anything longer than one shot is stitching work. This node turns stitching into editing - segments with individual prompts and up to nine reference pictures each, continuation links where the previous segment's latent tail is pinned into the start of the next and protected by a noise mask, up to 12 takes, a draft→upscaled-final two-pass mode, and export.
You wire the H3 model, its Qwen3-VL text encoder, the video VAE and the audio VAE. audio is an optional incoming track that either becomes a reference in every segment or is kept as-is with the video generated to follow it. Out come images (24fps), audio, and the stitched audiovisual latent. Leave audio_vae unwired and you get silent video - the node won't stop you.
It also isn't an output node, so send images into a save or video-combine node, otherwise pressing Generate queues a graph with nothing to execute.
Installing, in case the pack is what's missing
The legacy id ships inside the same pack, so there's one thing to install:
cd ComfyUI/custom_nodes
git clone https://github.com/zeroleloushe/H3ZeroStudio.git ComfyUI-H3ZeroStudio
Or Manager → Custom Nodes Manager → search H3ZeroStudio → Install, then restart. requirements.txt in the repo is comments only - no pip dependencies, since torch, numpy, Pillow, av and aiohttp all ship with ComfyUI. What you must have is a ComfyUI recent enough for native MiniMax H3 support, plus the H3 weights. After a restart, look under MiniMax H3/H3ZeroStudio.
Troubleshooting the legacy node specifically
The editor opens empty after you click Update node. The old node's project widget was already empty - usually a node that was pasted in but never opened. Check output/h3zerostudio/_projects for a saved copy before you rebuild anything.
The badge is gone but Generate is greyed out on a continuation segment. Unrelated to the rename: a continuation needs a finished take from the previous segment before there's a tail to pin. Generate the first segment, or switch the link to "new scene".
"Upscale unavailable". The final pass needs the learned H3 latent upscaler - the file in models/latent_upscale_models and the Comfyui_Minimax_h3_latent_Upscaler pack - or nvidia-vfx on an RTX card.
Blurry live preview. Drop taeh3.safetensors into models/vae_approx; without it the preview falls back to a crude latent→RGB decode.
Once you've clicked that button there's nothing left to do about ZL_H3Studio. It exists so workflows made in the first week of the pack's life still open - nothing more.
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. |