joemattie
stuff
← index
writing2026-08-063 min read

Weekly update, August 6

Joe Mattie
software engineer · mad scientist

These updates were supposed to happen on Sundays. It’s Wednesday and this one covers about two and a half weeks, so the system is working perfectly.

Halting Problem is getting a music video

“Halting Problem” (track 6 of Wavefunction Collapse) is becoming a full music video, generated in pieces because video models top out around 5 to 15 seconds at a time. The approach: storyboard the song into 33 segments across ten scenes, generate each one against its slice of the audio, and chain the last frame of each segment into the first frame of the next so the thing holds together visually.

I benchmarked local generation (ComfyUI with MiniMax H3 on the two 3090s) against the hosted APIs. Local ended up being around 4.5x cheaper but 20x slower. That doesn’t really give the “which one should we use” question a clean answer. A full parallel draft pass through WaveSpeed ran 189 generations without a single failure and cost less than dinner. Quality control is still very manual, and the failure modes are funnier than the successes.

For the edit I tried the browser editors (OpenReel, OpenChatCut) and then gave up and installed DaVinci Resolve. An agent drives it over MCP while I art-direct: we triaged the takes together and are now cutting a multi-track edit that samples between alternates, with the cuts landing on beat.

The novel grew characters

The Causal Projector spent the stretch in Snowflake Step 5: full character synopses for Evan, Tess, Ruth Hale, and Mouse, each one argued over until it stopped reading like a computer wrote it. Evan’s arc finally settled on acceptance of uncertainty, and I made a pass to reconcile accepted canon backwards so earlier documents agree with later decisions.

One experiment worth describing: condense all the planning into a sub-30-page version, hand it to two subagents with instructions to make it better without making it longer, have two more independently vote on the winner, and repeat four times. A little evolutionary tournament for prose. The site side got a proper tree navigation for the Snowflake library and an interactive story graph, with a diff viewer for the tournament records on the wishlist.

Two tools I didn’t plan to build

palimpsest is a Rust CLI (pal) that indexes a project’s entire git history into SQLite and answers “if I touch this file, what else moves”. It combines live structural imports, co-change coupling, and ghost edges: an import a refactor deleted where the files kept changing together anyway. It went from initial commit to npm (npx @joemattie/palimpsest) with prebuilt binaries in three days, and 0.2.0 added pal serve, an interactive blast-graph visualizer.

vibecad started as “design a 3D-printable grommet for the foam on the creature” and ended the same day as a conversational CAD workspace: a browser interface with a 3D canvas, a live model code panel, and chat wired straight to the agent, including ctrl+click to reference a surface mid-sentence. Thirty-one commits in a day, and it now runs under Claude, Codex, and Grok.

Odds and ends

Authorbot is in maintenance mode like I said it would be: releases now publish to GitHub automatically, since npm had gotten several versions ahead of it.

The homelab got a proper services repo: docker-compose for the box, mirrored to private GitHub, with ComfyUI as the first tenant. I also gave models their own partition and repointed everything that loads them, so the inference servers and the video work stop fighting over disk.

And this site got restructured. The “stuff” rail now points at living project pages (general info up top, update log below) instead of one-shot writeups, and a skill digs through my local work and session logs to keep them honest. It wrote the first draft of this post.

musicvideoaiwritingclaude-codecodexhomelab