MiniMax H3 LongMedia Cameras
Tell MiniMax H3 how to move the camera without the camera ending up in the shot
- clip_plan
- clip_plan
- camera_plan
- clip_count
- report
You know the failure. You write a nice long scene prompt, throw in "slow push-in, dolly track," and the video model delivers the push-in and the camera - a rig, a tripod, sometimes a whole operator walking backwards into frame. MiniMax H3 is great at this because it's so literal. Long Media Cameras exists to fix exactly that.
It's part of the ComfyUI-MiniMax-H3-LongMedia pack's MultiClip chain: the Long Media Planner owns what happens in each scene, the Cameras node owns how it's shot, and Long Media Setup runs the whole thing. Long scenes get split into per-clip prompts with stable ids, and this node glues a camera card to each of those clips so your framing survives storyboard edits instead of resetting every run.
How it actually works
Each clip gets a camera card with the fields you'd expect from a real shoot: shot size, rig/support, camera body, lens, stabilization, movement, speed, transition type, space relation, and entity continuity. Here's the clever part, and it's the reason this node beats just writing camera words in your prompt: it never lets the model see the physical equipment.
When the workflow runs, the node compiles each card into "non-diegetic" language. "Drone · DJI Mavic 3 Cine" becomes "a compact aerial viewpoint with smooth controlled flight"; "ARRI Alexa 35" becomes a description of tonality and dynamic range, not a brand. Camera words like pan, orbit, close-up, and dolly get stripped out of the Planner's prompts and re-emitted as viewpoint descriptions. The model follows your direction, but has no equipment noun left to draw into the shot.
The inputs and outputs that matter
Ignore the giant JSON widget on the node. The cameras_json and sync_request inputs are serialized card state that the node's own JavaScript frontend edits for you - you don't hand-edit them unless you enjoy pain.
The one real toggle is auto_sync_planner (on by default, and keep it on). With a Planner connected, it creates one camera card per clip and pins each card to the clip's stable id, so reordering clips moves your camera settings with them. It also flips off "transition to next" on the final card automatically - otherwise the last clip would try to transition somewhere that doesn't exist.
Connect it as the README recommends:
Long Media Planner → clip_plan → Long Media Cameras → clip_plan → Long Media Setup
Then set timeline_mode = multiclip on Setup. Outputs:
- clip_plan - the pass-through you feed into Setup. Camera instructions compiled in per clip, camera-speak scrubbed from your prompts.
- camera_plan - the full camera-side plan. Only dig in here if you're debugging.
- clip_count - an INT, mostly for sanity checks.
- report - JSON console detail; you'll rarely read it.
The frontend also ships sequence presets (Continuous Push-In, Ritual Orbit, Reveal Pull-Back, and a few more) that fill every card at once, and each card stays editable after. It works standalone too, if you just want two camera-directed clips without a Planner.
Installing it
Install via ComfyUI Manager (search "MiniMax H3 LongMedia"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/vizart-vj/ComfyUI-MiniMax-H3-LongMedia
Restart ComfyUI. No extra pip dependencies. One honest caveat: this pack ships no weights - it orchestrates. You still need the actual MiniMax H3 model files loaded through Comfy's normal loaders, plus the Setup/Sampler/Decode siblings from this same pack. And if you're in the US, EU, UK, or South Korea, remember the H3 weights themselves are geofenced out by the MiniMax H3 Community License - the node runs fine, the model underneath may not be legal for you to run locally.
Common issues
- Nothing changes in Setup when you connect the chain. Check that Setup's timeline mode is
multiclip- single and segmented timelines ignore a connected Planner and Cameras entirely. - Cards don't match your clips after an edit.
auto_sync_plannergot switched off, or you're feeding Setup the Planner's output instead of Cameras' output. Take Setup'sclip_planinput from this node. - Your camera words vanished from your prompts. That's the feature, not a bug - the sanitizer strips them and recompiles them as viewpoint language. Trust the card UI.
- A clip is missing a card. Card count is clamped between 2 and 16; beyond that the node stops adding.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| auto_sync_planner | BOOLEAN | true | When Planner is connected, keep camera cards synchronized to its clip count. |
| cameras_json | STRING | [{"clip_id": "", "clip_name": "", "shot_size": "Medium Shot", "rig": "Tripod / Locked Head", "camera_body": "Cinematic Neutral", "lens": "Auto / Native Lens", "stabilization": "Rig Native", "movement": "Locked-Off / Static", "speed": "Static", "transition_type": "Continuous / Same Shot", "space_relation": "Same Space", "entity_continuity": "Lock Population / Layout", "transition_to_next": false}, {"clip_id": "", "clip_name": "", "shot_size": "Medium Shot", "rig": "Tripod / Locked Head", "camera_body": "Cinematic Neutral", "lens": "Auto / Native Lens", "stabilization": "Rig Native", "movement": "Locked-Off / Static", "speed": "Static", "transition_type": "Continuous / Same Shot", "space_relation": "Same Space", "entity_continuity": "Lock Population / Layout", "transition_to_next": false}] | Internal serialized camera-card state. |
| sync_request | BOOLEAN | false | Internal one-shot Planner sync request. |
| clip_planopt | H3_LONGMEDIA_CLIP_PLAN | Optional LongMedia Planner output. Connect Planner -> Cameras -> Setup. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| clip_plan | H3_LONGMEDIA_CLIP_PLAN | — |
| camera_plan | H3_LONGMEDIA_CAMERA_PLAN | — |
| clip_count | INT | — |
| report | STRING | — |