Skip to content

feat(ui): add EXR Layer/AOV selector to viewport toolbar#230

Open
throb wants to merge 5 commits intoAcademySoftwareFoundation:mainfrom
throb:feat/exr-layer-selector
Open

feat(ui): add EXR Layer/AOV selector to viewport toolbar#230
throb wants to merge 5 commits intoAcademySoftwareFoundation:mainfrom
throb:feat/exr-layer-selector

Conversation

@throb
Copy link

@throb throb commented Mar 14, 2026

Summary

  • Adds a Layer dropdown to the viewport toolbar for switching between EXR layers/AOVs (e.g., RGBA, sky, mask, displace)
  • Populated dynamically from the current media source's stream list
  • Sends current_media_stream_atom to switch streams on selection — triggers disk read of only the selected layer's channels
  • Positioned left of the existing Channel dropdown (toolbar position 7.5)
  • Also available in the viewport right-click context menu

Changed Files (6 files, +123/-5)

  • include/xstudio/colour_pipeline/colour_pipeline.hpp — expose current media source actor to subclasses
  • src/colour_pipeline/src/colour_pipeline.cpp — store media source actor on source change
  • src/plugin/colour_pipeline/ocio/src/ocio_plugin.cpp — Layer attribute creation, dropdown population, stream switching
  • src/plugin/colour_pipeline/ocio/src/ocio_plugin.hpp — layer attribute pointer + update method
  • src/plugin/colour_pipeline/ocio/src/ui_text.hpp — Layer UI strings

Dependencies

Test plan

  • Open a multi-layer EXR (e.g., with sky, mask, displace channels) — Layer dropdown should populate
  • Select different layers — viewport should update to show that layer's data
  • Switch to a non-EXR media source — Layer dropdown should show only "RGBA"
  • Verify Layer appears in viewport right-click context menu

🤖 Generated with Claude Code

throb and others added 5 commits March 10, 2026 16:56
…e loading

Three issues prevented image sequences (EXR, etc.) from loading on Windows:

1. Broken backslash regex in scan_posix_path() - the character class [\]
   matched ']' instead of '\', leaving backslashes in scanned file paths.
2. pad_size() returned 0 for non-zero-padded frame numbers (e.g. "1000"),
   producing invalid %00d / {:00d} format specifiers that failed extension
   matching in is_file_supported().
3. posix_path_to_uri() did not normalise backslashes to forward slashes on
   Windows, leaking them into file: URIs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add --review / -v CLI flag to launch xstudio in "Present" layout
(viewport only, no playlists or timeline). This overrides saved user
layout preferences on startup.

Also add drag-drop handling to the viewport panel so files can be
dropped directly onto the viewer in any layout. Previously drops were
only handled by the media list panel, which doesn't exist in the
Present layout.

Bump version to 1.1.1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove Gamma and Saturation from the default hidden toolbar items so
they are visible by default in the viewport toolbar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EXR Performance:
- Dispatch up to 4 concurrent precache requests in do_precache()
- Add configurable EXR decompression thread count preference (default 16)
- Fix off-by-one in EXR resolution reporting (max-min → max-min+1)
- Crop data window to display window by default (0% overscan)
- Add standalone EXR benchmark tool

Hotkey Editor:
- Replace read-only hotkey viewer with full interactive editor
- Click-to-capture key rebinding with conflict detection and warnings
- Persistent hotkey overrides saved to %LOCALAPPDATA%/xstudio/
- Search filtering, per-key and reset-all functionality
- Scrollbar for overflow content

Viewport Fixes:
- Fix SSBO shader debug colors (red/blue → black) for out-of-bounds pixels
- Fix FBO texture wrap mode (GL_CLAMP_TO_EDGE → GL_CLAMP_TO_BORDER)
- Fix overscan display: crop EXR data window to display window by default

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a Layer dropdown to the OCIO colour pipeline plugin that lets
users switch between EXR layers/AOVs (e.g. RGBA, sky, mask, displace)
directly from the viewport toolbar and right-click context menu.

The backend stream switching already existed — this wires it to the UI:
- New StringChoiceAttribute populated dynamically from media streams
- Sends current_media_stream_atom on selection change
- Base ColourPipeline stores media source actor ref for stream queries
- CLAUDE.md updated with correct plugin deployment paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant