Per-product pipeline: for each product, Claude first reads the base prompt (text only — the artwork image is never sent to the AI) and writes an art-director analysis of its essence (elements, palette, light, open space), then writes 2 variant(s) from it (change the count in ⚙ Settings), and that product's renders start immediately while the next product is being written. Machine checks run on every result; safe to stop and resume any time — nothing already written is touched, rewrites keep the old version in History. Want more style options? Raise the variant count in ⚙ Settings and press ⚡ again — products below the new count get topped up with extra variants from different scene elements, keeping everything you have.
One image per variant. Each product uses ONE approved test name for all of its variants (so the renders compare cleanly), and different products get different names from the approved lists (Olivia, Emma… / Liam, Noah…). Runs on the products in the selected collection (📁 picker on the Products tab; "all collections" = everything). 6 render in parallel; failures are logged and can be retried; safe to stop and resume. Re-renders keep the old image in History.
🎨 Claude's base-prompt analysis
keys: 1…9 choose variant (← A · → B) · ↓ reject · space next · click image to zoom
Models & rendering
Changes save to the app and apply to the very next write / render — no redeploy needed.
Tick as many models as you want — every ticked model writes the number of name prompts you choose, all of them running in parallel on the same brief (e.g. Claude + GPT + Qwen × 2 each = 6 outputs per product; up to 24 slots per product, and rounds add up). Every prompt is rendered through fal, so you get 6 outputs to compare — each colour-framed and labelled by the model that wrote it: CLAUDE 1-2 GPT 1-2 QWEN 1-2. Switch it off to write with a single model — much cheaper for a full 158-product run. If one model errors, the others still land and the row shows which one failed.
The key for the chosen provider must exist as a Cloudflare secret (Settings → Variables and secrets, then redeploy): Claude → ANTHROPIC_API_KEY · ChatGPT → OPENAI_API_KEY · Qwen → QWEN_API (or DASHSCOPE_API_KEY) · Grok → GROK_API (or XAI_API_KEY). All models work from the base prompt text only (the artwork image is never sent) and follow the same rules and checks.
Bundled defaults: include ref-girl.jpg, ref-girl-2.jpg … ref-girl-5.jpg (and the same ref-boy… names) in the deployed folder and those slots fill themselves. Uploading here overrides a slot for the whole team (auto-resized in your browser, saved instantly); ✗ returns that slot to its bundled default. Uploaded photos travel to fal only inside the render request. Empty slots are simply skipped.
Applies to prompts written from now on. Products that already have prompts keep their current variants until you press ↻ regenerate on them. More variants = more Claude + render cost per product.
Status legend & how it works
| 🔴 MISSING PROMPTS | Not started — no name prompts written yet (fresh product, or you deleted its data). Press ⚡ WRITE + GENERATE. |
| 🔴 ERROR · flagged | Claude's prompts failed the machine checks twice. Press 🎨 REGEN or ⚡ to retry with a fresh attempt. |
| 🟡 NEEDS IMAGES | Prompts exist, some renders are missing or failed. ⚡ WRITE + GENERATE renders only what's missing. |
| 🔵 RENDERING… | Working right now — the row updates live when each image lands. |
| 🟠 TO REVIEW | Everything is rendered — compare the variants and ⬆ push the winner (or reject). |
| 🟢 READY | You decided — a winner is pushed. It moves to the READY section and is included in the export. |
| ✗ REJECTED · needs redo | You rejected the whole set — it lives in its own ✗ REJECTED section for re-review. Its styles are permanently banned from future writes; press ✗ reject again to un-reject, push a variant to override, or 🎨 REGEN for a fresh direction. |
Model panel: when it's on, each product gets a set from every model — 1–4 prompts each from
Claude, GPT and Qwen (so 3–12 per product), written in parallel and all rendered through your chosen fal model. Every output carries its model's colour frame and badge
(CLAUDE 1-2 GPT 1-2
QWEN 1-2), so you can see which AI wrote what. ➕ ADD ROUND (per product) and ➕ Add a round to all (Write tab) keep everything that already
exists and write more alongside it with whatever models are ticked now — so you can start with 2 from Claude, then
add a Claude+GPT+Qwen round later and compare all of them together (up to 24 variants per product). Nothing is
overwritten and your pushed choice stays. Use 🎨 REGEN only when you want the old set replaced.
Never-repeat memory: every variant you delete, reject, or replace with
🎨 REGEN is remembered per product and shown to Claude as a banned list — future writes must take a completely
different creative direction. This memory survives deletes and even the full reset, so discarded styles never come back.
Placement rule: the name always renders ABOVE the child, in the top part of the artwork — enforced when prompts
are written and again at render time.
⚖ Gauntlet bar — shared with the whole team
The quality bar for the ⚖ JUDGE button: paste the with-name prompts of products that are already published live on the store WITH the name feature — approved quality, proven good. ⚠ Only prompts that actually contain a name clause belong here (with {{CUSTOM_TEXT}} or a real child's name in them) — most of the live catalogue has no name yet, and a nameless prompt would break the comparison. A separate harsh critic then compares each new variant blind against a random one of these (shuffled A/B, no labels) and simply picks which name clause is better crafted — no scores. A variant only earns ⚖ beats the bar when the critic picks it without knowing which prompt is the approved one. Separate the prompts however feels natural: a line containing only --- between them, or each prompt starting with -- (two dashes) on a new line — both work. The app ships with a built-in default bar of 5 approved live prompts (The Vet ×2, Island Voyager, Rainbow Unicorn Princess, Velociraptor Rider) — saving your own set here replaces it for the whole team, and clearing the box and saving brings the built-in default back.
⚠ Danger zone
Erases all prompts, renders, choices, pending jobs and history from the app so you can start completely fresh (for example after upgrading the prompt engine). Your products and these settings are kept. This cannot be undone.
🧪 My personal AI tweaks — private to this browser
Review the AI's system instructions and tweak them for yourself only. Tweaks are stored in this browser on this computer and ride along only on your write / regen / chat runs — they are never saved into the shared app, so teammates on the same link keep the shared defaults (and their tweaks never reach you). Every box arrives pre-loaded with the current shared default, so just edit and press Save — only boxes you actually changed become personal tweaks, the rest stay on the shared default. reset to default puts a box back. Use Export to back up your tweaks or move them to another computer.
writer system prompt (read-only reference — tweak it via the box above)
Test
Try the prompts on a real product and see the result instantly. This is a dry run — nothing is saved, no images are rendered, the shared catalogue is untouched. It uses your saved personal tweaks above (press Save my tweaks first if you just edited something) plus the shared defaults, written by the single model chosen in ⚙ Settings.
🎨 base-prompt analysis (stage 1)
Token counts come straight from each provider's own usage report on every call (writes, chats, judging, tests — everything), and every finished fal render is counted per image. Costs are estimates: tokens × the prices below. The $ prices are editable — fix any of them to match your real invoices and press Save prices (shared with the whole team). Tracking starts from the day this version was deployed; anything spent before that isn't counted. Cache reads are billed at 10% of the input price.