made a little travel companion for my upcoming trip so everything’s in one place (and my family can see where i am without me texting every update):
- all the bookings, tips, and random notes in one spot
- day-by-day + rough hour-by-hour itinerary (adding alt routes as i go)
- private link so they can check the map / current plan
- weather, walking distances, and rough spend so i’m not opening five other apps
still polishing it but already nicer than the usual mess of notes + google docs + screenshots
fixed jagged lineart in my WebGPU Anime4K port. Lines looked rougher in the browser than in mpv at the same size.
turns out mpv’s libplacebo renderer uses linear sampling inside shader passes. I was using nearest-neighbor. switching to linear made the edges much smoother.
continuing work on my anime player in 4K in the browser.
last time i had the Anime4K shaders ported to WGSL and image upscaling working.
been working on the mkv side since:
- wrote custom matroska (mkv) parser in TS from scratch.
- reading local files or fetching byte ranges from a URL, caching chunks and loading the next chunk ahead of time
- pulling video/audio packets out of MKV blocks, calculating their timestamps and passing them to WebCodecs for decoding
- fixed color space issues
- bunch of optimizations to comfortably stream and upscale at 30+ fps
currently working on audio decoding and playback
made an MCP for Ableton docs.
under the hood:
- SQLite FTS5/BM25 + local BGE embeddings
- rank fusion + MiniLM cross-encoder reranking
- overlapping text windows with heading context
- screenshots linked to exact text positions and nearby explanations
- actual image output over MCP, cached locally
plus 100-question benchmark to test search quality.
now trying to shrink the 300 MB (lol) download and make setup easier. keyword-only search and a smaller reranker both missed more supporting evidence. looking for a smaller setup that keeps retrieval quality.
OR i could spend that time actually reading the manual 🤔
update:
audio playback is working in the player!
- extended my matroska parser to handle laced blocks — multiple audio frames packed into a single block, each needing its own timestamp derived from the codec's samples-per-frame
- decoding audio with WebCodecs alongside video, scheduling through Web Audio
- hunted down a bug that made audio choppy: the decode loop slept a full second every time its queue filled up, so playback was fed at ~0.75x real time. one line fix, now the schedule runs ~60s ahead
video and audio play together now.
next: keeping a/v in sync over long playback
using KittyLitter and Codex (/goal) to migrate my music playlist on YouTube with 700+ songs to Apple Music
can't imagine doing this manually, probably would take me days...