ComfyUI Node

Side By Side

Turn two eye views into one VR-ready SBS image

By IsItDanOrAi·Created 2 years ago·Updated about a year ago· 10
Side By Side
  • left_image
  • right_image
  • IMAGE

Side By Side does exactly one thing: it takes two images and glues them together into a single wide image, left eye on the left, right eye on the right. That's the "SBS" layout your VR headset actually expects. Quest, Index, Pico - they all happily play side-by-side video, and this node is the tiny bridge between "I generated two views in ComfyUI" and "this plays back as 3D."

This is the flagship node of the ComfyUI-Stereopsis pack, a small solo project from GitHub user IsItDanOrAi. The whole pack exists so you can generate a video in ComfyUI, offset one eye's stream by a frame or two, and watch the result on a headset. Honest framing up front: this is a utility, not a magic 2D-to-3D converter. The node itself does zero depth estimation. You bring the two eye views; it just concatenates them.

How it works

The mechanism is almost insultingly simple. ComfyUI hands every node images as tensors in [batch, height, width, channels] order, and the node runs one call:

torch.cat((left_image, right_image), dim=2)

dim=2 is the width axis, so the two images are joined horizontally. That's the whole thing - there's no color correction, no resize, no divider line, no depth-aware parallax. Because of that concat, both inputs must share the same height and the same channel count (RGB in, RGB out), but their widths can differ. Feed a 1920x1080 left and a 1920x1080 right and you get a clean 3840x1080 SBS frame - which, conveniently, is a standard 4K SBS resolution.

The inputs that matter

Only two, and they're both images:

  • left_image - the view for your left eye.
  • right_image - the view for your right eye.

The single output is an IMAGE tensor (the concatenated frame, or frame batch if you fed in video), which you'd wire straight into a Save Image node, or into a video-encode chain (VAE decode → Video Combine → Save Video) if you're working with an animated batch. If you're doing the pack's intended stereopsis workflow, this node is the last stop: delay one stream, feed both into it, save the SBS video.

Installing it

There are no models to download and no extra Python dependencies - the pack has no requirements.txt, and the nodes' only import is torch, which ComfyUI already requires. That's the nicest thing about this pack: install risk is basically zero.

  • ComfyUI Manager: search "Stereopsis" (pack title "ComfyUI-Stereopsis") and hit Install.
  • Manually:
    cd ComfyUI/custom_nodes
    git clone https://github.com/IsItDanOrAi/ComfyUI-Stereopsis
    Restart ComfyUI and the node appears under the IsItDan-Stereopsis category.

Common issues & troubleshooting

Same size or it errors. Mismatched heights or channel counts will throw a tensor-shape error from torch.cat. Match the resolution before you connect.

No depth if both eyes are the same image. The classic new-user trap: if you feed the identical frame to both inputs, you get a flat, depthless side-by-side. Stereopsis requires binocular disparity - two slightly different views. The pack's intended trick is to delay one eye's stream (that's what the sibling Frame Delay node is for), which fakes parallax on video. It's a cheap trick and it shows on fast motion, but it's free.

Know the alternatives. If you actually want real depth - generated from a depth map, the proper A1111-style stereoscopic workflow - this pack isn't it. The r/comfyui community has run into this pack before: one user in a stereoscopic-node thread (July 2024) reported it "gave me lots of problems" and ended up comparing it against ComfyStereo and ComfyUI_SSStereoscope, the depth-map-based options. That thread's honest take - this is an early-stage, one-commit project (July 2025) - matches the code. It works for the narrow "I already have two views" job, and for that job it's refreshingly reliable. For depth-map stereo, look elsewhere.

CategoryIsItDan-Stereopsis

Inputs (2)

NameTypeDefaultDescription
left_imageIMAGE
right_imageIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE