MiniMax H3 Foley Target (Plan v2)
H3 foley without a reference stream
- h3_plan
- video_frames
- h3_plan
- h3_video
- foley_preview
Foley is the film-industry word for the sound that matches on-screen action - footsteps on tile, a glass set down on wood. H3 can do this: you hand it a silent video and it generates a synchronized audio track. But there's a subtle trap in how you present the source. If you register the video as a normal H3 Video Reference, the model treats it as reference media and costs you an expensive Ref2VA stream. Foley Target (Plan v2) exists to prevent exactly that: it carries the source frames as target media, not as a reference, so the picture track becomes the preserved sampler latent instead of a conditioning input.
The mechanism is clean and it's worth understanding because it explains everything the node does. Apply Reference Plan later VAE-encodes this picture track, keeps it with video mask 0 (preserve), and generates the audio stream with audio mask 1 (generate). The source pixels are locked; only the sound is produced. It's the same per-token masking trick the pack uses for AV latents, applied to a whole video.
Inputs that matter
video_frames- the decoded source-video frames. The tooltip is emphatic: connect this batch only here, not to Video Reference. That's the whole point - the frames become the preserved latent rather than expensive conditioning.source_fps- the real frame rate of your batch. A loader forced to 24 FPS should use 24 here. Wrong FPS = wrong timing on the generated audio.h3_plan- from Project Setup, and the Project duration must match the source video's real duration. The compiler validates this alignment.
Outputs
h3_plan- continue to optional references, Shots, then Prompt Merge.h3_video- the picture track resampled to 24 FPS and padded to the exact H3 target grid.foley_preview- source timing, native frame preparation, mask semantics, and prompting guidance.
The Foley timeline
The pack's Foley doc has a clear pattern: create one Shot per real source cut, and write visible timing anchor → audible result in chronological order. Ambience goes in overall_soundscape; discrete events go inside the Shot where they occur; non_diegetic_music should be N/A unless you want an audience-only score. No visual/camera requests - the picture track is latent-locked.
Install and prerequisites
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-MiniMax-H3-Guide
No extra Python dependencies. But Foley specifically requires MiniMax H3 per-token mask support - ComfyUI PR #15375 or an equivalent compatibility patch. If your ComfyUI build doesn't have it, the node won't produce the locked-video/generated-audio latent it's supposed to. Check that before debugging anything else.
Gotchas
- Picture changes = you connected it twice. The #1 Foley failure per the pack's own troubleshooting table: if the video is also connected to a Video Reference, it leaks into conditioning and the "locked" picture moves. One connection, Foley Target only.
- Audio is noisy or muted. The doc suggests testing deterministic/ODE sampling or
eta=0. - Events drift after cuts. That means you didn't make one Shot per real source cut. The audio event timing is tied to the shot structure.
- The source audio "disappears." That's expected - Foley regenerates the complete audio stream. If you wanted to keep part of the original soundtrack, you need the separate audio-time mask workflow, not Foley mode.
This is one of the pack's genuinely original-feeling nodes, and it's a good reason to care about the project even if Plan v2's verbosity isn't your thing: locking the picture and generating synchronized sound is a clean, useful trick that hand-written H3 prompting gets wrong constantly.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| h3_plan | MINIMAX_H3_PLAN_V2 | Connect Project Setup before adding references or Shots. The Project duration must match the source video's real duration. | |
| video_frames | IMAGE | Decoded source-video frames. Connect this batch only here, not to Video Reference: the picture track becomes the preserved sampler latent rather than expensive Ref2VA conditioning. | |
| source_fps | FLOAT | 24.000.01–240 | Frame rate represented by video_frames. A loader forced to 24 FPS should use 24 here. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| h3_plan | MINIMAX_H3_PLAN_V2 | Continue to optional reference nodes, Shots, then Prompt Merge. |
| h3_video | IMAGE | The source picture track resampled to 24 FPS and padded to the exact H3 target grid. |
| foley_preview | STRING | Source timing, native frame preparation, mask semantics, and prompting guidance. |