CameraTrajectoryFromChaoJie
The node that turns a camera pose into the trajectory text EasyAnimate actually reads
- camera_pose
- camera_trajectory
- video_length
Here's the thing about the pack's camera nodes: the sampler doesn't eat CameraPose objects. It eats a string. CameraTrajectoryFromChaoJie is the adapter that makes the two meet - it takes a CameraPose and serializes it into the JSON trajectory text that EasyAnimateV5_V2VSampler's camera_conditions input expects. Every camera workflow in this pack funnels through this node, so it's worth understanding even though you'll never touch its defaults.
It's the fourth of the nodes copied from chaojie/ComfyUI-CameraCtrl-Wrapper into the EasyAnimate pack (same reason as the others: the wrapper pins an incompatible diffusers version). Category CameraCtrl.
The inputs
camera_pose- aCameraPose, wired fromCameraBasicFromChaoJie,CameraCombineFromChaoJie, orCameraJoinFromChaoJie. This is the actual move.fxandfy- focal lengths, as fractions. Defaults0.474812461and0.844111024.cxandcy- principal point offsets, both default 0.5 (dead center).
Those four numbers are the intrinsic camera parameters the trajectory encoding needs. The defaults are chosen to work with EasyAnimate's expected format, and honestly, for 99% of what you'll do you leave them alone. They exist because camera trajectory formats embed intrinsics so the model knows the optics it's assuming.
What comes out
Two outputs:
camera_trajectory- a STRING. JSON, one list per frame, each entry carrying the intrinsics plus the rotation and translation. This is the wire-ready format for the sampler.video_length- an INT. The number of frames in the trajectory, echoed out so you can check it matches your sampler setting.
The workflow
CameraBasicFromChaoJie → CameraTrajectoryFromChaoJie → EasyAnimateV5_V2VSampler (camera_conditions)
Load a -Control-Camera checkpoint in LoadEasyAnimateModel (with model_type set to Control), wire camera_trajectory into camera_conditions, and the V5 sampler builds the camera control video from the intrinsics and motion.
Notes
The video_length output exists to save you a mistake - if it doesn't equal the sampler's video_length, the camera move won't span the clip correctly. And a tiny taste of honesty about this whole camera stack: it's the most brittle corner of the EasyAnimate pack, popular around the V5.1 launch and essentially dormant since the community moved on to Wan and Hunyuan. It works, and it's fun, but don't be surprised if results read as "generic drifting camera" rather than "directed cinematography."
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| camera_pose | CameraPose | — | |
| fx | FLOAT | 00–1 | — |
| fy | FLOAT | 10–1 | — |
| cx | FLOAT | 0.500–1 | — |
| cy | FLOAT | 0.500–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| camera_trajectory | STRING | — |
| video_length | INT | — |