Skip to content

Commit df88d41

Browse files
TMHSDigitalclaude
andcommitted
docs: record the 640px card variant in the example and showcase wiring
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 66a126f commit df88d41

3 files changed

Lines changed: 5 additions & 4 deletions

File tree

‎CLAUDE.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ gallery's source of truth. When authoring a new gallery example, copy the anatom
125125
`examples/bmesh-gear/` (script structure, README shape, dark-studio render recipe) and
126126
wire all of: gallery.json entry (with an `alt` sentence describing the still; the build fails without one), `.cursor-plugin/plugin.json` examples array (CI-gated),
127127
a `tests/smoke/catalog.json` row, a README gallery row, hero webp (1280×720) in
128-
`docs/gallery/assets/` + preview webp (1200×675), then run `python scripts/build_gallery.py`.
128+
`docs/gallery/assets/` + its 640×360 card variant `<name>-hero-640.webp` (`python scripts/make_thumbs.py`; the gallery build exits 5 without it) + preview webp (1200×675), then run `python scripts/build_gallery.py`.
129129
A check-only example wires only the `.cursor-plugin/plugin.json` entry, the
130130
`tests/smoke/catalog.json` row, and its README — it is deliberately absent from
131131
`examples/gallery.json` and `docs/gallery/`.
@@ -159,7 +159,7 @@ Stage with **explicit paths only** — never `git add -A` or `git add .`. Cursor
159159

160160
- `docs/VISUAL-STYLE.md` is the **binding** render standard; deviations are defects.
161161
- **Framing gate:** Layer 1 framing is measured, not eyeballed — the example's `--output` render path calls the shared helper `examples/gallery_framing.py` (`check_framing`, exit 10 on violation) before writing the still: hero fill 0.70–0.90 of frame in at least one axis, every element that matters clearing all four edges by ≥ 0.02. The check-only path never invokes it, so smoke runtimes are unaffected. The helper measures; call sites enforce. Bleed compositions call `measure_framing_deviation` and assert their own cap at the call site — `check_framing` has no `deviation=` flag.
162-
- **Contact-sheet gate:** composite the candidate hero beside the pinned calibration set — currently `armature-bend`, `damped-track-aim`, `bmesh-gear` — commit the composite under `docs/gallery/contact-sheets/`, link it in the PR body, and report per-criterion verdicts (stage darkness, wedge warmth, subject fill, saturation, thumbnail legibility) including mean luminance versus the calibration images. A claim without the committed composite is not acceptable evidence. **This list is the canonical home of the pinned set** — update it here when a new example outclasses a member; `docs/new-example-prompt.md` points here rather than naming members. The longer "calibration references" list in `docs/VISUAL-STYLE.md` is a style reference, not this contact-sheet set. Tooling: `python scripts/render_hero.py --blender PATH --only NAME` renders the README `--output` command and writes the hero and preview webps (the one committed PNG-to-webp path); `python scripts/contact_sheet.py NAME` builds the composite in the committed format and prints each tile's luma, stage, wedge warmth and saturation; `python scripts/measure_hero_drift.py` checks committed heroes against what the code renders now.
162+
- **Contact-sheet gate:** composite the candidate hero beside the pinned calibration set — currently `armature-bend`, `damped-track-aim`, `bmesh-gear` — commit the composite under `docs/gallery/contact-sheets/`, link it in the PR body, and report per-criterion verdicts (stage darkness, wedge warmth, subject fill, saturation, thumbnail legibility) including mean luminance versus the calibration images. A claim without the committed composite is not acceptable evidence. **This list is the canonical home of the pinned set** — update it here when a new example outclasses a member; `docs/new-example-prompt.md` points here rather than naming members. The longer "calibration references" list in `docs/VISUAL-STYLE.md` is a style reference, not this contact-sheet set. Tooling: `python scripts/render_hero.py --blender PATH --only NAME` renders the README `--output` command and writes the hero, its 640 card variant, and the preview webps (the one committed PNG-to-webp path); `python scripts/contact_sheet.py NAME` builds the composite in the committed format and prints each tile's luma, stage, wedge warmth and saturation; `python scripts/measure_hero_drift.py` checks committed heroes against what the code renders now.
163163
- **Asset-sheet gate (asset-type examples — game props/kits):** composite the hero asset rendered alone (neutral three-quarter view, plain studio lighting, no staging tricks, no labels, no comparison props) beside the pinned asset-quality reference set — currently `collision-hull-proxy`, `socket-attach-points`, `vertex-color-ao`, `wheelbarrow`, `apothecary-shelf` — rendered the same way; commit under `docs/gallery/asset-sheets/`, link it in the PR body, and report a verdict. The asset ships only if it is not identifiable as the least-designed object in that lineup — a strong scene can carry a weak model; this gate removes the scene. **This list is the canonical home of the reference set** — update it here when a new asset outclasses a member. A reference may be an example or a showcase piece. Tooling: `python scripts/asset_sheet.py --blender PATH NAME` renders the candidate and this set (read from this line) through `scripts/asset_sheet_panel.py` and writes the composite. The measurable floors behind the gate (naming, material variation, edge treatment) live in `examples/gallery_asset_quality.py` — render path only, same call pattern as `gallery_framing`, exit 11 on violation — with the calibration table and dropped-floor evidence in `docs/VISUAL-STYLE.md` § Asset quality.
164164
- **Falsification:** every check must be proven to fail once — break the contract, observe the non-zero exit, restore — with the probe and the measured error reported in the PR body. An assertion that cannot fail witnesses nothing.
165165
- **After gallery regeneration** (`python scripts/build_gallery.py`), read the **generated HTML** character by character — the `<img alt>` text and witnesses callouts in `docs/gallery/index.html` and `docs/gallery/<name>/index.html` — not just `examples/gallery.json`. Precedent: the `teaches.split(".")[0]` bug truncated 14/21 card alts at dotted API paths like `bmesh.ops` while the source JSON looked fine (fixed in PR #68).

‎docs/new-example-prompt.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ failure you introduce.
126126
Treat visual quality as a shipping gate with the same rigor as the checks. Conform
127127
to `docs/VISUAL-STYLE.md` explicitly (Standard view transform, dark studio stage,
128128
AREA key/fill/rim/wedge, designed hero materials, framing, 1280×720 → hero/preview
129-
webp). Inspect the actual rendered pixels at full size and as the gallery
129+
webp, plus the 640×360 card variant from `scripts/make_thumbs.py`). Inspect the actual rendered pixels at full size and as the gallery
130130
thumbnail. Iterate—the first render is a draft, not a candidate. Revise until the
131131
subject and demonstrated API contract are immediately readable, the composition is
132132
intentional, important geometry is not clipped, highlights are not blown out,

‎showcase/README.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,8 @@ showcase/
753753
preview.webp
754754
```
755755

756-
Hero stills live at `docs/gallery/assets/<name>-hero.webp` like examples.
756+
Hero stills live at `docs/gallery/assets/<name>-hero.webp` like examples, each with
757+
its 640×360 card variant `<name>-hero-640.webp` (`python scripts/make_thumbs.py`).
757758
`scripts/build_gallery.py` merges `showcase/gallery.json` into the same
758759
`docs/gallery/` site as examples, tagged `showcase`.
759760

0 commit comments

Comments
 (0)