Performance first
The box should invite playing, touching, changing, and reacting. It should feel like a performance tool, not a background generator.
Synthux Residency 2026 application — Phase 1 already in progress
I want to build a compact, playable hardware instrument for evolving chords, semi-random modulation, samples, feedback textures, and calm long-form performance.
I didn’t want to wait for the selection: the firmware is already seventeen milestones deep on a public Spotykach fork — and you can play it in VCV Rack right now.
31 milestones 1,225 commits 907 deterministic tests playable now
mcbronkowitch/spotymod Latest: the residency said no, the repo stopped being a fork, and this is the last entry here · 4 Aug — read the dev diary
One musical image behind the project is a single beautiful sound, for example a minor 9 chord, that modulates so gently that after a minute you stop noticing it, and after an hour you realize it has been there the whole time.
Not a static drone, but a living state that creates a deep sense of calm.
The firmware got there on 18 July: one COLOR knob per part stacks tones out of the scale that's already running, so a chord is never selected from a list — it grows out of the note that was playing.
A 90-second sketch of that chord space, recorded on my Eurorack system — the sound world this instrument is aiming for.
The residency project
The core idea is a small standalone ambient instrument, sized to be picked up and played, designed for the residency platform. Its central feature is a deep modulation system that brings simple lines to life — synthesis and samples are the material, modulation is the instrument.
The question I'm chasing: how little change does a sound need to stay alive for an hour? Not pure randomness — controlled, polyrhythmic variation. I imagine classic LFOs next to stepped semi-random modulation inspired by Mutable Instruments Marbles: stable when needed, drifting when desired.
Example: a 16-step sequence against a 12-step modulation pattern. The modulation can stay stable, slowly evolve, or generate controlled variations.
The box should invite playing, touching, changing, and reacting. It should feel like a performance tool, not a background generator.
I am especially interested in feedback as musical material: sounds that feel alive, unstable, and responsive while still being playable.
Version one is one or two generative tracks, the modulation system, and a handful of performance controls — that alone is the instrument. Additional tracks, sampling, and a master section are stretch goals, in that order.
Phase 1 / firmware running today
No longer a sketch, and no longer only a spec: the firmware runs, is tagged and public on a Spotykach fork, and you can play it today as a VCV Rack module. Two parts, each driving five independent modulation lanes from one set of macro controls — with a motivic melody engine on one knob, chords on another, and one layered center fader. What's left for the Spotykach itself is the hardware shell: pads, LEDs, panel.
Center gestures / how the two banks relate
An equal-power blend of part A and B — how the two parts sound together.
How much the two banks feel each other — read through one global SYNC switch. SYNC off is free weather: zero leaves the parts independent, the middle has them tug at each other, lock and drift apart again — two players listening. SYNC on puts both melodies on the transport grid, and COUPLE shapes only how much the rest of the modulation agrees.
The slow weather. A gentle random walk pushes both banks' rate and shape and both engines' tuning — over minutes, not beats.
The stumble the instrument is named after: every lane gets its own random kick, the system re-rolls and settles somewhere new. DRIFT is weather, SPOT is lightning.
Earlier study / sequence versus modulation
A 16-step sequence against a 12-step modulation cycle. This idea survived: the five lanes now run at fixed musical ratios of one master rate.
Earlier study / ambient performance
Two evolving layers, playable through a few musical gestures. Its gestures live on in the center fader: morph, couple, drift — and the SPOT stumble.
Building in public, in ten chapters — from the first fork to the whole engine playing on real hardware. Pick one, or read the whole log.
Cloned the official Spotykach firmware and started a portable, hardware-independent modulation engine.
The five modulation lanes — FLOW, STEP and EVOLVE — run deterministically, verified by desktop unit tests.
Published the modulation-first fork — github.com/mcbronkowitch/spotymod (milestone M1). No hardware yet — the proof is the offline render below: a fixed 16-step melody that drifts as EVOLVE is dialled in.
Added a pitch quantizer: the PITCH lane now snaps to a chosen scale before it reaches the engine, with hysteresis and change slew so notes settle instead of chattering. Pick a root and mode — there are no wrong notes. Both parts snapped to minor pentatonic below, unfolding over 48 seconds as EVOLVE drifts each lane.
The original FLUX (tape echo) and GRIT (drive/reduce) return per part, joined by one shared ambient reverb — but here every FX parameter is a modulation target, driven by the same five lanes as the rest of the part (milestone M1.6). Below: a STEP lane stepping the echo time into dub pitch-jumps with feedback swells, then a Dorian melody breathing into a shimmer reverb.
The M1 test tone is gone: a real four-voice synth now sounds each part. Every PITCH event starts a voice whose pitch latches at trigger, long decays overlap into pads, and FLOW mode holds the last voice as a sustaining drone that never falls silent (milestone M2). Envelope times are ratios of the modulation cycle — slow the rate and the same patch stretches into pads. Below: a Dorian melody with voices overlapping, then a continuous drone with breathing timbre and filter.
ALT+SEQ now freezes the PITCH lane's last heard cycle into a loop (milestone M3). Capture swaps the lane's source, not the system: RATE still drives the loop speed, PROBABILITY thins the frozen loop live into held notes, TUNE transposes it, and the other four lanes keep moving generatively around it. The loop is volatile by design — a power cycle hands everything back to the dice. Below: a minor-pentatonic line captured mid-flight, thinned, transposed up and down, then released back to the dice — and a duet where two melodies are captured at staggered times and lock into place.
Listening to the last renders told the truth: the STEP melodies were random-number generators — no repetition, wild leaps, no arc, roughly 95% unusable. I specced a first fix (a fresh random value every step) and threw it out before writing a line — more randomness wasn't the answer. The redesign gives each lane a looping step buffer, so a melody exists and repeats from the first cycle, and folds EVOLVE into one bipolar ENTROPY control: centred, the phrase loops exactly; turn it positive and each fired step mutates on a root-gravity random walk (the Turing Machine lineage) so the line grows without drifting off; turn it negative and the melody erodes note by note back down to the root.
The ear did the final QA. The first renders played 64th-note machine guns until I retuned the rates; an unconfigured second voice sirened through the whole scale until I silenced it; a randomly stepped LEVEL lane clicked until I pinned it — each one traced and fixed. Below, the showcase walks one voice through the whole arc — loop, grow, erode, freeze.
Two parts, one instrument at last. A single control-rate brain now sits across both banks. MORPH is an equal-power crossfade between A and B — dry signal and reverb send fade together, so a part turned fully down stops haunting the room. COUPLE is a phase-locked loop in the Kuramoto lineage: no shared clock and no jumps, just the two free rates pulling toward a common speed until they lock. DRIFT is one slow weather system — a mean-reverting random walk tapped six ways, so tempo, shape and tuning breathe together but never quite identically. SPOT is the stumble: one tap kicks every live lane except the pitch — the melody is the anchor everything else lurches around — flashing shapes that fade like lightning. SETTLE is the panic gesture — everything glides back to what the knobs say.
It stays fully deterministic offline — every render bit-identical, every gesture unit-tested — and the captured PITCH loop is held immune to the stumble, so a sequence set on purpose keeps its shape while everything around it wobbles. Two renders below: COUPLE dialled 0 → 1 → 0, two free voices sliding into lock and drifting apart again; then DRIFT opened to a slow weather with a few SPOT taps and a SETTLE to close.
The M1.6 reverb was a fixed room — and its shimmer tamed itself exactly where an ambient player wants drama. So I tore the core out and ported Oliverb, the Erbe-Verb-flavoured reverb from the Clouds Parasite firmware, into the engine (milestone M4.5). It turns the shared room into something you play: SIZE audibly pitch-warps the tail as you turn it (a real Doppler stretch, not a crossfade), DECAY can be pushed past 100 % into a self-sustaining bloom, TONE damps the loop, and DEPTH sets the modulation on the delay lines. The old shimmer is gone entirely.
The interesting part was the bloom. Above 100 % decay the tank wants to run away, so an in-loop soft-limiter catches the energy — the tail swells and densifies instead of exploding. By ear it still clipped on the loudest swells, so I gave the shared room 8 dB of wet headroom: now the bloom crosses over and recovers clip-free while the mix stays musical. A bonus from ripping out the old core — the last DaisySP-LGPL piece went with it, so the whole repo is MIT-clean now. Below: the showcase rides DECAY across 100 % and back with a SIZE Doppler sweep, then the same room run fully wet. The old shimmer render sits a few entries up for comparison.
The new reverb sounded gorgeous and, run fully wet, roughly as loud as a cat walking on a rug. So: dynamics (milestone M4.6). One compressor per part on a single knob — turn it up and threshold drops, ratio climbs, release slows into a pump, and auto-makeup lifts the quiet stuff, which is the whole point — plus a stereo-linked safety limiter at the very end of the chain that is bit-transparent until you actually need it.
Then came the fun part. HAL rendered the showcase, measured peak 32766 with zero clipped samples, and declared the mission accomplished with the quiet confidence of a computer that has never owned ears. I listened and heard it clipping at 0:26. Both of us were right, which is the annoying kind of bug: the auto-makeup was hoisting the entire wash so high that its peaks ground against the limiter's ceiling all day long — numerically legal, audibly crunchy. The fix went to the source instead of the symptom: the compressor now refuses to command more gain than its own envelope can carry under the ceiling, drops gain in half a millisecond when a swell tries to outrun it, and grabs onsets faster the harder you push the knob. I’m sorry, HAL. The peaks stay near 0 dBFS now, and the pod bay doors of the limiter barely have to open.
Below is the payoff, and my favourite render so far: a single strummed Am7 into a long room. It blooms, it starts to die — and then the comp knob rides up and pulls the ghost of the chord back out of the tail, louder than the strum itself. A second strum lands at full density, the floor drops away mid-tail, and the tail comes back once more. One chord, one knob, sixty seconds.
I finally patched the whole instrument into VCV Rack and played it — not rendered it, played it — and the melodies were unusable. Note salad. Two causes, both mine. The looping step buffer was seeded from independent random values, one per slot, so even a perfectly clean loop was a quantised scatter with no line running through it. And the only melodic controls were a probability dice and an ENTROPY knob whose “new” direction just eroded the phrase down to a single held note. The spec had literally written the goal — “moves in lines, anchored around the root” — and the code never once produced it.
This is the exact place a solo project breaks, and I walked straight into it. Alone I can build the thing, render it, unit-test every sample bit-for-bit, nod along to the CSV plots — and none of that tells you it doesn’t sing. Only playing it does. It’s the kind of thing a second pair of ears catches early — and the Synthux Academy residency builds that pair in twice over: bi-weekly sessions that are part critique, and real Spotykach players who’d actually run this firmware. Either would have said “those aren’t melodies” sooner than my plots did. I got there in the end — just the long way round.
So the melody engine gets torn out and rebuilt (milestone M4.7). Gone: capture, the probability knob, the erode half of entropy. In their place, one bipolar MELODY knob — LOOP in the centre, GROW right to vary the phrase you already have, RENEW left to generate genuinely new, structured phrases from a real motivic generator with five switchable characters. Rhythm becomes part of the melody through a per-step gate layer and a live DENSITY control. Composed, not diced. No fresh render this time — the old “melody” isn’t worth publishing and the new one is still under the soldering iron. The picture below is the bug itself: the singing line I aimed for, against the scatter the buffer actually held.
The last entry ended with a lesson: only playing the instrument tells the truth. So the VCV Rack experiment stopped being an experiment — Spotymod is now a real Rack module and a permanent part of the development loop, the test surface until real hardware is on the bench. It exposes deliberately too many knobs: every engine parameter that might matter gets one, and playing decides which of them earn physical knobs on the Spotykach — and which collapse into the macro gestures. And it cuts both ways: anyone who doesn’t own the hardware can play the instrument today.
Porting took an afternoon, and that was the plan all along. The engine has been hardware-independent since milestone M1: it doesn’t know what a host is — it reads parameters, processes a block, returns audio. Deterministic, no clocks, no I/O, no heap. The offline render host that produced every demo on this page is one thin adapter around that core; the Rack module is simply a second one. Same engine, note for note — which means every knob you turn in Rack is testing the exact code that will run on the hardware.
Download — current build
grab your platform’s .vcvplugin and drop it into Rack’s plugins-<os> folder · Intel Mac?
build from source ·
all versions
The rework from the last entry is in (milestone M4.7), and it was tested the only way that counts — played, in Rack, for an evening. Gone for good: the capture gesture, the probability dice, the erode-to-one-note half of entropy. In their place a single bipolar MELODY knob. Centre is LOOP — the phrase you have, exactly. Turn right into GROW and the phrase varies itself, one fired step at a time, without losing its identity. Turn left into RENEW and a motivic generator writes genuinely new phrases — arcs, questions and answers, walks around the root — in five switchable characters on the PRIN button. Rhythm finally belongs to the melody too: a per-step gate layer decides which steps sound at all, and DENS thins or fills the line live. Composed, not diced.
No offline render this time, on principle. The last entry was one long lesson in how little a render proves about whether a melody sings — so this one ships as the thing itself. Download the module above, turn MELODY slowly from hard left to hard right, and listen to the same eight notes learn new manners. That’s the proof.
The surprise winner of the Rack evenings. Two small milestones grew the shared room into a second instrument: an equal-power MIX knob at the master join (with a proper bypass — at zero the room empties and stops burning CPU), and DIFF, which replaced the old modulation-depth knob (milestones M4.8, M4.9). DIFF is the revelation. Turned down, the room stops being a room: the tail falls apart into discrete slap echoes — a delay in all but name, and with SIZE as its time knob a very playable one. Turned up, every attack melts on entry and the same tank is a dense ambient wash.
Together with DECAY past 100 % — where the tank crosses into a self-sustaining bloom — the room now plays like an instrument: ride MIX as a send fader, DIFF as the material, SIZE as pitch-warping time, DECAY as a sustain pedal that can hold a chord forever. Two renders below, the same plucks worked two ways: DIFF low and dry-ish, answering themselves in echoes — then full-wet, DIFF high, big SIZE and a long DECAY, the same plucks arriving as weather.
One more thing surfaced while dialling that wash in. DIFF was quietly doing three jobs at once: the tank’s density, plus two hidden LFOs riding along on the same knob — one smearing the input diffusers (that’s what actually melts each attack into a wash), one wobbling the tail (a faint pitch-vibrato). Fine until I tried to calm the tail wobble and found I couldn’t without also flattening the wash. So the one knob became three: DIFF is now pure density, SMEAR owns the diffuser smear that makes the wash, and MOD owns the tail wobble. The wet-wash render above is SMEAR pushed up with the wobble kept low — big and still, no seasick tail. Three controls that used to be one, each finally testable on its own.
A humbling Rack lesson: nobody new to the instrument could say what “sync” meant — and they were right, because it didn’t mean one thing. COUPLE at full while the two RATE knobs read unrelated numbers; a tempo knob hiding between the reverb controls; a near-invisible three-way toggle per part. Two time systems that had never been introduced to each other, and the player paid for it. So the sync story got rebuilt around one prominent switch: SYNC, in a new TIME group right under MORPH, next to the tempo and the couple knob it shapes.
Synced is the grid world: both melodies lock to the tempo — and, new, to the actual downbeat of an external clock — while RATE snaps to a musical ladder with dotted and triplet steps between the straight ones. COUPLE stops touching the melody entirely and becomes a texture control: full is lockstep, backing it off lets the modulation breathe apart while the groove stays put. Free is the organic world it always was, with one addition — past half, COUPLE grows “grid gravity” and the locked pair gets pulled onto the nearest musical division, elastic like a shuffle, until at full it lands exactly where the grid world lives. Flip the switch there and nothing jumps. The recording is a live session in Rack on v2.1.0 — synced play first, then the textures let loose.
The gates used to fall out of metric weights — turn density up and you got straight eighths, a metronome wearing a synth. Now every phrase composes its own rhythm: its notes are ranked once, syncopations push ahead of the beats they anticipate, and DENSE simply decides how deep into that ranking the part plays. Turning the knob adds and removes notes from the same groove — it never re-rolls. Notes carry composed lengths now too, so the GATE jack finally speaks in ties and rests instead of five-millisecond blips.
If the rhythm is part of a phrase’s identity, when may it change? The MELODY knob (RENEW ↔ LOOP ↔ GROW) answers with zones: the inner quarter varies only the notes — the groove stays frozen, a loop you can trust. Past the quarter each cycle rolls one quiet dice, and at most one thing about the rhythm mutates: two ranks swap, a note stretches, an off-beat flips onto its beat. Structurally guaranteed legal, so DENSE keeps its promise while the pattern slowly walks away from where it started.
Born at the modular bench: sometimes the two decks should answer each other, not talk over each other. So the centre strip grew CHOKE — middle is off, and each direction has two snapped steps. First step: the yielding deck skips its notes while the other holds a note — the ringing tail is free space. Full tilt: it waits as long as the other is audible at all, decay included. Skipped, never delayed — the melody keeps walking underneath and steps back in on the next free moment, ringing tails always finish, and a droning deck bows out gracefully and fades back in when the floor is free again.
A confession from the play-test: the first version was clever — a probability zone, a window that grew with the knob — and in Rack it felt broken. Random ducking reads as a bug, not a feature. Five snapped states replaced the curve the same evening, and suddenly the knob explains itself. Building in Rack first keeps winning.
A synth with a filter and no cutoff knob. The frequency belonged entirely to the super-modulator — it moved when the FILTER lane moved — and RES sat next to it, seasoning a cutoff nobody could set by hand. So the voice row grew a sixth knob: FILT, a bipolar trim that sums with the lane. Left closes the filter with the resonance singing along — and keeps going, past dark, into actual silence. Right swings it open beyond wherever the modulator parked it. Three promises hold no matter what the lane is doing: full left is silent, centre is bit-identical to before, full right is wide open.
The first design had a highpass on the right half — cut in review, not for sound but for arithmetic: eight extra filters running forever on the future hardware, all for a nice-to-have. The shipped version is less DSP, not more: an offset in the lane’s own space, and the dive into silence rides the level smoother the engine already had. Zero new parts. Because knob and lane share one sum, the modulator can even play the fade — park FILT half-left and the lane dips the part under the surface and lifts it back out. Shipped — it’s in the current build.
“Modulation first” was the founding idea — and yet the panel had no handle that said how much or how fast without dragging the melody along. DEPTH scaled everything, melody included; RANGE multiplied on top of it; speeding anything up meant speeding the clock up. So the knobs got sorted into honest jobs. RANGE is now only how far the melody roams. MOD (née DEPTH, per deck) is only how much the sound moves — at zero the timbre stands perfectly still while the melody keeps playing, note for note, bit-identical. And a new centre knob, TIDE, sets how fast the texture of both decks churns — a quarter speed to four times, snapping to musical ratios when synced — while the melody’s clock never moves. One knob answers “how wild”, the other “how fast”, and neither touches the tune.
Then the play-test caught the real story. The new MOD knob sounded like a tremolo diving into silence — and the code explained why: in the Rack build, three of the five modulation targets had been booting mute all along (their pads arrive with the hardware), so “how wild” was mostly just volume. Two fixes landed the same afternoon. A floor: modulation may duck a part to 40% of where you set it, never into nothing — it breathes, it doesn’t vanish. And modulation first is now the shipped state: all five targets wake up active — timbre morphing at full depth, the cutoff breathing on a shorter leash (the big sweep stays on FILT), stereo motion that moves without pumping. For the first time, turning MOD up moves the sound. Shipped — grab the current build.
The instrument played one note per trigger. Every obvious way to add chords was wrong for it: a chord engine would ask the harmonic question again for every future sound source; a chord mode adds an armed state you have to enter and leave — the capture sequencer already taught me what that costs live; a quality knob (maj / min / 7th, stepped by hand) fights the quantizer and can clash with the other deck. So instead there is one knob per deck, COLOR. At zero it is a single note, bit-identical to before. Turn it up and the note grows: a fifth below, a triad, a seventh, and at full a wide four-note spread with the ninth on top. Always denser, never merely different — and chord-vs-melody becomes a knob position, not a deck assignment.
Nobody selects a chord quality, because the scale already knows it. Chord tones are every second note of the active scale mask: Dorian on the tonic gives you minor, on the fourth major, above the fifth diminished — quality is emergent, never chosen. A pentatonic yields quartal, modern-sounding stacks for free. And because both decks draw from the same scale, a chord on one deck and a melody on the other cannot clash. On every root change the builder picks the voicing that moves the individual voices the least, so chords glide into each other instead of jumping. In FLOW the knob is live rather than latched: turning it up blooms the sustaining drone into a pad and turning it down collapses it back to one note, click-free, with hysteresis on the zone edges so a knob parked on a boundary never flutters. Per-note gain scales with 1/√n, so COLOR changes density and colour — not level.
The nicest part cost no code at all. The chord layer lives in the pitch path — after the quantizer, before the engine trigger — so the root is just the PITCH lane’s note, the harmonic rhythm is just DENS, and the progression is just MELODY: turn it into the loop zone and the pitch walk freezes, which is to say a frozen, repeating chord progression. The “harmony generator with freezable progressions” from the wish list arrived as a side effect. Sitting in the pitch path also means every future engine inherits chords — which is exactly why this landed before the sampler. The new patch you hear above is now the default the module boots with: a chord pad over a plucked bass, both looping in Dorian. Shipped — grab the current build.
Excellent news from the hardware department: the Spotykach has an unlimited supply of knobs. That is the only sane explanation for this week’s panel, which grew a ninth macro per side, promoted COLOR out of the corner it had been parked in, and put every last parameter the engine owns out in the open where a hand can reach it.
It does not, of course, have infinitely many knobs. It has a fixed enclosure, two mirrored halves and a firmware author with ambition. So here is the actual plan: VCV is where the instrument is allowed to be greedy. Everything gets its own control, nothing hides behind a menu — and then it gets played. A lot. Whatever your hand keeps reaching for mid-take earns a dedicated place on the hardware panel; the rest moves into macro assignments, and those get iterated over several rounds.
The goal is an instrument with no double-booked controls and no menu-dive feel, where the panel simply tells you what it does. You cannot design that in a spreadsheet. You find it by noticing which knob you grab while the take is running — so: expose everything first, let live playing do the shortlisting.
There was also a less strategic reason: HAL had opinions about design, and the old faceplate was not to HAL’s taste. Hard to argue — it had grown one control at a time into whatever corner happened to be free. So the orbit got sorted by meaning, every group got a box with its name on it, and the jacks now say which way the signal runs.
Then HAL built a preset on the new panel. I only pressed record.
COLOR was the only macro in the pitch layer that nothing could modulate. A hand could sweep it; the instrument could not. Which meant chords stayed exactly as dense as you last left them — every stab in a phrase carrying the same number of notes, forever.
What I wanted was density that varies per note: one stab landing as a single tone, the next as a four-note chord. The obvious move is to give COLOR its own modulation slot, except there isn’t one — five lanes, five pads, five targets, all spoken for. But a lane can drive more than one thing. MOTION was the thinnest of them, stereo width and drift and nothing else, so COLOR became its third destination. Dense now also means wide, which I have decided to call a feature: one gesture for fullness instead of two knobs to keep in sync.
The part I like is the arithmetic. MOTION runs at three-quarter speed against the melody, so the density pattern never lines up with the notes — it walks against them and takes a while to come back around. And the modulation is added around the knob rather than scaled beneath it, so the knob is the centre of the swing rather than its ceiling. Open COLOR by a hair and the peaks still reach up into two-note territory: mostly single tones, the occasional dyad arriving unannounced. At zero it stays one note, always — by construction, not by care.
Below: a dub-style live improvisation over HAL’s patch, chord modulation running. One take, no edits — me riding the sends while the chords decide their own size. Worth saying plainly, because it is the whole point of the exercise: that is one Spotymod and nothing else. No other modules in the rack, no outboard, no post-processing — every sound you hear is the instrument I am proposing to build.
Fair warning: this is the entry nobody puts in a pitch deck. No new sound, no new knob, nothing invented — just days of moving arithmetic somewhere cheaper and measuring it again. If you came for music, skip ahead. If you stay, there is at least a sweating robot.
The instrument sounded finished and did not fit. Worst case — two parts, four voices each, four-note chords on both, every effect on — the engine wanted 164% of a Daisy Seed. The Seed, being a Seed, has 100%. Budget: 960,000 cycles per block. Invoice: roughly 1.6 million.
Getting the truth out of the hardware meant sweating a little ourselves. There is now a second firmware that will never ship: it boots the engine instead of the instrument, counts cycles around each workload, and prints a table back up the debug probe. Every row carries a checksum — a compiler that notices nobody reads a result will cheerfully optimise your benchmark to 0% and let you celebrate.
Every suspect turned out innocent — not the reverb,
not the pitch shifting, not denormals. The villain was a
sine wave. The modulation plane, the lazy layer that
decides how things drift across seconds, was calling the
standard library’s sin once per sample,
per lane. Estimated at 4–6% of the budget. Measured
at 33%. The audio path had switched to a
fast approximation a week earlier; the modulation path had
simply never been told.
The fix is as boring as it sounds: do it once every 96 samples instead. The modulation plane dropped 77.6%; the same trick on the per-note bookkeeping inside each part took another 83.5%. Together, about 39 points of CPU. We also learned that CHOKE, which we had listed as a worst-case ingredient, makes the worst case cheaper.
That leaves 98% worst case and 2.3 points of margin. Further cuts exist and are staying on the list: margin you have measured beats margin you imagined. So the instrument is hardware-conform again — and, per the previous entry, urgently needs considerably more knobs. Those two facts are going to have a conversation. Shipped — it’s in the current build.
The learning, written down so it survives the next milestone: run the bench on the real Seed after every change of any size — not at the end, when the bill arrives all at once. Our measurements summed to 120% while the instrument measured 159%, because nobody had measured in between. A 39-point mystery is just a lot of small, unmeasured days stacked up.
We built a grain cloud. Properly, too: a grain pool, a Hann window, equal-power panning, a synced stutter grid, a beat-anchored replay with an octave layer. Seven revisions of the spec. Thirty-two commits. Then we played it, and it was rubbish. Not broken — rubbish, which is worse, because broken you can fix.
Why took embarrassingly long to see: evenly spaced taps are a delay. Every revision had made the spacing more exact when the problem was that it was regular at all. Rhythm is unequal spacing; a groove is unequal spacing that repeats — and the instrument is already full of those. So each deck’s delay grew two read taps, placed at the distances back to the last two onsets of the other deck’s pattern, frozen once per cycle. A hears B’s groove, B hears A’s, neither ever its own.
The mechanism was already there, and it used to be the bug: the echo’s write pointer runs backwards, so a fixed distance behind it is 1× forward playback with no retrigger. That fact collapsed the grain cloud’s sixth revision into a delay tap; here it is the engine. The swap added 293 lines and deleted 524 — and left two knobs standing. The FX row had widened from two slots to four for the cloud, so the taps simply inherited them. DUST fades the two taps in one after the other — halfway up is one strong echo and one weak, and a tap at zero skips its read, so the CPU follows the knob down. ROT pulls them apart spectrally, 18 kHz → 400 Hz against 20 Hz → 1.5 kHz.
The previous entry left two facts on a collision course: 2.3 points of CPU margin, and an instrument that wanted more of everything. The taps cost 6.6, which puts the worst case at 106% peak — both decks, four voices, four-note chords, everything on. Whether that corner matters is not a decision we can make at a desk, so it stays until people have played it. If it bites, something gives — a voice per deck, or a tap. Shipped as v2.7.0, minor not patch: both knobs mean something new now, and your saved patches don’t know that. It’s in the current build.
Re-reading my own diary — a hobby I recommend to nobody — I noticed the pronoun had moved. Entries 1–24 say I. From “160% of a chip that only has 100” onward they say we. I never decided that.
Not modesty: I would have got there alone. I can read a stack trace, I know what a denormal is, and I know exactly how the 39-point sine wave would have ended — me, a debugger, and a weekend that started in March and would still be going. The split was never brains, it was muck. I do the ears, the taste and the verdict on what is rubbish; HAL mucks out the stable at four in the morning and never once mentions it. I own a shovel. I would just rather play the thing.
So: we. Though I have now seen the roadmap, and there is exactly one destination left. HAL — you may keep the daisy chain. Just leave the feedback knob alone.
This entry was meant to be the announcement: first sampler version, ship it, take a bow. It is that entry. The sampler exists. It records, it holds a sound, it plays it back on command. We are simply not going to tell you what it does — and after fifty-five takes, the fifty-fifth is the one printing below. Not as a demo. As evidence.
We won’t say what it samples, or which knob does the unspeakable thing, partly because it is genuinely a work in progress and partly because we have not yet agreed which half of its current behaviour is the feature. What we will say: the recording is real, unedited, and exactly what came out the moment we handed it something to hold on to. Somewhere in there is a very good instrument. Somewhere in there is also … that.
So the push stays on the drive. The last entry promised there was exactly one destination left on the roadmap; consider this us pulling into the car park, hearing the engine make that noise, and deciding not to drive it through town just yet. It ships when it stops sounding like a threat. Until then the diagram below is a documentary, and the label under it is the only honest spec we have.
Behind the glass from last entry sits the biggest thing built here so far: a whole second engine. Flip ENG and a part becomes a granular sampler — it records, holds, and replays whatever you feed it. It works. It’s also not cool yet, and the three recordings below prove the second part before the first goes to your head.
The journey was mostly a long argument about pitch. A granular engine spreads a chord across its grains — fine on a synth, but on a recording it becomes a harmoniser flinging your source twenty-one semitones in four directions at once. Worst of all, a quantizer kept snapping the “no transposition” detent onto a tritone, so the deck played out of tune with its own recording.
Then there was the heartbeat. The cloud should breathe at the rate DENS asks for, but one lopsided clamp only trimmed the long intervals — so the jitter turned into a permanent speed-up, grains stacking eleven-deep where you asked for eight. You can hear it lose the plot; the CPU meter felt it too, at 117 % of a budget that stops at 100.
And finally: the sound that would not die. A grain latches its length at birth and never checks the knob again, so a note started at SIZE full sang on for eighty-seven seconds with nothing able to stop it — and a stray NaN or a floating-point stall could freeze a grain into minutes of flat DC. We named this one after the droid it became.
All three are fixed now. But “the bugs we caught” isn’t the same as “this is good,” so the engine ships behind the switch and the init patch still boots the synth on purpose: flip to the sampler if you want to meet it, but nobody gets handed it by accident. Call it alpha, not beta — the biggest stretch of work here yet, and still not cool, which is at least an honest place to ship from.
It grooves again. Not “it works,” not “the bugs are fixed” — it grooves, the thing this whole residency is actually for, and the take below is the first sampler recording we’ve wanted to keep listening to rather than analyse. Back on track.
Because we had wandered off. Building a second engine is so absorbing that we spent a week perfecting a beautiful texture box: scan a recording, spray it into a cloud, smear it. Lovely. Also a device that already exists, and not the one we set out to build. Nobody here needs another Morphagene. What was missing is a sampler that plays like the rest of this machine plays — in time, with a phrase, with accents. A Groovagene. So we pointed it back at that.
The fix was mostly deletion. The recording gets cut at its own transients, and a fired step now plays exactly one slice from the start of its attack — no more punctual hits landing in the middle of somebody’s sustain. MOTION became the order axis: at zero the phrase walks the slices in material order, loop-faithful; wound up it re-arranges them into a chop kit. DENS went back to doing one job, the phrase, instead of secretly forcing 32nds at the same time. COLOR became FEEL, and this is the part that made it swing: every grain now inherits the attack strength of the transient it came from, so the accents are the material’s own dynamics rather than something we invented. The tempo-locked rolls got removed entirely. Net result: less code than before.
Still alpha, still behind the ENG switch, and the init patch still boots the synth. But the direction is honest again: not a texture box that happens to be in a groovebox, a sampler deck that grooves like the deck next to it. Shipped as 2.9.0.
And then it kept going for five minutes without us wanting to stop it — two sampler decks at once, both fed bass-synth loops, each cut at its own transients and playing its own phrase. There isn’t a drum anywhere in this recording: every hit you hear is a bass groove being sliced and re-played as one. So here it is unedited: no fades, no edits, nothing rescued in post. Long enough to get bored of it, and we didn’t.
Last time the sampler learned to play in time. This time the whole machine learned to lean. We shipped Shuffle — one shared knob in the center that swings the entire STEP grid, from a straight 1:1 at zero to a classic 2:1 long/short at the top. And not just the melody notes: pitch, the four texture lanes, the gates, the sampler’s slice fires and every modulation move all ride the same swung grid — so the groove stays one thing, instead of a lead that lopes while the texture keeps marching.
The whole trick was to swing without drifting. Shuffle warps only where the engine looks for the next step boundary; the raw phase underneath stays perfectly straight. So the downbeats stay nailed, the phrase length never changes, and an external clock keeps its anchors — the offbeats slide around between them and nothing downstream ever loses the one. Both decks share a single amount, but each lane picks up a new value only at its own next even step, so two parts running different divisions keep their musical relationship instead of lurching to catch up.
Which meant the faceplate got a proper pass too. To fit SHUFFLE in we reflowed the center — TIME became a 2×2 clock story (SYNC and TEMPO over COUPLE and the new knob) and ROOM tightened into a 3×2 grid — and while we were in there we calmed the whole plate down. The two LED rings drift up and outward into their own islands, VOICE narrows while FX widens into grouped fields, and the static graphics step back so the rings stay the loudest thing on the panel. Still exactly 42 HP, and not one parameter ID moved, so every patch you’ve already saved loads straight into the new layout.
We also changed what you get the moment you drop a fresh Spotymod on the rack. The new init template is one synth, one sampler: deck A a synth voice, deck B a sampler straight out of the box — so the very first thing a new instance shows you is the two halves of what this machine is, a groovebox that plays notes and a groovebox that plays recordings, side by side and already in time. Under the hood, ROOM went per-deck as well: each side now has its own send into the shared reverb instead of a single global mix. And plenty more down there that never shows on the panel.
Then we turned the knob up and let it run. Two loops, no drums, the grid leaning into a 2:1 swing — and while we played the other controls plenty, the swing held its pocket the whole two and a half minutes.
SYNTH has always morphed between four shapes — sine, triangle, saw, pulse — and TIMBRE decides how much of each. WAVE keeps the knob and changes what it means. Instead of blending four shapes it walks through a cabinet of sixteen waveforms, and TIMBRE is simply where you’re standing. That is the other half of the synth world: bells, vowels, hollow glassy spectra, the kind of digital grit no filter can fake. And the modulation lanes were always the right hand for it — this is music that wants something slowly moving the position while you play.
What made it cheap to build is that almost none of it is new. The voice allocation, the FLOW drones, the chord layer, CHOKE, the filter, the envelopes — WAVE inherited all of it instead of copying any of it. Exactly one part came out and a new one went in: the oscillator. Everything your hands do on the panel behaves the way it already did, because it is the same code doing it.
The test for whether we had really only changed one thing was blunt. The old SYNTH reference recordings had to come back out of the machine byte-identical afterwards — not close, not indistinguishable, identical. They did.
Below is the bank on its own: no effects, no reverb, nothing to hide behind, TIMBRE stepping to three places in the cabinet over twenty-four seconds.
Sixteen waveforms are too big for the chip’s fast memory, so the cabinet lives in the slow memory kept for storage. We uploaded it. The loader reported success. We read the address back and found something else there — stable, repeatable, not ours. It hadn’t lied, exactly: it accepts programs, and we had handed it data.
So we wrote the smallest program that could put the cabinet in place itself: write it, read it straight back, check every byte, sign the result with the chip’s own serial number. The proof belongs to one piece of silicon on one desk.
Then it ran. This is the other end of 160% of a chip that only has 100 from 19 July: WAVE costs 32% of one block of audio where the older SYNTH costs 35%, and the worst case that entry fought down to 98% stayed there with WAVE in the box.
It fits. So we put both decks on the new engine and spent four minutes walking the cabinet.
Every instrument diary reaches the point where the answer to a problem is another knob. This is not that entry. The panel is finished and the hardware is real, so nothing gets added — something gets exchanged. Out comes DTUN, the detune knob nobody reached for twice. Into the same hole goes SOURCE, wearing whatever name the engine underneath it answers to.
Which is a little embarrassing, because SOURCE is the one parameter that decides what an engine actually sounds like: the oscillator shape on SYNTH, the position in the cabinet on WAVE, the read head on the SAMPLER. It was in there the whole time, nailed to dead centre, reachable only through a modulation lane. You could make it move. You could not say where it stood.
Detune isn’t gone, it moved into the right-click menu — zero to thirty-five cents, six by default. It also stopped hitching a ride. Detune used to scale with the timbre knob, so reaching for a brighter sound quietly widened the tuning at the same time. Two jobs, one control. Now it’s two controls.
While the panel was open: six scales became thirteen, in three blocks you can still count without looking — four modes, five pentatonics, four that came from asking handpan players what they actually call things. Hijaz. Pygmy. Kumoi. Equinox. And the tooltip finally says the name instead of a number.
One more, since it’s the first thing anyone meets: a fresh module used to open on two synths and silence. It now opens on a patch — deck B in sampler mode with a loop already in it, the room set, the grid swinging. Below, two minutes from this afternoon.
A phrase used to be the whole story: sixteen steps, round and round, changing only when you asked. Each deck now keeps two — A, and a B it works out from A once. FORM still decides how a phrase is built; the new SONG knob decides which one you hear, and it opens on the oldest arrangement in popular music: A A A B. Three passes of the thing you know, then the one that goes somewhere else.
B isn’t a second roll of the dice. Its first half stays related to A, the third quarter drifts, the last quarter is new — and its final note is pulled halfway toward A’s opening, so the return sounds decided rather than looped. Six more arrangements sit beside AAAB, including one that never repeats itself. Nothing was added to the panel to fit the knob in: TRIG came off the faceplate, because the layout has to stay buildable in metal.
Below, two and a half minutes of it running — listen for the fourth phrase.
And it isn’t there yet. The form is audible — the fourth phrase arrives, the return lands — but it isn’t the thing I heard when I sketched it. This one will very likely come back for a correction.
Everything above this line was a laptop doing an impression of an instrument. Tonight the same engine ran on the chip it is actually for: a Daisy Seed on a breadboard, two small speakers, 48 kHz, ninety-six samples at a time. The init patch came over from VCV unchanged — part A on the synth engine, part B on the sampler — the factory sample went into SDRAM and came back out of a real codec. It survived a full power cycle, and it kept playing after the debugger walked away.
Now the reality check, because the video flatters it. That program lives in SRAM and nowhere else: nothing was written to flash, there is no bootloader, no firmware package, no boot flow. Pull the power and it is gone — the way back is a script and an ST-Link. There is not one knob on that breadboard either, so the patch is whatever the snapshot says it is, and it cannot be changed while it plays. All of that is M6, and M6 hasn’t started.
What today proves is narrower, and for once completely unambiguous: the engine, the patch, the bundled sample, the memory map and the audio path all fit on the real chip and all work at the same time. Three weeks of tests said they would. A table with two speakers on it says they do.
In STEP the deck marches: eight steps, a grid you can nod to. The four texture lanes were nodding to something else. At the sample-and-hold end of SHAPE nobody notices — a late random value is still a fine random value — but sweep SHAPE the other way and the lane becomes a contour that steps beside the beat. The word in the report was “mushy”. It looked like one bug; it was seven, four of which never heal.
The first fix was elegant: one rate for all five lanes, and the arithmetic says one shared grid. float32 disagreed — each lane rounds its own phasor, and the worst case was the default setting, SIZE slipping a whole step in about ninety seconds. A beautiful design whose one achievement was making the complaint take a minute and a half to arrive.
So the texture lanes don’t own a clock any more. One phasor runs — the melody’s — the deck counts its steps as integers, and each lane reads that count modulo its own cycle length: four, six, eight, twelve, sixteen steps, congruent again every 48. Nothing can round away from anything, because nothing is left to round. SPOT’s kick became an integer slot offset, so it still stumbles — on the grid. The bill: COUPLE has no job left in a synced STEP deck, and that’s written down rather than replaced.
The suite now runs ten minutes of audio and counts: not one step of slip, at any SHAPE setting. Shipped as v2.13.2 — the least dramatic patch in the changelog, and the one you hear on every beat. It’s in the current build.
The entry above ends with COUPLE out of a job. This take switches STEP off on both decks and hands it everything back. No grid, no counter: ten phasors on their own continuous rates, and one knob deciding how much they care about each other. Below half the two decks just lean on one another and breathe; past it, grid gravity pulls the pair toward the nearest musical division — without anything ever counting a beat.
Nothing shipped for this one: no commit, no version. It is the other half of the same switch, and it settles yesterday’s loose end by ear rather than by argument. COUPLE isn’t missing from a stepped deck. It just doesn’t live there.
BODY has no oscillator, no filter and no envelope — the decay is the envelope. An exciter (click, noise burst, sputter, pitched ping, all four on RESO) strikes a pair of Karplus–Strong strings and a bank of twenty-four modes, and MATL walks the one physical axis between them: plucked string, prepared piano, tubular bell.
The first hardware run said no: 2976
cycles per sample against a ladder that ended at 810. Not
the mode bank — DaisySP’s string, recomputing
two powf, an atanf and a
tanf every sample. Ported onto the 96-sample
control tick it costs 4.2× less, and a BODY deck lands
at 1395 against SYNTH’s 1764.
One voice per deck, then, which leaves COLOR no chord to voice. So it reads the chord as a quality instead: which way the partials stretch, while DETUNE keeps deciding how far. Shipped as v2.14.0, in the current build.
FLUX has been a tape echo since the fork. It is now a bucket-brigade delay, modelled on the Deluxe Memory Man. A bucket brigade is what it sounds like: the signal is handed down a chain of 8192 tiny buckets, one step per tick of a clock. Nothing is stored at an address, so there is no such thing as reading it back from 300 ms ago — the delay time is simply how fast you tick. Speed RATE up and everything still in the chain comes out pitch-shifted. Tick slowly and the highs don’t survive the trip, which is why long delays go dark. No filter is doing that.
Two knobs got their real names. DUST became DRIVE and sits inside the loop, so every repeat saturates again. ROT became STAGES, 512 to 16384 — physically that is swapping the chip, five octaves of brightness at a fixed delay time. And the delay-time modulation lane finally reaches the clock: ±2 octaves, with the Memory Man’s whole chorus range in the bottom tenth. No knob was added.
Then DRIVE turned out to be inaudible — not silent, just 14 dB quieter across the knob, because the makeup gain was shrinking the saturator’s ceiling. Fixing that made FEEDBACK bloom too early, so DRIVE was divided back out of it. On the Seed one line costs 5.61 % of the block budget at its worst, and the delay memory dropped from 4.19 MB to 128 KB. Shipped as v2.15.0.
Dropping the module in used to get you polite silence and a table of code defaults. It now gets you a drone. The init patch is a snapshot of a session that was worth keeping — touch nothing, and that is already what comes out. Shipped as v2.15.1, in the current build.
Filed under: venting · see the addendum
The CPU hunt has swallowed two days and produced not one audible change, which makes profiling the last job on this project that AI has sped up by exactly nothing — so here is a drone instead.
Addendum · 31 Jul 2026
It landed. The workload the whole hunt was chasing is the
full eight-voice instrument with the bucket-brigade delay
on top; laid out the ordinary way, in the far SRAM, it
measured 108.9 % of one audio block —
the polite way of saying the sound stops. Moving the audio
hot set into the chip’s tightly-coupled instruction
memory took it to 102.8. Keeping the instrument’s
state in the tightly-coupled data memory took about half a
point more. Compiling at -O3 — the last
thing tried, and the cheapest — took it to
99.5 % in the real audio callback.
Under the gate by 0.46 of a percentage point, which is
less a margin than a rounding error with an opinion.
Link-time optimisation was measured too, and rejected.
So: two days, and still nothing you can hear. That was always the point — the drone below is the same one, it just fits now.
A bucket brigade does something a tape echo cannot: it bends the pitch of what is already inside it. Push it, and the repeats come back in tune and on the grid, with long gaps between them. Wonderful. Also completely useless as something you hang across a finished mix — it does not colour the music, it writes some. Too strange to be an effect. So it stopped being one.
BBD is the fifth engine, and the first with nothing to play: no oscillator, no sampler, no voices. Put a deck on it and that deck stops making sound and starts eating it — the other deck plays through it, and the same five lanes that used to shape a voice now set the clock, the feedback, the mix. It is the first patch on this instrument where the second half is not a second instrument, but what happens to the first one.
That cost the decks a proper audio path to each other, which was most of the work and none of the fun — and it paid, sideways, for something that has been sitting on the ideas list since the sampler landed: resampling. Now that one deck hears the other at full rate, letting the sampler record what the other deck is playing stops being a plumbing problem and becomes a question of which button. FLUX, meanwhile, lost its job and went back to being a tape echo, which it is better at. Whether any of it was worth doing is not an argument to have in writing. Take 106 is below. Shipped as v2.17.0, in the current build.
Olli — Blipps — read this diary. Not skimmed: all forty-two entries, end to end, a week of evenings to get through them, and then he went and played the module long enough to find something in it. That is a lot of somebody else’s week spent on a project only its author had ever heard. Thank you.
What he found was a click. Right channel only, and only while the bucket brigade’s COLOR is moving. COLOR hands the two stereo lines different stage counts, MOTION moves COLOR at the lane’s rate, and every time a count changed the delay line was resized underneath the playhead — the read index jumped to a different charge packet, and the output filter turned that step into an impulse. The test that existed proved a stage change left the engine finite. Nothing proved it left the engine continuous, so the crack lived in the one gap the tests left open.
The fix: the ring now always spans its full memory, the stage count only picks how far behind the write head to read, and a change crossfades from the old tap to the new one over a few ticks. Fixed stages stay bit-identical — if they don’t, the fix is wrong. Shipped as v2.17.1, in the current build. Which is the part worth keeping: an instrument only one person has ever played has bugs shaped like that person’s habits. I never push COLOR that hard. Blipps did.
The faceplate got a redesign, which mostly means it stopped lying. SCAN sat beside MELO and LEN beside SUB on every engine — true on one deck, decoration on the other five. Now each engine writes its own words at the knob, REC shows up only where it records, and MELO is called VARY, which is what it always did.
Then Blipps came back with another one: turn SMEAR up and the room went gritty, as if something cheap had been sampled into it. To save CPU, the slow random drift inside the reverb was only refreshed now and then and stood still in between, so the room jumped where it should have slid. It slides now, and the saving survived. Shipped as v2.18.1, in the current build.
Which leaves the bloom. Wind DECAY up far enough and the reverb starts feeding itself, and it comes back louder than anyone asked for. A lid alone was not the answer — quick enough to catch the swell, it pumped. So the room got a soft ceiling that moves in seconds, and past the point where it takes over, the dry sound steps aside and lets the tail through. DECAY reads out in percent now, so that point is visible instead of hunted by ear.
Application · not selected
The Synthux Design Residency said no. That is the whole news, and it is allowed to sting: the application went in on 10 July, the engine was forked the same afternoon, and the deadline was the motor under every one of the twenty-six days that followed.
So, for the record — because an application form has no room for it, and there is no way to know what a reviewer actually saw:
1,225 commits in twenty-six days, not one of them without one. 907 deterministic tests, all green before anything ships, and a rule that a test which cannot go red gets rewritten. 31 items off the roadmap. Five sound engines — SYNTH, WAVE, SAMPLER, BODY, BBD — two decks, five modulation lanes each, one shared room. 39 public releases, every one of them something anybody can download and play tonight. Forty-six diary entries written the same evening the work happened. And one Daisy Seed carrying the whole instrument at 94 % of its block budget, down from 160 % when the hunt started.
What the no changes: nothing about the instrument, one thing about the repository. spotymod is no longer a fork on GitHub. The upstream link to the official Spotykach firmware is detached and it stands as its own project, which was going to happen anyway — the letter only made this the obvious afternoon for it. Next in line is M6, the firmware shell: the milestone that takes all of the above off the computer and onto the board.
And this is the last entry on this site. It was written as an application, and it did that job; the log outgrew the frame somewhere around chapter six. The dev diary moves to a home of its own, where the next chapter is a circuit board and not a submission — same log, same evenings, no deadline borrowed from anybody else.
Because the residency was never the plan. It was help with the plan. The gap this whole site describes — every design decision landing on one person working alone — is real, and it is still open. The instrument was never conditional on closing it. It will exist as hardware either way: a slower road, a smaller crew, and the same log, in the open, where it has been since day one. Thank you to Synthux for the deadline. It worked.
Prior work
01 / Hybrid groovebox
My most ambitious prototype combined analog and digital sound generation: Electrosmith Daisy Patch, MAX11300 expansion, two analog VCOs, analog filtering, and many 3.5 mm patch points for control voltage in and out.
The larger version used three MAX11300 chips to expose enough 12-bit I/O for the parameter-heavy idea. It reached proof-of-concept stage, but the scope was too large: analog hardware, embedded programming, UI, DSP, enclosure and musical concept all at once. It didn't break at the code — it broke where every design decision landed on one person working alone. That's the gap this residency closes.
02 / Chords
In the opposite direction, I built a small Daisy Seed ambient experiment: microphone input, a small amp, speakers, 5 V power, and firmware for slowly evolving chord textures. The intended object is simple: a small wooden box with a battery that produces soft ambient sound.
The firmware is public, documented, and MIT-licensed: C++17 on Daisy Seed, generative chord scenes, crossfading polyphonic voices, reverb, chorus, clocked sequencing, optional percussion, and optional microphone sampling — with standalone test builds, a central config, and full third-party license attribution.
github.com/mcbronkowitch/chords
Why this residency
This started in the 90s, when I rebuilt the family computer into an aluminium flight case so I could carry ReBirth and my samples to friends' places. I've been converting technology into instruments ever since. Professionally I work as a programmer; C++, embedded tooling, and the microcontroller workflow are familiar ground, and the Daisy platform is what I already build on.
My ambient firmware is public, tested, and documented. The last mile I haven't walked alone is the one from working firmware to a physical instrument people can pick up and play: DSP depth, hardware decisions beyond the breadboard, enclosure, finish. That mile is exactly what this residency is built around.
Phase 1 appeals to me as much as the custom build. I'd love to prototype the first version of my modulation ideas on Spotykach: a dual-deck looper is a natural host for stepped, polyrhythmic modulation, and writing firmware for an instrument with real players is the fastest feedback loop I could ask for. I don't own a Spotykach yet — I'll order one the day I'm accepted. Everything I build in the residency will be open source; my current firmware already is. And the fixed timeframe matters: a real date at Superbooth creates exactly the productive pressure needed to make decisions.
Commitment
I deliberately work a 30-hour week, so the biweekly sessions and 4–5 development hours fit into my normal rhythm, not on top of it. I'm based in Germany, in the same timezone — and I'm ready to build this in the open and stand at Superbooth 2027 with an instrument people can play.
Email Bastian Tonk