Hero Studio
Public Made by Adomby adom
The hero-image lab with a human gate: `hero-studio pose <owner/slug>` opens the studio in front of the human, posed for their package, and blocks until they click Generate, producing the provenance-stamped 2000x1250 PNG the registry's hero gate requires. The image carries the title and artwork; the exported image also bakes the type pill (top right) and full wiki slug (bottom right); the page shows the hero bare, and only the homepage marquee overlays its own dynamic info. Every hero wears its P
Design-rules umbrella: bare vitrine mode, family presets, leading/proximity controls, full-import overlay clash, enum vs --type, dead pup surface
Umbrella: the studio fights professional graphic-design practice, so every serious hero (pup, kicad, fusion, now nb) ends up built OUTSIDE it and only stamped through full-import. Collected from a full day posing adom/nb-bridge (2026-08-09), with John reviewing at the gate. Companions: #25 (protect the title), #27 (bridge pill type), #28 (sizing headroom + human +/- controls), #33 (title vs headline).
1. The .window wrapper makes real-window screenshots impossible to show honestly.
Every vitrine is wrapped in a .window div with its own border (0.67px rgba(255,255,255,.09)), radius 9px, drop shadow, teal glow, and an OPAQUE rgb(13,17,23) background (transparency killed). A screenshot that already IS a real browser window gets framed again - a window in a window. John rejected that three times before we diagnosed the wrapper. --chrome none sounds like the fix but only removes the fake TITLEBAR. Need: a true bare vitrine mode (no frame, no bg, no shadow, alpha preserved). This single gap is why pup's dev skill says "in full-hero mode the studio contributes nothing but the provenance stamp".
2. The family design system lives in N private build scripts instead of the studio. pup measured Bridge's hero and hardcoded the constants (title 12cqw, pill Familjen 700 26px pad 22x12 inset 52px, vitrine y=140 w=1062 h=1050 right-edge=pill-right-edge, 68px taskbar band); kicad and fusion match; nb re-derived them today by MEASURING SIBLING PNGs pixel by pixel. The studio should ship this as a "bridge family" template/preset so the next bridge gets the family look by picking a preset, not by archaeology.
3. Typography controls ignore basic rules.
- No leading control: a two-line title renders at loose default line-height; John had to ask for "tighter leading so the two lines read as one message" and it required an external rebuild. Title line-height should be a slider (0.9-1.1em) next to fontSize.
- No proximity grouping: the subtitle's default gap from the title violates the law of proximity (title and value prop are one message); pup's spec uses a tight fixed offset. Gap should be a control with a sane default, not an accident of layout.
- fontSize.title default (8) undersets the headline in bleed-bottom (John: "maximize the title, it's the billboard") - #28's
fitproposal covers the computed max, but the DEFAULT should be the computed max, not a small safe constant.
4. Full-import mode leaves composed overlays armed.
With --full, overlay.pill stayed true and the studio stamped its pill ON TOP of the imported image's baked pill (double pill at the gate). Full-import should auto-disable composed overlays (pill/slug/author) or at minimum warn that both will bake.
5. mode enum vs --type free text disagree.
state.enums.mode = [app, component], yet pose --type bridge works and renders a BRIDGE pill. So the validated surface rejects what the CLI accepts (#27 asks for bridge properly; this is the API inconsistency around it).
6. pose --surface pup still calls the retired browser_* verbs (renamed pup_* 2026-08-08, no aliases), so the advertised surface always fails and every session hand-opens the gate window. May belong with #26's session-lifecycle items but it is a one-line fix in the pose runner.
Net effect today: ~6 hours of iteration for one hero, most of it re-deriving or working around things the studio could encode once. The studio's provenance gate is exactly right - the design engine around it is what needs to grow up.