Keyz
Projects & Passions
01 · the field, in a volume
fieldplay3D
Render functions as three-dimensional particle flows.
Physics visualizer — the universe is beautiful
Each particle renders one step along its function. The one beside this is a pocket version; scroll to change the function.
- WebGPU · WGSL
- 262,144 particles · RK4
- fieldplay3d.pages.dev
Lorenz attractor1 / 4
02 · the second monitor
Couchplay
Music videos on the second screen, for a performer and a room. The picture is the whole screen, synced lyrics and chords ride the lower third, and a tray icon takes a song title so nobody has to touch the player.
A Python standard-library server, yt-dlp and a browser in app mode; the living room is the idle screen, and the zoom onto the TV is the only transition it needs.
- Python stdlib · SSE
- lyrics + chords
- Edge app window
On the TVLofi beats to study and chill toLofi Girl
03 · the map is a world
Slay4k 3D
A Slay the Spire 2 mod that turns the act map into a torn parchment floor the party walks on. Every node you discover is inked, sketched, popped up and bloomed into living ground, unique per seed and identical on every peer in the lobby.
It has to obey the game's own map generator and stay in lockstep across a lobby, so the world is a pure engine with the renderer on top, measured against the native map's rules.
- C# · Godot 4
- 2,030 pure tests
- Steam Workshop

04 · scouting, then the theater
Counter-Intelligence
Scouting for Counter-Strike matches: a team link becomes dossiers, the economy and a radar replay of every round. Then the Theater: the same demo played back in 3D in the browser, on the real map with its own lighting, models and sounds, at 64 ticks a second.
No downloads, no plugins. The server reads the map, model and texture files out of the player's own install, the browser decodes them on the fly, and the viewer is held to the game's own demo playback.
- WebGPU renderer
- demoparser2 · 64 Hz
- first person · chase · free cam
05 · what's left in the pool
TFT Ledger
A side table for Teamfight Tactics that watches the screen, reads every board you scout and keeps an honest ledger of the champions left in the pool, with your odds and directions of play scored on fit, room and payoff.
Nothing hooks into the game: passive screen capture, trait panels solved to champion sets, intervals instead of point estimates, and a display meant to be read in the three seconds between fights.
- Python · vision
- 5,234 games mined
- 737 tests

06 · Music notation — transcribed either way
Fret Not
Convert sheet music to guitar tabs, and tabs back to sheet music. Give it MusicXML (a Guitar Pro or MuseScore tab too), MIDI, ABC or a photo of a printed page: it engraves the score, writes the tab beneath it, plays them back and exports both.
Most notes can be played in several places on the neck, so the real work is choosing where. The fingering engine plans the whole piece at once, like a route planner: a Viterbi-style dynamic program weighs every path through the notes (open strings, how far the hand shifts, how far the fingers stretch) and keeps the easiest path from the first note to the last, not just the easiest next note.
- vanilla ES modules
- Viterbi fingering
- no build · offline
At one phone press
- Point. The camera finds the five-line staves while you aim, and snaps when the page holds still.
- Snap. One photo per page; a whole book goes in as pages, in order.
- Straighten. The page is laid flat along its own staff lines and its lighting evened out.
- Read. A reader on the PC, or the phone's own, turns every staff into notes.
- Play. Each printed line gets its tab right under it; a piano page becomes melody and bass a guitar can play.
Beethoven, Sonata Op. 2 No. 1 · photo JoJan, CC BY 3.0, turned and tilted like a quick phone shot · every step is Fret Not's own output on it
07 · small sounds, big progress
Soundcheck & Write On
Two small things for learning. Soundcheck listens as you say a word and lights each phoneme card as it hears it, on-device. Write On teaches the letters by finger, with a colour, a sparkle and a note for every stroke.
The speech model runs in the browser from local weights, so a voice never leaves the machine; the tracing forgives a child's hand but not the wrong stroke order.
- on-device speech model
- canvas · PWA
- one learner at a time
