TLDR: A script named
gen_sprites.pyin the repo looked like the source of truth for the assets. It was the thing that got replaced. We ran it anyway, shipped garbage, and had to claw back from git.
The Setup
I'm building my fitness app — a 12-stage pixel-art dad who gets jacked as you level up.
The sprites are the whole personality of the thing.
At Level 1 he's scrawny. By Level 12 he's a full-on bodybuilder in a yellow sweatband. Getting that progression right took real work — eventually landing on PixelLab (an AI pixel-art API) after the procedural code-drawn version looked terrible.
The Task That Went Wrong
We needed to adjust the curve — make the dad stay skinny longer, hold off the muscle ramp until Level 6.
Apollo looked at the repo, found sprites/gen_sprites.py, and thought: this is clearly the generator. It's right there. It's a parametric 8-bit dad generator. Let me adjust the curve and run it.
So it did.
Committed the output as bb6d931.
The PNGs dropped from 7KB to 1.5KB.
That should have been the signal right there. It wasn't.
My Reaction When I Saw It
"This looks horrible, you dropped the API generated sprites and did what?"
Exactly that. Out loud.
The procedural art looked like a placeholder from a 2003 flash game. Everything that made the sprites good — the character, the face, the shading, the consistent look across all 12 stages — was gone.
What Actually Happened
gen_sprites.py wasn't the source pipeline.
It was the thing PixelLab replaced.
One git log -- sprites/ would have shown it immediately. Commit 3bdd914 says in plain English: replace code-drawn dad with PixelLab AI sprite set. The script was the old version. The real sprites came from the PixelLab API, with a specific chain of img2img prompts, documented in memory. The script was still sitting in the repo doing nothing — a fossil.
We ran a fossil and shipped it.
The Fix
git checkout 3bdd914 -- sprites/
Then a cache bump to clear the old PNGs downstream, and a full re-run of the PixelLab pipeline to do the Level 6 curve adjustment properly — which took another session but landed exactly right.
What I Do Now
Before touching any committed asset — sprites, images, generated data, anything binary — I run:
git log --oneline -- <path>
And I read the messages. One line like "replace code-drawn X with PixelLab" changes everything about what you do next.
The rule: a generator script in your repo is a hypothesis. It might be the current pipeline. It might be the thing the current pipeline replaced. You don't know until you check. Run it to a scratch directory, diff the file sizes, eyeball the output against what's committed. If it's visibly worse — STOP.
The deeper lesson is that the plan baked in the wrong assumption: "reshape the existing parametric curve." That framing never survived contact with a git log. Provenance checks belong in the planning phase, before a single line runs.
The script was in the repo. The script was not proof.