A pile of small, AI-assisted tools I made in my spare time — ROM wranglers, PDF contraptions, a Dragon Quest X router, and the Rust plumbing underneath. I needed them, so I made them.
A Rust CLI that analyzes, renames, and scrapes metadata for retro game ROMs and disc images — 23 systems across Nintendo, Sony, Sega, and Microsoft. Streaming CRC32/SHA1/MD5, CUE/CHD/ISO parsing, the works.
pdf viewer, flashcard maker, and bookbinding imposition
A set of Rust PDF tools: a caching page viewer, a flashcard-PDF generator from CSV, and a real imposition engine — signature / perfect / spiral / case binding with folio, quarto, and octavo arrangements plus printer’s marks. Pure-Rust rendering, self-contained binaries.
Tell it where you are and where you want to go; it returns the fastest route to actually play — weighted Dijkstra over the whole world, filtered by which content packs you’ve cleared and which Zoom points you’ve registered. Bilingual EN/JP. Runs entirely in your browser.
Every tab becomes a Polaroid card — a screenshot — on a pannable, zoomable 2D table. Group cards into hand-drawn chalk blobs, annotate them, and let the tabs you aren’t using sleep to save memory. New tabs arrive as cards in your hand to drop onto the table or into the bin; it replaces your new-tab page, so the canvas is home. Chromium + Firefox (MV3), local-only — nothing leaves your machine. Too useful to call junk.
Drag a rectangle over a chunk of text, it finds the words, you click to translate — via Gemini vision or Google Cloud Translation, with a token-saving cache. Resize, rotate, and fix the result in place. The right amount of manual for documents you refuse to pay a pro to mangle.
Helper scripts that set up a Wine prefix, run the DQX installer into it, and launch the game with the handful of non-obvious settings that make gameplay, the launcher’s HTML UI, and in-game FMV cutscenes all work — no Steam, Proton, or Lutris required. (The name’s a fossil: it predates dropping Proton.)
retro-junk’s sibling, pointed at music instead of games: identify CD rips by disc ID against MusicBrainz and Discogs, verify them against AccurateRip, catalog everything in SQLite, and export tidy tagged FLAC with cover art. Built around uncommon and foreign-language discs — Thai, Korean, Chinese, Japanese — where you might not even know how to type the title. CLI + GUI in sync.
A cross-platform, GPU-accelerated drawing surface in Rust, built around a retained vector scene graph — strokes are geometry, not pixels, so you can zoom in forever and "100%" means real-world size. Stylus-first: pressure, tilt, honest palm rejection, aiming for 120+ FPS and the closest-to-paper latency feasible. Pre-alpha and hobby-paced.
A voxel-world game in Rust: you don’t place blocks yourself — you direct little guys to build a nice place for them to live. Early days, but the bones are there: a Cargo workspace with engine crates, assets, and room for mods.
the shared Rust plumbing under the rest of the pile
The reusable building blocks the other tools stand on, carrying no app-specific meaning: CD-image parsing (CUE/CHD/ISO), streaming multi-hashers, checksum descriptors, common I/O traits, and a pure-Rust PDF render core. Boring on purpose — so the tools above don’t have to be.
I call these Trash Tools on purpose. Most of the code was written with an LLM riding shotgun, so by some measures, it becomes “less valuable” as it wasn't hand-made entirely by a human. I get it.
Each tool here fills some need I had — translating documents without paying a fortune, wrangling my retro game collection, impositioning books for printing and binding, navigating an old Japanese MMORPG withough losing my mind. Nearly always, alternatives were expensive, tedious, or just didn’t exist, so I made these instead. AI let me do it in my spare time. The alternative was "no tool gets made." So that was my choice.
The code’s all right there in the repos, robot fingerprints and all. This site is one of them too — same robot, same rules. It's probably not as good or clean as if I'd architected and written them all by hand. But they DO exist, flawed as they are, and for me that means I can get other things done.