June 25, 2026 / HOMELAB · DND · MAKER · NETWORK-STUFF · AI-PLANNER
Two weeks of homelab chaos and a D&D map pipeline
Swapping NAS boot drives, standing up a GPU VM, building a sketch-to-battle-map generator with Gemini, and somehow finishing the garage drywall.
The past two weeks got away from me in the best way. I had a list of things I wanted to work on, and instead I migrated my NAS boot drive, set up a GPU VM from scratch, built a sketch-to-battle-map pipeline for my D&D campaign, and somehow also finished mudding and sanding the garage drywall.
The NAS work started because I had a 1TB NVMe sitting in the boot slot doing basically nothing useful. I did a fresh TrueNAS SCALE reinstall onto a 250GB SATA SSD, restored config from backup, and repurposed the NVMe as a SLOG device. That part went fine. What didn’t go fine: I immediately got a security alert about SSH login failures from my own workstation. Spent an hour convinced something was wrong before tracing it back to my SSH client offering every key it knew before hitting sshd’s auth-failure limit, a side effect of re-provisioning keys after the drive swap. The fix was a two-line ~/.ssh/config entry with IdentitiesOnly yes. I also discovered my 735GB Lightroom library on the NAS had no snapshot protection at all, which is the kind of thing you don’t want to find out during an unrelated investigation. Daily and weekly ZFS snapshots are running now.
The GPU VM took longer. I wanted a NixOS machine with the RTX 5060 Ti passed through properly, leaving my existing LXC container untouched. Getting IOMMU set up on the Proxmox host was fine; getting the GPU to actually work was not. Two separate boot blockers: nouveau hanging on Blackwell (nouveau doesn’t know what a 5060 Ti is yet), and a SeaBIOS/vBIOS incompatibility that took an embarrassingly long time to trace to a single rombar=0 flag. Once both were cleared, nvidia-smi came up clean and CUDA 13.1 verified correctly after a cold reboot. The VM is on Tailscale now, which is how I want to manage everything going forward.
From there I got the local LLM stack rebuilt on a freshly reflashed Ubuntu Server box, NVIDIA drivers, llama.cpp compiled from source with CUDA targeting sm_89, llama-swap running three chat models under systemd. I also added Qwen3-Embedding-4B as a fourth model in the stack, which feeds into a second-brain RAG pipeline I’ve been sketching out. I did a VRAM-margin sweep after the Linux rebuild and found the 30B MoE model gained about 5% throughput by dropping --n-cpu-moe from 28 to 26. Small thing, but satisfying when a number you didn’t expect to move actually moves.
The most fun thing I built was the battle map generator. I’m running a homebrew D&D campaign (Patras/Erythos), and I wanted a faster path from rough sketch to something usable in Foundry VTT. The pipeline takes a hand-drawn map sketch and session transcript text, runs it through Gemini 2.5 Flash on Vertex AI, and outputs a VTT-ready scene. The transcript enrichment part is what I’m most interested in, using narration from previous sessions to bias the aesthetic of generated maps so they actually feel like they belong in the same world. There are still two conditioning regressions I haven’t fully solved (grid lines baking into the output, and terrain bleeding outside the map bounds), but the core flow is committed and working.
The portfolio site also got more attention than I planned. Discovered that a bunch of uncommitted local work had never deployed to Cloudflare Pages, the Nixie Thermometer playground entry and the Name Lamp Generator were just missing from the live site. Fixed that, rebased against a published blog note that had diverged on origin, and now local, origin, and the live site are actually in sync. I’m going to be more careful about that.
The garage is done, at least the drywall phase. Framed, drywalled, mudded, sanded. It doesn’t sound like much written out but it ate a lot of weekend hours.
GET NOTIFIED
Leave an email and I'll ping you when a new note goes up. No other mail, ever. Prefer feeds? RSS works too.