Nodes/ComfyUI/SV3D_Conditioning
ComfyUI Node Runs on cloud

SV3D_Conditioning

Turn one photo into an orbiting video with SV3D

By Comfy-Org·Created 4 years ago·Updated about an hour ago· 129,943
SV3D_Conditioning
  • clip_vision
  • init_image
  • vae
  • positive
  • negative
  • latent
width576
height576
video_frames21
elevation0.0

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.

Categorymodel/conditioning/stable video 3d

Inputs (7)

NameTypeDefaultDescription
clip_visionCLIP_VISION
init_imageIMAGE
vaeVAE
widthINT57616–16384
heightINT57616–16384
video_framesINT211–4096
elevationFLOAT0.0-90–90

Outputs (3)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
latentLATENT