v0.3.8
kevinraymond/fosforav0.3.8Feb 27, 2026by github-actions[bot]
AI Summary
Adds webcam input layers and infrastructure for runtime particle shader management.
Key Highlights
- Webcam input layers with cross-platform support via nokhwa
- ParticleSystem::set_compute_shader() infrastructure
- Combined 'All Media' file filter
- Image scatter shader physics update
New Features
- Webcam layers
- Particle shader management
- Media file filter changes
Full Release Notes
### Added - **Webcam input layers** — live camera feed as a compositing layer (`--features webcam`), cross-platform via nokhwa (v4l2/AVFoundation/MediaFoundation) - Capture thread with bounded channel, automatic frame drain (latest-only) - "+ Webcam" button in layer panel, webcam controls panel (device name, resolution, mirror, disconnect) - Preset save/load with webcam device reconnection - `ParticleSystem::set_compute_shader()` and `clear_customization()` for runtime particle shader management (infrastructure for future particle design system) - **Combined "All Media" file filter** — media file picker defaults to showing all supported types (images + video) when video feature is enabled ### Changed - **Image scatter shader** — spring-damper physics with hardcoded constants, random scatter direction on beat, skip transparent particles, remove audio color shift (preserve original image colors) - CI: add `libclang-dev` dependency, clippy/test/build steps for `webcam` feature, release builds include `webcam` feature ### Fixes - Fix NDI runtime discovery on macOS — remove non-existent versioned dylib names, skip `exists()` check (works around NDI 6.0.0 installer permissions bug), add `/opt/homebrew/lib` + `NDI_RUNTIME_DIR_V6`/`V5` env vars, show searched paths in UI when not found - **Webcam robustness** — validate camera access before spawning capture thread (user-friendly EBUSY error), catch libjpeg panics on corrupted MJPEG frames (skip frame instead of dying), detect dead capture threads with status bar notification, clean up capture when deleting webcam layers ## 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](https://ndi.video) for network video output - **Video playback** (optional): `ffmpeg` on PATH for media layers --- NDI® is a registered trademark of Vizrt NDI AB.