v1.11.0

kevinraymond/fosforav1.11.0Jul 20, 2026by github-actions[bot]

AI Summary

Introduces 3D cellular automata (Lattice) and volumetric rendering, along with a major UI overhaul.

Key Highlights

  • New Lattice effect featuring 3D cellular automata as volumetric effects.
  • Volumetric Mode enables ray-marched particle density for fog/nebula looks.
  • New Polycephalum effect using 12-species slime-mold warfare.
  • Unified param-row system and improved effects browser.

New Features

  • Lattice 3D Cellular Automata effect
  • Volumetric rendering mode
  • Polycephalum effect
  • UI overhaul (shared param system, effects browser)

Full Release Notes


### Added
- **Lattice — 3D cellular automata as selectable volumetric effects (flagship)** — a voxel grid of cells evolving by 3D birth/survival rules into self-organising structures: growing crystals, pulsing organisms, expanding shells, collapsing caverns. Unlike the 2D fields, the CA state *is* the 3D volume. Ships as eight browsable effects — Clouds, Crystal, Pyroclastic, Architecture, Coral, Builder, 445 and Pulse — at a selectable 32³–256³ resolution, with a contextual **Lattice (3D CA)** panel for live rule, grid, seeding and look controls.
- **Lattice presets sculpted so they stop collapsing into a featureless ball** — density is blended into the volume over time so fast rules fade rather than strobe, growth runs at a rate per *second* with a per-preset silence floor, an optional spherical domain kills the cube silhouette, and cell age shifts hue. The ball itself is fixed by a **per-cell lifetime** (new Lifetime slider) that keeps the structure turning over; four presets whose rules a lifetime cannot sculpt were replaced with ones it can — Amoeba → **Builder**, Architecture → **Chunky**, Crystal → **Brain**, Coral → **Shells**.
- **Volumetric Mode — particle density 3D ray marching** — a global toggle that renders any particle effect as a continuous fog or nebula instead of discrete dots: the app's first true 3D-volumetric look, and the prerequisite for Lattice. Dense regions cast shadows, so the cloud shows real 3D form rather than the flat uniform glow self-emission alone produces. Controlled from a **Volumetric (R3)** panel section and over OSC; `beat_phase` pulses density, `kick` bursts emission, `rms` drives absorption.
- **Polycephalum — 12-species slime-mold warfare keyed to the chroma vector** — twelve competing physarum organisms, one per pitch class, flood the screen with veined pulsing networks and fight for territory. Loud pitch classes move faster and deposit more, semitone neighbours repel while fourths and fifths cooperate, so a key change makes one colour visibly conquer another's ground. The first effect to consume the full 12-element chroma vector. Verified at ~59 FPS with 500K agents.

### UI
- **One shared param-row system across every panel** — the side panels had grown five incompatible "label + control" idioms, with labels riding inside sliders at varying offsets and a label column so narrow that Settings resorted to two-line labels, so nothing aligned column to column and the Audio tuning sections read as a zig-zag. Every row now shares one `label | control | value` grammar. Also replaces three byte-indexed name truncations that would *panic* on a multibyte name at the cut boundary.
- **Effects browser — search, type filter, favorites, readable names** — with 38 effects in a fixed 3-column grid and a 10-character cut, the browser was a wall of "Lattice A… / Lattice C…" clones. Adds type-ahead search (never auto-focused, so live typing is never hijacked mid-set), a clickable type filter, and a pinnable ★ favorites row persisted across sessions. Long names drop the grid to 2 columns and get a 22-character cut, so "Lattice Architecture" fits whole.
- **Lattice panel grouped** — ~28 always-visible rows became 8 rows plus four collapsible groups, with Rule, Grid size, Reseed and Randomise — the things you actually reach for live — kept on top.
- **Volumetric and Post-Processing panels extracted and aligned** — the last two right-panel sections without their own file, now grouped and on the shared row system.
- **One Triggers table for MIDI and OSC** — the ten mappable actions were listed twice, once inside each protocol's subsection, in two scrolls of near-identical UI and two places to look when checking what a controller button does. They are now a single table (action, MIDI badge, OSC badge) in its own collapsed **Triggers** section.
- **Binding matrix — cards get names and a no-signal warning** — a collapsed card showed only the enable dot, transform pills and meters, so an unnamed binding read as just "~ Smooth". Cards now lead with the binding's name and flag an enabled binding whose source isn't in the live snapshot — an unplugged controller or an un-substituted template previously just silently did nothing. Also fixes a per-frame memory leak, an idle expanded card rewriting the bindings file every second, and a duplicate-id collision where deleting one card removed two.
- **Binding matrix — cables stay in their bay, popups stop closing the overlay** — cables to rows scrolled out of view drew straight across the header, footer and neighbouring columns; they are now clipped, with off-screen endpoints drawn as faded stubs. Selecting an item from a picker that overhangs the panel edge no longer dismisses the entire overlay, and Escape now closes an open popup before it closes the matrix.
- **Binding matrix — live-workflow polish** — applying a template now switches to the tab where its bindings actually land (they were created in the other tab, reading as "nothing happened"); the MIDI Faders template substitutes a live device name instead of producing eight permanently-dead wildcard bindings; cards group by target instead of creation order; a Duplicate button clones a binding under a fresh id, the fastest way to build "same source, three targets" stacks; and hovering a card brightens its cables and dims the rest.

### Documentation
- **`AUDIO-FEATURES.md` — plain-English reference for all 74 audio features** — what each feature *means* musically rather than how it is computed, written for a VJ or musician deciding what to hook a slider to and anchored to named sounds ("a held synth pad sits near 0, a snare or white-noise sweep sits near 1"). Every entry carries a source: a paper or standard, a librosa descriptor, an explicit "no published algorithm" label so a heuristic is never dressed up as research, or a port note. All 41 links were verified to resolve, with archived snapshots where a canonical URL has rotted.

### Fixed
- **Stale audio documentation corrected** — `TUTORIALS.md` still described the pitch and spectral-contrast features as reserved and reading `0.0`; both have been live since v1.10.0. Both `TUTORIALS.md` and `TECHNICAL.md` also described adaptive normalization as "running min/max", which is the pre-A2 normalizer rather than the shipped one.

## 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.