Nodes/Prompt Deck/Reel Guide
ComfyUI Node

Reel Guide

Turn one 5-second H3 clip into a film without a single crossfade

By omervaner·Created 3 months ago·Updated about 17 hours ago· 4
Reel Guide
  • positive
  • previous
  • next
  • positive
  • latent
  • reel_ctx
◄opextend►
◄tail_frames22►
◄head_frames22►
◄new_seconds5.0►
◄width1344►
◄height768►
◄savefalse►
◄sessionreel►

H3 gives you fifteen seconds and a hard stop

MiniMax H3 tops out around 15 seconds of 24 fps video with stereo audio welded in - impressive on its own, useless if you're trying to make a scene. Every continuation tool in the H3 ecosystem does the same trick: pin the last frames of what you already have, regenerate forward, throw away the overlap, glue the rest on. Reel Guide is that mechanism with the lid off.

Why bother when a pack like the DaSiWa Director already has a continuity feature? Two reasons, both from the repo's design doc. The first is that the Director's continuity quietly squeezes context down to 5 frames when you ask for a 15-second window - 0.2 seconds of motion evidence, which is exactly how a running man becomes a walking man between clips. The second is that the tensor slicing underneath is about a hundred lines vendored from an MIT continuation repo, wrapped in a great deal of timeline UI. Reel Guide takes the mechanism and skips the wrapper.

What it actually does

It builds a fresh, all-zero H3 window at the right size, pins your existing footage into it as native guides - the same minimax_keyframes structure MiniMaxH3AddGuide writes - and hands back the conditioning and latent to sample however you like. positive goes into the sampler's conditioning path, latent into its latent input. No special sampler, no scheduler lock-in, no second model - the repo's test graphs use stock SamplerCustomAdvanced with euler.

Which frames get pinned depends on op. extend puts the previous clip's tail at frame 0. prequel puts the film's head at the end of the window and generates before it. bridge pins both - tail of the left clip, head of the right one - and fills the hole. loop does the same using the film's own opening, so the result ends with a duplicate of its first frames for the exporter to cut at.

Two bits of arithmetic keep it honest. Pixel frames live on a 17k + 5 grid, so new_seconds snaps - 17-frame steps for extend and prequel, 17m - 5 for bridge and loop. And audio runs at 40 Hz indexed on the global timeline, round(frame × 40 / 24), so picture and sound don't drift a tick per append. One window never exceeds 362 frames, about 15 seconds, because that's the trained range.

The inputs you'll actually touch

op is the big one. Ignore cut and polish for now - they're in the dropdown and they throw "arrives with the strip UI" if you pick them.

tail_frames and head_frames are the anchor sizes, as strings: 5, 22, 39, 56 or 73. They're independent dials, and 22 is a sane default. Push them up when motion has to carry across the seam, and remember the anchors eat from the same 362-frame budget as new material.

new_seconds is new visible seconds, snapped as above. previous is the film so far; next is only for bridge. width and height apply only when there's no previous - Reel Guide then just makes you a plain first segment. save and session are read by the other node.

Outputs are positive (your conditioning, with its own keyframes preserved where they fit and don't collide with the anchors), latent (the zero window), and reel_ctx - a plan, not a tensor. That third socket must reach Reel Splice untouched; it's how the second node knows which tokens are anchors and which are new.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/omervaner/ComfyUI-PromptDeck

No pip installs - the pack declares zero dependencies; this node is torch plus ComfyUI's own modules. You do need a ComfyUI new enough for native H3 support, since it builds a comfy.nested_tensor AV latent and writes minimax_keyframes into conditioning. On an older build you get a clear "Reel needs ComfyUI with MiniMax H3 support" instead of a stack trace.

Where people get burned

Your source clip isn't on the grid. previous has to be a finished film: frames on 17k + 5, and audio length matching round(frames × 40 / 24). A raw mp4 won't be. The picture side you can brute-force - H3's 5-second clip is 124 frames at 24 fps:

ffmpeg -i source.mp4 -vf "scale=1344:768,fps=24" -frames:v 124 -c:a aac -shortest source_5s.mp4

Audio is the half that still bites: hand it a clip whose soundtrack didn't land on the same boundary and it tells you to run it through Reel Splice first. That's the check working. The safest source clip is one this pipeline produced.

The window got too big. tail + new + head over 362 frames errors with the arithmetic printed: drop new_seconds or your anchors a notch.

Mismatched canvases. Previous and next must be the same resolution - Reel joins clips on one canvas. Bridge hits this when the sources came from different sessions.

Anchors longer than the clip. tail_frames: 73 needs 73 frames of film to cut from.

And the calibration one: more anchors buy motion continuity and cost room for new action. That trade is the whole node.

CategoryPromptDeck

Inputs (11)

NameTypeDefaultDescription
positiveCONDITIONING—
opCOMBOextendextend: after previous. prequel: before previous. bridge: between previous and next. loop: previous back to its own start.
tail_framesCOMBO22Frames of the previous clip's tail pinned at the window start (extend, bridge, loop).
head_framesCOMBO22Frames of the next clip's head pinned at the window end (prequel, bridge, loop).
new_secondsFLOAT5.00.5–15New visible seconds. Snaps to the model's grid: 17-frame steps for extend/prequel, 17m-5 for bridge/loop.
widthINT134432–8192Only used for a first segment (no previous clip).
heightINT76832–8192Only used for a first segment (no previous clip).
saveBOOLEANfalseReel Splice writes latent.safetensors + meta.json under output/promptdeck_reel/<session>/.
sessionSTRINGreel—
previousoptLATENTThe film so far (or the clip to the left for bridge).
nextoptLATENTThe clip to the right (bridge only).

Outputs (3)

NameTypeDescription
positiveCONDITIONING—
latentLATENT—
reel_ctxPROMPTDECK_REEL_CTX—