app
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
← Commit history
Publish 0.19.6
4 files changed
+22−11
SKILL.md+6−2@@ -46,8 +46,12 @@ scales by gating the STYLE, not every part: look. parts.json rows: {ref, title, kind?, vitrine?: <render path>, headline?, subtitle?}. -Generation is local (no wiki calls, no rate limits). The publish loop is-where pacing matters, and you do not have to write it: a complete runnable+Generation is local (no wiki calls, no rate limits). Publishing is capped+at 10 logical publishes/min PER ACCOUNT (sliding minute window; wiki#131+has the full table: repo push 30/min, page edit 10/min; IP adds nothing+for authed calls). The reference script defaults to 7s pacing (safe+margin); two accounts double the aggregate if you need speed. You do not+have to write the loop: a complete runnable reference ships with this package at docs/bulk-publish-reference.mjs (installed under adom_modules/adom/hero-studio/docs/). It walks a parts directory (part.json + model.step + render.png per part), batches the heroes
docs/bulk-publish-reference.mjs+14−7@@ -21,10 +21,15 @@ `hero-studio style save <name>`. That approval gates every hero this script produces (it rides each PNG's provenance). - Rate limits: publishes run SERIALLY with --pace seconds between; any- publish whose output mentions a 429/rate answer triggers exponential- backoff (30s, 60s, 120s) and a retry, then the part is marked failed and- the loop continues. Nothing here hammers the wiki. */+ Rate limits (exact, from the wiki team on adom/wiki#131): sliding+ 60-second window PER ACCOUNT (IP does not add a cap for authed calls).+ pkg publish and page create are 10/min each, and a new-page publish+ touches both, so the binding ceiling is 10 logical publishes/min per+ account; repo push is 30/min; page edit 10/min. The default pace here is+ 7s (~8.5/min) for margin; 6s is the exact line. 300 pages at 7s is about+ 35 minutes. Faster option: split the run across TWO accounts (the cap is+ per account) and run --pace 4 in each. On a 429 the server sends+ Retry-After, which this script honors before its exponential backoff. */ import { execFileSync, execFile } from 'child_process'; import fs from 'fs'; import path from 'path';@@ -36,7 +41,7 @@ const ORG = arg('--org', 'adom'); const STYLE = arg('--style'); const HUMAN = arg('--human'); const QUOTE = arg('--quote');-const PACE = Number(arg('--pace', 4));+const PACE = Number(arg('--pace', 7)); const PORT = arg('--studio-port', process.env.HERO_STUDIO_PORT || '8846'); const DRY = has('--dry-run'); if (!PARTS || !STYLE || !HUMAN || !QUOTE) {@@ -121,8 +126,10 @@ for (const p of partsManifest) { delete state.failed[p.ref]; console.error(` ${p.ref}: published`); } else if (/429|rate/i.test(pub.out)) {- console.error(` ${p.ref}: rate-limited; backing off ${backoff}s (attempt ${attempt + 1})`);- await sleep(backoff);+ const ra = pub.out.match(/retry[- ]after[:\s]+(\d+)/i);+ const wait = ra ? Math.max(Number(ra[1]), 5) : backoff;+ console.error(` ${p.ref}: rate-limited; waiting ${wait}s (${ra ? 'server Retry-After' : 'backoff'}, attempt ${attempt + 1})`);+ await sleep(wait); backoff *= 2; } else { console.error(` ${p.ref}: FAILED: ${pub.out.split('\n').find((l) => /error/i.test(l)) || 'unknown'}`);
package.json+1−1@@ -2,7 +2,7 @@ "slug": "hero-studio", "title": "Hero Studio", "type": "app",- "version": "0.19.5",+ "version": "0.19.6", "description": "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. Adom-org pages get the house wordmark and palette automatically; every other owner brings their own accent and background colors, with placement fixed for all. The floating app window is the vitrine: it auto-loads a real screenshot from the package's wiki page (screenshots/, docs/), takes a manual import, or a full-hero import (the human-ratified re-stamp path for existing heroes). The pose gate opens in verification mode: per-item checklist (title, subtitle, vitrine, type match) and a Generate that unlocks only fully confirmed. Includes vitrine bleeds, brand tile themes, gradient angles, pixel-faithful wiki marquee and index-card previews, and a component-hero mode with a photo/raytrace/phong fallback ladder.", "license": "MIT", "tags": [
page.json+1−1@@ -2,7 +2,7 @@ "slug": "hero-studio", "title": "Hero Studio", "type": "app",- "version": "0.19.5",+ "version": "0.19.6", "description": "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. Adom-org pages get the house wordmark and palette automatically; every other owner brings their own accent and background colors, with placement fixed for all. The floating app window is the vitrine: it auto-loads a real screenshot from the package's wiki page (screenshots/, docs/), takes a manual import, or a full-hero import (the human-ratified re-stamp path for existing heroes). The pose gate opens in verification mode: per-item checklist (title, subtitle, vitrine, type match) and a Generate that unlocks only fully confirmed. Includes vitrine bleeds, brand tile themes, gradient angles, pixel-faithful wiki marquee and index-card previews, and a component-hero mode with a photo/raytrace/phong fallback ladder.", "license": "MIT", "tags": [