SV3D_Conditioning
Turn one photo into an orbiting video with SV3D
- clip_vision
- init_image
- vae
- positive
- negative
- latent
Stable Video 3D (SV3D) is Stability's answer to "I have one picture of this thing, give me the sense of it as a 3D object." The trick it uses is not a point cloud or a mesh - it's a video. SV3D generates a short clip where the object orbits in space, and that orbital video is what a photogrammetry pipeline can later turn into an actual 3D model. SV3D_Conditioning is the node that sets up the sampler for that orbital generation.
The mechanism is a per-frame camera sweep. The node encodes your init_image through clip_vision to get the pooled embedding, and through the vae for the concat_latent_image. Then - this is the SV3D-specific part - it computes an azimuth for every frame: starting at 0 and stepping by 360 / (video_frames - 1) degrees, so with the default 21 frames the object makes a full 360° orbit. Each frame's (elevation, azimuth) pair is stored in the conditioning (the elevation input stays constant across all frames; only azimuth sweeps). The positive conditioning is the pooled embedding + concat_latent_image + the elevation/azimuth lists; the negative is the zeroed mirror. Outputs are positive, negative, and an empty latent shaped [video_frames, 4, h/8, w/8] - one latent per video frame, all fed to the sampler.
Inputs: clip_vision, init_image, vae, width/height (576×576 default, square and modest), video_frames (default 21 - more frames means a smoother orbit), and elevation (the fixed camera height; 0 is eye-level, negative looks down, positive looks up).
It's core (comfy_extras/nodes_stable3d.py), ships with ComfyUI, nothing to install. Load the SV3D checkpoint (it comes as a separate model, not a standard SD checkpoint) plus the matching CLIP vision and VAE, and the usual sampler → VAEDecode → video path applies.
Real-world notes from the 3D-adjacent crowd: SV3D wants a clean, well-segmented subject on a simple background - a busy scene gives you a wobbling mess mid-orbit. Keep elevation modest; extreme angles are where SV3D starts hallucinating geometry that wasn't in the image. And remember the output is a video, not a mesh: if your goal is an actual 3D model, this node is the front half of a pipeline that ends in something like a Gaussian-splat or photogrammetry step. The classic gotcha is reusing a generic image VAE or CLIP vision that doesn't match the SV3D pair - encode with the wrong ones and the orbit starts from noise instead of your subject.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| clip_vision | CLIP_VISION | — | |
| init_image | IMAGE | — | |
| vae | VAE | — | |
| width | INT | 57616–16384 | — |
| height | INT | 57616–16384 | — |
| video_frames | INT | 211–4096 | — |
| elevation | FLOAT | 0.0-90–90 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |