Stereo Video Source
Every 3D video starts here — the one knob-heavy node you'll actually touch
- video_job
- summary
Let's get the misleading name out of the way: StereoVideoSource doesn't convert anything, and it isn't really a "source" of pixels either. It's the configuration node - a form that packages your clip and every render setting into a job handle that StereoVideoConvert then executes. It's also where almost all of this pack's knobs live, so it's the node you'll actually spend time on. The rest of the chain is just plumbing.
Pick a clip, dial in the depth and stereo settings, and you get two outputs: video_job (the internal handle that feeds Convert) and a summary string showing what you configured - frame count, fps, resolution, depth mode, and layout.
Setting it up
Drop your source clip into ComfyUI's input directory first. source_video is a dropdown populated from what's in that folder, so a clip you just dropped won't appear until the list refreshes. From there the settings fall into a few buckets:
- Layout.
stereo_layoutissbs(side by side, the default) ortop_bottom. Pick what your target display actually reads. - Depth source.
use_depth_videooff (default) means the pack estimates depth itself with Depth Anything. Flip it on anddepth_videobecomes the source - a precomputed depth pass, e.g. from Video-Depth-Anything. The catch is right in the tooltip: the depth video must match the selected source range in frame count, and the README adds resolution too. Mismatch, and you get an error, not a warning. - Depth quality vs. VRAM.
depth_modeloffersda3_small,da3_base,da3_large.depth_use_source_resolutionis on by default, meaning inference runs at the video's native resolution; switch it off anddepth_inference_resolution(default 512, longest side) kicks in for a much lighter pass on a small card. - Range and preview.
start_frame/end_frame(0 means "rest of the clip") andevery_nthlet you render a short preview or a partial export.every_nthabove 1 skips frames, which also lowers output fps - handy for checking the 3D before committing to a full encode. - The stereo feel.
disparity_ratio(default 22/1920, i.e. roughly 1% of image width) sets separation as a fraction of width, which keeps 3D strength consistent as resolution changes.disparity_pxis a legacy pixel-based fallback that's only used whendisparity_ratiois 0.depth_power(default 0.3) exaggerates near/far separation - crank it if the depth looks flat. Andinvert_depth(default on) flips the map if your scene comes out inside-out. - Memory.
chunk_size(default 4, max 64) controls frames processed per batch. Higher = faster but thirstier RAM and VRAM; the low-VRAM machine this pack targets will want to keep it modest. - The rest.
audio_mode(copyornone) decides whether the final file carries the original audio.spill_policyis honest placeholder - the tooltip says the current pipeline doesn't materially change behavior based on it, so you can ignore it entirely.
Two gotchas worth knowing
The da3_* model names promise Depth Anything 3, but actual DA3 weights only load if you've installed the official package (pip install git+https://github.com/ByteDance-Seed/Depth-Anything-3.git). Without it, the pack quietly falls back to the transformers-compatible Depth Anything V2 checkpoints. Also, if you're doing commercial work, note the licensing split: DA3-Large is CC BY-NC 4.0 while Small and Base are Apache 2.0 - another reason to reach for da3_small or da3_base unless you need the ceiling.
Install the pack once for all three nodes - ComfyUI Manager search "comfyui-sbs-long-video", or git clone https://github.com/oskar13/comfyui-sbs-long-video.git into custom_nodes, then pip install -r requirements.txt and restart. You'll also need ffmpeg and ffprobe on your PATH. Then the flow is Source → Convert → Mux, and the only place you'll find yourself tweaking knobs again is right here.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| source_video | COMBO | Main input clip to convert into stereo. | |
| stereo_layout | COMBO | sbs | Stereo arrangement for the output video. |
| use_depth_video | BOOLEAN | false | Use an uploaded depth reference clip instead of estimating depth automatically. |
| depth_video | COMBO | Optional external depth video. It must match the selected source range in frame count when enabled. | |
| depth_model | COMBO | da3_small | Depth model size used when automatic depth estimation is enabled. |
| depth_use_source_resolution | BOOLEAN | true | Run depth inference at the video's original frame resolution instead of a manual lower resolution. |
| depth_inference_resolution | INT | 512128–2048 | Manual longest-side resolution for depth inference when source-resolution mode is off. |
| start_frame | INT | 00–2147483647 | First source frame to process. |
| end_frame | INT | 00–2147483647 | Last frame boundary to process. 0 means use the rest of the clip. |
| every_nth | INT | 1 | Frame skipping factor. Higher values render faster previews and lower the output FPS. |
| chunk_size | INT | 41–64 | Frames processed per batch. Higher values improve throughput but use more RAM and VRAM. |
| disparity_ratio | FLOAT | 0.01150–0.25 | Stereo separation as a fraction of image width. This keeps the 3D strength more consistent across different resolutions. |
| disparity_px | FLOAT | 12.00–256 | Legacy fallback pixel disparity. Used only when disparity_ratio is 0 for older workflows. |
| depth_power | FLOAT | 0.300.1–4 | Depth response curve. Higher values exaggerate near/far separation. |
| invert_depth | BOOLEAN | true | Flip the depth map if the scene appears inside-out. |
| audio_mode | COMBO | copy | Copy source audio into the final muxed video, or output video only. |
| spill_policy | COMBO | auto | Reserved workflow/memory policy setting. The current pipeline does not materially change behavior based on this yet. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_job | STEREO_VIDEO_JOB | Internal job handle for StereoVideoConvert. |
| summary | STRING | Human-readable summary of the selected source clip and render settings. |