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
Resend's global suppression list was silently eating my customers' license key emails, so I migrated anukari.com to Postmark for deliverability.
Feb 2026
Railway blocked my emergency deploy over dependency CVEs already live in prod, and why piling on safety checks eventually causes the outage.
Dec 2025
The Radeon gfx90c driver aborts in clBuildProgram because it can't index kernel argument arrays dynamically. Moving them to constant memory fixed it.
Jul 2025
Multichannel 50x50 audio I/O with near-zero overhead, ASIO support on Windows, and a workaround for a Radeon clBuildProgram crash on gfx90c.
An undocumented Metal error 14 with multiple plugin instances traced to kernels clearing 300 MB delay buffers that a low-watermark check made unnecessary.
Feb 2025
GarageBand silently stops calling ProcessBlock, so Anukari now detects the auto-bypass and hands the physics simulation to a background thread.
I ditched CPack's crippled installer generators for Inno Setup and pkgbuild directly, and shipped a new AnukariEffect plugin for use in effect chains.
After emailing DAW makers for NFR licenses I got Anukari stable in 13 hosts, fixing a Bitwig native window crash and a SymInitialize crash in Sonar.
Oct 2024
Random glitches on the Filament Metal backend came down to render passes without a color clear. Enabling clearing fixed it and I filed an upstream bug.
Windows pre-alpha is solid, so now I'm chasing MacOS bugs like file chooser corruption, plus a pkg installer since a dmg can't place VST3 and AU files.
Aug 2024
A missing await on an async function led me to typescript-eslint's promise rules, which surfaced a dozen similar bugs in the new website's code.
Moving MongoDB index creation into version-controlled TypeScript, then hitting a next.js bug where failed middleware makes server actions return undefined.
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.
Jul 2024
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.
Plugged in the ROLI Seaboard and MPE just worked, two notes bending in opposite directions. Also switched the new website from App Engine to Cloud Run.
MPE is implemented, including storing per-channel pitch, pressure, and CC74 between notes. Untested since my Seaboard came without the right USB cable.
With polyphony working well, I'm starting on MPE support ahead of my ROLI Seaboard's arrival, including the annoying MCM zone auto-configuration messages.
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.
Anukari's standalone build is now fully usable on MacOS, with the GUI, MIDI input, audio output, and hotkeys working after a morning of small bug fixes.
Jun 2024
Golden tests now compare audio via chunked FFTs and L2 distance, which surfaced an OpenCL bug on Mac where objects can legally live at address NULL.
After cleaning up the macOS port hacks and re-verifying Windows, Anukari now runs fully on my M1 MacBook, though the golden tests need fuzzy matching.
Anukari finally builds and links on my M1 Macbook after homebrew Clang pain, though the OpenCL code crashes whenever a microphone or modulator appears.
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.
May 2024
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
A rare debug build flagged seven crash bugs, including an unordered_set passed to std set_symmetric_difference that MSVC's checked STL caught at runtime.
I think I can get easy polyphony by running virtual instances of the physics model and using time dilation to pitch each note from one system.
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.
A JUCE crash I patched upstream, then flaky GUI tests that only failed when I alt-tabbed away, since some JUCE code cares whether the window is foreground.
Mar 2024
LFO retriggering now works via the generalized MIDI note routing, and unit tests caught a dangling route left behind by deleted LFOs.
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.
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
Fixed a bug where MIDI note off events were missed with the plugin GUI hidden, because GUI flow control froze the simulation timestamp.
Grinding through pre-alpha chores like window position saving, a recent presets menu, open source license credits, and LLC paperwork.
The precision sliders are finally done, and loading 3D assets in a thread pool took the GUI startup time from about 4 seconds down to 400ms.
Dials are gone. The new PrecisionSlider pairs a coarse slider with an adaptive thumbwheel so parameters spanning orders of magnitude stay precise.
Undo now works for mouse-wheel edits on Dials, tricky work nobody will ever notice. Along the way I hit a focus bug in the undo and redo hotkeys.
Jan 2024
Orthogonal-view mouse picking was janky from float precision in ray cylinder intersection, fixed with doubles, plus time-batching mouse wheel undo spam.
Realtime-safe logging is finished. No allocation or locks on the audio thread, plus a synchronous escape hatch so crash stacktraces always reach disk.
Tracing a delay line bug to CL_WRITE_MAP_INVALIDATE_REGION skipping the DMA read on pinned memory, so stale data landed in the internal sample buffers.
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.
The Bug strikes every 19 seconds, but only on some launches, and it survives replacing all the physics with a pure sine wave. Nothing adds up yet.
Dec 2023
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.
Compressors work and the microphones glow blue with gain reduction, but a rare few-second distortion with no repro case is haunting me.
Found a cheap way to modulate rotation by restricting it to the Y axis for exciters and mics, and pushed panning modulation down to the GPU for free.
Sample and hold exposed how non-random my GPU noise PRNG was. I replaced the linear congruential generator with xorshift64* after a Galois LFSR detour.
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.
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
MIDI control modulators now render as spinning 3D knobs, and I applied an ADC trick using arch-specific pause instructions in the spin-loop sync code.
Modulators are becoming their own 3D entities with routing stored on links, plus a JUCE crash fix upstream and more polish on my ADC23 slides.
Oct 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.