CameraJoinFromChaoJie
Splice two camera trajectories end to end, not on top of each other
- camera_pose1
- camera_pose2
- CameraPose
CameraJoinFromChaoJie is the odd one out among the pack's four camera nodes: instead of picking moves from dropdowns, it takes two already-built CameraPose objects and concatenates them. One trajectory, then the next, in sequence. Think of it as the "then" node - pan up, then push in - where CameraCombineFromChaoJie is the "and" node.
It's another vendored copy from chaojie/ComfyUI-CameraCtrl-Wrapper, which the EasyAnimate pack ships because installing that wrapper would pin a diffusers version that breaks EasyAnimate. You get the functionality without the dependency fight.
The inputs
Only two, and both are CameraPose type - meaning you can't fill them in by hand, they must be wired from upstream nodes:
camera_pose1- the first move. Typically the output ofCameraBasicFromChaoJieorCameraCombineFromChaoJie.camera_pose2- the second move, same sources.
Because both inputs are already full trajectories (each carrying its own length from its own video_length setting), this node doesn't have speed or video_length of its own. It just stitches the two pose sequences together with combine_camera_motion. The output is a single, longer CameraPose.
Where it goes
CameraBasicFromChaoJie ─┐
├─ CameraJoinFromChaoJie → CameraTrajectoryFromChaoJie → EasyAnimateV5_V2VSampler (camera_conditions)
CameraBasicFromChaoJie ─┘
Each basic node can carry its own video_length, and joining respects them - so you can make a 16-frame pan followed by a 16-frame zoom, and the joined trajectory will be 32 frames. Match the total against the sampler's video_length or the camera move will run out (or overrun) mid-video.
Notes
This is the node that makes more complex camera choreography possible - a push-in into a pan, a reveal then a rotation - but it's also the one where off-by-one frame math bites. Total frames from the join must line up with what the sampler generates; if your "then" feels like a hard cut or a skip, the lengths are off. And since it needs two valid CameraPose inputs, it's a natural next step once you've got the basic node working rather than a starting point.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| camera_pose1 | CameraPose | — | |
| camera_pose2 | CameraPose | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CameraPose | CameraPose | — |