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

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


LUT Inspection

Open from:

  • View -> LUT Inspection or Drop LUT in main_window

LUT_inspector_default.png

Behavior:

  • opens as a modeless utility window
  • accepts drag-and-drop LUT files
  • supports .cube, .spi1d, .csp, .spi3d, .lut, and .3dl formats
  • plots LUT curves on an X/Y diagram that scales with window size
  • for 3D .cube, displays a neutral-axis projection (R=G=B samples)
  • for .cube, DOMAIN_MIN and DOMAIN_MAX must use matching RGB components (mixed per-channel domain values are treated as unsupported)

LUT_inspector_mix.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/
  • Sample LUTs: sample/LUTs

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
  • 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.1.0.tar.gz (834.9 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.1.0-py3-none-any.whl (829.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: prism_viewer-1.1.0.tar.gz
  • Upload date:
  • Size: 834.9 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.1.0.tar.gz
Algorithm Hash digest
SHA256 960b04b9767cf13f633c06480335198426348f7ee042e10caf204565546a1f9d
MD5 7c1ae0e2192b8f0966732d0ebd0b3bed
BLAKE2b-256 376a3c214b5adc2da88dbd5878d791567b1d6cf5d455153178eb159f22364241

See more details on using hashes here.

File details

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

File metadata

  • Download URL: prism_viewer-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 829.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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 369633e4aa5f19ea5dd9392a82a0ae50248f99d184ee1ad13e34250396861bab
MD5 48ae20d823813dfb62999d6394f9f80a
BLAKE2b-256 b2508731d2e419fa626e2ed50c250ee52b0078cbe8a3658ec4ab3a3aa028824d

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