Triptych360 is a Python application built with PySide6 and ModernGL that takes a 360-degree equirectangular image/video or a 3D point-based model and projects it in real-time onto multiple windows for immersive viewing. Flexibly switch between 2-screen (Front & Right) or 3-screen (Left, Front & Right) configurations. The projection mapping is entirely GPU-accelerated using GLSL fragment shaders, making it highly performant and capable of decoding high-framerate videos smoothly.
- GPU-Accelerated: Fast real-time Equirectangular to Rectilinear conversion.
- Flexible Display Modes: Switch between 2-screen (Front & Right adjacent views) or 3-screen (Left, Front & Right triptych) configurations.
- Adjustable Aspect Ratios: Choose between Window (dynamic), 1:1 Square, or 16:9 Widescreen projection formats.
- Video Playback: Native support for auto-looping 360 videos (
.mp4,.mkv,.avi,.mov) via OpenCV. - 3D Model Support: Load LiDAR point clouds from
.las/.lazand Gaussian splats from.ply/.splat. - Multi-Window Display & Kiosk Mode: Automatically opens multiple view windows. Check the "Kiosk Mode" box to make them frameless and smoothly lock onto your monitors. The projection math cleanly aligns edges for seamless multi-screen layouts.
- Interactive Unified Controller: Use your mouse to rotate and zoom across all display outputs instantly.
- 3Dconnexion SpaceMouse Support: Move around your panoramas smoothly using native SpaceMouse integration.
- Auto-Panning Idle Animation: If the system is left untouched for 5 seconds, it will automatically slowly pan around the scene to attract an audience.
- Config & State Saving: The app will remember your last loaded video, rotation and zoom levels, window preferences, screen count, and aspect ratio mode on next launch.
-
Create a Python virtual environment and activate it:
python -m venv venv source venv/bin/activate # On Windows, use `venv\Scripts\activate`
-
System Dependencies (macOS for SpaceMouse): If you plan to use a 3Dconnexion SpaceMouse, ensure the HID library is installed globally on your machine:
brew install hidapi
-
Install python dependencies:
pip install -r requirements.txt
- 360 Media
- Images:
.png,.jpg,.jpeg - Videos:
.mp4,.mkv,.avi,.mov
- Images:
- 3D Data
- LiDAR point clouds:
.las,.laz - Gaussian splats:
.ply,.splat
- LiDAR point clouds:
-
Launch the application:
python triptych360.py
-
Load Media:
- A controller window will appear. Click "Load Media / 3D Model".
- You can test with the provided
sample_equirectangular.jpgor load any supported video/image/3D file (.las,.laz,.ply,.splat). - Three new windows will open showing the Left, Front, and Right segments of the media.
-
Navigate & Control:
- Mouse: Click and drag inside the main controller window to pitch and yaw around the scene. Use the Scroll Wheel to fine-tune the Zoom (Field of View).
- SpaceMouse: Twist or tilt the controller knob to smoothly pan and look around.
- Idle: Just let go! After 5 seconds, the view begins auto-panning automatically.
-
Display Configuration:
- Screens: Choose between 2-screen (Front & Right) or 3-screen (Left, Front & Right) mode to match your display setup.
- Aspect Ratio: Select Window (dynamic based on window size), 1:1 Square, or 16:9 Widescreen projection format.
-
Kiosk Mode & Saving State:
- Check the Kiosk Mode checkbox to drop all window borders and auto-snap windows to multiple monitors.
- When you close the app, all settings (media, position, zoom, screen count, aspect ratio, and kiosk preference) are saved to
config.jsonand automatically restored on next launch.
If you want to generate a new calibrated test grid, you can run:
python create_sample.py