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

Native Stereo Video Viewer (PyOpenXR)

Watch Your Stereo Video Inside the Headset, Not a Browser

By Dobidop·Created 2 years ago·Updated 3 months ago· 55
Native Stereo Video Viewer (PyOpenXR)
      video_path
      stereo_format
      projection_type
      screen_size3.0
      screen_distance3.0
      swap_eyesfalse
      loop_videotrue
      auto_launchtrue
      background_color

      The finish line of the whole ComfyStereo pipeline. You've converted a video to side-by-side stereo; now you want to actually see it in 3D, and this node puts it inside your headset through the OpenXR runtime - no browser, no media player, no side-loading a file to the Quest. Run the node and a persistent PyOpenXR viewer launches and starts playing the file at the path you give it.

      This is a terminal node: no outputs, nothing downstream. It's the point where the workflow stops producing and starts showing.

      How it works

      Under the hood it checks whether PyOpenXR and an OpenXR runtime are available, then hands the video file off to the pack's native viewer, which renders it as a textured quad (or sphere/dome) in the VR scene. The viewer is persistent - re-run the workflow and it updates what's playing rather than spawning a second window. Keyboard controls handle play, pause, and seek. If you want audio, note the catch: ffmpeg must be installed separately, because the audio extraction uses it. The README calls that out explicitly, and it's easy to miss until you have a silent video.

      The inputs that matter

      • video_path - an absolute path to a real file on disk. This is a plain string, not a ComfyUI media loader, so there's no file browser; drag the file's path in or type it.
      • stereo_format - Side-by-Side, Over-Under, or Mono. Set it to how the video was encoded. Get this wrong and you'll see a ghostly doubled image instead of depth.
      • projection_type - Flat Screen, Curved Screen, 180° Dome, or 360° Sphere. Flat is the sensible default for regular stereo; dome and sphere are for equirectangular VR content.
      • screen_size and screen_distance (both 1.0–10.0) - how big the virtual screen is and how far it floats from you.
      • swap_eyes - flips left/right. Reach for this when the depth feels inverted; it happens more than it should with oddball encoders.
      • loop_video (default on) and auto_launch (default on) - self-explanatory. Turn auto_launch off if you don't want the viewer popping every run.

      Install

      ComfyUI Manager → search "ComfyStereo" → install, or:

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

      The VR extras - pyopenxr, PyOpenGL, PyOpenGL_accelerate, glfw, pygame - are in that same requirements file, so one install covers them. You still need an OpenXR runtime on the machine: SteamVR (recommended, covers most headsets), the Oculus runtime for Meta Quest, or Windows Mixed Reality. And the headset has to be on and the runtime running before the node will do anything.

      Troubleshooting

      • "NATIVE VR VIEWER NOT AVAILABLE" in the console - the node degrades gracefully but uselessly: it prints a banner and returns. Run NativeVRStatus from the same pack to find out which layer is missing - the pyopenxr package or the runtime itself.
      • Node missing from the menu entirely - the pack hides the native nodes at import time when pyopenxr isn't installed. Install the requirements and restart.
      • "ERROR: Video file not found" - the path string points nowhere. Use an absolute path and double-check the slashes on Windows.
      • No audio - install ffmpeg (the viewer shells out to it for audio extraction).
      • Stereo looks wrong - check stereo_format first, then swap_eyes.

      It's a niche node for a niche pipeline, and it has zero search presence today - but if you're building 3D content for a headset, it's the piece that makes the loop feel finished.

      Categorystereo/native

      Inputs (9)

      NameTypeDefaultDescription
      video_pathSTRING
      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
      loop_videoBOOLEANtrue
      auto_launchBOOLEANtrue
      background_colorCOMBO4 options: Black, Dark Gray, Gray, White

      Outputs (0)

      No outputs