Releases: kevinraymond/fosfora
Release list
v1.36.0
Fixed
- Array, Cascade, Tesla, Tide and Vessel now look the same at any frame rate. Their
background glows were drawn at a fixed strength per frame and their trails drifted a fixed
distance per frame, so a 120 fps machine ran them brighter and smeared them further than a
60 fps one. Tesla was the worst in the set, at roughly 1.4x brightness. Nothing moves at
60 fps. - Tide's falling afterglow travelled twice as far per second at 120 fps as at 60, and the
effect passed its frame-rate check anyway: the check compared average brightness, which was
identical while the picture was not. It now compares the pictures. - Chaos, Mycelium and Murmur now look the same at any frame rate. Chaos's attractor traced
four times as much of its orbit per second at 120 fps as at 30, Mycelium's network skipped
half its branching opportunities below 60 fps and grew visibly sparser, and Murmur's flock
swung onto its heading faster the higher the frame rate. Nothing moves at 60 fps.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.35.0
Fixed
- Feedback backgrounds no longer change brightness with the frame rate. The 14 effects
that accumulate particles into a trail — Cascade, Tesla, Mycelium and others — settled at
about half their intended brightness at 30 fps and double at 120. Measured on Cascade:
47.7% spread across 30/60/120 fps, now 6%. Nothing moves at 60 fps. - Particle ribbon trails last the same time at any frame rate. Cleave, Tide and Vessel
measured their trails in frames, so a trail running 267 ms at 60 fps stretched to 533 ms
at 30 and shrank to 133 ms at 120. - Panorama's graticule no longer brightens or smears with the frame rate. Its centre and
edge guides were drawn at a fixed strength per frame, and its echo drifted a fixed distance
per frame, so the reference line the effect exists to provide got both stronger and wider
the faster your machine ran. Brightness spread across 30/60/120 fps drops from 59% to 1%. - Ascend's horizon wake rises at the same speed on any machine. The afterglow climbed a
fixed distance every frame rather than every second, so it travelled twice as far per
second at 120 fps as at 60. Brightness spread across 30/60/120 fps drops from 14% to 2%. - Diffusion blur is measured in seconds now, so Protea's bodies, Sumi's ink and
Polycephalum's network smooth at the same rate however fast the machine runs. Protea's
brightness spread across 30/60/120 fps drops from 41% to 18%.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.34.0
Fixed
- Trail and feedback effects measure trail length in seconds now, not frames, so the same
preset looks the same on a 30 Hz laptop and a 240 Hz desktop — at a decay of 0.82 the image
surviving one second ran from 2.6e-3 at 30 fps to 2.1e-21 at 240. Nothing changes at 60 fps;
above it, feedback backgrounds that accumulate particles settle brighter than they used to,
and below 30 fps trails run a little long instead of flashing dark on a stutter. - The drop event fires on drops now — it had gone off once in 141 reference drops across
374 tracks, because it demanded 4 seconds of unbroken build-up before it would even watch
for one. On nine hand-labelled EDM tracks it now catches 7 of 23 drops at three wrong cues
for every right one; it still fires on build-ups and breaks. The audio panel's Drop sliders
trade sensitivity against false cues. - The drop jump window now lasts the 1.5 seconds it always claimed. It was sized against
the analysis rate but filled at a tenth of it, so the setting was off by nearly ten times —
and by different amounts at different sample rates (12.9 s at 44.1 kHz, 14.1 s at 48 kHz).
Added
- Two new Drop sliders in the audio panel: "Arm hold" keeps the drop armed through a cut
before the drop, for material where the build-up drops out entirely first (off by default);
"Jump window" sets how far back the loudness-jump baseline looks.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.33.0
Added
- New
/fosfora/v1/section/boundarySignal address fires whenever the music changes
material, carrying a confidence and the boundary's age in seconds./sectiononly 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_noveltyno 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;/onsetand 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 nowFOSFORA_*. Custom shaders calling
phosphor_*helpers keep working via deprecated aliases.
Added
- Ableton Link (build option). Build with
--features linkand 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--signalheadless 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 --signalruns 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 apredict/dropconfidence that rises before the likely
drop — lead time for the operator, with a confidence value on every stateful
address.--signal-dump song.flacwrites 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-barswith 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 newdensityparam sets how much of the mosaic is lit at
once;bars_per_cycleis 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,--helpand
--versionwork, and a flag needing a build feature you don't have (like
--signal-dumpwithout--features analyze) says so by name. New--capsprints
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.32.0
Added
- A new Overlay effect family: Tessera, Fenestra, Reticle, Bezel and Astrolabe. HUD-style
chrome — tile reveals, snapping panels, targeting crosshairs, border instrumentation, and
a full-frame targeting-array set piece — builds accelerate them, drops strobe them —
rendered with real transparency and locked to the beat and bar clock rather than the
wall clock. Layer them over other Fosfora effects, or over anyone else's content in
Resolume/OBS via Spout, Syphon or NDI with Output alpha set to Passthrough. They live
in their own Overlay group in the effect browser. - Overlays that see what's beneath them: Limn and Intarsia. A new
@backdropinput
hands an effect the live composite of every layer below it — Limn traces the content's
edges with dashes marching in time, Intarsia fills its color patches with beat-revealed
mosaic tiles that take their colors from what they cover. Layer them over any effect or
media layer; solo they draw nothing (there is nothing beneath to see). - The output can carry real transparency. Settings → Output alpha adds Auto /
Opaque / Luma key / Passthrough: Passthrough sends the scene's actual (premultiplied)
alpha to every sink — NDI, Spout and Syphon all transport it, so Fosfora can be keyed
over other content in Resolume or OBS without chroma tricks. Auto keeps existing
setups exactly as they were. See docs/alpha.md; the v4l2 virtual camera stays opaque
(the format has no alpha). - Shaders can now count bars and beats. The uniform block gains
bar_indexand
beat_index— monotonic counters that step exactly whenbar_phase/beat_phase
wrap, so multi-bar patterns (bar_index + bar_phaseas a running bar clock) are
expressible for the first time. ABI:PhosphorUniformsgrows 432 → 448 bytes; shaders
using the auto-injected block need no changes, hand-declared copies must append the
two fields plus two pad slots.
Fixed
- Beat-length scene transitions now run at the right speed. A cue with
transition_beatsset resolved its length against a normalized tempo value, making
transitions 300× too slow — at 120 BPM a 4-beat dissolve took 10 minutes instead of
2 seconds, silently, live and in--render-scene.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.31.0
Added
- Fosfora is now a virtual camera on Linux. Enable it under Settings → Outputs and any
V4L2 consumer — OBS, Zoom, browsers, ffmpeg — sees the live output as a webcam. Needs the
v4l2loopbackkernel module (the panel shows setup instructions when it's missing);
defaults to browser-compatible YUYV, with a BGRX passthrough option. - Spout output on Windows. Enable it under Settings → Outputs and Spout-aware apps —
Resolume, OBS, TouchDesigner — see Fosfora as a live texture source named "Fosfora"
(configurable). No runtime to install; it follows window resizes, and failures show in
the panel instead of failing silently. - Syphon output on macOS. Enable it under Settings → Outputs and Syphon-aware apps —
VDMX, OBS, MadMapper, Magic — see Fosfora as a live texture source named "Fosfora"
(configurable). The Syphon framework ships inside the app bundle, so there is nothing
to install; it follows window resizes, and failures show in the panel.
Fixed
- Minimizing the window no longer crashes the app when an output is streaming. On
Windows, minimize arrives as a zero-size resize; with NDI (or any output) active this
killed the app outright. Outputs now hold their last real size while minimized — the
stream keeps playing uninterrupted. - A failed NDI sender no longer looks healthy. If the sender died after startup, the
status dot stayed green with zero frames sent; the panel now shows the failure in red
and the dot goes off. It also reports frames sent and frames dropped while streaming. - Scene cues' per-cue parameter overrides and beat-length transitions now work. A cue
that overrode layer parameters played back exactly like the plain preset — the field
saved, loaded, validated, and did nothing — andtransition_beatswas likewise ignored,
every transition using its length in seconds. Overrides now apply when the cue loads
(including presets with media still decoding), morph transitions land on the overridden
values, and in Beat Sync mode a transition given in beats follows the detected tempo.
Locked layers keep their live values, as on preset load.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.30.0
Changed
- The binding templates were rebuilt around what actually reads on screen. Each one now
drives four axes — impact, colour, motion and size — and picks its params by meaning
rather than by position, so no template sweeps a mode selector or strobes the trail
buffer. Audio Reactive follows percussive hits instead of the kick band, which fired
all the way through sustained bass. New Ambient template for pads and drones, where
the beat-driven ones sit still. Picking a second template now replaces the first on any
parameter they share instead of leaving both fighting for it. - You can now make a binding by clicking one. Click a source in the binding matrix, then
a target — or the other way round — and the binding is created and opened. Both columns
gained a filter box, so finding one of ~330 sources or ~150 targets no longer means
scrolling, and the target list starts collapsed.
Fixed
- Reordering or deleting a layer left its bindings behind on the old slot, so an
audio source that drove one effect silently started driving whichever effect moved into
its place. Deleting was worse: every binding above the removed layer shifted down onto
its neighbour. Bindings now move with their layer, and a deleted layer takes its own
with it. - The binding matrix now names the layer and effect it is editing, in the header and on
every parameter group, and flags a binding whose target no longer exists — changing a
layer's effect used to leave bindings that looked fine and did nothing. - "Collapse all" in the binding matrix skipped the per-layer parameter groups — the
longest ones on screen — whenever more than one layer was loaded. - Switching layers while a particle source file dialog was open dropped the image, video or
model onto whichever layer you had moved to, not the one that asked for it. The same
applied to loading a morph target. - Recalling a preset left a hand-loaded webcam, video or model running on any layer the
preset didn't name a source for. A preset now returns those layers to the source their
effect declares.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.29.0
Added
- Reliquary, the 48th effect — a form that holds light. It splits your image, video or
model in two and gives each half its own physics: solid surface springs home and holds
still, while the light escaping it streams outward, fades and recycles, several times
brighter than it arrived. Shed moves the line between them, from a crisp form to one
dissolving entirely into flow. - A light you can put inside a model. A model particle source can now be lit by a
movable point light instead of the fixed key light: park it inside a skull and the outer
bone stays dark while the eye sockets glow, and Rays streams shafts of light out of
the openings. The shafts are sampled into particles like everything else, so they are
made of the same stuff the model is. At Light mix 0 a model looks exactly as before.
Fixed
- Loading a picture, video or webcam over a 3D model left the panel still naming the model
and its pose sliders on screen, and the next slider move re-sampled the model back over
your picture. Switching particle sources now retires the previous one in every direction.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.28.0
Added
- 3D models are now a particle source. Point Raster, Morph, Pegboard or Etch at a
.glb/.gltfmesh or a.ply/.splatcapture with the new Model… button, and it
is re-made in that effect's medium — your own scan, as pegs or as scratched aluminium.
Yaw, Pitch, Zoom and Ambient set how it is framed; meshes are shaded from their own
surface normals, captures keep their captured colour. In Morph a model becomes a morph
target you can blend to, via the new Model button in the target row. Models are
saved and restored with presets, pose included.
Fixed
- Swapping to a particle source that samples fewer points left the previous source's
particles stranded on screen — pegs from an old model pose kept standing after a
re-sample. The tail of the source buffer is now cleared, so they die as intended.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.
v1.27.0
Added
- Pegboard — your image, video, GIF or webcam re-made as a backlit peg toy. Samples
snap to a square lattice, an ordered dither decides which holes carry a peg, colour
quantizes to an eight-peg tray, and kicks shower pegs out of the board. Set Polarity
to 0 for a photograph on a light background, 1 for artwork on black. - Etch — the same sources scratched into aluminium powder one stroke at a time. The
stylus zigzags along a handful of scan lines and swings wider where the picture is dark,
advancing with the music, then the board is shaken clean and it starts over. Clear
cycle sets the seconds between shakes; pull it to zero to hold the board blank and
raise it to let the drawing build. Polarity works the same way as Pegboard's. - You can now change the source media for Raster, Pegboard and Etch from the Particles
panel — a built-in picker plus Image… and Video… buttons, with the live source
named underneath. Previously only Morph could load media, and every other image effect
was stuck on whatever its effect file named.
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):
ffmpegon PATH for media layers
NDI® is a registered trademark of Vizrt NDI AB.