An audiovisual synthesis engine where organisms are catalysts in a petri dish. DNA determines how an organism transforms energy passing through it. The music is the reaction.
Built in Rust with wgpu rendering and cpal audio. Organisms consume spectral substrate (video + audio feedback), metabolize it through DSP cells, and deposit waste that other organisms eat. Behavior emerges from physics, metabolism, and Hebbian learning on a weighted affinity graph.
- Rust nightly —
rustup default nightly(seerust-toolchain.toml) - FFmpeg 8.x dev libs (optional, for video features) — set
FFMPEG_DIRenv var to the SDK path and ensure DLLs are on PATH
cargo build # debug build
cargo build --release # release build
cargo run # launch (eframe + wgpu window)
cargo test # all unit tests
RUST_LOG=debug cargo run # verbose logging| Flag | Default | What it gates |
|---|---|---|
ui-egui |
yes | egui panels, inspectors, ModuleUi trait |
audio |
yes | cpal audio I/O, DSP cells, MIDI, voice bus |
video |
yes | FFmpeg video input, substrate energy grid |
full |
no | audio + video (convenience alias) |
Audio-only build (no FFmpeg required):
cargo run --no-default-features --features ui-egui,audioL5 UX Shell egui panels, inspectors, presets
L4 Output Modules Voice DSP (cpal), blob SDF renderer
L3 Processing Pitch gravity, rhythm gravity, raga/gamaka quantizers
L2 Input Modules Keyboard, cursor, camera, audio analysis
L1 Routing Backbone AffinityGraph + SeedReactor + RoutingTable
L0 Module Contract ModuleCore trait, Signal types, PortId, cpal substrate
Every module implements ModuleCore. Signals route through the affinity graph. The reactor drives the tick cycle: Emit -> Route -> Deliver -> Learn. Audio runs lock-free on a separate thread via ringbuf SPSC channels.
10 organism species ship as DNA presets in assets/dna/:
| Species | Character |
|---|---|
dron |
Sustained drone, high substrate deposit |
sawl |
Sawtooth melodizer, raga-responsive |
acid |
Diode resonance, low waste output |
hoso |
Granular texture, Malabar cochin moon |
spgl |
Expanding universe, spectral glimmer |
tblk |
Tabla machine, rhythmic catalyst |
kkit |
909 drum kit |
rech |
Reich-inspired phase patterns |
isao |
Tomita-inspired synthesis |
melo |
Melodizer |
src/
app.rs # SolidoApp — trunk state + update loop
app_audio.rs # Audio-surface methods (cfg audio)
app_video.rs # Video-surface methods (cfg video)
main.rs # Entry point + eframe setup
module/ # ModuleCore trait, Signal, PortId
modules/ # Input/processing modules (keyboard, video, raga, tala...)
organism/ # DNA, cells, simulation, registry, chladni nodes
reactor/ # SeedReactor, RoutingTable, clock
affinity/ # Hebbian graph, emotion, ledger
dsp/ # DSP cells, commands, chaos noise
audio/ # Voice bus, mixer, reverb, tape delay, MIDI
substrate/ # Audio substrate, energy grid, ISF shaders
renderer/ # wgpu SDF rendering, font atlas, biofield
tuning/ # Gravity wells, pitch gravity, raga, scales
ui/ # Panel framework + all inspector panels
config.rs # Runtime config
sdf.rs # Signed distance field primitives
preset.rs # Preset save/load
recorder.rs # Frame capture + video export
samples/ # Sample registry + playback
spec/ # Session specs (source of truth for scope)
assets/ # DNA presets, fonts, scales, phrases, samples, video
tools/ # MSDF atlas gen, sample fetcher
Solido's classification layer lives in separate repos:
| Repo | Branch | What |
|---|---|---|
schema-substrate/cortex |
main |
CLI tool — cortex enter, cortex classify, cortex ingest |
schema-substrate/codex |
audit/external-review |
Vocabulary — primitives, species, traits, @context |
schema-substrate/solido |
main |
This repo |
# 1. Clone cortex CLI and link locally
git clone https://github.com/schema-substrate/cortex.git
cd cortex && npm link
# 2. In the solido directory, read the structural graph
cd /path/to/solido
cortex enter . --jsonCortex reads .agents/graph/ — a filesystem of typed JSON nodes classifying every module, asset, and spec by system and disposition. Each node is a file; git is the protocol.
The taxonomy classifies synth parameters through 5 primitives:
- NQI (quantitative identity) — continuous DSP params (freq, cutoff, resonance)
- SM (scoring/measurement) — character/quality fields (shape, brightness, waveform)
- TBA (temporal binding) — temporal structure (attack, decay, release, rate)
- AIR (external lifecycle) — metadata/provenance (preset name, bank, source)
- RDE (remainder/default) — passthrough (id, raw data)
AGPL-3.0