Why I replaced Google Filament with 40K lines of custom PBR engine code, written with Claude in weeks, that survives VK_DEVICE_LOST without crashing.
Evan Mezeske
Jun 2026
Release 0.9.30 adds post-processing shaders and 1-click screen recording. The recorder alone is 6,500 lines of platform-specific C++, built with Claude.
Mar 2026
Looking back at the GPU years, where my 50,000-object goal led me astray, and why one SIMD backend beats maintaining CUDA, Metal, and OpenCL.
Nov 2025
I built a chaos monkey that hammers Anukari's GUI with random pyautogui input. It found crashes I'd never have tested and ran 10 hours clean.
Dec 2024
License activation C++ is in, and instead of mocking HTTP I wrote integration tests that hit the real license server with a test-only reset API.
Aug 2024
Auth, server-validated React form actions, and CSRF protection are working, so I'm pushing the website toward pre-alpha product key management.
Jul 2024
After boost's interval library threw baffling singleton exceptions in my GUI fuzz tests, I replaced it with a 25-line Interval class that just works.
Fixed the clanking when raising the voice instance slider (init state wasn't stored per-instance) and added MIDI note off velocity as a modulation source.
Voice stealing now prefers released notes, which made MPE playable when holding a root note under a melody. Lots of polyphony GUI details cleaned up too.
MPE zones, channel counts, and pitch bend ranges are in the data model now, and the global pitch wheel bends any preset via time dilation.
Voice instancing works and it's better than I hoped. Time dilation retunes a full physics sim per note, and parallel GPU voices add zero slowdown.
With code signing done and the macOS port shelved for now, I'm back on voice-instanced physics, running parallel instrument copies in OpenCL.
Two voice instances now run in parallel GPU work groups and pass the golden tests. Links stay shared in memory, so only mutable entities duplicate.
May 2024
Most of the CPU-side refactor for the new voice instancing memory layout is done, with golden tests catching every break in the CPU-to-GPU data reshuffle.
Breaking ground on instanced voice mode, which turns any instrument polyphonic by using time dilation for tuning. Prototype first, design later.
My copy-paste fuzz test caught a subtle bug where links that connect to other links pasted in the wrong order, breaking the two-pass materialization.
Copy and paste handles link and MIDI route edge cases now, backed by a fuzz test that pastes random entity subsets 10,000 times and checks invariants.
A fuzz test exposed OpenCL error -44 failures caused by out-of-bounds GPU memory access that persisted across teardown, apparently a driver bug.
Host automation is finished, with golden tests that map MIDI CCs onto automation lanes, plus a nasty subscriptions bug fix for stale undo state.
Worked out every combination of invert, exponential, and multiply on modulator links, then added an exhaustive test proving CPU and GPU modulation match.
Apr 2024
New exponential and multiplicative modulation modes make the MIDI note follower play in tune and also unlock audio-rate FM synthesis.
Anukari now handles every MIDI message type, including poly pressure, which Ableton's MIDI export silently drops. Next up is the mess that is MPE.
The data model refactor is done, but model.h still triggers huge recompiles, and a pimpl fix ran aground on {fmt} formatters needing complete types.
I replaced the data model's macro hacks with CRTP templates across 15k lines. Golden and fuzz tests made the refactor safe before MIDI routing work.
MIDI note envelopes came together in a day, then Ableton and Anukari disagreed about middle C. C3 vs C4 vs C5 varies by vendor, so I went with C3.
Mar 2024
LFO retriggering now works via the generalized MIDI note routing, and unit tests caught a dangling route left behind by deleted LFOs.
The visual note picker keeps sprouting complexity, from cross-window undo hotkeys to an undo stack restriction and a flickering focus hack.
While building a golden test for the tempo-synced LFO I caught a MIDI bug where note off and on in the same audio block always ran as on then off.
A leftover OpenCL map with CL_MAP_WRITE_INVALIDATE_REGION corrupted my PRNG seeds and made the audio nondeterministic. A pause-toggle test caught it.
Seeding the GPU PRNG from the current sample number made rendered audio depend on buffer size, so it now seeds once at startup and stays deterministic.
All 65 golden tests covering the physics engine are done, bringing the suite to 249 cases, with a GUI chaos monkey planned as the next testing push.
Golden tests now render a preset and MIDI clip to audio and diff against a verified .flac, so optimizations and GPU ports can't silently break the sound.
New unit tests keep finding real bugs, including a broken plane-sphere intersection in frustum selection and an infinity check that accepted NaN.
Exhaustive PrecisionSlider unit tests caught a NaN-producing bug, prompting an audit of where the 36 kLOC codebase still needs test coverage.
Feb 2024
Adding interval labels to the semitone slider exposed a snap-to-grid bug in the scaling transform, so PrecisionSlider is finally getting unit tests.
Master output level meters and a GPU meter are in. The GPU meter shows the share of the latency budget each block eats, like Ableton's CPU meter.
Fixed a bug where MIDI note off events were missed with the plugin GUI hidden, because GUI flow control froze the simulation timestamp.
Orthogonal-view mouse picking was janky from float precision in ray cylinder intersection, fixed with doubles, plus time-batching mouse wheel undo spam.
Jan 2024
Delay lines work well enough for ping-pong and feedback experiments, but a ring buffer bug that only appears near maximum delay is resisting me.
After deleting everything down to a 5-line sine generator, The Bug turned out to live in my Focusrite Scarlett drivers, not in Anukari at all.
With no repro for The Bug, I beefed up the fuzz tests and hardened the GPU code against inf and NaN, hoping to rule out causes along the way.
Dec 2023
New UX explains dependent GPU memory limits, so maxing out masses visibly cuts your microphone budget instead of failing mysteriously.
Tens of thousands of random presets now get serialized to GPU format and simulated in a fuzz test, proving the new warp alignment code doesn't crash.
GUI work for linking modulators to springs and to other modulators is done, and one MIDI CC knob modulating another now simulates correctly.
Modulators can now link to springs, with groundwork for modulating modulators. Fuzz testing caught bugs in the new code and old undo/redo paths.
Nov 2023
The Audio Units logo and the Audio Units symbol are trademarks of Apple Computer, Inc.
VST is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.