Nodes/comfyui-obvpm-timeline/H3 Live Preview (obvpm)
ComfyUI Node

H3 Live Preview (obvpm)

Watch the seam while H3 is still making it

By chanon·Created 2 months ago·Updated 11 days ago· 255
H3 Live Preview (obvpm)
  • model
  • model
◄tiny_vae▾►
◄max_size640►

A 24 fps MiniMax H3 take is not fast, and the obvpm workflow's whole point is the join - extending a clip, prepending to it, bridging two clips - which means the part you actually care about lives in the first and last handful of frames. Watching a step counter for four minutes to find out the seam drifted is the worst part of the hobby.

H3 Live Preview fixes that: wire it between the model loader and the sampler, and the pack's H3 MCtx Result Preview shows each sampling step as a short clip, on the take's own timeline with the pinned frames included. You watch the join being made, and kill the run before it finishes being wrong.

How it works

model goes in and a patched model comes out; behind the scenes it registers an OUTER_SAMPLE wrapper, so every sampling pass of that model hands it the current denoised estimate. Each step's video latent gets decoded into pictures, stitched into a clip, and sent over the websocket to the Result Preview. It's not an output node, so queueing it on its own does nothing.

The neat part is the timing. Each latent step's picture is held for exactly the frames that step covers on H3's grid - H3 codes 17 frames in 5 steps, spanning (1, 4, 4, 4, 4) frames before repeating - so a 5-second take's preview is 5 seconds of video at 24 fps. No frame-rate widget, and it lines up frame for frame with what the save node will write. It shows the whole latent, pinned frames and all: the parent's at the head of an extend, the target's at the tail of a prepend. That's where a seam is made, so that's where you want to be looking.

Encoding is H.264 on the CPU, on its own worker thread, and only the newest step matters - a step that arrives while the previous one is still encoding replaces it. The picture never queues up behind itself.

The inputs that matter

model - the model the sampler uses. Loader → here → sampler, inline.

tiny_vae - the interesting one, and the only one you'll tune. It lists the files in ComfyUI/models/vae_approx, with anything named taeh3* first. madebyollin's temporal TAEHV build shows every frame and is both closer to the take and quicker (core's own H3 decode path handles it); Kijai's 2D one shows one picture per latent step, held for the frames it covers. Both ship as taeh3.safetensors, and which one a file is gets decided by its layers - the filename means nothing. The last option is latent RGB (no tiny VAE): the latent format's own colour factors, coarse, no download. Use it to confirm the node works before you go hunting for a file.

max_size - the preview's long side in pixels, default 640, 128–2048 in steps of 32. Smaller is quicker to encode and to send. 640 is plenty; you're answering "is this going wrong", not judging texture.

Output is model. That's the whole node.

Installing

It ships in the pack, so:

cd ComfyUI/custom_nodes
git clone https://github.com/chanon/comfyui-obvpm-timeline

Restart, or search comfyui-obvpm-timeline in ComfyUI Manager. No extra Python dependencies: the pack declares none on purpose, since torch, av, numpy and safetensors ship with ComfyUI already. It does want a recent core - 0.35.0 or newer.

For the preview, drop a tiny VAE at ComfyUI/models/vae_approx/taeh3.safetensors. The full shipped workflow also wants comfyui-obvpm, KJNodes, the Minimax H3 latent upscaler pack, the turbo LoRA loader, Spectrum and rgthree - the preview node needs none of those.

Where people get burned

The number one thing: this node shows nothing on its own. Its picture only appears in the pack's H3 MCtx Result Preview. No Result Preview in the graph, nothing on screen, no error.

Then the tiny VAE. Put taeh3.safetensors in models/vae_approx, not vae. Wrong folder and the combo won't list it, the decode falls back or warns, and you'll assume the node is broken.

Tiny decoders are also latent-space-specific, not universal - LTX 2.3's rebuilt VAE killed TinyVAE previews outright, which is why you reach for the H3 one rather than whatever tae file you had lying around for another model.

It replaces KJNodes' Model Preview Override - the Result Preview still honours MPO when that's what's in the graph, but this one knows where the pinned frames are.

Only its own branch's sampler shows up, so an upscale pass or a second sampler in the same graph isn't yours - and a fully cached queue run samples nothing, so there's nothing to send. In the shipped workflow the generation and upscale engines are switched on and off as whole groups; if you get no picture, check you didn't leave your branch muted.

Finally, don't crank max_size. The newest step always wins, so a preview that can't keep up doesn't lag - it just shows you fewer updates.

Categoryobvpm/h3

Inputs (3)

NameTypeDefaultDescription
modelMODEL—
tiny_vaeCOMBOThe decoder for the picture, from models/vae_approx: a tiny VAE for H3 (taeh3) -- madebyollin's temporal one shows every frame, Kijai's 2D one a picture per latent step; either works under any name. Or the latent's own colours (coarse, no file needed).
max_sizeINT640128–2048The preview's long side in pixels. Smaller is quicker to encode and to send.

Outputs (1)

NameTypeDescription
modelMODELThe same model, previewing while it samples.