Nodes/H3 LongTake/H3 LongTake Render
ComfyUI Node

H3 LongTake Render

MiniMax H3 taps out at 15 seconds. This node gets you a minute.

By mark9009·Created 5 days ago·Updated about 20 hours ago· 21
H3 LongTake Render
  • model
  • clip
  • vae
  • audio_vae
  • ref_image_1
  • ref_image_2
  • ref_image_3
  • source_video
  • source_audio
  • last_clip
  • project_dir
  • report
source_file
prompt<Video 1> provides the full performance, motion, timing and camera. <Picture 1> defines the identity and appearance of the subject.
project_namelongtake
width896
height576
clip_frames124
context_frames5
seed0
steps4
sampler_nameeuler
schedulersimple
modecontinue
redo_from_clip0
max_clips0
dry_runfalse
source_fps24.000
use_source_audiofalse
ref_image_sizematch
ref_video_sizematch
audio_contexttrue
chunk_crf10
aspectsource
megapixels0.50
prompt_text
start_seconds0.0
end_seconds0.0
anchor_modekeyframe
source_rolereference
seam_matchoff

MiniMax H3 gives you a few seconds of video with synced audio, and it's genuinely good - a 33B omni-modal model that treats video and audio as one context instead of bolting a soundtrack onto a silent generator. What it won't give you is a minute. H3 LongTake Render fixes that by slicing your source into overlapping windows, rendering each window as its own H3 clip, hooking each clip to the previous one's latent tail, and writing every chunk to disk the moment it's done. (Caveat: H3's community licence excludes the US, EU, UK and South Korea.)

What it's for

Two jobs, one node. Motion and identity transfer: a reference video drives the performance, and pictures define who's in it (Ref2VA). And style transfer or retexture: re-render the source as Ghibli or GTA, or turn a tank top into gold armour plating while keeping motion and framing - that one wants NRDX's StyleTransfer LoRA. The overlap-into-keyframe trick is what stops the drift. Instead of re-inventing the last frame from a still, the previous clip's latent tail rides across the seam natively.

How it works

The math is easy once you see it. L = clip_frames (always 17k+5 - 124 frames is 5.2s, 243 is 10.1s) and C = context_frames. Clip 0 takes source frames [0, L) and all of them go out; clip i takes [i·(L−C), i·(L−C)+L) and trims its first C frames. You only generate L−C new frames per clip.

Per clip, ffmpeg decodes just that slice - not the whole file - and it becomes <Video 1> (or a guide latent in style mode), while your pictures become <Picture 1..3>. The last C frames of the previous clip, video and audio, are anchored at frame 0 as a native H3 keyframe. Then it samples positive-only (CFG 1 - this is built for the 4-step Turbo LoRA, so don't crank steps), decodes, trims C frames, and writes clip_NNN.mp4 and clip_NNN.latent.pt into output/h3_longtake/<project_name>/.

Between clips the models leave VRAM but stay staged in RAM - that's the performance story, since with the DiT resident the 25 GB Qwen encoder takes ten minutes per clip instead of one. On a 16 GB card at 544×960 with 124-frame clips and 4 Turbo steps: ~4:40 per clip, so a minute of video is roughly twelve clips and an hour.

The inputs that matter

model, clip, vae and audio_vae are plumbing (LoRAs go on model first). source_file is the video in input/; start_seconds / end_seconds trim the range, and ref_image_1..3 are your <Picture N>. Then the handful that decide whether the result is any good:

  • source_role - reference (default) treats the slice as a motion suggestion, right for Ref2VA swaps. guide turns it into a guide latent anchored at frame 0: frame-accurate motion and framing, for style transfer with the StyleTransfer LoRA. guide_retexture is that, text-only. guide+reference does both - +50% time for no gain on style transfer.
  • context_frames and anchor_mode - 5 and keyframe unless you have a reason. That's the cleanest seam and the best adherence to <Video 1>; context 22 steals attention from the reference, and inpaint at 22 is a visible cut. none is a diagnostic.
  • seam_match - turn on color for style transfer. It nudges each clip's first 24 frames toward the previous clip's, dropping the measured seam colour jump from ΔE 5.8 to 0.9.

aspect should stay source - a different canvas makes H3 copy <Video 1> and ignore <Picture 1> - and 0.5 megapixels is about 544×960 in 9:16. Outputs are last_clip, project_dir and report; wire project_dir into the Stitch node.

Installing it

ComfyUI Manager → search H3 LongTake → Install, or:

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

Restart, and make sure ffmpeg is reachable - the node tries VideoHelperSuite's ffmpeg, then imageio-ffmpeg, then plain ffmpeg on PATH. No requirements.txt, no Python dependencies; all it needs is ComfyUI core ≥ 0.34 plus the models.

The models are the real download: the fp8 Ref2VA diffusion model in models/diffusion_models, a MiniMax H3 Qwen3-VL-32B text encoder in models/text_encoders loaded through CLIPLoader with type minimax (~25 GB, lives in system RAM), both VAEs in models/vae, and the 4-step Turbo LoRA in models/loras.

Where people get burned

Work in the README's order: dry_run = true to read the plan, max_clips = 2 to check identity and the seam, then max_clips = 0, mode = continue for the whole thing. If ComfyUI stops, queue again - it resumes from the first missing clip. One bad clip gets mode = redo_one and a new seed, anchored to both neighbours.

Then the traps. Change the canvas, clip_frames, context_frames, source_role or the source and the node refuses to continue an existing project - use restart or a new project_name. guide without a reference carries no identity. Ref2VA drifts toward <Picture 1> unless the picture matches the video's framing. Never put a style name and <Picture 1> in the same sentence; the model follows the text and ignores the image. And long chains degrade link by link, so restart at a natural cut past a minute.

CategoryH3 LongTake

Inputs (38)

NameTypeDefaultDescription
modelMODEL
clipCLIP
vaeVAE
audio_vaeVAE
source_fileCOMBOSource video in input/: ffmpeg decodes only each clip's slice (minimal RAM). With '(use source_video)' the connected IMAGE batch is used instead.
promptSTRING<Video 1> provides the full performance, motion, timing and camera. <Picture 1> defines the identity and appearance of the subject.Changing source_role fills this field with the role's template (only if empty or still equal to a template). Empty = the role's template.
project_nameSTRINGlongtake
widthINT89632–4096Only used with aspect=manual.
heightINT57632–4096Only used with aspect=manual.
clip_framesINT12422–362Frames generated per clip (17k+5). 124 = 5.2s, 243 = 10.1s.
context_framesCOMBO5Tail frames of the previous clip used as anchor and overlap. 5: clean seam and best adherence to <Video 1> (measured). 22: longer anchor, steals attention from the reference.
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 (change the seed).
redo_from_clipINT00–9999
max_clipsINT00–99990 = all. Handy to try only the first N clips.
dry_runBOOLEANfalseOnly shows the slicing plan, does not generate.
ref_image_1optIMAGE
ref_image_2optIMAGE
ref_image_3optIMAGE
source_videooptIMAGEAlternative to source_file for short tests: IMAGE batch (float32, ~6 MB/frame at 0.5 MP).
source_fpsoptFLOAT24.0001–240Real FPS of source_video (ignored with source_file).
source_audiooptAUDIOAudio of source_video (ignored with source_file).
use_source_audiooptBOOLEANfalsePasses the source audio as the soundtrack of <Video 1> (lip-sync); costs tokens.
ref_image_sizeoptCOMBOmatch2 options: match, max
ref_video_sizeoptCOMBOmatchmatch: the reference video is scaled to the output area (fewer tokens). native: the core node's 768 canvas.
audio_contextoptBOOLEANtrueAlso carries the audio tail of the previous clip.
chunk_crfoptINT100–30
aspectoptCOMBOsourceAspect ratio of the output canvas. source = the source video's (recommended: with a different aspect ratio H3 tends to copy <Video 1> and ignore <Picture 1>).
megapixelsoptFLOAT0.500.1–2Area of the output canvas (ignored with aspect=manual). 0.5 MP ~ 544x960 in 9:16.
prompt_textoptSTRINGPrompt from an external text node: when connected and not empty it replaces the prompt field.
start_secondsoptFLOAT0.00–100000Start of the source range to use.
end_secondsoptFLOAT0.00–100000End of the source range (0 = to the end). Handy to cut tails such as the TikTok end card.
anchor_modeoptCOMBOkeyframeHow the previous clip is hooked. keyframe: latent tail as an H3 guide on frames 0..C-1, then trimmed (Motion Context style). inpaint: tail copied into the latent and protected with the mask (native masked AV preservation; fine with context 5, a cut with 22). none: no anchor, independent clips (diagnostic: upper bound of reference adherence).
source_roleoptCOMBOreferencereference: the slice is <Video 1> (Ref2VA, motion suggestion). guide: the slice is a guide latent anchored at frame 0 for the whole clip (frame-accurate motion and framing; for the StyleTransfer LoRA, with <Picture 1> = style). guide_retexture: like guide, text-only 'retexture:' template. guide+reference: both.
seam_matchoptCOMBOoffAt the seam with the previous clip, corrects the first 24 frames towards the previous clip's last frames: color = luminance + hue (measured: dE 5.8 -> 0.9), luminance = exposure only. Pixels only, after decoding; the latent is untouched.

Outputs (3)

NameTypeDescription
last_clipIMAGE
project_dirSTRING
reportSTRING