ginnoir 2ec8952f4f feat(vault): add static-surface generator for the ROM-hack catalog
Reads Pokémon ROM Hacks/Hacks/*.md as source of truth and rewrites the
static mirror tables + header counts in Index.md, Platforms/*.md, and
Bases/*.md. Dataview blocks, prose intros, and footers are preserved;
the notes themselves are never edited (curated type/rating/version safe).

Covers all 285 hacks; creates Platforms/{3DS,PC,Patch,Unknown}.md.
Supersedes the archived build-romhack-vault.py (a hardcoded 75-hack
bootstrap that would regress the live vault).
2026-06-08 04:49:56 -05:00

Pokémon ROM Hacks — tooling

Acquisition + patching pipeline for the Pokémon ROM-hack collection in the valhalla homelab library. Spun off from the homelabstack repo on 2026-06-06.

The catalog (the notes) lives in the self-hosted Obsidian vault, not in this repo — under Pokémon ROM Hacks/: one note per hack, plus Index, Types, Play Queue, Bases/, Platforms/, a Wanted acquisition list, and a _Claude.md ops reference. Access it via the Obsidian MCP (mcp__obsidian__*) or the vault skill. New hacks are added there manually (see the vault's _Claude.md checklist). This repo is just the tooling.

The ROMs live on valhalla under /storage1/Emulation/roms/<platform>/Hacks/, served by the RomM stack (roms.ginnoir.com) — deployed from homelabstack (stacks/roms/).

Layout

Path What
scripts/romhack-import.py Import a drop folder of mixed ROMs/patches/docs into the valhalla library (validate, clean-name, apply patches, archive). Runs on valhalla.
scripts/romhack-fetch.py Acquire + patch + place worthwhile hacks from direct (non-gated) sources. Manifest-driven. Runs on valhalla.
scripts/romhack-apply.py Apply a single IPS/BPS/UPS patch to a base ROM with checksum verification.
scripts/build-romhack-vault.py Archived. Original generator that bootstrapped the vault notes from an in-script dataset. The vault has since been enriched and is now hand-maintained via the Obsidian MCP — do not re-run it against the live vault (its output is poorer: no play_status/rating/Bases/Play Queue). Kept only for the structured HACKS dataset; its output dir is gitignored.
drop/ gitignored staging area (~1.3 GB) of ROM/patch binaries pending import.

Acquisition policy

Pre-3DS handhelds (gb/gbc/gba/nds) + pre-Wii consoles. Direct, non-anti-bot sources only for auto-fetch; gated hacks are tracked in the vault's Pokémon ROM Hacks/Wanted.md for manual hand-off. No offensive/"shitpost" content (e.g. Clover excluded).

S
Description
Pokemon ROM-hack acquisition tooling. Catalog notes live in the Obsidian vault (Pokemon ROM Hacks/).
Readme
3.1 MiB
Languages
Python 91.5%
PowerShell 5.5%
Shell 3%