Nodes/H3 LongTake/H3 LongTake Image to Video
ComfyUI Node

H3 LongTake Image to Video

One Photo, Thirty Seconds of Video, Without Batching Your Way Off a 16 GB Card

By mark9009·Created 10 days ago·Updated 2 days ago· 22
H3 LongTake Image to Video
  • model
  • clip
  • vae
  • audio_vae
  • start_image
  • end_image
  • face_image
  • last_clip
  • project_dir
  • report
promptsA slow cinematic push-in on the subject; natural light, ambient sound. --- The subject turns and walks away from the camera.
project_namelongtake_i2v
duration_seconds15.0
width896
height576
clip_frames124
context_frames5
seed0
steps4
sampler_nameeuler
schedulersimple
modecontinue
redo_from_clip0
max_clips0
dry_runfalse
identity_referencefalse
prompt_text
aspectsource
megapixels0.50
anchor_modekeyframe
audio_contexttrue
seam_matchcolor
chunk_crf10

MiniMax H3 generates 4–15 second clips with native stereo audio - the first credible open answer to Veo's advantage. It does not generate a two-minute video. H3 LongTake Image to Video (H3LongTakeImageRender) is the honest workaround: it renders your long video as a chain of H3 clips from a single still, writes each clip to disk as it finishes, and hands off to the pack's Stitch node. You get 30 seconds out of a 16 GB card because only one clip is ever in VRAM.

It's one of three nodes in mark9009's pack, MIT-licensed, depending on ComfyUI core ≥ 0.34 and nothing else. Coming from the source-video side - motion or style transfer - you want H3LongTakeRender instead.

How the chain actually works

Clips are 17k+5 frames long; 124 frames is 5.2 seconds at 24 fps, the default. Clip 0 starts from start_image as a keyframe at frame 0, as the core H3 node does. Every clip after is anchored to the previous one's tail: its last 5 latent frames - video and audio - are pinned as native H3 keyframes at frames 0–4, then trimmed off. Each clip contributes clip_frames − context_frames new frames.

That overlap is the whole trick: the seam measures 0.96 rather than a cut. Chunks land in output/h3_longtake/<project_name>/, audio is muxed into each one, and models are evicted from VRAM between clips - staged in RAM, back in about a second. Kill the run and queue again - it resumes from the first missing clip.

The inputs worth your attention

model and audio_vae pick which H3 you're running. The fl2va model does a plain single-still video; turn on identity_reference or connect face_image and you need ref2va, the variant that takes image references alongside keyframes.

prompts is the unusual one: one block per clip, separated by a line containing ---, so at defaults you write 5.2 seconds of script per block. The last block repeats for the remaining clips, and it warns you if you wrote too many. Each clip only sees its own block, so describe changes in sequence.

duration_seconds is what you're asking for; the node works out the clip count and prints the plan (clip → time → prompt) when dry_run is on. Do that first - it costs nothing.

Then the anti-drift pair - the measured part, not the vibes part. On a 30-second project, ArcFace similarity to your reference face runs 0.27 with no references (a different person by 20 seconds), 0.55 with identity_reference, and 0.60 with face_image alone. The author recommends image plus face, since face-only drags your framing into a close-up. The node prepends the <Picture N> tags itself.

megapixels (start at 0.5) and clip_frames/context_frames (leave at 124 and 5) set the plan. seam_match defaults to color and corrects each clip's first 24 frames toward the previous tail - worth 5.8 down to 0.9 on colour jump. mode handles the essentials: continue skips finished clips, restart wipes them, redo_from redoes from a clip onward, redo_one regenerates one clip with head and tail anchored to its neighbours.

Outputs: last_clip, project_dir (into the Stitch's project_dir socket, or into the Refine), and report.

Installing it

ComfyUI Manager → search H3 LongTake → Install, or:

cd ComfyUI/custom_nodes
git clone https://github.com/mark9009/ComfyUI-H3-LongTake

Restart, then sort out ffmpeg - it uses VideoHelperSuite's if you have it, otherwise imageio-ffmpeg, otherwise your PATH:

python -m pip install imageio-ffmpeg

The models are the heavy part, same for every node in the pack: the H3 diffusion model into models/diffusion_models, the Qwen3-VL-32B text encoder into models/text_encoders (load with CLIPLoader, type minimax), both VAEs into models/vae, the 4-step Turbo LoRA into models/loras. The encoder is the awkward one - int8 is ~26 GB, NVFP4 ~16 GB for the same output with 11 GB more headroom. Take NVFP4 if you're on 64 GB of RAM.

One thing to check first: H3 ships under the MiniMax H3 Community License, which excludes the US, EU, UK and South Korea from its territory. Not the node's problem - but real.

Where people get burned

Changing canvas, clip_frames, context_frames or duration once a project exists makes the node refuse to continue: it compares signatures and tells you to use restart or a new project_name. It'll surprise you once.

Don't hand-delete chunk files - redo_one exists so you don't have to, and a half-missing cache throws a "clip N-1 is missing" error that reads like a crash and isn't.

And don't chase grain with steps: steps, Turbo strength and sigma shift don't measurably move the flat-area noise. The node samples positive-only at CFG 1 because it's built around the Turbo LoRA, and 4 steps is what that LoRA was distilled for. Soft output is softness; the fix is H3LongTakeRefine. Budget ~4:40 per clip at 544×960 on a 16 GB card - an hour for 60 seconds - and start at max_clips = 2 to check the seam.

CategoryH3 LongTake

Inputs (30)

NameTypeDefaultDescription
modelMODELH3 fl2va model (image -> video) with the LoRAs already applied. identity_reference needs the ref2va (it accepts keyframes too).
clipCLIP
vaeVAE
audio_vaeVAEH3 audio VAE: the generated audio is decoded per clip and put into the chunks.
start_imageIMAGEFirst frame of the video (keyframe at frame 0 of clip 0).
promptsSTRINGA slow cinematic push-in on the subject; natural light, ambient sound. --- The subject turns and walks away from the camera.One block per clip (5.2 s with clip_frames=124), separated by a '---' line. The last block repeats for the remaining clips. It can describe what happens in each stretch: the model only sees its own clip's block.
project_nameSTRINGlongtake_i2v
duration_secondsFLOAT15.01–3600Length of the final video; the plan covers it with clip_frames clips.
widthINT89632–4096Used only with aspect=manual.
heightINT57632–4096Used only with aspect=manual.
clip_framesINT12422–362Frames generated per clip (17k+5). 124 = 5.2 s per prompt block.
context_framesCOMBO5Previous clip's tail used as anchor (5 = clean seam, measured).
seedINT00–18446744073709550000
stepsINT41–100
sampler_nameCOMBOeuler44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOsimple9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
modeCOMBOcontinuecontinue: skips the clips already on disk. restart: deletes everything. redo_from: redoes from redo_from_clip onwards. redo_one: redoes ONLY redo_from_clip, anchoring head and tail to the neighbouring clips.
redo_from_clipINT00–9999
max_clipsINT00–99990 = all.
dry_runBOOLEANfalseShows only the plan and the prompt blocks, does not generate.
end_imageoptIMAGELast frame of the video (keyframe on the last frame of the last clip, as fl2va does).
identity_referenceoptBOOLEANfalsestart_image also as <Picture 1> (Ref2VA) in every clip: an identity anchor against drift in long chains. Needs the ref2va model.
face_imageoptIMAGEClose-up of the face as a reference in every clip (<Picture 2>, or <Picture 1> without identity_reference): the strongest anchor for the face. Needs the ref2va model.
prompt_textoptSTRINGPrompt from an external text node (same '---' blocks): when connected it replaces the prompts field.
aspectoptCOMBOsourceCanvas aspect: source = start_image's. width/height count only with manual.
megapixelsoptFLOAT0.500.1–2
anchor_modeoptCOMBOkeyframekeyframe: previous clip's latent tail as a guide on frames 0..C-1. inpaint: tail copied into the latent and protected by the mask. none: independent clips.
audio_contextoptBOOLEANtrueAlso carries the previous clip's audio tail.
seam_matchoptCOMBOcolorExposure/hue correction of the first 24 frames towards the previous clip (pixels only).
chunk_crfoptINT100–30

Outputs (3)

NameTypeDescription
last_clipIMAGE
project_dirSTRING
reportSTRING