MiniMax H3 · R42 / Continuous AV / Guided Loop Lazy Router
Four H3 continuity engines on one graph, only one of them ever runs
- cine_linx
- r42_frames
- r42_audio
- r42_bridge
- r42_latent
- continuous_frames
- continuous_audio
- continuous_bridge
- continuous_latent
- guided_frames
- guided_audio
- guided_bridge
- guided_latent
- latentgoahead_frames
- latentgoahead_audio
- latentgoahead_bridge
- latentgoahead_latent
- frames
- audio
- bridge
- sampled_latent
- fps
- report
- current_segment
- total_segments
- trim_head_frames
Four different continuity strategies live in this pack for long H3 video, and they do not want to share a graph. Each one proposes its own handover of the previous take, and running two of them in one execution is how you get two renders of the same shots and a delivery with duplicated frames in it.
The usual solution is a group mute. The better solution is this node. IAMCCS_MiniMaxH3ContinuousBackendLazyRouterR42 is a selector that reads which task mode the Shotboard plan is actually set to and asks ComfyUI to evaluate only that branch - the other three never execute, because their input sockets are lazy and check_lazy_status never asks for them.
Wiring
You feed all four candidate backends into their own prefixed sockets. Each prefix takes the same six things the continuity backends return:
r42_frames,r42_audio,r42_bridge,r42_latent,r42_fps,r42_reportcontinuous_*- the FL2VA Continuous AV chainguided_*- the experimental one-master-latent Guided AV Looplatentgoahead_*- LatentGoAhead- plus
r42_current_segment,r42_total_segments,r42_trim_head_frames
The router returns frames, audio, bridge, sampled_latent, fps, report, and that same trio of segment counters. So downstream nodes - a preview strip, an exporter, a save - see a single stable set of sockets no matter which engine ran.
How it picks
It resolves the shot plan and reads two fields: task_mode and requested_task_mode. The mapping:
latent_go_ahead→ the LatentGoAhead branchguided_av_loop_experimental(or the legacylongvid_guided_av_loop_experimental) → the guided branchlongvid_masked_loop_guided,masked_loop_guided,long_masked_loop_guided→ the continuous branch- anything else → the established R42 standard / Motion Context path
The log line names the engine it chose, which is the first thing to check when a run used the wrong strategy.
Here's the subtle part. For the three non-R42 branches, the router returns current_segment = 0, total_segments = 1, trim_head_frames = 0 - regardless of what those branches reported internally. That's not a bug, it's the contract: Continuous AV, Guided AV Loop and LatentGoAhead each render their entire authored programme inside one outer execution, so their technical windows are internal. If the router passed their real segment counts through, R42's queue-next machinery would arm and start enqueueing segments for a programme that is already being rendered whole. You'd get a duplicate film.
When a branch is missing
You get a named list rather than a mystery:
R42 continuity lazy branch is incomplete: guided_frames, guided_audio, ...
That's the router telling you the selected mode expects a backend that isn't wired. Easy fix, and worth reading literally - it's usually that you enabled a new task mode in H3 Settings and didn't connect the corresponding node.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Manager search IAMCCS also works; restart after. The router itself has no external dependencies and no models - everything heavy belongs to whichever backend it selects, and you only pay for the one that runs. That is the whole reason this pattern exists rather than four parallel branches with a switch node: with an ordinary switch, ComfyUI evaluates every connected upstream node before the switch decides anything.
The other thing to internalise: because each backend plugs into its own prefix, you can wire all four once and then change strategy from the settings panel for the rest of the project. No rewiring, no group-muting, no accidentally leaving two engines armed.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| cine_linx | IAMCCS_SUPERNODE_LINX | — | |
| r42_framesopt | IMAGE | — | |
| r42_audioopt | AUDIO | — | |
| r42_bridgeopt | IMAGE | — | |
| r42_latentopt | LATENT | — | |
| r42_fpsopt | INT | — | |
| r42_reportopt | STRING | — | |
| continuous_framesopt | IMAGE | — | |
| continuous_audioopt | AUDIO | — | |
| continuous_bridgeopt | IMAGE | — | |
| continuous_latentopt | LATENT | — | |
| continuous_fpsopt | INT | — | |
| continuous_reportopt | STRING | — | |
| guided_framesopt | IMAGE | — | |
| guided_audioopt | AUDIO | — | |
| guided_bridgeopt | IMAGE | — | |
| guided_latentopt | LATENT | — | |
| guided_fpsopt | INT | — | |
| guided_reportopt | STRING | — | |
| latentgoahead_framesopt | IMAGE | — | |
| latentgoahead_audioopt | AUDIO | — | |
| latentgoahead_bridgeopt | IMAGE | — | |
| latentgoahead_latentopt | LATENT | — | |
| latentgoahead_fpsopt | INT | — | |
| latentgoahead_reportopt | STRING | — | |
| r42_current_segmentopt | INT | — | |
| r42_total_segmentsopt | INT | — | |
| r42_trim_head_framesopt | INT | — |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |
| audio | AUDIO | — |
| bridge | IMAGE | — |
| sampled_latent | LATENT | — |
| fps | INT | — |
| report | STRING | — |
| current_segment | INT | — |
| total_segments | INT | — |
| trim_head_frames | INT | — |