WanCameraEmbedding
Give a Wan video an actual camera move
- camera_embedding
- width
- height
- length
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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| camera_pose | COMBO | Static | 9 options: Static, Pan Up, Pan Down, Pan Left, Pan Right, Zoom In, +3 |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 811–16384 | — |
| speedopt | FLOAT | 1.00–10 | — |
| fxopt | FLOAT | 10–1 | — |
| fyopt | FLOAT | 10–1 | — |
| cxopt | FLOAT | 0.500–1 | — |
| cyopt | FLOAT | 0.500–1 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| camera_embedding | WAN_CAMERA_EMBEDDING | — |
| width | INT | — |
| height | INT | — |
| length | INT | — |