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 about a month ago·Updated 6 days ago· 29
H3 LongTake Image to Video
  • model
  • clip
  • vae
  • audio_vae
  • start_image
  • end_image
  • face_image
  • character_sheet
  • object_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_modeinpaint►
◄audio_contexttrue►
◄seam_matchcolor►
◄chunk_crf10►
◄reference_strength1.00►
◄master_shot_contextfalse►
◄detail0.00►
◄seam_fadefalse►

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 (36)

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.
character_sheetoptIMAGECharacter sheet (several views in one image) as the last reference in every clip: the node tells the model these are angles of the same person, not different people. Use it on top of identity_reference/face_image, not instead of them. Avoid panels shot in a location other than the video's. 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_modeoptCOMBOinpaintinpaint: the previous clip's tail is copied into the latent and protected by the mask, so the model does not redraw it: clean joins (measured: jump at the join 5.4-6.8x with keyframe, 1.5x with inpaint). keyframe: the tail as a guide, the model redraws it. 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—
reference_strengthoptFLOAT1.000–1How strictly the model must reproduce the references (identity_reference, face_image, character_sheet). 1.0 = unchanged. Lower loosens them so the take moves more. MEASURED: no gain over run-to-run noise; left at 1.0. Keyframes are not touched.
master_shot_contextoptBOOLEANfalseFrom clip 1 on, passes clip 0 as <Video 1> as a memory of the place. MEASURED: no gain, and a video reference doubles the time per step; left off. Needs the ref2va.
detailoptFLOAT0.00-1–1Fine detail (Detail Daemon technique). MEASURED: no sharpness gain at 0.2 or 1.0, because 4-8 turbo steps touch too few sigmas for a 2-10% timestep shift to matter. Left at 0; it would need a 20-30 step schedule.
seam_fadeoptBOOLEANfalseFades the audio by 12 ms at the chunk edges. MEASURED: our joins have no click (with audio_context the track is already continuous); only useful for clips rendered separately.
object_imageoptIMAGEAn object to keep the same in every clip (e.g. a mug with its logo), as the last <Picture N> reference: a sharp logo on a flat background helps H3 not to reinvent it in close-ups. Experimental, not measured. Needs the ref2va.

Outputs (3)

NameTypeDescription
last_clipIMAGE—
project_dirSTRING—
reportSTRING—