Nodes/ComfyUI-MotionCtrl/Load Motionctrl Checkpoint
ComfyUI Node

Load Motionctrl Checkpoint

Where MotionCtrl's weights actually load

By chaojie·Created 3 years ago·Updated 2 years ago· 142
Load Motionctrl Checkpoint
    • model
    • clip
    • vae
    • ddim_sampler
    ckpt_namemotionctrl.pth
    frame_length16

    If you're getting "checkpoint not found" or a red node, this is the one to blame. Load Motionctrl Checkpoint is the entry point of the whole ComfyUI-MotionCtrl pack: it loads the MotionCtrl model into memory and hands you the four objects every real workflow needs. Nothing else in the pack can run until it does. Think of it as the CheckpointLoaderSimple of this pack, except the "checkpoint" is Tencent ARC's MotionCtrl - a late-2023 research model for controlling camera and object motion in generated video - running on the old LVDM/VideoCrafter stack, and it will absolutely eat your VRAM while it loads.

    How it works

    Under the hood it reads the pack's configs/inference/config_both.yaml, sets the model's temporal_length from the frame_length you give it, builds the UNet, then loads the weights from your ComfyUI/models/checkpoints folder. That frame_length value isn't cosmetic - it decides how many frames the model will generate, which at the pack's fixed 10 fps output means 16 frames is about 1.6 seconds of video. You can push it higher, but memory and coherence get dicey fast. This model is from the era before Wan and Hunyuan made 256×256 feel like a punchline; set expectations accordingly and use it for what it's good at - controllable motion, not cinematic resolution.

    The inputs that matter

    There are only two, and you'll mostly touch one:

    • ckpt_name - a dropdown of whatever's in your models/checkpoints folder. Defaults to motionctrl.pth, which is exactly what you want it to be.
    • frame_length - default 16. The number of frames the model generates.

    The four outputs

    • model (MOTIONCTRL) - wire this into both Motionctrl Cond and Motionctrl Sample Simple
    • clip (EMBEDDER), vae (VAE), ddim_sampler (SAMPLER) - all three go straight into Motionctrl Sample Simple

    The bundled base workflow is literally: loader → Cond → Sample Simple, with two preset nodes feeding camera and trajectory strings into Cond.

    Installing it (the part that actually bites)

    ComfyUI Manager is the easy route - search "ComfyUI-MotionCtrl" and hit install. Manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/chaojie/ComfyUI-MotionCtrl
    cd ComfyUI-MotionCtrl
    pip install -r requirements.txt
    

    Then the step everyone forgets: download motionctrl.pth and drop it in ComfyUI/models/checkpoints, then restart ComfyUI.

    Common issues

    The most common failure is the checkpoint itself: the file has to be named motionctrl.pth (or whatever you select) and sit in models/checkpoints, not in the pack folder. The loader asserts the path exists and dies with a clear "checkpoint Not Found!" if it doesn't.

    The second gotcha is dependency hell, and it's real here. This pack pins old, opinionated versions - pytorch-lightning==1.9.0, opencv-python==4.8.0.74, gradio==3.37.0 - into the same Python environment as the rest of your nodes. In a modern ComfyUI that can break other packs or break this one, depending on install order. If things import-fail after installing, that's your culprit, not the model.

    And one honest warning: the loader calls .cuda() unconditionally. No GPU, no run - this pack is CUDA-only, no CPU fallback.

    Categorymotionctrl

    Inputs (2)

    NameTypeDefaultDescription
    ckpt_nameCOMBOmotionctrl.pth0 options:
    frame_lengthINT16

    Outputs (4)

    NameTypeDescription
    modelMOTIONCTRL
    clipEMBEDDER
    vaeVAE
    ddim_samplerSAMPLER