Nodes/ComfyUI-MotionCtrl/Motionctrl Sample
ComfyUI Node

Motionctrl Sample

Everything in one node, and it shows

By chaojie·Created 3 years ago·Updated 2 years ago· 142
Motionctrl Sample
    • IMAGE
    prompta rose swaying in the wind
    camera[[1,0,0,0,0,1,0,0,0,0,1,0.2]]
    traj[[117, 102]]
    frame_length16
    steps50
    seed1234
    traj_toolhttps://chaojie.github.io/ComfyUI-MotionCtrl/tools/draw.html
    draw_traj_dotfalse
    draw_camera_dotfalse
    ckpt_namemotionctrl.pth

    If Motionctrl Sample Simple is the composed, professional version, this is the "just give me a video" button. Motionctrl Sample bundles the entire pipeline - model loading, conditioning, sampling, VAE decode - into a single node with a prompt, a camera string, a trajectory string, and a seed on the front. Drop one in, paste a prompt, hit queue, and you get a clip. It's the fastest possible way to find out whether this pack is worth your time, and I'd argue it's the right first node to try.

    But "everything in one node" has a price, and you should know it before you build a whole workflow around it.

    How it works

    It does exactly what the loader + Cond + Simple sampler do together, internally: it loads motionctrl.pth from your checkpoints, sets the frame length, encodes your prompt, converts the camera string to pose matrices and the trajectory to flow features, runs DDIM at CFG 7.5, decodes the latents, and hands you an IMAGE tensor of the whole clip. Same machinery, no exposed seams.

    The inputs that matter

    The required ones are: prompt, camera, traj, frame_length (default 16), steps (default 50), and seed (default 1234). Paste a camera or trajectory string from the preset nodes and you're basically done - that's the whole appeal.

    The optional ones:

    • ckpt_name - defaults to motionctrl.pth; only touch it if you keep multiple MotionCtrl weights.
    • traj_tool - again just a link to the trajectory drawing tool, not a setting.
    • draw_traj_dot / draw_camera_dot - the same debug overlays as the Simple sampler.

    Why you'd reach for Simple instead

    Three real limitations, all baked into how this node is built:

    1. It reloads the model every single run. Every queue click is a full checkpoint load before sampling starts. Iterating on a prompt becomes a waiting game. Motionctrl Sample Simple loads once and lets you iterate cheaply.
    2. It's always "control both" mode. The code hardcodes camera and trajectory conditioning. If you want to isolate camera-only or trajectory-only to debug what's breaking, you can't here - that's Motionctrl Cond's infer_mode job.
    3. No context_overlap. The Simple path can chain runs past the model's native frame count with a sliding window; this node can't. 16 frames (about 1.6 seconds) is your ceiling.

    So the honest workflow advice: use this node once to confirm the pack works on your machine, then rebuild the same graph as Loader → Cond → Sample Simple before you actually try to make something. The bundled base workflow does exactly that, and it's the file you want to start from rather than hand-wiring it.

    Common issues

    The same "checkpoint not found" failure as the loader - the file must be named and placed in models/checkpoints. Malformed camera/traj JSON will error at parse time rather than giving you a video, so when in doubt, feed it the preset nodes' output rather than hand-typed JSON. And keep in mind that because every run reloads the model, the first generation after any change will feel disproportionately slow - that's structural, not a hang.

    Categorymotionctrl

    Inputs (10)

    NameTypeDefaultDescription
    promptSTRINGa rose swaying in the wind
    cameraSTRING[[1,0,0,0,0,1,0,0,0,0,1,0.2]]
    trajSTRING[[117, 102]]
    frame_lengthINT16
    stepsINT50
    seedINT1234
    traj_tooloptSTRINGhttps://chaojie.github.io/ComfyUI-MotionCtrl/tools/draw.html
    draw_traj_dotoptBOOLEANfalse
    draw_camera_dotoptBOOLEANfalse
    ckpt_nameoptCOMBOmotionctrl.pth0 options:

    Outputs (1)

    NameTypeDescription
    IMAGEIMAGE