Skip to main content

OCIO still-image viewer for A/B comparison

Project description

Prism

prism_banner.png

(Pipeline Review and Image State Monitor)

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

prism_overview_ui.png


Why Prism Exists

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.


Features

  • 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
  • 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

Requirements

  • Python 3.11+

  • Runtime packages:

    • PySide6
    • OpenImageIO
    • OpenColorIO
    • numpy

Install

Install from PyPI

python -m pip install prism-viewer

Install for Development:

python -m pip install -e .

Launch

prism

If the command is not found, activate your virtual environment first and retry.


Quick Start

prism_startup_screen.png

  1. Open image A from File -> Open Image A...
  2. Open image B from File -> Open Image B...
  3. Load an OCIO config from File -> Open OCIO Config...

prism_open_config_and_images.png

  1. Select Input and Output colorspaces independently for A and B
  2. Optionally select a Look
  3. Switch compare modes (Split, Wipe, Full (A), Full (B) Diff)

prism_modes_selection.png

  1. Hover over the viewer to inspect pixel values in the footer HUD

prism_colorspace selection.png

Prism also supports drag-and-drop for images and OCIO configs.


Compare Modes

Split

Shows A and B side-by-side.

Useful for:

  • framing comparisons
  • look validation
  • general A/B review

prism_split_view.png


Wipe

Displays A/B across an interactive divider.

Use the wipe handle to inspect transitions and subtle image differences interactively.

prism_wipe_view.png


Full

Displays only the currently selected side (A or B).

Useful for focused single-image inspection while preserving the compare setup.

prism_full_view.png


Diff

Displays grayscale absolute difference between overlapping regions.

Brighter values indicate stronger differences.

Useful for:

  • transform validation
  • render verification
  • subtle change detection

prism_diff_view.png


OCIO Context Variables

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

ocio_config_env_vars.png

prism_ocio_env_vars.png


Viewer Controls

Exposure and Luminance

Interactive controls allow quick image inspection without modifying source data.

Useful for:

  • shadow inspection
  • highlight clipping checks
  • transform debugging
  • general image evaluation

prism_exposure_control.png


Background Presets

Open from:

  • View -> Background

Presets:

  • Black
  • Dark Gray
  • Mid Gray
  • Light Gray

Useful when image edges become difficult to read against the viewer background.

prism_background_color_selection.png


Diagnostics

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.

prism_about.png prism_diagnostics.png


Typical Workflows

A/B Grade Validation

  1. Load image A and B
  2. Load an OCIO config
  3. Configure Input and Output transforms
  4. Start in Split
  5. Move to Wipe for edge comparison
  6. Use Diff to isolate subtle changes

Single Image Inspection

  1. Load image A
  2. Configure transforms
  3. Switch to Full
  4. Inspect pixel values and channels
  5. Adjust exposure and luminance interactively

Context-Based Look Debugging

  1. Load image and OCIO config
  2. Open View -> OCIO Context Variables
  3. Modify context values
  4. Observe updates live in the viewer

Hotkeys

  • F Fit to Window

  • H Show/Hide Hotkeys dialog

  • E Toggle OCIO Context Variables dock

  • Tab Switch active side A/B

  • Right / PageDown Next frame

  • Left / PageUp Previous frame

  • Up / Down Change focused Input/Output item

  • R Toggle Red solo / RGB

  • G Toggle Green solo / RGB

  • B Toggle Blue solo / RGB

  • Z Restore RGB

  • 1 / 2 / 3 / 4 / 5

    • Split
    • Wipe
    • Full (A)
    • Full (B)
    • Diff
  • Right Click + Drag Pan

prism_hotkeys.png


Sample Assets

Prism includes sample files to validate setup quickly:

  • Sample images: samples/images/
  • Sample OCIO config: samples/ocio_config/

Quick smoke test:

  1. Launch prism
  2. Load image A and B from samples/images/
  3. Load config from samples/ocio_config/
  4. Switch between Split, Wipe, Full (A), Full (B), and Diff

Troubleshooting

prism command not found

Activate the intended virtual environment and reinstall from repository root:

python -m pip install -e .

OCIO config fails to load

  • Confirm OpenColorIO is installed in the active environment
  • Confirm the selected file is a valid .ocio config
  • If loading is canceled intentionally, Prism preserves current state

EXR or DPX images fail to load

Prism uses OpenImageIO fallback support for formats that may not be available through Qt directly.

Verify:

  • OpenImageIO is installed
  • the active environment can import it successfully

Movie source issues

Movie playback depends on optional backend availability such as:

  • opencv-python
  • imageio[ffmpeg]

Still-image workflows remain fully functional without them.


Known Limitations

  • 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

Planned Features

  • Waveform Monitor
  • Vectorscope
  • Chromaticity Diagram and gamut visualization
  • Transform breakdown visualization
  • LUT plotting
  • Nuke integration
  • Resolve integration
  • More Display/View support

Architecture and Developer Docs

See docs/README.md for subsystem and architecture documentation:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

prism_viewer-1.0.2.tar.gz (825.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prism_viewer-1.0.2-py3-none-any.whl (820.4 kB view details)

Uploaded Python 3

File details

Details for the file prism_viewer-1.0.2.tar.gz.

File metadata

  • Download URL: prism_viewer-1.0.2.tar.gz
  • Upload date:
  • Size: 825.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for prism_viewer-1.0.2.tar.gz
Algorithm Hash digest
SHA256 701fb7a5d6388c1420ae2ed4a6e946703803222fc2ac35566dcc54cc3d327cbc
MD5 35519e5e53f3bb71175bc093567b5681
BLAKE2b-256 ae3705a6ab42133b84a9e28a7024d6925b22e5854278a1b35a068d7e93573a2d

See more details on using hashes here.

File details

Details for the file prism_viewer-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: prism_viewer-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 820.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for prism_viewer-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b8998f8f40fd8edf684388e72b9d1c83eebe67f627176434c6eee86a68b7473b
MD5 4c1a2ba81f19852be8a0cdf40d8623c3
BLAKE2b-256 5b26613b3d608bfb4eab48be410c8def7a40e0ead20e8ac4a21836da47d7743e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page