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.1.tar.gz (825.2 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.1-py3-none-any.whl (820.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: prism_viewer-1.0.1.tar.gz
  • Upload date:
  • Size: 825.2 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.1.tar.gz
Algorithm Hash digest
SHA256 fd663980d8cd8cec49eb5dd563c4ef50c4054d79a621b308ebad642828b65d4e
MD5 a89fd63dd31dd822ff52b48128e22b61
BLAKE2b-256 ff1b2c863ab083c3f93011efd4525c5cc91d67cf490eb42dd63d45cbfe90224c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: prism_viewer-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 820.0 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 84ec5733722c5588752031547cd8079e1c7de820a30c5931914ad7fd016e0eb4
MD5 7488817806fd5019522a0fa3a376552d
BLAKE2b-256 abdbff56cfbcaa76801a70f9a74db7677b7730e78eed51e6c0673d1abc098a67

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