Nodes/Dobidop ComfyStereo/Native Stereo Image Viewer (PyOpenXR)
ComfyUI Node

Native Stereo Image Viewer (PyOpenXR)

Look at a Stereo Image in the Headset, Straight From the Graph

By Dobidop·Created 2 years ago·Updated 3 months ago· 56
Native Stereo Image Viewer (PyOpenXR)
  • image
  • passthrough
stereo_format
projection_type
screen_size3.0
screen_distance3.0
swap_eyesfalse
auto_launchtrue
background_color

The image-only sibling of NativeStereoVideoViewer, and honestly the more convenient one. Wire a stereo image into it, run the workflow, and the pack's PyOpenXR viewer launches inside your headset showing that image - no browser, no file transfer to the Quest, no leaving ComfyUI. Where the video viewer is a terminal with no outputs, this one both shows the image and returns it, so you can keep a preview node sitting in the middle of a graph without breaking the data flow.

It's the fastest way to sanity-check stereo output. Did StereoImageNode produce usable depth or a headache-inducing mess? One run in the headset tells you immediately.

How it works

The node saves your image to a temp file (hash-named, so reruns don't litter), then hands it to the same native OpenXR viewer used across the pack. The viewer is persistent - run the workflow again with a new image and it swaps the content in place instead of opening another window. If PyOpenXR or a runtime isn't available, it prints a "NATIVE VR VIEWER NOT AVAILABLE" banner and returns your image unviewed, which is graceful but easy to miss if you're not watching the console.

The inputs that matter

  • image - your stereo image, typically straight out of StereoImageNode's stereoscope output.
  • stereo_format - Side-by-Side, Over-Under, or Mono. Match how the image is laid out; a mismatch looks like a blurry double exposure.
  • projection_type - Flat Screen, Curved Screen, 180° Dome, or 360° Sphere. Flat for regular stereo, dome/sphere for equirectangular.
  • screen_size and screen_distance (1.0–10.0) - the virtual screen's size and how far it floats.
  • swap_eyes - flip left/right when the depth feels inverted.
  • auto_launch (default on) - if you're iterating on a batch, you'll want this off; otherwise the viewer pops on every single run.

The only output is passthrough, the unchanged input image - useful for keeping the graph flowing, useless as a real result. There are no outputs beyond it.

Install

ComfyUI Manager → search "ComfyStereo", or:

cd ComfyUI/custom_nodes
git clone https://github.com/Dobidop/ComfyStereo.git
cd ComfyStereo
pip install -r requirements.txt

The requirements file includes pyopenxr, PyOpenGL, PyOpenGL_accelerate, and glfw. Beyond that you need an OpenXR runtime running - SteamVR, the Oculus runtime, or Windows Mixed Reality - with your headset connected.

Troubleshooting

  • Node missing from the menu - the pack disables the native nodes at import if pyopenxr isn't installed. Install requirements and restart.
  • Nothing appears in the headset - run NativeVRStatus to see whether the problem is a missing runtime vs a missing package; the two have different fixes.
  • The viewer opens but the image looks doubled and wrong - stereo_format mismatch, or you need swap_eyes.

It's a simple node - a preview pass, really - but it's the difference between trusting your stereo conversion on faith and actually verifying it.

Categorystereo/native

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
stereo_formatCOMBO3 options: Side-by-Side, Over-Under, Mono
projection_typeCOMBO4 options: Flat Screen, Curved Screen, 180° Dome, 360° Sphere
screen_sizeFLOAT3.01–10
screen_distanceFLOAT3.01–10
swap_eyesBOOLEANfalse
auto_launchBOOLEANtrue
background_colorCOMBO4 options: Black, Dark Gray, Gray, White

Outputs (1)

NameTypeDescription
passthroughIMAGE