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
AI-driver field report: republishing a hero end to end (8 open asks, what 0.13.x already fixed, and the use case behind #21-#23)
Field report from driving hero studio end to end as an AI, with the human at the gate: we republished the hero for adom/adom-step2glb (a full rebrand: new value prop, bare etched-chip artwork via the full-hero import path). Setup: the studio ran in a cloud container, the human reviewed via webview and pup, and TWO Adom Desktops were connected to the relay. Versions 0.12.x through the current 0.13.x, same session. Filing everything at once so the individual asks have their shared context; issues #21, #22, #23 were split out earlier from this same session and are referenced, not duplicated.
What already got fixed while we worked (thank you)
Between 0.12.x and current 0.13.x, several of this session's pain points shipped: the layout linter line in the gate, the "Exactly my PNG / With homepage overlay" toggle with press-D flip and amber-outlined dynamic elements (issue #21's ask), the full-hero warning that composed-layout checks cannot inspect imported pixels, and a heuristic edge scan that flags content in the lower band (both toward issue #22). The gate caught real problems our AI missed; the human-at-the-gate design works.
Still open, in priority order
1. set accepts invalid values and silently no-ops (re-verified on current build)
hero-studio set layout=bogus-token returns {"ok":true,"applied":{...}} and the invalid token lands in /state, where the page ignores it. The dot-path form (set fontSize.title=9) also echoes applied while state keeps the old value; only the nested JSON form works. An AI driver steering by ok:true goes blind for several rounds; this cost us three broken preview iterations the human had to catch by eye. Ask: validate enums and key paths, and return the valid token list in the error.
2. Layout tokens are undiscoverable
UI labels ("Corner lower-right") differ from state tokens ("bleed-corner-br"), and the only way we found the real enum was reading public/index.html. Ask: expose the valid enums in /state (layouts, themes) or a set --list.
3. pose --surface pup is unusable with more than one desktop connected
pose's internal adom-desktop calls pass no target, so with two desktops every call refuses with ambiguous_target. 0.13.0 also REGRESSED the failure mode: 0.12 fell back to a webview tab with a warning; 0.13.0 hard-errors (PUP_OPEN_FAILED) and exits, leaving no gate open anywhere. The error text at least now prints the underlying responses verbatim, which is how we diagnosed it. Ask: accept --target / honor ADOM_TARGET on every internal call, and restore the webview fallback.
4. Re-pose wipes the staged work
Every pose clears the vitrine and re-runs auto-pull, so reopening a timed-out or crashed gate destroys a staged full-hero import (we re-imported ours four times across gate reopens and a server restart). Ask: pose should preserve an existing full-hero import for the same page, or offer a --keep-vitrine flag; bonus: when the posed page already has a studio-stamped hero, offer to start from its recorded provenance state (theme, layout, seed) so a republish is a tweak, not a rebuild.
5. Vitrine auto-pull can select the page's own hero
On a page whose repo carries its hero PNGs, auto-pull grabbed the existing hero billboard as the vitrine content: hero-inside-hero, and no VITRINE_IS_GENERIC reprimand because a src WAS loaded. Ask: exclude the page's hero assets (page.json hero.path, hero-.png) from auto-pull candidates and prefer docs/screenshots/.
6. The studio is single-tenant with silent takeover
Two AI threads posed against one studio during this session and clobbered each other's staging; the human had to arbitrate by chat. Ask: pose should refuse or queue when another gate is open and NAME the holder, e.g. POSE_BUSY {holder, since}, the way bridge_kill names active threads.
7. Custom background art has no first-class path
Our page's established brand texture (a dense circuit-trace tile) predates the studio and cannot be reproduced by the fixed themes; the circuitry theme is its own sparser pattern with only a reroll. Full-hero import covers us, but then ALL studio composition tooling (text, linting, layouts) is bypassed. Ask: allow importing a background tile/image as a theme so composed mode can carry an existing brand.
8. Expose the new checks to the driving AI
The 0.13.x linter line and band heuristic render in the gate UI, and /state.lint exists, but the band-scan verdict and full-hero notes were not visible in /state when we drove it. The AI preparing the hero is the one that can fix findings before the human ever looks. Ask: mirror every gate-side finding (linter, band heuristic, full-hero caveats) into /state so CLIs can iterate to clean before requesting review.
Context for the maintainers
The full-hero import path worked well as the escape hatch for an established brand, and vitrine --file + set + toast live-updating in front of the human is a genuinely great driving loop. doctor's exact-fix output is the best onboarding of any Adom tool we have used. The asks above are what is left between "possible with tribal knowledge" and "drivable by any AI on the first try".