Skip to content

fix(gallery): regenerate the 25 drifted heroes from their code, with contact sheets - #225

Merged
TMHSDigital merged 1 commit into
mainfrom
fix/200-regenerate-heroes
Sep 23, 2026
Merged

TMHSDigital merged 1 commit into
mainfrom
fix/200-regenerate-heroes

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Summary

Closes #200 and does the unblocked part of #202.

Type

  • feat
  • fix — committed stills disagreed with the code
  • docs / chore / ci / refactor

Changes

  • scripts/render_hero.py: renders an entry's README --output command. The script's own framing (exit 10) and asset-quality (exit 11) gates run first. It then writes the hero at 1280×720 and the preview at 1200×675, both webp q90, the quality the showcase scripts already use.
  • scripts/contact_sheet.py: writes docs/gallery/contact-sheets/<name>-contact-sheet.webp in the committed format (2610×402; candidate plus the pinned armature-bend, damped-track-aim, bmesh-gear). It prints mean luma, stage (frame-border luma), wedge warmth (R−B over the brightest tenth of the lower half) and saturation per tile. Checked against the committed cart sheet: same size, tiles within encode noise (mean abs diff 0.003).
  • 25 heroes and 25 previews regenerated: wave-displace, custom-normals-shade, temp-override-join, treasure-chest, wall-torch, collision-hull-proxy, tavern-stool, gn-modifier-inputs, compositor-glare, bake-normal-high-to-low, damped-track-aim, shipping-crate, park-bench, text-version-stamp, wheelbarrow, campfire, fence-kit, grindstone, anvil, signpost, terrain-scatter, hand-pump, iron-cauldron, light-link-studio, vse-cut-list.
  • 33 contact sheets: 17 new, 16 replaced.
  • assets/og-card.jpg rebuilt; two of its four tiles were regenerated.
  • CLAUDE.md: one sentence naming the three tools under the contact-sheet gate.

Evidence

  • live-run-proven: E:\Blender-Developer-Tools\.scratch\blender-5.2.1-windows-x64\blender.exe (reports Blender 5.2.1 LTS).
  • Calibration band re-measured on regenerated files: damped-track-aim renders at 0.1511, not the 0.1722 it had as committed. The band from code is 0.151 … 0.305; armature-bend 0.2787 and bmesh-gear 0.3048 are unchanged.

Contact-sheet verdicts

The criteria are stage darkness, wedge warmth, subject fill, saturation and thumbnail legibility, judged by eye from the sheets, with the measured numbers below. The luma band is 0.151–0.305. Calibration tiles: armature-bend 0.2787 / stage 0.2132 / sat 0.1436; damped-track-aim 0.1511 / 0.1448 / 0.2305; bmesh-gear 0.3048 / 0.2368 / 0.1948.

Sheet Why Luma Stage Warmth Sat Verdict
damped-track-aim #200 regenerated 0.1511 0.1448 +0.2772 0.2305 calibration member itself: sheet shows the other two
hand-pump #200 regenerated 0.1666 0.1701 +0.0585 0.0834 pass
street-lantern #202 (hero already matched) 0.1705 0.1723 +0.0301 0.0983 pass
signpost #200 regenerated 0.1712 0.1752 +0.1099 0.1187 pass
wooden-bucket #202 (hero already matched) 0.1729 0.1767 +0.1227 0.0733 pass
wheelbarrow #200 regenerated 0.1756 0.1645 +0.0796 0.1262 pass
treasure-chest #200 regenerated 0.1778 0.1871 +0.1744 0.1363 pass; subject reads small at thumbnail scale
iron-cauldron #200 regenerated 0.1789 0.1715 +0.0220 0.0827 pass
wooden-ladder #202 (hero already matched) 0.1797 0.1794 +0.1029 0.1197 pass; thin subject, weak thumbnail legibility
hitching-post #202 (hero already matched) 0.1820 0.1841 +0.1061 0.1188 pass; thin subject, weak thumbnail legibility
anvil #200 regenerated 0.1826 0.1867 +0.2106 0.1134 pass
shipping-crate #200 regenerated 0.1833 0.1760 +0.0124 0.1705 pass
park-bench #200 regenerated 0.1841 0.1697 +0.0496 0.1141 pass
grindstone #200 regenerated 0.1864 0.1656 +0.1601 0.1120 pass
tavern-stool #200 regenerated 0.1879 0.1905 +0.0963 0.0821 pass
wooden-barrel #202 (hero already matched) 0.1884 0.1667 +0.2208 0.1785 pass
fence-kit #200 regenerated 0.1902 0.1669 +0.3013 0.1343 pass
watchtower #202 (hero already matched) 0.1924 0.1988 +0.1389 0.1409 pass; subject small in frame
water-trough #202 (hero already matched) 0.1927 0.1800 +0.0995 0.1303 pass
market-stall #202 (hero already matched) 0.1983 0.1843 +0.1974 0.1542 pass
terrain-scatter #200 regenerated 0.2143 0.1924 +0.2201 0.1788 pass
vse-cut-list #200 regenerated 0.2214 0.1950 +0.0177 0.1025 pass
campfire #200 regenerated 0.2235 0.1763 +0.0275 0.0455 pass
gn-modifier-inputs #200 regenerated 0.2281 0.1727 +0.1805 0.2670 pass; near-clipped highlight on the large cube's top face
wave-displace #200 regenerated 0.2426 0.1932 -0.4296 0.6626 intentional edge-to-edge bleed composition, saturated blue as before
light-link-studio #200 regenerated 0.2479 0.1919 +0.1567 0.2626 pass
collision-hull-proxy #200 regenerated 0.2576 0.2042 +0.0021 0.1106 pass
custom-normals-shade #200 regenerated 0.2750 0.2039 +0.1498 0.2114 pass
text-version-stamp #200 regenerated 0.3299 0.3254 +0.0799 0.1642 bright backdrop by design; now reads 5.2.1 LTS, the site's primary version
bake-normal-high-to-low #200 regenerated 0.3359 0.2079 -0.2499 0.1882 bright lilac normal-map card by design; stage in band (0.208)
temp-override-join #200 regenerated 0.3611 0.2966 +0.4034 0.2167 flag, #224: stage clearly brighter and cooler (border 0.297 vs 0.145–0.237); was already bright as committed (0.338)
wall-torch #200 regenerated 0.3642 0.2895 +0.4321 0.2622 deviation by design: warm flame pool; luma is information
compositor-glare #200 regenerated 0.4168 0.1885 -0.0215 0.3211 deviation by design: emissive rings; luma is information

Systemic observation, not a per-piece failure: the showcase props, as a family, are less saturated (0.07–0.18) than the calibration set and often thinner in frame. They read as a consistent muted-wood set rather than any single one being the odd one out. That is a style question for the showcase as a whole, so I'm recording it here rather than failing pieces.

Out of band by design, or flagged:

  • By design: compositor-glare, wall-torch, bake-normal-high-to-low and text-version-stamp are emissive or deliberately bright. Every one was already above the band as committed, and each is now darker, closer to the band.
  • Flagged: temp-override-join is the one stage-darkness flag, filed as temp-override-join hero: stage renders brighter than the calibration set #224. Relighting its script is a separate content change.

Not done

Checklist

  • Explicit paths only (87 files). The CLAUDE.md edit is deliberate and one sentence.
  • Counts and manifest unchanged.
  • No new CI check. The tools are authoring-only; the render-path gates they rely on were proven by these runs.
  • DCO Signed-off-by: present.
  • No credentials or emails. Binary paths are as the template asks.

🤖 Generated with Claude Code

…contact sheets

#200's full sweep found 25 committed heroes that no longer matched what
their scripts render (3.8-77% of pixels past 2% against a q90 re-encode of
the fresh render); the other 54 matched at the encode floor. Several
scenes had been edited after their still was made, and the PNG-to-webp
step lived in uncommitted scratch scripts, so nobody could regenerate a
still and get the committed result.

- scripts/render_hero.py: the one committed path. Renders an entry's README
  --output command (the script's own framing/asset gates run first) and
  writes the hero (1280x720) and preview (1200x675) as webp q90.
- scripts/contact_sheet.py: builds the contact sheet in the committed
  format and prints each tile's luma, stage, wedge warmth and saturation.
- The 25 heroes and their previews are regenerated on Blender 5.2.1 LTS;
  re-measured, all 25 now match their code (0.00-0.04%).
- Contact sheets for those 25, plus the 8 matching showcase pieces that had
  none (#202), against the regenerated calibration set.
- assets/og-card.jpg rebuilt from the regenerated heroes.
- CLAUDE.md names the three tools under the contact-sheet gate.

Closes #200

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
@github-actions github-actions Bot added examples Runnable smoke-gated examples under examples/ showcase Budget-conformance props under showcase/ documentation Improvements or additions to documentation labels Sep 23, 2026
@TMHSDigital
TMHSDigital merged commit c010da5 into main Sep 23, 2026
11 checks passed
@TMHSDigital
TMHSDigital deleted the fix/200-regenerate-heroes branch September 23, 2026 10:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation examples Runnable smoke-gated examples under examples/ showcase Budget-conformance props under showcase/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Committed hero stills do not match what the scripts render

1 participant