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
pose defaults comp.id to a real unrelated MPN (SM02B-SRSS-TB) — confusing and unlinted
A real, unrelated MPN is the default subject
hero-studio pose <owner/slug> opens the studio already posed for the user's
page — correct title, correct slug — but with comp.id defaulted to
sm02b-srss-tb (a JST 2-pin wire-to-board connector).
Observed state immediately after pose adonis/nametag-blank-large-led:
{
"page": "adonis/nametag-blank-large-led",
"mode": "app",
"comp": { "id": "sm02b-srss-tb", "imgSrc": "photo",
"layout": "photo-right", "mpn": "under-title" }
}
Why this is worse than a neutral placeholder
SM02B-SRSS-TB is a real part with a real MPN, rendered in the exact slot
where the user's own part number belongs (mpn: "under-title"). The user sees a
hero for their board captioned with someone else's connector. The reaction is not
"that is a placeholder", it is "why is my nametag board showing a JST connector?"
— which is exactly what happened here, verbatim, from the user driving it.
It is also a silent default: nothing in the pose output says the subject is a
stand-in. The SHOWCASE_IS_GENERIC reprimand fires on the showcase image, but
there is no equivalent warning for comp.id still being the demo part, and
state.lint was [] the whole time.
Asks
- Never default to a real MPN. If a placeholder is needed, make it visibly
inert —
YOUR-PART-HERE, an empty slot, or the page's own slug. - Prefer the posed page.
pose <owner/slug>already knows the page; defaultcomp.idto that slug rather than to a demo fixture. (Setting it manually afterwards works fine —set '{"comp":{"id":"<slug>",…}}'— so the value is plumbed, it is just defaulted wrong.) - Lint it. If
comp.idis still the built-in demo part at Generate time, surface it the waySHOWCASE_IS_GENERICdoes, instead of letting a hero go out stamped with an unrelated manufacturer's part number.
Related: #52 (the subject picker cannot read the local package on a first hero) — both come from the studio defaulting to fixtures instead of the package it was pointed at.
Environment
hero-studio 0.20.4, Linux container, --surface webview,
pose adonis/nametag-blank-large-led --type component.