panoviewer is a minimal image viewer made for HDRI panoramas, but supports most image files and camera raw files too.
- Left or middle mouse drag: pan/rotate view
- Mouse wheel: zoom
- Ctrl + mouse wheel: smooth exposure change
,: exposure -1 stop.: exposure +1 stopCtrl + ,: gamma -0.1Ctrl + .: gamma +0.1- Move cursor to the left edge: open toolbar overlay (open/reload/view transform/file info)
P: Toggle 2D projection and equirectangularHome: Reset zoom and pan to the image's original opened viewW: In 2D mode, toggle tiled wrapping on/off (both axes, default: off)F: Toggle fisheye and rectilinear lens (rectilinear is default; disabled in 2D mode)T: Toggle view transformF2: Toggle image metadata overlay (top-left)F11or double-click: Full screenEsc: Exit
For panorama images, (2:1 aspect, hdr or exr) the last view transform used persists. For all others, Standard is always loaded by default.
- Python 3.11+
- PyQt6 windowing
- moderngl renderer
- OpenImageIO loading
- rawpy camera RAW decode
- OpenColorIO v2 display transforms
python -m venv .venv
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
pip install --upgrade pip
pip install -e .[dev]panoviewer
# or open directly
panoviewer path/to/file.exrpytestmypy hdri_viewer testsblack .- Default config:
hdri_viewer/resources/config.ocio - Custom config folder:
hdri_viewer/resources/ocio_configs
Drop a .ocio file in the custom folder and choose Reload from the left-edge toolbar.