Easy MiniMax H3 Motion Context Hard
Hard AV latent continuity, with a release ramp
- conditioning
- vae
- latent
- context_latent
- conditioning
- trim_frames
- latent
The core trick of the Easy-Media MultiTrack pipeline is that one segment continues the previous one - motion and sound carry over instead of starting a fresh, disconnected clip. easy MiniMaxH3MotionContextHard is the node that does that continuity, and you can use it outside the project pipeline in your own hand-built H3 graphs. Its job: take the previous clip's audio/video tail, copy it into the start of the current sampling seed, and lock it there so the new clip literally begins where the old one ended.
Why "hard" and why it's fiddly
Context continuity for H3 comes from ComfyUI-H3-Motion-Context - that's the "Motion Context 0.4" in the description, and Easy-Media adapted it. The "hard" part is that this node keeps the native H3 video/audio keyframes from that context system (the conditioning metadata that tells the model "these first frames are given") and additionally pastes the previous tail into the latent with a noise_mask.
The noise mask is the interesting bit. If you just overwrite the start of the latent, you get a hard seam - the model has to invent a transition with zero information. This node writes the copied prefix as locked (mask = 0, fully preserved) for most of the tail, then releases it over a short ramp during which the noise is allowed to fade in. So the join looks like: fixed continuation → a few frames of blend → new generation. The video and audio release ramps are independent (video_transition_steps vs audio_transition_steps), because the two streams don't have to ease back at the same rate to look natural.
There's a hard compatibility floor here, and the source checks it at runtime: it needs Motion Context 0.4.0+ native video/audio keyframes and ComfyUI 0.34.0+ (that's the version where native H3 AV keyframe support landed). If your ComfyUI is older, you'll get a RuntimeError explaining exactly that - not a silent degradation.
The inputs that matter
conditioning- the current segment's conditioning, which this node augments with the native keyframes.vae- for the context decoding work.latent- the current segment's starting AV latent (the seed you're about to sample).context_latent- the previous segment's saved AV latent, from which the tail is copied.context_length- how many frames of the previous clip to copy (default22; options5,22,39,56). 22 is the pipeline default and a good starting point.video_transition_steps(default 4) andaudio_transition_steps(default 4) - the release-ramp lengths in denoise steps. Higher = softer, more gradual blend;0= pure hard lock with no ramp. If your joins show an ugly pop, bump these; if the continuation feels mushy, drop them.
Outputs: conditioning (augmented, feeds your sampler's guider), latent (the seeded latent), and trim_frames - an INT telling you how many frames the context prefix occupies, which you use to trim the decoded result back to your intended duration. That output is easy to ignore and you shouldn't: if you don't trim, every "continued" clip is your target length plus the context prefix.
Installation
Same pack, same install:
# FFmpeg first (the README's hard requirement)
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Media
Restart ComfyUI or install via Manager (search "ComfyUI-Easy-Media"). You also want a ComfyUI at 0.34.0+ and, if you're not using the project pipeline, the upstream H3-Motion-Context pack for the full context workflow. The H3 model itself is the usual large download.
Troubleshooting
- "requires Motion Context 0.4.0+ native video/audio keyframes and ComfyUI 0.34.0+" - the version guard fired. Update ComfyUI; check that your conditioning actually carries the native keyframes (it won't if the context was built by an older node).
- Jumps or pops at the join - the ramp is too short (or zero). Raise
video_transition_steps/audio_transition_steps. - Continuation looks mushy or drifts - the context length may be too long for the scene, or the scene genuinely changed (the README is upfront that Context doesn't guarantee seamless continuity across arbitrary scene/prompt changes). This is the "Context is not a crossfade" trap - continuity mode affects generation, not assembly.
- Segment comes out too long - you're not trimming by
trim_frames. That's what the output is for.
If all you want is a single pair of connected clips, this node is the quickest route in the pack. If you're doing a whole timeline, let easy multitrackProject drive it - it wires exactly this logic in automatically, including the trimming you'd otherwise do by hand.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| vae | VAE | — | |
| latent | LATENT | — | |
| context_latent | LATENT | — | |
| context_length | COMBO | 22 | Previous-clip video context length in frames. |
| video_transition_steps | INT | 40–32 | Video denoise-release steps inside the copied prefix. |
| audio_transition_steps | INT | 40–80 | Audio denoise-release steps inside the copied prefix. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |
| trim_frames | INT | — |
| latent | LATENT | — |