H3 Motion Recovery · Bind External Prompt Relay (T8 EXP)
Pairing Prompt Relay with a retimed second pass — without fooling yourself
- model
- relay_positive
- relay_av_latent
- relay_plan
- motion_plan
- stage_av_latent
- stage_context
- model
- positive
- report_json
The problem this solves
Motion Recovery changes the timeline on purpose. Pass one produces a world length; pass two works on an expanded length, because frames are held and duplicated to give the repair room to breathe. That means the frame count you write prompts against in pass two is not the frame count of the finished clip, and it isn't the frame count of pass one either.
Prompt Relay - the pack's mechanism for attaching prompt events to specific time ranges - needs the real timeline number, or your "he leans in at 2 seconds" event lands somewhere else or gets rejected.
This node does two things at once:
- Pairs the stock external Relay MODEL and CONDITIONING with the signed retimed pass-two AV, so the Relay's time bias is built against the actual packed layout it will run on.
- Authenticates that layout. It takes the Relay's generated AV latent only to check that the packed layout matches - never to replace the Motion route's own VAE / phase-vocoder audio source. That's spelled out in the node's own description, and it's the distinction that stops a plausible-looking graph from silently swapping your audio pipeline.
Inputs
model- the Relay-patched MODEL for this stage.relay_positive- the conditioning produced by the stock Relay Conditioning node.relay_av_latent- the AV latent the Relay produced, used purely as an authentication reference.relay_plan- the Relay plan (seeMiniMaxH3MotionRelayLengthEXPT8for getting its frame count right).motion_plan- the signed Motion Recovery plan.stage_av_latent- the actual pass-two AV latent being sampled.stage_context- the stage context emitted by the Motion pass-two binding node.
Outputs: model and positive (both patched/bound for this stage), plus report_json.
The checks are not decorative. It verifies the Relay plan's frame count equals the retimed expanded length, that the Relay plan's task is t2va, that the conditioning's layout contract matches, and that the stage context actually binds this retimed AV. Get any of those wrong and it raises instead of quietly applying a time bias to the wrong timeline.
Order of operations
Motion plan → Retimed Relay Length → Relay Plan frame count
Relay Plan → Relay Conditioning → this Bind → BasicGuider → sampler
If you also want the Enhance-A-Video style attention effect on this stage, the node description points you at the usual triple - Stage EAV Config → Apply → Audit - wired separately, so the effect's real calls can be observed rather than assumed from the config being present.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Manager: search MiniMax H3 Audio T8, install, then fully exit ComfyUI, restart, and refresh the page. Registry publication and GitHub releases are separate - clone if Manager trails. If nodes are red, update ComfyUI core, the frontend and Manager together; updating only the pack often isn't enough on this one.
Models and files: H3 transformer in models/diffusion_models, Qwen3-VL text encoder in models/text_encoders, H3 video and audio VAEs in models/vae. The pack installs no Python packages by design (requirements.txt exists to say exactly that), and contains no weights. Begin from the examples/workflows/57-motion-recovery-split Relay graphs - there are full-save, cold-second and freeze-first variants, and editing a working one beats assembling this chain by hand.
Common issues
"Motion Relay timeline differs from retimed frame count." Your Relay plan was built for the finished clip length, or for pass one's length. Feed the plan's frame count from the pack's Motion Relay Length node, which reads the signed plan.
"Motion Relay MODEL belongs to another timeline or task." The Relay conditioning was built for a different plan hash or for a non-T2VA task. Rebuild it against this stage's plan.
"StageContext does not bind this retimed source." You're pointing at a different pass-two AV latent than the one the stage context was created for - common when you reload a frozen first pass and forget to rebind.
Audio sounds processed in a way you didn't ask for. Check whether you accidentally fed the Relay's AV latent somewhere it isn't just an authentication input. In this chain, the Motion route owns the audio source.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| relay_positive | CONDITIONING | — | |
| relay_av_latent | LATENT | — | |
| relay_plan | H3_T8_PROMPT_RELAY_PLAN | — | |
| motion_plan | H3_T8_MOTION_RECOVERY_PLAN | — | |
| stage_av_latent | LATENT | — | |
| stage_context | T8_STAGE_CONTEXT | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| report_json | STRING | — |