A partial inventory of things I’ve built, bent, tuned, or persuaded into working.

Things I make

MIDI guitar

A DIY guitar that is also a polyphonic MIDI controller. Six single-string pickups feed a Teensy 4.0, which turns pitch, note on/off, and per-string bends into MPE MIDI in real time. It still has a normal magnetic pickup and quarter-inch jack, because sometimes a guitar should remain a guitar.

Build notes and code

AI, explained in human

A working notebook of plain-language AI and machine-learning terms, essays, practice notes, and deep dives. The operating theory is that almost nobody fully understands this stuff, so we may as well make it legible together.

Read the site · Browse the source

OWNER/OPERATORS

My post-punk / doom-groove / metamodern pop project in Boise: songs, recordings, and a small digital habitat built to hold them. Analog imperfection, digital precision.

Listen and look · Browse the source

Fable-MVP.tech

A séance you can run. Pick a language model, turn up its temperature, and watch it judge a present-day AI shutdown while gradually losing the signal. Every answer is pre-generated, verbatim model output.

Try Fable-MVP.tech · Browse the source

Rack & Pinecone

The umbrella over the music, apps, contract work, and assorted side quests. Some projects need a company. Some just need a domain name and adult supervision.

Visit Rack & Pinecone

Forks that became projects

Some forks are bookmarks. These got out of hand.

CTranslate2 on Metal

A native Metal backend for transformer inference on Apple Silicon: int8 weights, hand-built GEMM and GEMV kernels, fused decode attention, GPU-native transpose and gather, and a fairly unreasonable amount of correctness and downstream testing. On an M4 Max, Whisper large-v3 beam decoding went from 39.2 seconds to 4.6.

Browse the CTranslate2 fork

bitsandbytes on MPS

Turned bitsandbytes’ dormant Metal scaffolding into a native MPS path for blockwise and 4-bit quantization, dequantization, GEMV, and GEMM. The fork carries 329 CPU-parity tests and also produced fixes for Lion optimizer weight decay across the default, CUDA, and Triton backends.

Browse the bitsandbytes fork

CUDA-only AI, made to run on a Mac

Three separate ports rather than one suspicious compatibility shim: Finetrainers can train LTX-Video and Wan LoRAs on MPS; Open-Sora can generate video, image-to-video, and 768px stills; and CogKit can train CogView4 LoRAs. Each lane includes real-model runs and CPU-oracle checks instead of stopping when the import succeeds.

Finetrainers · Open-Sora · CogKit

PyTorch MPS reductions

New Metal dispatch paths for reduction shapes that left most of the GPU idle. A 33.5-million-element sum with extent two dropped from 25.6 ms to 1.06 ms; an expand-and-upsample backward pass dropped from 97.4 ms to 2.7.

Browse the PyTorch fork

PULSE, revived

Dragged a fascinating 2020 face-upscaling project onto modern Python and PyTorch, with support for Apple Silicon, CUDA, and CPU. The revival fixes two long-lived bugs, detects failed convergence instead of quietly returning an unfinished face, and is much more honest about the fact that “enhancing” a face means inventing one.

Browse the PULSE fork · Read the deep dive

Ollama meets 1930

Added the custom Talkie 1930 model architecture to Ollama’s native MLX runner, including a lossless tokenizer conversion path. The result is a modern local-model server running a 13-billion-parameter model that has never read anything written after 1930.

Browse the Ollama fork

Smaller, sharp fixes

The nanochat fork adds real MPS synchronization, timing, and peak-memory reporting. The CorridorKey fork fixes MLX/Torch checkpoint collisions and BiRefNet failures under half precision on Apple Silicon. Less infrastructure, same refusal to accept “works on CUDA” as the end of the story.

nanochat · CorridorKey

More code, including the experiments too odd or unfinished to explain here, is on GitHub, and the tidier version of the story is on LinkedIn.