Stable Zero123 Batch Schedule
Keyframe a camera orbit around an object
- clip_vision
- init_image
- vae
- positive
- negative
- latent
This node drives Stable Zero123 - Stability's single-image novel-view model - to render an object from a scheduled camera path instead of one fixed angle. You give it keyframed camera angles across a batch, and it interpolates between them, so a batch turns into a smooth orbit: a turntable spin, a tilt-up, whatever camera move you keyframe. It's the "make my object rotate" node for the Zero123 pipeline.
It's part of KJNodes, kijai's utility pack, and it's marked experimental - which, honestly, matches where Stable Zero123 sits in 2026. It was a notable trick a couple of years back; today it's niche. Community chatter around it is thin, and most people who want a spinning object now reach for a video model or a purpose-built 3D pipeline rather than Zero123. So think of this as a specialist tool for a specific older model, not a default.
How it works
Zero123 takes one image of an object plus a target camera angle and hallucinates what the object looks like from that angle. This node schedules those angles across a batch. You provide azimuth (the yaw, i.e. spin-around) and elevation (the pitch, i.e. up/down tilt) as keyframes - lines of frame:(value) - and it interpolates between them with your chosen easing to produce a per-frame camera path. It encodes your init image and packages everything into conditioning and a latent for a sampler to turn into the actual views.
The inputs and outputs that matter
- init_image - the object, from a single starting view.
- clip_vision and vae - Zero123's encoders (it's CLIP-vision conditioned).
- batch_size - the number of frames in the orbit.
- azimuth_points_string / elevation_points_string - the keyframes, one
frame:(value)per line. Azimuth spins the camera around the object; elevation raises or lowers it. Edit these to design the move. - interpolation - the easing between keyframes:
linear,ease_in,ease_out,ease_in_out. - width / height - the working resolution.
Outputs are positive and negative conditioning plus a latent - feed them into a KSampler to render the scheduled views.
Installing it
ComfyUI Manager → search KJNodes for ComfyUI → install → restart. Or cd ComfyUI/custom_nodes && git clone https://github.com/kijai/ComfyUI-KJNodes, then pip install -r ComfyUI-KJNodes/requirements.txt, and restart. You'll also need the Stable Zero123 checkpoint (a separate download) plus the CLIP-vision and VAE it expects - this node schedules the model, it doesn't ship it.
Where people get burned
- Keyframe string syntax. The azimuth/elevation inputs are text, and the
frame:(value)format is picky - a stray character breaks the schedule. Start from the default strings and edit the numbers rather than writing them from scratch. - Zero123's limits are the ceiling. Novel-view synthesis from a single image guesses at everything it can't see; big angle jumps and complex objects come back distorted. Keep the orbit gradual and expect a "good enough" turntable, not a true 3D render.
- It's an older model in an experimental node. Expect rough edges, thin documentation, and few recent tutorials. If a clean turntable is the actual goal and you're starting fresh, a modern video model is usually the easier road - reach for this when you specifically want the Zero123 approach.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| clip_vision | CLIP_VISION | — | |
| init_image | IMAGE | — | |
| vae | VAE | — | |
| width | INT | 25616–16384 | — |
| height | INT | 25616–16384 | — |
| batch_size | INT | 11–4096 | — |
| interpolation | COMBO | 4 options: linear, ease_in, ease_out, ease_in_out | |
| azimuth_points_string | STRING | 0:(0.0), 7:(1.0), 15:(0.0) | — |
| elevation_points_string | STRING | 0:(0.0), 7:(0.0), 15:(0.0) | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |