____ _ _____ _
| __ )(_) ___ ___ _ __ __ _ ___ _ _| ____|_ __ __ _(_)_ __ ___
| _ \| |/ _ \ / __| '__/ _` |/ __| | | | _| | '_ \ / _` | | '_ \ / _ \
| |_) | | (_) | (__| | | (_| | (__| |_| | |___| | | | (_| | | | | | __/
|____/|_|\___/ \___|_| \__,_|\___|\__, |_____|_| |_|\__, |_|_| |_|\___|
|___/ |___/
Author: alejoduque Aesthetic: Lawrence English Ambient / Elektron-style Performance + Parliament of All Things
A live audiovisual instrument that transforms Ethereum blockchain transactions into evolving ambient soundscapes and reactive visualizations. Every control parameter simultaneously drives SuperCollider audio synthesis and 12 visual modules (slots 0–9 + slots P and F) via a bidirectional OSC/WebSocket bridge.
The instrument couples three nominally-distinct domains into a single feedback loop:
- Blockchain — live Ethereum transaction flow (
eth_sonify.py) drives beat density, CO₂/myco/nutrient overlays, and consensus modulation. - Parliament — voting events (pass / fail / emergency / trigger) pulse the visuals and modulate consensus brightness across all slots.
- Ecology — the Phenological Calendar (slot P) reads the IUCN Red List and a 572-species inventory from Reserva Manakai (Planeta Rica, Córdoba, Colombia); its current day-of-year and active-species fraction feed
harmonicrichandtexturedepthback into the SuperCollider audio engine. - Assemblage — Sympoiesis (slot F) is the poetic reverse of the calendar: a full-3D deep-ecological assemblage of concept-monads, living mycorrhizal filaments, and travelling affects (carbon, fósforo, nitrógeno) with poetic text that surfaces and fades. It reads the five performance controls (Master Vol, Pitch Shift, Time Dilat, Spectral Sh, Spatial Sprd) and live ETH inflow (
txInfluence) directly each frame — the same numbers that grow the drone — so image and sound move as one. Its accumulated vitality feeds back intodronedepth/dronemix/atmospheremix/harmonicrich, deepening the basic drone as the network teems.
Sound, code, and species become parts of the same instrument — read and played simultaneously.
ETH Blockchain
│
▼
eth_sonify.py (web3 Python scraper)
│ OSC → UDP:57120
▼
SuperCollider
├─ 1_server_config.scd MOTU/CoreAudio auto-detect
├─ 2_midi_control.scd Faderfox LC2 → ~buses (20 CC)
├─ 3_synthdefs.scd SynthDefs (opalKick/Perc/Drone/Dust/Bell)
├─ 4_gui.scd SC GUI knobs (20 params, amber palette)
├─ 5_beat_engine.scd Evolving beat engine (TX-driven melodic pool)
├─ 6_osc_handlers.scd OSC in from HTML/bridge → ~buses
└─ audio out → MOTU 828x or CoreAudio stereo
│
│ OSC echo → UDP:3333 (~visualsDest)
▼
parliament-bridge.js (Node.js, OSC↔WebSocket)
│ UDP:3333 ← SC / MIDI echo
│ WS:3334 ↔ browser
│ HTTP:3335 /diag
│
│ SC_TO_CH path translation:
│ /soneth/* → /ch/setXxx (method-trigger)
│ /parliament/* and /agent/* → raw pass-through
│
▼
nw_wrld Electron browser (parliament.html)
│
├─ HTML sliders (34 sliders, 4 rows + Beat Engine)
│ └─ input → sendOSC → WS → bridge → SC bus
│ └─ patchStoreFromSlider → __applySonethToViz (DIAG-tracked)
│
├─ SC echo → onmessage → __applySonethToViz (DIAG-tracked)
│
└─ applySonethToViz(key, v) ─────────────────────────────────────────┐
│ │
├─ Slot 0 ParliamentStage.js (Three.js) │
├─ Slot 1 AsteroidWaves (p5.js) → __slot1Soneth │
├─ Slot 2 LowEarthPoint (Three.js) │
├─ Slot 3 PerlinBlob (p5.js) → __slot3Soneth │
├─ Slot 4 TimeTravel (p5.js) → __slot4Soneth │
├─ Slot 5 DynamicGraphs (p5.js) → __slot5Soneth │
├─ Slot 6 DynamicOptimality (p5.js) → __slot6Soneth │
├─ Slot 7 Geometry (p5.js) → __slot7Soneth │
├─ Slot 8 MemoryHierarchy (p5.js) → __slot8Soneth │
├─ Slot 9 Hashing (p5.js) → __slot9Soneth │
├─ Slot P PhenologicalCalendar (Three.js · fetched module) │
└─ Slot F Sympoiesis (Three.js · fetched module) ──────┘
MIDI (Faderfox LC2) ──► SC buses ──► OSC echo ──► bridge ──► browser
Every parameter change is reflected across all three control surfaces:
HTML slider ──► SC bus ──► SC GUI knob (visual update)
└──► OSC echo ──► HTML slider (position sync)
└──► applySonethToViz (10 slots)
MIDI CC ────► SC bus ──► SC GUI knob (visual update)
└──► OSC echo ──► HTML slider (position sync)
└──► applySonethToViz (10 slots)
SC GUI knob ► SC bus ──► OSC echo ──► HTML slider (position sync)
└──► applySonethToViz (10 slots)
| Surface | File | Params | Notes |
|---|---|---|---|
| SC GUI | 4_gui.scd |
20 knobs | Amber palette, sends echo to bridge on change |
| HTML GUI | parliament.html |
34 sliders + vote buttons | 4 rows sonETH + Beat Engine + Parliament/Species/eDNA/Fungi |
| MIDI CC | 2_midi_control.scd |
20 CC (Faderfox LC2) | Rows 1–4, CCs 0–9 and 37–41 |
| ETH data | eth_sonify.py |
live blockchain | TX density, gas price, CO₂ proxy — drives beat + visuals autonomously |
10 core sonETH parameters × 10 visual slots = 100 bindings. Every slider/knob/CC drives both SC audio buses and all visualizations simultaneously.
| Param | MIDI CC | SC Audio | Slot 0 Parliament | Slot 1 Asteroid | Slot 2 LowEarth | Slot 3 Perlin |
|---|---|---|---|---|---|---|
| volume | CC 0 | master volume | pt light intensity | wave stroke alpha | white cloud opacity | stroke opacity |
| pitchShift | CC 1 | freq ±2 oct | species Z amplitude | lane X offset | cloud Y-stretch | noise intensity |
| timeDilation | CC 2 | env stretch ×0.5–6 | orbit speed | noise X zoom | rotation damping | cycle frames |
| spectralShift | CC 3 | LPF sweep 80–3000 Hz | bloom threshold | amber-cyan tint | line hue shift | layer compression |
| spatialSpread | CC 4 | quad pan L↔R | camera distance | lane spread | lines XY spread | blob X/Y offset |
| textureDepth | CC 32 | granular density | film grain | grid line density | point size | stroke weight |
| atmosphereMix | CC 33 | reverb 0–0.9 | afterimage damp | background ghosting | red cloud opacity | layer count |
| memoryFeed | CC 34 | delay feedback 0–0.8 | bloom strength | ghost trail alpha | red lines opacity | ghost alpha |
| harmonicRich | CC 35 | FM ratio 0.1–8 | lissajous complexity | harmonic overlay | Bézier Z-scale | hue drift |
| resonantBody | CC 36 | filter Q 0.1–0.8 | chroma aberration | peak dot glow | red cloud scale | inner weight |
| Param | Slot 4 TimeTravel | Slot 5 DynGraphs | Slot 6 Splay | Slot 7 Geometry | Slot 8 MemHier | Slot 9 Hashing |
|---|---|---|---|---|---|---|
| volume | trace + marker alpha | connection + node alpha | beam + node alpha | ray brightness | block/text visibility | scanline visibility |
| pitchShift | sinusoidal trace modulation | vertical gravity center | root Y + layer spacing | ray angular amplitude | layer vertical spacing | bucket vertical offset |
| timeDilation | scroll speed, radar spin | overdrive speed | root float, snap force | grid anim + drift speed | hex refresh rate | hash mutation speed |
| spectralShift | trace color phosphor→cyan | center pull, glitch scale | breathing amplitude | sweep color amber→cyan | per-layer color shift | glitch tears + text rotation |
| spatialSpread | vertical lane range | spring rest length | tree horizontal width | ray Y lane distribution | layer width distribution | key↔bucket column spread |
| textureDepth | grid density, radar rings | radar arc opacity | grid weight, node rotation | grid density, radar sub-rings | inner grid density | scanline intensity |
| atmosphereMix | ghosting depth | afterimage depth | scan column opacity | ghosting depth | afterimage depth | afterimage depth |
| memoryFeed | background trail alpha | background trail alpha | background trail alpha | background trail alpha | background trail alpha | background trail alpha |
| harmonicRich | echo traces, diagonal grid | node color white→amber | beam color intensity | harmonic echo rays | crosshatch density | collision line weight |
| resonantBody | marker glow + resonance rings | outer glow rings | node wireframe size | target crosshair + outer rings | CRT border opacity | bucket border stroke |
| txInfluence | glitch probability, chromatic tears | jitter + glitch lines | beam distortion tears | glitch distortion tears | block displacement glitches | collision amplitude + tears |
Each Row 3–4 parameter is assigned a distinct "hero" role in a specific slot while still updating all slot globals:
| Param | MIDI CC | SC Audio | Hero Slot | Visual Effect |
|---|---|---|---|---|
| masterAmp | CC 5 | master amplitude | Slot 5 DynGraphs | node box size + glow brightness multiplier |
| filterCutoff | CC 6 | filter cutoff | Slot 5 DynGraphs | connection distance range (low=only close nodes link) |
| noiseLevel | CC 7 | noise amount | Slot 7 Geometry | background grid warp distortion amplitude |
| noiseFilt | CC 8 | noise filter | Slot 7 Geometry | number of eco sweep lines visible (1→4) |
| droneDepth | CC 9 | drone intensity | Slot 0 Parliament | radar grid breath scale; Slot 4: inner ring count (2→8) |
| droneFade | CC 37 | drone envelope | Slot 4 TimeTravel | trace color warmth (cool phosphor → deep amber) |
| droneSpace | CC 38 | drone spatial | Slot 6 Splay | vertical tree root offset (pushes tree down the frame) |
| droneMix | CC 39 | drone blend | Slot 6 Splay | scan column density + brightness |
| delayFeedback | CC 40 | delay feedback | Slot 8 MemHier | ghost trail persistence (reduces wipe → lingering layers) |
| beatTempo | CC — | beat engine ×0.5–2 | Slot 8 MemHier | hex matrix mutation rate; Slot 9: hash reassignment speed |
| txInfluence | CC 41 | TX→beat weight | All slots | ETH event glitch probability across all visualizations |
The Parliament Stage concentric rings are no longer static. They live in a _radarGroup that:
- Rotates slowly counter-clockwise, speed driven by
timeDilation+txInfluencebursts - Breathes in scale:
droneDepthexpands/contracts the ring plane - Pulses opacity per ring: outer ring brightens with consensus, inner rings shimmer with consensus wave phase
- Tick marks flash intensity with ETH CO₂ activity
- Axes darken at low consensus, open at high consensus
Key p mounts the PhenologicalCalendar module — a 365-day species ring built from manakai_species.json (572 species across flora, amphibians, reptiles, mammals, birds for Planeta Rica, Córdoba, Colombia).
Aesthetic — 1-bit wireframe / 8-bit:
- Pure black background (
#000000), all geometry pure white (#ffffff) - Flat
AmbientLightonly — no directional lights or emissive materials - All rings →
LineLoop(no torus volume) - Species nodes →
OctahedronGeometrywireframe diamonds - Cursor →
Linespear + wireframe octahedron head - Biogeochem overlays → wireframe crosses (CO₂), expanding line circles (myco pulses), wireframe diamonds (P/N nutrient flows)
- Backdrop → two wireframe icosahedra (parallax) — no radial gradient
- HUD typography →
Courier Newmonospace, uppercase, antialiasing disabled (-webkit-font-smoothing: none), pixel-shadow on canvas month labels,steps()transitions for progress bars - Active-species labels → black background with
1px solidoutline (CRT terminal look)
Bidirectional breath bridge (phenology/breath.ts):
- Parliament votes →
calendar.pulse(intensity)— bloom on consensus parliament.rotationslider (0.1–2.0) →daysPerSecond = rotation * 1.5- ETH biogeochem (
eco.co2,mycoPulse,phosphorus,nitrogen) →triggerCO2/Myco/Phosphorus/Nitrogen(anchored to currently-active flora positions, not fixed screen coords) - Reverse: calendar day → seasonal weight + active-species fraction →
harmonicrich+texturedepthOSC into SuperCollider
Species labels: vernacular (common) name leads on each node, scientific name follows dim and small underneath. Falls back to scientific name when no common name exists. Labels render with opaque black plaque + 1px white outline for projector readability.
3D navigation (full freedom):
| Action | Gesture |
|---|---|
| Rotate calendar | Left-click + drag |
| Pan view | Right-click + drag |
| Zoom | Mouse wheel (no limits — zoom inside a species node or pull all the way out beyond the icosahedra) |
| Reset camera | R key (default position (0, 0.6, 4.6) looking at origin) |
| Switch slot | Keys 0–9 or p |
Slot P is governed by seven control parameters + four season-jump triggers that materialize the proposed phenological chamber statutes (Articles 41–48). Each control is bidirectionally wired across HTML slider ↔ SC bus/GUI knob ↔ Faderfox LC2 MIDI CC — moving any one updates the other two and re-renders the calendar in real time.
| Control | OSC path | CC | Article | Range | Effect |
|---|---|---|---|---|---|
| Activity Thresh | /pheno/activityThreshold |
CC 10 | Art. 45 (quórum sensible) | 0.20–0.85 | Threshold for "active" species; modulates beat pool density (×0.6–1.5) |
| Window Width | /pheno/windowWidth |
CC 11 | Art. 44 (ventana de presencia) | 0.4–2.5× | Gaussian window per species; tighter halos vs longer overlaps |
| Seasonal Bias | /pheno/seasonalBias |
CC 12 | Art. 42 (calendario bimodal) | -1.0–+1.0 | Offsets seasonalWeight() → reverseBreath harmonicrich |
| Absence Weight | /pheno/absenceWeight |
CC 13 | Art. 44 § (la ausencia es voz) | 0.0–1.0 | Sub-threshold species shimmer as 1-bit dither; mutes atmosphereMix |
| Pulse Gain | /pheno/pulseGain |
CC 14 | Art. 45 § (modula no anula) | 0.0–2.0 | Multiplies vote→pulse intensity; 0 silences calendar response to votes |
| Opacity Floor | /pheno/opacityFloor |
CC 15 | Art. 47 § (cláusula de opacidad) | 0.0–0.7 | Deterministic fraction of labels hidden by principle (visual only — Art. 47 declares opacity intraducible to audio) |
| Bancada (5 pos) | /pheno/bancada |
CC 16 | Art. 43 §1 (bancadas estacionales) | Todas / Seca / 1as Lluvias / Medio Seco / 2as Lluvias | Focus specific seasonal taxa group; soft LPF on others |
| Season jump (×4) | /pheno/jumpSeason |
— | Art. 42 § (sesiones de apertura) | trigger | Sets cursor day to start of named season + bumps txInfluence for audible drop+fill |
Visual style — 1-bit citation: The Cámara Fenológica section in parliament.html uses a black background + white 1px borders + Courier New monospace uppercase typography, distinct from the amber Lawrence English palette of the sonETH/Beat Engine controls. The matching SC GUI knobs (Row 5 of 4_gui.scd) use a pure white-on-black palette for the same reason — these controls belong to the "escaño del tiempo," not to performance.
The beat engine reads live from SC buses each cycle:
| SC Bus | Beat Engine Effect |
|---|---|
harmonicRich |
pitch pool size + spread (FM ratio → harmonic series) |
resonantBody |
voicing mode: single / dyad / triad / 1–8 partials |
textureDepth |
harmonic count (number of simultaneous percussion synths) |
atmosphereMix |
pitch pool vertical spread |
memoryFeed |
ghost hit probability (secondary echo percussions) |
droneFade |
melodic envelope time |
txInfluence |
ETH activity → pitch pool intensity (smooth exponential decay, no hard cuts) |
All three control paths (HTML sliders, MIDI CC, SC GUI) agree on the same real-world units via 6_osc_handlers.scd remapping:
| Param | HTML 0–1 | OSC remap → bus | MIDI CC | SC GUI spec |
|---|---|---|---|---|
| masterVolume | 0–1 | linlin → 0.01–1 | CC 0 | ControlSpec(0.01, 1) |
| pitchShift | 0–1 | linlin → −24,+24 | CC 1 | ControlSpec(−24, 24) |
| timeDilation | 0–1 | linexp → 0.5–6 | CC 2 | ControlSpec(0.5, 6, exp) |
| spectralShift | 0–1 | linexp → 80–3000 Hz | CC 3 | ControlSpec(80, 3000, exp) |
| spatialSpread | 0–1 | linlin → −1,+1 | CC 4 | ControlSpec(−1, 1) |
| textureDepth | 0–1 | linlin → 0–0.6 | CC 32 | ControlSpec(0, 0.6) |
| atmosphereMix | 0–1 | linlin → 0–0.9 | CC 33 | ControlSpec(0, 0.9) |
| memoryFeed | 0–1 | linlin → 0–0.8 | CC 34 | ControlSpec(0, 0.8) |
| harmonicRich | 0–1 | linexp → 0.1–8 | CC 35 | ControlSpec(0.1, 8, exp) |
| resonantBody | 0–1 | linlin → 0.1–0.8 | CC 36 | ControlSpec(0.1, 0.8) |
| droneDepth | 0–1 | linlin → 0–1 | CC 9 | ControlSpec(0, 1) |
| delayFeedback | 0–1 | linlin → 0–0.95 | CC 40 | ControlSpec(0, 0.95) |
| txInfluence | 0–1 | linlin → 0–1 | CC 41 | ControlSpec(0, 1) |
SpectralShift safety: all SynthDefs use LPF (not BPF) so the filter at maximum is transparent, never silent. Ceiling hard-clamped at 3000 Hz.
Parliament vote actions trigger sonic events and visual bursts across all 10 slots.
| Action | Sound | Visual |
|---|---|---|
| Vote passed | Tempo burst ×1.6 for 4s + bell chord (root+5th+oct) | Bloom flash, warm glow, atmosphere spike |
| Vote failed | Same sonic burst | Red shift: spectral/resonant/texture spike, 3s decay |
| Emergency | Drone drops to 35 Hz sub-bass, noise surge, 6s recovery | Spatial collapse, brightness drop, 6s recovery |
| Stop | masterAmp → 0.05, drone → 0.02 | All visual params dimmed to 0.05 |
| Start | masterAmp → 0.7, drone restored | All params restored to defaults |
The beat engine (5_beat_engine.scd) evolves continuously rather than repeating:
- Data-driven pitch pool: reads
harmonicRich,txInfluence,textureDepthfrom live buses each cycle - Voicing modes:
resonantBodyselects single / dyad / triad / 1–8 simultaneous partials - Smooth ETH decay:
exp(-timeSinceLastTx × 0.5)envelope prevents hard cuts on quiet blocks - Phrase mutation every 4 bars: kick pattern shifts, ghost fills appear/disappear
- Shifting polyrhythm: percussion divisor cycles 3-5-7-4-6
- Drone pitch drift: cycles through harmonic series (55, 62, 73, 82, 49, 65, 41 Hz)
- Micro-swing: odd steps delayed 0–12% for groove
./start_ecosystem.shLaunches all services: nw_wrld, parliament-bridge, SuperCollider, Python ETH scraper.
- SuperCollider: Open SC IDE, run
start_sonification.scd - Python ETH:
cd eth_sonification && source venv/bin/activate && python eth_sonify.py - Bridge:
cd nw_wrld_local && node parliament-bridge.js - nw_wrld:
cd nw_wrld_local && npx electron .
Species data is fetched live from the IUCN Red List API v4 (Colombian endangered species including plants). The token is injected at build time via webpack DefinePlugin — never committed to the repo.
cp nw_wrld_local/.env.example nw_wrld_local/.env
# Edit .env and add your IUCN API token (get one at https://api.iucnredlist.org/)Data flow: RLI local server (localhost:3001, CORS-friendly) → IUCN API direct → hardcoded fallback roster.
curl http://localhost:3335/diagShows message counts per path, direction, coverage report of all SC_TO_CH routes (35 paths registered).
Press Shift+D in parliament browser window. Shows:
- Live param values for all 21 params (Row 1–4 + Beat Engine)
- Per-slot status dots (10 slots, green = updated in last 2s, amber = stale, grey = never)
- WebSocket connection state and message count
cd nw_wrld_local && node diag-sweep.jsSends all 22 params through the bridge (0 → 1 → 0.5), then runs a continuous volume LFO.
BiocracyEngine auto-detects audio hardware at boot:
- MOTU 828x (Gen5) present → 4-channel quadraphonic output, 2 inputs
- No MOTU detected → falls back to macOS Core Audio stereo (2 ch out / 2 ch in)
The SC GUI bottom strip exposes three buttons:
- ● START REC / ■ STOP REC — multichannel session recording. Saves to the
recordings/directory. - ▶ 30s SNAPSHOT — starts recording and auto-stops after 30 seconds. Useful for sound checks, documentation snippets, sampler material.
- ◇ SPATIAL 4ch — opens a quadraphonic spatial control window with two draggable nodes: AMB (ambient drone/bell/kick position) and SMP (sample playback position). Both nodes pan their sources around the 4-channel quad field in real time. The window opens directly over the main sonETH GUI (overlapping,
alwaysOnTop).
Below the four amber Lawrence English rows, the SC GUI mounts a Row 5 with a pure white-on-black palette holding the seven phenology knobs (Activity Thresh, Window Width, Seasonal Bias, Absence Weight, Pulse Gain, Opacity Floor, Bancada). This visual citation matches the 1-bit aesthetic of slot P in the browser — marking these controls as belonging to the escaño del tiempo and not to sonETH performance.
BiocracyEngine/
├── start_ecosystem.sh # Full system launcher (graceful kill + restart)
├── start_sonification.scd # SC-only launcher
├── 1_server_config.scd # Server config, MOTU/Core Audio auto-detect
├── 2_midi_control.scd # Faderfox LC2 MIDI mapping (20 CCs, 4 rows)
├── 3_synthdefs.scd # SynthDefs (elektronBell, opalKick/Perc/Drone/Dust)
├── 4_gui.scd # SC GUI (amber palette, 20 knobs, echo on change)
├── 5_beat_engine.scd # Evolving beat engine (data-driven pitch pool)
├── 6_osc_handlers.scd # OSC in + ~oscToParamMap + beatTempo/txInfluence echo
├── 7_trend_analysis.scd # Transaction trend analysis
├── 8_transaction_buffer.scd # Transaction management
├── 9_spatial_headphone_sim.scd # 4-channel spatial audio
├── 10_sample_system.scd # Sample playback (field recordings)
├── 11_recording_system.scd # Multichannel recording
├── 12_spatial_gui.scd # Spatial positioning GUI
├── 13_diagnostic_sweep.scd # SC-side diagnostic sweep
├── eth_sonify.py # Python Ethereum connector (web3)
└── nw_wrld_local/
├── parliament-bridge.js # OSC↔WebSocket bridge (UDP:3333↔WS:3334, /diag HTTP:3335)
├── diag-sweep.js # Node.js diagnostic sweep (22 params)
├── .env.example # Template for IUCN API token
├── webpack.config.js # Webpack (DefinePlugin injects .env tokens)
├── src/projector/
│ ├── parliamentEntry.ts # Hub: applySonethToViz (all 10 slots), DIAG monitor, WS bridge
│ ├── visualizationSwitcher.ts # Slots 0–3 + slot P (phenology) mount/unmount
│ ├── dataStructureVisuals.ts # Slots 4–9 (TimeTravel/DynGraph/Splay/Geometry/MemHier/Hashing)
│ ├── speciesFetcher.ts # IUCN Red List API integration (3-tier fallback)
│ ├── phenology/
│ │ └── breath.ts # Bidirectional bridge for slot P (votes ↔ calendar ↔ SC audio)
│ ├── parliament/
│ │ └── parliamentStore.ts # Reactive state store (consensus, species, eDNA, eco)
│ └── views/
│ └── parliament.html # HTML GUI: 34 sliders (Rows 1–4 + Beat Engine) + vote panel
├── src/main/starter_modules/
│ ├── ParliamentStage.js # Slot 0: Three.js 3D scene + reactive radar grid
│ ├── LowEarthPointModule.js # Slot 2: Three.js point cloud (consensus brightness)
│ ├── PerlinBlob.js # Slot 3: p5.js Perlin noise blob
│ └── ZKProofVisualizer.js # ZK proof overlay
└── ecosystems/default_ecosystem/
├── modules/
│ ├── PhenologicalCalendar.js # Slot P: 1-bit wireframe species ring (572 spp)
│ └── manakai_species.json # Reserva Manakai species inventory
└── assets/json/ # Static JSON assets served at /ecosystems/...
- SuperCollider 3.13.0+
- Node.js 20+ with npm
- Python 3.8+ with web3, python-osc
- Electron 39+
- Faderfox LC2 MIDI Controller (optional)
- MOTU 828x Gen5 audio interface (optional — falls back to Core Audio stereo)
- ABOUT.md — project premise, aesthetic statement, the Parliament of All Things framing.
- CHANGELOG.md — versioned change history (current
[Unreleased]includes Slot P + 1-bit phenology). - nw_wrld_local/README.md — nw-wrld framework (visualizer host environment).
MIT License
- GitHub: @alejoduque