v2.4.0

kevinraymond/fosforav2.4.0Oct 11, 2026by github-actions[bot]

Upgrading?

AI Summary

This release adds checksums and provenance to downloads, introduces eight new trama visual effects, improves audio analysis independence from sample rates, and adds input trimming and a level meter to the Audio settings.

Key Highlights

  • Release downloads now include SHA256 checksums and signed build provenance for verification.
  • Eight new trama nodes added, including Strobe, Invert, Posterize, Threshold, Sharpen, Tile, Dither, and CRT.
  • Audio analysis no longer depends on input sample rate, with new `tempo_confidence` and `beat_locked` properties.
  • Added input trim and a level meter to Setup > Audio.

Breaking Changes

  • The `rolloff`, `bandwidth`, and `zcr` audio features now use a different axis range (octave-based) instead of 0–1, requiring updates to bindings and shaders.

New Features

  • Release downloads include SHA256SUMS and signed build provenance.
  • Eight new trama nodes (Strobe, Invert, Posterize, Threshold, Sharpen, Tile, Dither, CRT).
  • New `tempo_confidence` and `beat_locked` properties available to effects, bindings, and OSC clients.
  • Input trim and level meter added to Setup > Audio.
  • Audio analysis runs independently of input sample rate, fixing jitter and resolution issues.

Full Release Notes


Audio analysis no longer depends on the input sample rate, the beat grid reports whether it can be trusted, input trim and a level meter join Setup, eight new trama nodes, and release downloads ship with checksums and provenance.

### Added
- **Release downloads come with checksums and signed build provenance.** Each release now includes a `SHA256SUMS` file, and every asset carries a provenance attestation, so you can check that a download is the one CI built from the tagged source (`sha256sum -c SHA256SUMS`, or `gh attestation verify <file> --repo kevinraymond/fosfora`).
- **Eight new trama nodes.** Strobe flashes on the tempo grid, the kick or any hit, in any color, as a blackout or as an invert, and stays within the flash limit set in Settings. Invert, Posterize, Threshold, Sharpen, Tile, Dither and CRT cover the other staple looks.
- **`tempo_confidence` and `beat_locked`**, so effects, bindings and OSC clients can tell whether the beat grid is trustworthy, for example to keep a strobe off until the tempo locks. Signal also sends them as `/fosfora/v1/bpm/confidence` and `/fosfora/v1/bpm/locked`. `AudioFeatures` grows from 83 to 85 slots (332 → 340 bytes); the shader uniform block stays 448 bytes because the two values take its former padding, so existing shaders need no changes.
- **Input trim and a level meter in Setup › Audio.** Lift a quiet line or mic input off the silence gate, or tame a hot one, by up to 24 dB; the trim changes only what the analysis hears, so recordings keep the source level. The meter reads the input before the trim and lights CLIP when the source itself is clipping.

### Fixed
- **Audio capture could drop out when the system was short on memory.** The capture callback allocated memory each time the device delivered audio, which can stall the realtime audio thread. It now writes straight into the capture buffer, and that buffer is no longer shared between threads unsoundly.
- **Audio analysis stalled while the tempo or build-up/drop settings were on screen.** Each analysis step waited for the UI to finish drawing those settings, adding timing jitter to beats. It now keeps using the previous settings for that step instead of waiting.
- **A quick slider drag in the web remote could stop short of where it was let go.** The last value of a fast drag was sometimes never sent, so the app kept an earlier one and the slider jumped back a second later.
- **Audio analysis behaved differently depending on the input's sample rate.** At 48 kHz, feature ranging, tuning and the bass-note tracker ran on windows tuned for 44.1 kHz, and above 88.2 kHz every band had half its frequency resolution, leaving `sub_bass` about two FFT bins. Input above 88.2 kHz is now halved before analysis and the remaining windows follow the actual rate; `buildup` also updates at its intended 10 Hz instead of 9.6 Hz.
- **`rolloff`, `bandwidth` and `zcr` only used a sliver of 0–1**, so anything bound to them barely moved. They now share the octave-based axis `centroid` uses (a clean 440 Hz note reads about 0.4 on `rolloff` and `zcr`, white noise about 0.9), and `bandwidth` is the spread around `centroid`, from 0 for a pure tone to about 0.8 for pink noise. Built-in effects are retuned to match; re-set the ranges of your own bindings or shaders that read these three.

## 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 Fosfora.app to Applications (or run directly). Signed and notarized.

**Linux / Windows**: Extract, run `fosfora` 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.

Related Repositories