Turn 8-second MiniMax H3 clips into 1-minute+ multi-shot films — same face, same voice, synced dialogue, solo shot retakes, and 2 MP guided upscaling — all from one ComfyUI node.
🕹️ Try the Interactive Node UI in Your Browser (click through Script, Refs, Timeline, Swap & ⚙ RUN before installing)
📦 GitHub Repository · Hugging Face Mirror
🎬 What You Can Do
SimpleMode (Standard MMH3ref2va/t2va+ Realism Boost): Paste standard 6-field MiniMax H3ref2va/t2vaprompts (passed through verbatim!) or plain prose for single-clip generations (chains = 1) with the visualREFSrail,realism_boost: on(steps = 6→ 2 base + 10 realism LoRA steps) +audio_refine: on(5 steps), and 2 MP Guided Upsampling!ShotsMode (Multi-Hop Chains): Write one short beat per card (5 s – 15 s each) with camera, framing, pace, and join controls.Visual & Voice Reference Rail (
REFS): Drop up to 9 character/location stills and voice timbre clips straight onto the node with@tagsand per-hop schedules (noLoad Imagespaghetti).Lossless Retake Board (
TIMELINE): Every hop caches losslessly. Lock the shots you like, or click⏵on Shot 4 to re-roll only Shot 4 while Shots 1–3 load in 1 second.Standalone Guided
SWAP: One-hop character or head swap driven by a reference video's motion & audio (replace_person,head_swap,face_only,keep_person) with a wardrobe override box and auto-loaded Swap LoRAs.Built-In 2 MP Guided Upsampler: Enlarges the finished film in 3D latent chunks and runs a 2-step tiled redraw with the
h3upscale_v2_x2guide LoRA.Local AI Draft Assistant (
WRITE— WIP): Connect LM Studio / nInfer / llama.cpp to draft shot cards or bar-synced music video layouts from a 1-sentence brief.
🔗 Two Ways to Join Shots (pin_mech) & Honest Limits
motion_context(Default — Built-In): Native latent-slice + audio relay (no external custom node needed; credit to NikoDemon80).
Honest runway withhop_refine: full: Holds clean for ~5–6 continuous clips on Turbo and ~7–8 clips on non-Turbo before texture changes become visible. Plan a transition to a cut (anchor: "restart") every 4–5 clips to keep textures fresh across long multi-scene films.hand_tie(Single-Take Previs — Public Experimental): Renders one low-res single-take bridge previs first and ties each full-res hop's opening and closing 0.9 s to those clean windows so hops never copy texture from each other (10+ hops in one continuous take). Best for continuous walking/talking vlogs in one setting; pair withqwen3vl_4b_fp8_scaled.safetensorsinmodels/text_encoders/.
⚡ 60-Second Install
Zero Python/pip dependencies. In ComfyUI/custom_nodes/:
git clone https://github.com/dntpi/ComfyUI-Hand-Tie-Clips.gitRestart ComfyUI and hard-refresh your browser (
Ctrl+Shift+R).Drag
workflows/HandTieClips_Starter.jsononto ComfyUI.Drop your character photo onto Row 1 in REFS (e.g.
@maya), write your beats in SCRIPT, and press Queue.
Recommended Models & Companion Nodes:
Turbo DiT: Wuli MiniMax H3 8-Step Turbo + plain
minimax_h3_ref2vaonrefine_model/upsample_ditGuided Upscaler:
minimax_h3_latent_upscaler_3d_bf16.safetensors(models/latent_upscale_models/) +h3upscale_v2_x2.safetensors(models/loras/)Speed / Attention Nodes: ComfyUI-PlagueKind-Nodes & ComfyUI-KJNodes
💡 The 5 Golden Prompting Rules (H3 runs at CFG 1.0 — every word is additive)
Never name what you want to stop: Don't write "She stops talking" — write "She smiles with her lips closed. Gentle pool water lapping."
Silence must be written as a room tone: An empty soundtrack invents speech. Always name a narrowband sound ("low hum of the refrigerator", "soft breeze").
Don't re-describe the face on Shots 2+: Describe only the new action; the reference rail and join pin carry her look.
No ellipses (
...) inside dialogue: Connect clauses inside speech with a simple comma (,) so the audio branch never fills pause gaps with gibberish.Set the final shot's
tailtosettleorhold: So the film lands cleanly instead of starting a new gesture on the last frame.
Description
v2.0.0 Update — Continuous Lip-Sync, SWAP & Drift Control
Continuous Audio Slicing & Lip-Sync
Fixed the 6-second audio reset on chained MiniMax H3 clips.
2.0 takes a single continuous audio track and automatically slices it across hops, keeping lip-sync locked throughout the entire sequence.
Demo: 27-second continuous voiceover across 3 hops with zero audio-visual drift.
SWAP (Identity Transfer)
Map character identities from a still reference image onto source motion footage in a single hop.
Includes 4 modes, scaling from full character replace down to face-only.
Drift Mitigation & Granular Control
Restart Anchors: Re-enter from reference stills using guided match cuts when drift accumulates.
Lab-Space Tone Anchors: Prevents color degradation and shifting across long chains.
Per-Shot Reference Routing: Direct control over which stills ride which specific hops.
Honest Limitations & Degradation Study
Real-world working limit remains 3 to 5 hops before texture ratcheting sets in.
Includes a 10-run, 9-hop degradation study in the README detailing exact failure modes and settings that didn't move the needle.
⚠️ Installation Note: Install directly from the GitHub repository. The registry listing is currently serving v0.4.5 while v2.0.0 clears the review queue.
FAQ
Comments (4)
incredible nodes and workflow. Great works. works perfectly with comfyui kitchen 0.34. thanks
Very fast and really good quality. I add rtx upscaler and frame interpolation. That is great.
But ... I only can have the voice consistancy for the first shot. Even if i write in the prompt or in the global contex for the second shot " subject 1 has the same voice as voice 1 ", it failed and the subject speaks with another voice. Would you have an idea please to make lip2sync with voice 1 in all the shots ? Thanks
@sdktertiaire2 thanks for that catch, i must have missed it during the update - new zip is on civit, or can update from github as well : set voice_every_hop to speaking, keep their voice clip in MEDIA slot 1.
@sandpies thanks.