Nodes/MiniMax H3 LongMedia/MiniMax H3 LongMedia Cameras
ComfyUI Node

MiniMax H3 LongMedia Cameras

Tell MiniMax H3 how to move the camera without the camera ending up in the shot

By vizart-vj·Created about a month ago·Updated 11 days ago· 234
MiniMax H3 LongMedia Cameras
  • clip_plan
  • clip_plan
  • camera_plan
  • clip_count
  • report
auto_sync_plannertrue
cameras_json[{"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}]
sync_requestfalse

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_planner got switched off, or you're feeding Setup the Planner's output instead of Cameras' output. Take Setup's clip_plan input 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.
CategoryMiniMax H3/LongMedia/LongMedia

Inputs (4)

NameTypeDefaultDescription
auto_sync_plannerBOOLEANtrueWhen Planner is connected, keep camera cards synchronized to its clip count.
cameras_jsonSTRING[{"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_requestBOOLEANfalseInternal one-shot Planner sync request.
clip_planoptH3_LONGMEDIA_CLIP_PLANOptional LongMedia Planner output. Connect Planner -> Cameras -> Setup.

Outputs (4)

NameTypeDescription
clip_planH3_LONGMEDIA_CLIP_PLAN
camera_planH3_LONGMEDIA_CAMERA_PLAN
clip_countINT
reportSTRING