Nodes/NVIDIA CMD for ComfyUI/NVIDIA CMD Camera Control
ComfyUI Node

NVIDIA CMD Camera Control

The little node that gives your CMD clips a real camera move

By hiroki-abe-58·Created 27 days ago·Updated 26 days ago· 0
NVIDIA CMD Camera Control
    • camera
    camera_npz

    NVIDIACMDCameraControl is a tiny loader node with one job: turn a camera-trajectory file into a CMD_CAMERA value you plug into NVIDIACMDImageToVideo's optional camera input. Without it, CMD just rolls forward from your image and the camera stays locked. With it, you get an actual dolly, orbit, or pan baked into the clip - the same camera conditioning the official nv-tlabs/cmd repo uses, exposed as a ComfyUI node.

    It's worth being clear about the shape of the work here: this node doesn't generate anything. It validates a file and passes a path through. The real conditioning happens inside the generation node, using the checkpoint you loaded. All this node does is make that possible in the graph.

    How it works

    You give it one input - camera_npz, a plain STRING that's the path (or just the filename) of a .npz file. The node searches the current working directory, the pack's own examples/ folder, and ComfyUI's input directory until it finds it. Then it loads the archive and insists it contains two keys, target_w2c and target_intrinsics, matching what official nv-tlabs/cmd's inference.py expects. Wrong keys and you get a clear ValueError, not a mystery crash. The output is a single camera value of type CMD_CAMERA, which the generation node reads to get the trajectory path.

    A few details that matter once you start making your own files:

    • The NPZ has to carry enough frames for the whole clip - the code computes 1 + (latent_frames - 1) * 4 pixel frames and refuses if you're short. A 32-latent camera clip wants 125 frames of poses.
    • The trajectory is world-to-camera (w2c) plus intrinsics. The camera node validates them; the pipeline inverts to camera-to-world internally.
    • To sanity-check your setup, use the bundled examples/identity_camera.npz - a no-movement camera, so you can confirm the plumbing works before you hand-craft a move.

    The input that matters

    Just camera_npz. Drop a filename in, wire the output to a generation node, done. There are no other knobs.

    The one thing that trips people up

    You must pair this with a camera checkpoint. The loader only enables camera conditioning when you pick chunk1_camera (or chunk4_camera). If you load chunk1_short and wire in a camera anyway, you get... nothing - no error, just a clip that ignores the trajectory, because the model was built without the camera head. The confusion is that the node accepts the connection either way. Load the camera checkpoint and it works; load anything else and it silently does nothing.

    Install

    No extra install beyond the pack: same git clone into custom_nodes, pip install -r requirements.txt, and clone of nv-tlabs/cmd into third_party\cmd. You do need the camera weights on disk - chunk1_camera_control_t32_l21.safetensors under <ComfyUI>/models/nvidia_cmd/transformer/ - which, like everything else in this pack, you download by hand (no auto-fetch). To make your own trajectories there's a scripts/make_identity_camera.py in the repo to crib from.

    And the standing reminder: CMD weights are NVIDIA OneWay Noncommercial - research and education only. Camera control doesn't change that.

    CategoryNVIDIA/CMD

    Inputs (1)

    NameTypeDefaultDescription
    camera_npzSTRING

    Outputs (1)

    NameTypeDescription
    cameraCMD_CAMERA