Prism is a lightweight OCIO image viewer built for fast visual inspection, transform validation, and A/B comparison workflows.
It was created from a very practical need: quickly loading images, testing colorspace transforms, comparing outputs, and debugging OCIO behavior without having to launch a full compositing or grading application.
Prism focuses on still-image workflows and immediate visual feedback:
- compare two images side-by-side
- wipe between transforms
- inspect differences
- validate looks and context variables
- probe pixel values
- and quickly iterate on OCIO decisions
The goal is not to replace tools like Nuke, RV, or Resolve.
The goal is to provide a focused, lightweight environment for color pipeline inspection and experimentation, especially during look development, pipeline debugging, config validation, and day-to-day production support.
Built with:
- PySide6
- OpenColorIO
- OpenImageIO
- NumPy
Many OCIO workflows still rely on launching large DCC applications just to validate a transform, compare two outputs, or debug context-dependent behavior.
Prism was built to reduce that friction.
It provides a fast standalone environment for inspecting color behavior directly, with minimal setup and immediate visual feedback.
Whether you're:
- validating an OCIO config
- checking a display transform
- comparing renders
- debugging context variables
- verifying looks
- or simply inspecting image data
Prism aims to make that process faster and more direct.
- Load and compare two images simultaneously
- Apply independent OCIO transforms to A and B
- Compare images using Split, Wipe, Full, and Diff modes
- Inspect pixel values directly in the viewer HUD
- Adjust exposure and luminance interactively
- Edit OCIO context variables live
- Inspect LUT transfer curves in a dedicated modeless LUT window
- Navigate synchronized A/B views
- Toggle transform bypass per image
- Use EXR, DPX, JPG, PNG, TIFF, and other common formats
- Built-in diagnostics window for environment validation
-
Python 3.11+
-
Runtime packages:
PySide6OpenImageIOOpenColorIOnumpy
python -m pip install prism-viewerpython -m pip install -e .prismIf the command is not found, activate your virtual environment first and retry.
- Open image A from
File -> Open Image A... - Open image B from
File -> Open Image B... - Load an OCIO config from
File -> Open OCIO Config...
- Select Input and Output colorspaces independently for A and B
- Optionally select a Look
- Switch compare modes (
Split,Wipe,Full (A),Full (B)Diff)
- Hover over the viewer to inspect pixel values in the footer HUD
Prism also supports drag-and-drop for images and OCIO configs.
Shows A and B side-by-side.
Useful for:
- framing comparisons
- look validation
- general A/B review
Displays A/B across an interactive divider.
Use the wipe handle to inspect transitions and subtle image differences interactively.
Displays only the currently selected side (A or B).
Useful for focused single-image inspection while preserving the compare setup.
Displays grayscale absolute difference between overlapping regions.
Brighter values indicate stronger differences.
Useful for:
- transform validation
- render verification
- subtle change detection
Prism can detect and expose OCIO context variables directly from the loaded config.
Open from:
View -> OCIO Context Variables- Hotkey:
E
Behavior:
- Hidden by default
- Dynamically rebuilds from the loaded config
- Updates processing live as values change
- Can be docked or undocked
- Persists current values while visible or hidden
This is especially useful for:
- shot-based transforms
- context-driven looks
- sequence-dependent processing
- debugging OCIO environment behavior
Interactive controls allow quick image inspection without modifying source data.
Useful for:
- shadow inspection
- highlight clipping checks
- transform debugging
- general image evaluation
Open from:
View -> Background
Presets:
- Black
- Dark Gray
- Mid Gray
- Light Gray
Useful when image edges become difficult to read against the viewer background.
Open from:
View -> LUT InspectionorDrop LUT in main_window
Behavior:
- opens as a modeless utility window
- accepts drag-and-drop LUT files
- supports
.cube,.spi1d,.csp,.spi3d,.lut, and.3dlformats - plots LUT curves on an X/Y diagram that scales with window size
- for 3D
.cube, displays a neutral-axis projection (R=G=Bsamples) - for
.cube,DOMAIN_MINandDOMAIN_MAXmust use matching RGB components (mixed per-channel domain values are treated as unsupported)
Prism includes a diagnostics window for quickly validating runtime dependencies and OCIO environment state.
Includes:
- Prism version
- Python version
- Qt / PySide version
- NumPy version
- OpenImageIO version
- OpenColorIO version
- Active OCIO config
- Platform information
Useful for:
- support,
- debugging,
- pipeline validation,
- environment troubleshooting.
- Load image A and B
- Load an OCIO config
- Configure Input and Output transforms
- Start in
Split - Move to
Wipefor edge comparison - Use
Diffto isolate subtle changes
- Load image A
- Configure transforms
- Switch to
Full - Inspect pixel values and channels
- Adjust exposure and luminance interactively
- Load image and OCIO config
- Open
View -> OCIO Context Variables - Modify context values
- Observe updates live in the viewer
-
FFit to Window -
HShow/Hide Hotkeys dialog -
EToggle OCIO Context Variables dock -
TabSwitch active side A/B -
Right/PageDownNext frame -
Left/PageUpPrevious frame -
Up/DownChange focused Input/Output item -
RToggle Red solo / RGB -
GToggle Green solo / RGB -
BToggle Blue solo / RGB -
ZRestore RGB -
1 / 2 / 3 / 4 / 5- Split
- Wipe
- Full (A)
- Full (B)
- Diff
-
Right Click + DragPan
Prism includes sample files to validate setup quickly:
- Sample images:
samples/images/ - Sample OCIO config:
samples/ocio_config/ - Sample LUTs:
sample/LUTs
Quick smoke test:
- Launch
prism - Load image A and B from
samples/images/ - Load config from
samples/ocio_config/ - Switch between
Split,Wipe,Full (A),Full (B), andDiff
Activate the intended virtual environment and reinstall from repository root:
python -m pip install -e .- Confirm
OpenColorIOis installed in the active environment - Confirm the selected file is a valid
.ocioconfig - If loading is canceled intentionally, Prism preserves current state
Prism uses OpenImageIO fallback support for formats that may not be available through Qt directly.
Verify:
OpenImageIOis installed- the active environment can import it successfully
Movie playback depends on optional backend availability such as:
opencv-pythonimageio[ffmpeg]
Still-image workflows remain fully functional without them.
- Movie workflows remain backend/environment dependent
- Some EXR/DPX workflows rely on OpenImageIO fallback support
- Windows taskbar icon refresh may lag behind icon updates until Explorer refreshes shell cache
- Waveform Monitor
- Vectorscope
- Chromaticity Diagram and gamut visualization
- Transform breakdown visualization
- Nuke integration
- Resolve integration
- More Display/View support
See docs/README.md for subsystem and architecture documentation:


















