API reference · Media
Look sheets
Blend a character's or element's photos into one canonical identity sheet.
A look sheet is one generated image that merges a subject's reference photos into a multi-angle design sheet. A neutral canvas image pins the size so it never inherits a reference's dimensions, and every image (canvas + references) is resized to the same encoder target — that uniform sizing is what keeps the references driving the ART STYLE; when the references were left at their upload size the big canvas dominated the conditioning and the model fell back to a generic look. Output is ~1056×1568 (2:3) on the default engine. The panels tile the sheet edge to edge (thin separators only): a large front face panel, three head panels (three-quarter, profile, back) and three full-body views (front, side, back). Up to 9 references are blended (the studio caps uploads at the same number, so a 10th photo is refused rather than charged); each must be at least 512px and at most 1024px on the long side (the studio enforces both on upload; API references outside the range are skipped and reported in warnings). Identity tightens with the count — 1 is thin, 3 is enough, 4 is recommended, 9 is the maximum — and more references add render time, not sheet size (the output stays at the layout's resolution). A thumbnail is refused because upscaled it carries no facial detail and the model tends to paste it through as a panel. It is the canonical (and only) reference the studio feeds when you cast that subject. The pool is the subject's reference photos only — a character's avatar is card art and never joins it (an element's hero photo does: the form declares it a visual reference, and it leads the pool). Every panel holds the same neutral look: the persona's behavioral quirks never leak into the faces.
Like image generation, POST /v1/sheets is asynchronous: it charges, enqueues the render and answers 202 with one image job. Poll GET /v1/images/generations/{id} until succeeded (the sheet is in data[0], and its library_id is what you apply). Nothing becomes a subject's active sheet until you POST /v1/sheets/apply it — every accepted take keeps its history in your creation library.
The render gate. Once a character or element has an accepted sheet, char:<id> / el:<id> references in image and video renders feed that sheet. A subject WITHOUT a sheet cannot appear in a render yet — image and video generations answer 422 sheet_required before charging. Roleplay/chat is exempt: the persona sheet is enough to talk.
One sheet per subject, and one layout per subject kind — there is no layout to choose: turnaround for characters, hero for objects, scene for locations (the old identity/portrait split is gone; a trained Imprint will replace the sheet later). With zero stored references the sheet is invented from the persona/description alone — pass an explicit description to anchor it, or it falls back to the card text. Pass style to TRANSFORM the look instead of holding it (3D references into a photoreal sheet); omit it (or match) to stay as close to the references as the engine can hold.
Endpoints
Select a verb to load its request, playground and response.
Generate a look sheet (async — returns one image job).
char:<id> or el:<id> — the subject to sheet, in the same id language the elements arrays use.
Optional; the subject kind already fixes it — turnaround (characters), hero (objects), scene (locations). Omit it: each kind has exactly one sheet.
The Eroq One scene (eroq-one, default — 10 reference slots). It is the only engine offered for sheets: the Krea 2 reference node is tuned for single-pose refs, not multi-panel sheets.
Per-call look transform: a style id, custom (+ style_custom), or match/omitted to hold the references' look.
Free-text look, used when style is custom, up to 120 characters.
Per-call look description (up to 2000 chars) — used instead of the card text. Required in spirit when the pool is empty.
Free-text extra direction for this take (up to 600 chars) — "longer copper hair", "oil-painting look", a scar. Address one reference as Picture N (1-based over the pool — for an element the hero photo is Picture 1, then the newest photos): the render layer binds it to that picture's image slot, so you can steer per-attribute ("keep the hairstyle from Picture 2, the build from Picture 1"). Shapes the look; never overrides the layout or the neutral-pose rules.
Character sheets only: the body-reference panel dress state. false (default) renders it in minimal underwear that fully covers the body; true renders it fully nude. The panel is otherwise identical (same pose, body, proportions and lighting).
Unlock a permanent public URL for the sheet (2 credits / started 10MB on top).
Accept a finished render as the subject's active sheet.
char:<id> or el:<id>.
The Library creation id of the accepted sheet (the completed image job's data[0].library_id).
curl https://eroq.ai/v1/sheets \
-H "Authorization: Bearer $EROQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"target": "char:9c1e…",
"layout": "turnaround"
}'Response
{
"object": "sheet.generation", "target": "char:9c1e…", "layout": "turnaround",
"model": "eroq-one",
"job": { "id": "8a2f…", "poll": "/v1/images/generations/8a2f…" },
"usage": { "credits_spent": 20, "credits_remaining": 1180 }
}