A layered editor in the browser, AI image generation behind a provider gateway, and a server-side renderer that turns the layer tree into a flat image ready to publish.
A raw line like "a family at a cafe table, candid".
Optional: structures the prompt, appends an Avoid: line.
Reserve-then-settle spend so concurrent calls can't blow the cap.
Imagen / gpt-image / Flux behind one uniform adapter contract.
Text / image / shape layers, drag-resize, magic-resize across 8 export formats.
compose.mjs builds HTML from the layer tree and screenshots it. Child process per render, hard timeout.
Saved to a private bucket; external consumers get a time-limited signed URL.
Single image or a 2-10 card carousel template.
../src/creative-studio.