v0.3.11
Added
- Async preset loading — presets with media/video layers decode in a background thread, keeping current content playing; atomic swap on completion with pulsing status bar indicator and preset button highlight
- Generation-based cancellation for rapid MIDI preset cycling (only final preset applies)
Fixed
- Webcam layer preset ordering — loading a preset with a webcam layer no longer appends it to the end of the stack; webcam content is now placed in-place at its correct index, preventing extra stray layers and layer count growth on repeated save/load cycles
- Webcam decode panic hardening — backoff (50ms sleep) after corrupted frame decode panics to avoid hammering a broken camera; auto-stop capture thread after 10 consecutive panics with user-visible error log
- Log GPU present mode and available modes on startup for easier driver issue diagnosis
- Clippy
never_looplint — replacewhile+breakwithmatchdrain-and-retry in preset loader, unblocking CI for v0.3.11 release
Downloads
| Platform | File | Notes |
|---|---|---|
| macOS | .dmg |
Universal binary (Apple Silicon + Intel) |
| Linux x86_64 | .tar.gz |
glibc 2.35+ (Ubuntu 22.04+, Debian 12+) |
| Windows x64 | .zip |
Windows 10+ |
Getting started
macOS: Open the DMG, drag Phosphor.app to Applications (or run directly). Signed and notarized.
Linux / Windows: Extract, run phosphor from the extracted directory. The assets/ folder must be next to the binary.
Requirements
- GPU: Vulkan (Linux/Windows) or Metal (macOS)
- Audio: Built-in mic or line-in for audio-reactive visuals
- NDI® (optional): NDI® SDK runtime for network video output
- Video playback (optional):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.