# Changelog

This page tracks significant user-facing changes to Exaplay 3. For a detailed commit-level history see the `CHANGELOG.md` file at the repository root.

***

## April 2026 (v3.x — Latest)

### New Features

| Feature                      | Description                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Readable User Panel URLs** | Each user panel now has a dedicated, slug-based URL derived from its title (e.g. `/main-stage-controls_panel.htm`). Slugs are auto-generated, kept unique within the project, and update automatically when a panel is renamed. A **Copy URL** (📋) button on each panel card in the Control View copies the full URL to the clipboard. The legacy `?panel=<title>` query parameter continues to work for backward compatibility. |

### Bug Fixes

| Fix                                                                                                  |
| ---------------------------------------------------------------------------------------------------- |
| Fixed overlapping visual representations when splitting an output across multiple screen assignments |

***

## February 2026 (v3.x)

**29 PRs merged · 300+ new tests**

### New Features

| Feature                           | Description                                                                                          |
| --------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Color Keying**                  | Professional chroma key with configurable key colour, tolerance, and edge softness                   |
| **Luminance Effect**              | Non-destructive brightness / contrast / gamma per clip                                               |
| **Data Tracks + ArtNet**          | Timeline keyframe automation with OSC, UDP, Control Panel, and **ArtNet (DMX512)** output. 109 tests |
| **Property Keyframes**            | Animate any numeric property (opacity, volume, effects) on the timeline. 82 tests                    |
| **NDI Output**                    | Stream any screen output as an NDI source using the Medialooks SDK                                   |
| **Spout Input**                   | Zero-latency GPU texture sharing from Resolume, TouchDesigner, OBS, Unity, and more                  |
| **Project Export**                | One-click ZIP archive of the project and all media files                                             |
| **Auto-Heal**                     | State saved every 2 s → `autoheal_state.json`; Watchdog restarts and restores playback after crash   |
| **Custom User Panel Builder**     | Operators build multiple tailored end-user pages with cues, controls, and devices                    |
| **School Logo Upload**            | Custom branding in the header via Settings → UI (PNG/JPG/SVG, max 2 MB)                              |
| **Client-Side Output Preview**    | Floating preview window showing live engine output at 2/4/10 fps                                     |
| **Performance Diagnostics Panel** | Floating panel with Engine FPS, CPU, RAM, VRAM, per-media buffer health                              |
| **Simple Mode**                   | Toggle in Control View for non-technical operators — friendlier labels, hidden advanced options      |
| **Setup Wizard**                  | Guided first-run configuration                                                                       |

### Performance Improvements

| Area                   | Improvement                                                                                         |
| ---------------------- | --------------------------------------------------------------------------------------------------- |
| **Frame Blending GPU** | Eliminated redundant uniform uploads across all media handlers — \~50 % fewer GPU state changes     |
| **Timeline Drag**      | RequestAnimationFrame throttling + DOM reference caching — \~20× fewer DOM queries/s                |
| **Intel QuickSync**    | Hardware H.264 decode on Intel GPUs (`decoder.quicksync=true`)                                      |
| **NDI PBO**            | Double-buffered Pixel Buffer Objects for async GPU→CPU reads — no synchronous `glReadPixels` stalls |
| **Preview Capture**    | Idle-timeout disable after 2 s of inactivity                                                        |
| **Diagnostics Panel**  | Timer stops completely when panel is closed — zero overhead when disabled                           |

### Bug Fixes

| Fix                                                                                        |
| ------------------------------------------------------------------------------------------ |
| Frame blending brightness oscillation (incorrect two-pass alpha compositing)               |
| Frame blending broken additive blend pass                                                  |
| Frame blending GL state corruption + HAP GPU sync stall                                    |
| Output windows TOPMOST enforcement while show mode is active                               |
| Settings modal — audio / timecode / comm tabs not loading or saving                        |
| Media copy/paste fix + "Duplicate Track" in context menu                                   |
| CueList styling inconsistencies                                                            |
| Memory leaks — 4 critical VRAM/RAM fixes (VAO destructors in 5 shader classes)             |
| Missing `broadcastEffectDeletion()` — Color Key & Luminance DELETE endpoints returning 500 |

### UI / UX Improvements

* Tab restructure: Play → Control, Plan → Monitor, Autocalibration → Autoalignment & Tools
* Consistent gradient backgrounds across Autoalignment, Control, and Monitor views
* Scheduler: timeline progress bars, colour coding, live clock, countdown timers, quick filters
* Warping dialog: keyboard arrow controls (fine 0.01, coarse 0.1), Tab cycling, spline (Catmull-Rom) interpolation, help panel
* Accessibility (WCAG 2.1 AA): ARIA labels, focus-visible outlines, skip link, `prefers-reduced-motion`, high-contrast
* ConnectionStatus component: real-time green/yellow/red WebSocket indicator
* Spout icons in CueList, file browser, and timeline segment thumbnails
* Segment preview improvements: repeating thumbnail tiles, loop-point indicator
* Output Preview button in header toolbar with active-state styling

### Security & Quality

* Dependency fixes: axios, form-data, lodash, brace-expansion, cross-spawn, follow-redirects
* Rate limiting on project export (5 req/min) and path-traversal prevention
* CodeQL: all new code scanned — 0 vulnerabilities
* ESLint auto-fixed across 136 files

### Test Coverage

| Stat                | Value |
| ------------------- | ----- |
| Backend test suites | 19    |
| Total tests         | 300+  |
| Pass rate           | 97 %+ |

***

## Earlier Releases

See `CHANGELOG.md` in the repository root for the complete history.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.exaplay.one/v3/developer-reference/changelog.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
