Nodes/ComfyUI/WanCameraEmbedding
ComfyUI Node Runs on cloud

WanCameraEmbedding

Give a Wan video an actual camera move

By Comfy-Org·Created 4 years ago·Updated 4 minutes ago· 129,910
WanCameraEmbedding
    • camera_embedding
    • width
    • height
    • length
    camera_poseStatic
    width832
    height480
    length81
    speed1.0
    fx1
    fy1
    cx0.50
    cy0.50

    Wan's camera control lets you tell the model "pan left" instead of hoping it drifts that way on its own, and WanCameraEmbedding is the node that turns that sentence into the embedding the sampler understands. It landed in core in May 2025 alongside the Wan-FUN camera-control models, and it's the difference between a video that happens to move and one with a deliberate shot.

    What you actually set

    • camera_pose - the dropdown that matters. Static, Pan Up/Down/Left/Right, Zoom In/Out, and Clockwise/Anti-Clockwise. Static is the default, which is also a way to lock the camera - useful when you want the subject moving and the camera holding still.
    • width / height / length - video size and frame count. Keep these matching the latent/image nodes elsewhere in your graph; the embedding is sized to them.
    • speed - how fast the move happens, 0 to 10. Zero makes a "move" a non-move, which is a neat way to test whether the camera is what's causing an artifact.
    • fx, fy, cx, cy - camera intrinsics (focal length and principal point), hidden behind the advanced flag for good reason. Leave them alone until you're chasing a specific perspective effect.

    How it works

    The mechanism is where this gets satisfying. The node takes your chosen motion, generates a camera trajectory as a sequence of extrinsic poses (rotation + translation per frame), and converts those into Plücker embeddings - the line-geometry representation of camera rays. The source even credits the approach to the VideoX-Fun project. The result is a per-frame description of where the camera is and where it's looking, which the Wan-FUN camera-control model consumes during sampling.

    The outputs

    • camera_embedding - the WAN_CAMERA_EMBEDDING itself. This is what you feed into the Wan nodes that accept camera control (the camera-image-to-video chain, WanCameraImageToVideo, and friends).
    • width / height / length - pass-throughs of what you set. Handy for keeping downstream resolution honest without separate value nodes.

    The gotchas

    The embedding only does something when the model on the other end was trained for camera control - feeding it to a vanilla Wan 2.2 checkpoint just adds noise the model ignores. Use the FUN camera variant, and keep length in lockstep with the actual generation length; a mismatch gives you a camera that finishes its move halfway through the clip. And worth repeating: this controls the camera, not the subject. If your subject won't move, that's a different conditioning problem - this node isn't it.

    It ships with core, no install. For a beginner the honest advice is: pick a move, set length to match your video, leave intrinsics alone, and iterate on speed before touching anything else.

    Categorymodel/conditioning/wan/camera

    Inputs (9)

    NameTypeDefaultDescription
    camera_poseCOMBOStatic9 options: Static, Pan Up, Pan Down, Pan Left, Pan Right, Zoom In, +3
    widthINT83216–16384
    heightINT48016–16384
    lengthINT811–16384
    speedoptFLOAT1.00–10
    fxoptFLOAT10–1
    fyoptFLOAT10–1
    cxoptFLOAT0.500–1
    cyoptFLOAT0.500–1

    Outputs (4)

    NameTypeDescription
    camera_embeddingWAN_CAMERA_EMBEDDING
    widthINT
    heightINT
    lengthINT