Skip to content

v1.33.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 03:26
· 50 commits to main since this release

Added

  • New /fosfora/v1/section/boundary Signal address fires whenever the music changes
    material, carrying a confidence and the boundary's age in seconds. /section only ever
    spoke when its label changed, so a chorus following a verse was silent; this one is not.
    Gate on the confidence if false cues are costly — the top third of events are right about
    66% of the time against 38% for the bottom third.

Changed

  • Section boundaries are actually detected now. The self-similarity novelty had been
    computed and published for four releases without anything ever thresholding it, so the
    section stream announced 3.7 boundaries on a track averaging 12.3 — boundary accuracy
    0.105 → 0.503 on 374 Harmonix tracks, at 12.1 boundaries per track. Cues land about 6 s
    after the boundary they describe, and each event says so.
  • audio.section_novelty no longer sits pinned at 1.0. It was normalized against its own
    recent maximum, so unchanging music drove it to full scale — the opposite of what the name
    promises. It now reads near zero on steady material and rises only on real change. Anything
    bound to it will read lower and move more; rescale that binding if it looked right before.
  • Key detection now hears the actual key on EDM. It used to name an unrelated
    key more than half the time — quiet noise frames voted as loudly as drops, the
    chroma template manufactured subdominant energy, and the loudest content in the
    genre (kick and sub-bass) was either invisible or misread. The key path now
    energy-weights a clean fold and tracks the sub-bass root directly: 0.317 → 0.520
    MIREX-weighted on 604 GiantSteps EDM tracks, exact keys 153 → 272. Key readouts
    and key-driven palettes settle in about 3 s.
  • Beat and tempo tracking rebuilt. Beats fired on every loud onset whenever tempo
    confidence dipped — 1.5-1.7× too many, spraying beat-bound strobes — and drifted
    100+ ms late on misses; they now fire on a phase-locked grid (within ~10 ms on
    synthetic kicks) and go quiet through breakdowns instead of spraying. The detected
    tempo also commits to its level: double-kick and half-time-feel material no longer
    flips the readout between 172/115/86-style relatives mid-track, and the BPM value
    holds through breakdowns instead of blanking. EDM tempo accuracy rose 0.60 → 0.70
    (past offline madmom), tempi between analysis bins like 175 BPM became representable
    at all, and hard-stuck octave errors clear. Tracks now stay silent for the first few
    seconds until the tempo locks; /onset and the kick stem keep firing throughout.
  • Phosphor is now Fosfora, everywhere. Your config directory moves over automatically
    on first launch (settings, presets, scenes and mappings all come along), OSC output now
    uses /fosfora/... — incoming /phosphor/... is still accepted, and a legacy TX
    namespace option in the OSC panel keeps old rigs fed — and the from-source binary is
    fosfora (downloads were already named that). macOS asks for microphone permission once
    more (new bundle id); debug env vars are now FOSFORA_*. Custom shaders calling
    phosphor_* helpers keep working via deprecated aliases.

Added

  • Ableton Link (build option). Build with --features link and Fosfora joins your
    Link session: Follow mode locks the beat tracker's tempo to the session (beat phase
    still tracks the audio it hears), Lead mode pushes Fosfora's detected BPM to your
    other gear once it holds steady, and beat-synced scene advance rides the shared
    session grid. Works in --signal headless mode too (/fosfora/v1/link/*). Absent
    from the prebuilt downloads — Ableton Link is GPL-licensed, so it's a from-source
    option. Enable it in Settings → Ableton Link.
  • Signal: headless analysis broadcast. fosfora --signal runs the analysis engine
    with no window or GPU and broadcasts what it hears over versioned OSC
    (/fosfora/v1/...): beats and bars the hop they fire, BPM, key, build level,
    section labels (intro/build/drop/break/steady), phrase position on an inferred
    8/16/32-bar grid, and a predict/drop confidence that rises before the likely
    drop — lead time for the operator, with a confidence value on every stateful
    address. --signal-dump song.flac writes the same stream to a JSONL file,
    deterministically. See docs/SIGNAL.md.
  • Seamless beat-locked loop export. --render-loop <spec.loop.json> renders any
    phase-locked overlay to a mathematically seamless loop file — HAP, HAP Alpha (real
    transparency for Resolume/VJ software), ProRes 4444, H.264/HEVC — with beat/bar motion
    synthesized at an exact tempo (requested BPM snaps to the nearest frame-perfect one and
    both are reported). Non-loopable effects get explicit best-effort escapes
    (--allow-non-loop, --crossfade-bars with warmup). One CLI call replaces the After
    Effects loop-compositing grind; needs ffmpeg on PATH. See docs/loop-export.md.

Fixed

  • Intarsia filled the screen with tiles, then blanked and started over every few
    bars.
    Tiles now trade in and out individually on the bar clock, holding a steady
    mosaic with no reset. A new density param sets how much of the mosaic is lit at
    once; bars_per_cycle is now the turnover period — how often each tile trades.
  • A mistyped or unsupported command-line flag silently launched the full app
    window, GPU and all. Unknown flags now print an error and exit, --help and
    --version work, and a flag needing a build feature you don't have (like
    --signal-dump without --features analyze) says so by name. New --caps prints
    the features a binary was built with.

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 for network video output
  • Video playback (optional): ffmpeg on PATH for media layers

NDI® is a registered trademark of Vizrt NDI AB.