draft: false
Name: BioMimicry
short-description: Six physics engines generating organic, semi-random triggers, CV and audio
Language: C++ (Pico SDK + ComputerCard)
Creator: Andy Jenkinson (uglifruit)
Version: "1.2.0"
Status: Released
License: CC-BY-4.0
repository: https://github.com/uglifruit/WorkshopBio
discussion: https://discord.com/channels/1210238368898879569/1533895615442849812
Editor: web
date-created: 2026-08-02
date-updated: 2026-08-06
contact:
social:
github: https://github.com/uglifruit
# The build computes the sha256 for repo-hosted firmware, so none is given here.
uf2:
- path: UF2/biomimicry.uf2
name: BioMimicry 1.2.0
tags:
- generative
- rhythm
- stochastic
- trigger
- drums
- swarm
- organic
- sample-player
summary: |
BioMimicry uses six mathematical physics engines to generate triggers, CV and
audio that feel organically alive.
Tap the momentary switch to cycle six ecosystems.
HORSES: a herd, each animal
running its own stride clock driving four hooves at their real equine footfall
offsets - walk, trot, canter and gallop as biomechanical patterns,
suspension phases and all.
GEESE: a cascading probability network across a
flock of twelve, where one honk spikes the odds for the rest.
FROGS: the
Kuramoto model of coupled oscillators, fighting between metronomic sync and
chaotic swarms.
RAIN: leaky integrate-and-fire buckets that fill with noise and
splash downstream into each other when they overflow.
METEORS: an
inhomogeneous Poisson process where a hidden weather system swells a swarm from
eerie silence into dense overlapping barrages.
CICADAS: four patches of insects
coupled on loudness rather than on phase or events, swelling out of step.
Voices are animal recordings with up to eight round robins each. In Horses
the round robins are the four hooves, so a gait sounds like an animal rather
than a drum machine.
Hold the momentary switch at power-on to boot TUNED, which plays the same
recordings at their recorded pitch with no per-animal or per-hit detuning - so
uploaded notes, drips or hits can be galloped, dripped or swarmed in tune. Its
Summed routing puts 1V/oct on CV 2 saying which round robin just fired, so the
ecosystem can play a melody on an external oscillator.
Samples can be replaced from a browser over USB.
panel:
inputs:
- id: AudioIn1
name: Loudness
type: audio
description: An envelope follower on whatever you patch in, so the ecosystem hears the rest of your rack. A loud room agitates the geese into honking and shuts the cicadas up. Inactive when nothing is patched.
- id: AudioIn2
name: Disturb
type: audio
description: Transient-sensitive rather than level-sensitive, because sudden movement is what alarms an animal rather than steady noise. A sharp attack counts as a Spook. Inactive when nothing is patched.
- id: CVIn1
name: Physics Mod
type: cv
description: Summed with Knob Main to modulate the current ecosystem's physics variable
- id: CVIn2
name: Population Mod
type: cv
description: Summed with Knob X to modulate how many agents are active
- id: PulseIn1
name: Spook
type: pulse
description: Disrupts the environment. Horses - the herd startles into step. Geese - a guaranteed cascade. Frogs - a splash that scrambles every phase and destroys sync. Rain - a wind gust dumping energy into all the buckets. Meteors - a bolide spiking density to maximum. Cicadas - a footstep in the grass, silencing the field before it creeps back in.
- id: PulseIn2
name: Clock
type: pulse
description: An external tempo the ecosystem entrains to rather than obeys. Frogs treat it as a phantom oscillator and couple to its phase at whatever strength Knob Main sets, so the chorus dials from locked-to-clock to completely indifferent. Horses lock their stride, Geese lean honks toward the beat, Rain tops up the buckets, Meteors swell the debris field. Stops mattering about 3 seconds after the clock stops.
outputs:
- id: AudioOut1
name: Audio L
type: audio
description: Agents rendered and placed in the stereo field by the mode's own logic - a stable image for Horses, fixed spots for the flock modes, a new position per hit for Rain and Meteors
- id: AudioOut2
name: Audio R
type: audio
description: The right channel of the same stereo image
- id: CVOut1
name: Trig3 / State
type: cv
description: A trigger or a continuous control voltage depending on the switch position - see the switch sections
- id: CVOut2
name: Trig4 / State
type: cv
description: A trigger or a continuous control voltage depending on the switch position - see the switch sections
- id: PulseOut1
name: Trig1 / All Trigs
type: pulse
description: Individual or summed agent triggers depending on the switch position
- id: PulseOut2
name: Trig2 / Accent
type: pulse
description: Individual agent triggers or an accent gate depending on the switch position
controls:
switch:
up:
name: Discrete Routing
description: The four agents route individually - agents 1 and 2 to the pulse outs, agents 3 and 4 as calibrated 5V trigger blips on the CV outs, since they have no pulse out of their own
middle:
name: Summed Routing
description: All active agents OR'd onto Pulse Out 1, an accent on Pulse Out 2 when two or more fire at once, and continuous CV on both CV outs - agent 1's own state on CV 1, and the whole ecosystem's on CV 2. Both are LEVELS in every mode, never ramps - CV 1 is that agent's own activity (Horses footfalls, Frogs croaks, Rain bucket fill), CV 2 the whole ecosystem (Horses herd sync, Geese flock agitation, Frogs chorus coherence, Rain total water, Meteors debris density, Cicadas field loudness)
down:
name: WebUI mode/Alt Boot
description: HOLD for WebUI mode. HOLD at power-on to boot TUNED mode instead of Rhythm - the LEDs announce which you got, Rhythm lighting the left column and Tuned the right. Tuned plays samples at their recorded pitch with no per-animal or per-hit detuning, so uploaded notes can be galloped or dripped, and both CV outs stay continuous. Switch Up gives agents 1 and 2 a trigger each with their own density on the CVs; Switch Middle gives all triggers on Pulse 1, Pulse 1 divided by four on Pulse 2, overall density on CV 1 and WHICH SAMPLE just fired on CV 2 as 1V/oct, one semitone per round-robin slot
tap:
name: Ecosystem
description: Briefly press and release to move to the next ecosystem - Horses, Geese, Frogs, Rain, Meteors, Cicadas
knobs:
-
main:
name: Physics
description: The fundamental law of the current ecosystem. Horses - gait and stride rate, sweeping walk, trot, canter and gallop with each gait in its own tempo band. Geese - contagion, from birds ignoring each other to one honk setting off the flock. Frogs - decoupling, from locked metronomic sync to total chaos. Rain - downpour, from silence to stuttering torrents. Meteors - debris density. Cicadas - coupling depth, from a steady drone to deep irregular surges.
x:
name: Population
description: How many agents are alive, 1 to 4. Horses always keep all four hooves - the knob adds whole animals to the herd. In the swarm modes each output channel carries three members, so a full population is twelve birds, frogs, meteors or insects.
y:
name: Chaos
description: Per-mode randomness and spread - per-hoof timing jitter (Horses), spontaneous spark rate (Geese), natural-frequency spread (Frogs), leak rate (Rain), density wander (Meteors), rate spread across the field (Cicadas).
leds:
-
display: list
items:
- id: LED0-5
name: Ecosystem and Activity
description: One LED per ecosystem, in order - Horses, Geese, Frogs, Rain, Meteors, Cicadas. The active mode's LED sits at a dim glow and flares to full on every trigger, so one light shows both which ecosystem is running and how busy it is. During the final write of a sample upload they show a stage count instead, so a failure reports where it stopped.
host:
notes: |
OUTPUTS BY SWITCH POSITION
Switch Up (Discrete): Pulse Out 1 and 2 carry agents 1 and 2; CV Out 1 and 2
fire agents 3 and 4 as calibrated 5V blips, because the Computer has only two
pulse outs and every agent should get a physical trigger.
Switch Middle (Summed): all agents OR'd onto Pulse Out 1, an accent on Pulse
Out 2 when two or more agents hit at once, agent 1's continuous internal state
on CV Out 1, and the whole-ecosystem state on CV Out 2.
In TUNED boot the CV outs are always continuous - it never fires CV trigger
blips. Switch Up gives agents 1 and 2 a pulse out each with their own smoothed
densities on the CV outs. Switch Middle puts every trigger on Pulse Out 1,
that divided by four on Pulse Out 2, overall density on CV Out 1, and on CV
Out 2 a 1V/oct pitch saying WHICH round-robin slot just fired - one semitone
per slot, stepped rather than slewed, so it drives an external oscillator as a
melody with Pulse Out 1 as the gate.
UNDER THE HOOD
The physics engines run at a 1.5kHz control rate while voices, gates and CV
run at the full 48kHz. Everything is integer fixed-point with no float in the
hot path.
SAMPLES
Samples can be replaced over USB-MIDI from the web editor in Chrome or Edge:
drag in WAVs, they are converted and loudness-matched in the browser and
written to a reserved 1MB flash region. Uploads override the built-in
recordings per slot, so one ecosystem can be replaced while the rest stay.
The card is SILENT throughout: holding the switch stops the ecosystem and
hands the card to USB, and it reboots back into playing when you are done.
Writing flash halts execution and takes USB with it - the USB stack lives in
flash - so a transfer is buffered in RAM and committed in one go. That caps a
single upload at 160KB - about 3.4 seconds of audio - but uploads APPEND, so
the full 1MB region is reachable in successive passes.
LICENCE - CC-BY-4.0 covers the card's own source: use, fork or sell it, just
credit Andy Jenkinson (uglifruit). Two things are not mine to relicense and
keep their own terms - the sample library is from Pixabay under the Pixabay
Content License, and ComputerCard.h is Chris Johnson's, MIT.
CREDITS - ComputerCard by Chris Johnson (Music Thing Modular). The Kuramoto
model of coupled oscillators (Yoshiki Kuramoto); leaky integrate-and-fire and
inhomogeneous Poisson processes are standard point-process models. Built with
Claude Code.