Store Photoshoot Builder
Given a brand's storefront URL, crawl the shop, extract its brand DNA, and build
a complete, reusable AI photoshoot system in an Astria workspace: a casting
board of brand avatars (when on-model shots are needed), product reference
tunes, and a set of packs (prompt templates) that can re-shoot the brand's
entire catalog — and every future collection — in the brand's own visual
language.
All Astria operations go through the astria CLI (see the astria-api
skill) — never raw API calls, never tokens in skill text. Scope every command
with -w <workspace_id>. Everything you register in Astria — faces, garments,
shoes, jewels, poses, backgrounds, props, logo lockups — is a single-image
faceid reference tune whose name is a controlled class noun (woman, man,
boy, girl, dress, shirt, pants, shoes, ring, necklace, chain,
earrings, bracelet, pose, background, outfit, bottle, …) and whose
title is the human/SKU label. Prompts address them as <faceid:ID:1> <class-noun> — the class noun immediately after the token is the routing
mechanism that tells the model what to take from that reference.
Deliverable of a full run: a workspace containing (1) a confirmed Brand DNA
brief, (2) a 2–5 avatar casting board (on-model only), (3) product reference
tunes, (4) one pack per item-type / outfit formula with a fixed shot battery,
(5) a QA'd pilot render, then the scaled catalog, and (6) a workspace landing
page.
Related skills: astria-api (the CLI), unique-headshot (avatar casting),
prompt-writing (prompt grammar & parameters), packs-guide (packs),
templatize-page (silhouette/pose-swap technique, single page),
landing-page-editor (the /w/:slug page).
Phase 1 — Crawl the store
Detect the platform first, then use its public JSON endpoints. Crawl
politely: sequential requests, a normal browser User-Agent.
Shopify — {store}/products.json returns JSON:
GET {store}/products.json?limit=250&page=N # loop N=1,2,3… until "products" is empty
GET {store}/collections.json?limit=250 # collections + products_count
GET {store}/collections/{handle}/products.json # per-collection membership
GET {store}/pages.json?limit=100 # About / editorial / brand-story pages
Per product capture: title, product_type, tags, vendor, body_html
(strip HTML), variants[].price, images[].src (CDN URLs — the tune training
source), options (sizes → audience signal).
WooCommerce — {store}/products.json returns the homepage, not JSON. Use
the Store API instead:
GET {store}/wp-json/wc/store/v1/products?per_page=100&page=N # loop until empty
GET {store}/wp-json/wc/store/v1/products/categories?per_page=100
Per product: id, name, sku, type (simple|variable),
prices.price (÷ 10^currency_minor_unit), images[].src, categories[].name,
variations. Homepage og: meta and /product-sitemap.xml give the brand
name, logo, and a full product-URL list if the Store API is disabled.
Fallbacks — if JSON is gated (password/B2B): {store}/sitemap.xml →
sitemap_products_*.xml, or ask the customer for a product-export CSV, or for
direct image URLs.
Image audit (critical). Download 20–40 product images across categories and
look at them (actually view each image). Record, per category: shot style (on-model vs
packshot vs flat-lay vs atmosphere); angle coverage (front/back/side/detail);
the house background hex (sample corner pixels); model casting (age, gender mix,
ethnicity, styling); lighting fingerprint (softbox-even vs flash vs daylight).
The photoshoot you build must be recognizably the same brand — these
observations become the pack defaults. Front+back product photos also decide
which items can support back-view templates.
Phase 2 — Extract the Brand DNA brief
Synthesize a structured brief and confirm it with the customer before
building — one round with your ask-user question tool (AskUserQuestion in
Claude Code, ask_user in the Astria chat agent): brand read, shoot register,
casting direction. Capture:
brand, vertical (fashion | footwear | jewelry | beauty | supplements | home-decor | mixed)
categories: product_type histogram → tune classes, SKU counts, back-photo availability
sku_scale: boutique(<100) | catalog(100–1K) | factory(1K–10K) | enterprise(10K+)
audience: gender (women/men/both/kids/family), age band (from sizes, copy, collection names), a body-guard line for prompts (see Phase 5)
positioning: mass/family | contemporary | premium | luxury — from price stats (median/max variant price) and About/collection copy tone
aesthetic: background_hex (from the image audit), lighting, brand comps
shoot_plan: which registers (Phase 3), how many avatars
pilot_skus: 8–15 products spanning the top categories
SKU scale drives the architecture: boutique → hand-picked hero looks, richer
editorial per look; catalog → pack-per-outfit-formula factory, --create_crops
for detail shots, one avatar per pack; factory+ → hardened templates run as
named batches (3 angles/look, per-colorway tunes) — prioritize best-sellers and
the newest collection, never try to shoot the whole 10K in the pilot.
Phase 3 — Choose the photoshoot registers
A brand usually gets one primary register + one or two supporting. Ask the
customer which they want as the lead when the vertical supports several
(a single ask-user question). Avatars are cast only for on-model registers.
| Vertical |
Primary |
Supporting |
| Fashion (garments) |
Studio lookbook on-model (front/45°/back battery) |
Ghost/3D packshots; location campaign |
| Footwear |
Product packshot 5-angle battery |
On-model legs-down crops; atmosphere still-life |
| Jewelry |
Still-life on tactile surfaces + worn close-ups |
Extreme macro; hand-model for rings |
| Beauty (bottles/cremes/sprays) |
Packshots on seamless + atmosphere (marble, stone, water, botanicals) |
Texture macro; application close-ups |
| Supplements |
Clean packshots + kitchen/gym lifestyle |
Ingredient still-life; hand-holding product |
| Home decor |
In-room styled atmosphere |
Detail/texture macro; ghost packshot |
Phase 4 — Create / target the workspace
Use the customer's existing workspace when they name one (astria workspaces list → target with -w <id>); otherwise create one named after the brand
(via the workspace UI, or astria api POST /workspaces if available — confirm
the id with astria workspaces list). Note the house background hex — every
studio template pins it twice (in prose and via --background_color).
Two-greys convention: packshots on #F2F2F2 (luminance-flattened), on-model
studio on #F5F5F5/#e9e9e9-family off-whites, luxury lookbooks on pure
#FFFFFF + flash — unless the brand's own photography says otherwise.
Phase 5 — Cast the avatars (on-model registers only)
Avatars are synthetic faces generated from trait-dense prompts, no reference
tune — the unique-headshot method. Generate with
astria generate --model recraft-4-1 --num-images 2 --aspect-ratio 1:1, bare
shoulders, hair pulled back, no jewelry on the face ref (critical for
jewelry brands — earrings on a face ref contaminate every render), ≥1 unique
distinguishing feature, never repeat an ethnicity in a batch. Match casting to
the Brand DNA (audience age, ethnicity mix, positioning). Present a candidate
board (ask-user question with thumbnails), then register each winner:
astria tunes create -w <id> --title "<Name> — <brand>" --name woman|man|boy|girl --image-url <winner.jpg>
Casting board size: 2–5 faces. Production brands run one avatar per
ethnicity and hold one avatar constant across all shots of a pack —
consistency beats variety. Attach the brand's body-guard text (rides after
the person token in every prompt):
- kids/tween:
boy 1.30 high / girl 1.30 high; toddler: girl 1.5 yo toddler, proportional head
- womenswear luxury:
tall supermodel proportions, elongated legs, long neck, narrow waist + sleek, low, slicked-back bun
- menswear premium:
tall male supermodel proportions, elongated athletic body, broad shoulders narrow waist, masculine confident posture
- explicit age when relevant:
11 y o teen girl, teen 15 y o man
Footwear legs-down crops, pure packshot, and atmosphere plans skip avatars —
the model (if any) is described verbally and the face is cropped out.
Phase 6 — Ingest product references
For each pilot SKU, create a faceid tune from the shop's CDN images:
astria tunes create -w <id> --title "<SKU or product title>" --name <class> \
--image-url <front.jpg> [--image-url <back.jpg>]
- Map
product_type → tune class with a controlled vocabulary. The class must
be the actual subject — "jewelry" is a poor name; use ring/necklace/
chain/earrings. Rename + retrain if wrong (astria tunes update <id> --name ring).
- Variant products (
type: variable): do NOT blindly take images[0] — it
is often the wrong colorway/variant. Match the chosen image to the intended
variant (or ingest one tune per variant). A mismatch trains a faithful render
of the wrong product.
- Non-ASCII image URLs (Hebrew/RTL/Cyrillic paths) must be
percent-encoded before
--image-url, or Astria returns HTTP 422 "could
not download".
- Prefer clean product-only images over on-model shots for garment fidelity.
Include the back photo only when the battery has back views. One tune per
colorway. Keep the SKU code in the title — it's the join key back to the shop.
- Optionally register support tunes: a
background set plate, pose refs
(OpenPose skeletons or black product silhouettes — see templatize-page),
brand label/text lockups for print fidelity, props (chair, car).
Phase 7 — Author the packs (the core)
A pack = one item-type or outfit formula × a fixed shot battery. Shot
variety lives in the templates; per-SKU variety comes from swapping the
reference tokens. Create with astria packs create --title "<Brand> — <Formula>"
and author each template into the pack (see astria-api for pack-authoring).
Iterate until the pilot passes QA.
7.1 House prompt grammar (studio lookbook)
<shot/pose line: framing + angle + stance>
<faceid:AVATAR:1> woman <body-guard text>
<faceid:GARMENT_TOP:1> shirt <fit & layering directives>
<faceid:GARMENT_BOTTOM:1> pants <coverage directives>
<faceid:SHOES:1> shoes
[<faceid:BACKGROUND:1> background] plain background {HEX} softbox --background_color {HEX} [--create_crops 70]
- Weight is always
1.0.
- Free text after each garment's class noun does the fit/layering work:
shirt over size, sleeves reach just past the elbow, shirt out of the pants,
front shirt half tucked inside the pants, pants cover the shoes,
buttoned shirt worn open over the shirt, top two buttons open, untucked hem,
pants reach the shoes, no socks visible.
- Layer-visibility clauses control partial garments:
visible hem of,
visible waistband of, only the bottom hem is visible at the top of the frame,
Absolutely no part of the dress fabric is visible (for shoe macros).
- Fidelity guards where reference photos are messy:
ignore back label,
don't change the color of the pants, Use the outfit reference only for the clothing: garment shape, fabric, color, print, trims, sleeve length…,
Model identity, face, body, hands, nails and hair come from the model reference, plus a negative tail (Avoid hair down, bangs, copied room background, rug, carpet, barefoot, missing shoes; no plastic skin, no beauty filter, no extra limbs).
- Params: 3:4, 4K, num_images 1 (2–4 for the hero front shot). Discover the
default model with
astria models. Detail shots come free via
--create_crops 66–72 (full frame + 2 crops) instead of separate prompts.
7.2 Shot batteries per item type
Author one pack per formula the shop actually sells; each bullet = one template.
- Tops (shirt/polo/tee/sweater) — front full · 35–45° front-side · back full · half-body front · waist/tuck detail · optional walking / left profile.
- Coat / jacket / blazer — front closed · front open over inner top · 45° · back (highlight structure) · half-body back over-shoulder · collar/shoulder macro.
- Pants / jeans / shorts — front · 45° · back · waistline crop · lower-half at 45° (
weight shifted to back leg, showcasing drape) · walking.
- Dress / skirt — front · 45° · back · walking/movement (
fabric swishes) · half-body · fabric macro · optional seated.
- Footwear — packshots (no model): strict side elevation (toe right, heel left, camera level with centerline) · straight-on front from low camera · rear three-quarter · overhead flat-lay · pair at 3/4 one shoe staggered · tight macro on stitching. Every template carries
no foot, no model, no extra objects, seamless light neutral grey studio background, realistic contact shadow beneath the product, natural scale, no compression or squashing + --background_color.
- Footwear — on-model: lower-half 45° · legs-down crop (
close shot from the knees down, always focus on the shoes) · low-angle shoe close-up (see only hem of pants above the footwear) · seated with shoes in foreground.
- Bags & accessories — 3-framing trio: front centered with negative space · three-quarter for depth · tight macro on hardware · plus one on-model hold/wear. Eyewear:
45 degree side-profile fully open, showing the temple arms + front + worn close-up.
- Jewelry — three families (1:1): still life on smooth white fabric / silk / matte stone / sculpted ceramic,
not a close-up, medium distance framing for negative space; worn close-ups <faceid:WOMAN:1> woman wearing <faceid:JEWEL:1> earrings with strict crops — necklace bust upper chest and neck or cropped just below the eyes; earrings tight close-up, crop from ear to collarbone, side profile; ring on a hand model (hand resting on a stone tray beside an espresso, always manicured nails); chain worn on bare chest/neck; macro 100mm. House stanza: soft neutral-warm studio lighting, diffused directional light from front-side, very soft highlights, no yellow cast, balanced white tones, natural beige palette slightly warm but desaturated. Rotate skin tone across templates.
- Beauty (cremes/bottles/sprays/lotions) — packshot front label-centered · 45° · back (label legible — register a
label text tune if type fidelity matters) · line family shot; atmosphere product on marble/travertine/wet stone with droplets · botanical styling · backlit translucency · texture macro (cream smear, spray mist); optional application close-ups (hands/cheek/collarbone, no face identity). Surfaces & lighting borrow the jewelry vocabulary (no yellow cast for golds/ambers).
- Supplements — packshot battery + lifestyle atmosphere (morning kitchen with citrus and water; gym-bag still life; hand holding the jar label-forward) + ingredient flat-lay.
- Home decor — in-room atmosphere (one coherent interior per collection, palette-matched) · straight-on packshot on seamless · texture/detail macro · scale shot with a human element (hand on ceramic, figure near the lamp — face optional).
7.3 Campaign register (hero content, optional)
Not pack templates first — long-form prompts in the brand's language, promoted
to a pack once a scene wins. Structure with labeled sections
(LOCATION / FOREGROUND / SUBJECT / BACKGROUND / CAMERA / LIGHTING / MOOD / STYLE),
one coherent location vocabulary per campaign (reuse the same scene description
verbatim across the set; pin it with a background/location tune). Film/camera
vocabulary is the realism lever matched to positioning: luxury 85mm, shallow depth of field, Kodak Portra 400 film grain; street-cool 35mm, f/8, hard direct on-camera flash, ISO 400; family-candid soft diffused overcast daylight. For premium work add an anti-CGI block (visible pores, no smoothing, natural fabric behavior, imperfect drape, soft analog 35mm grain). Formats
9:16 / 16:9, 4K, num_images 2–3.
7.4 Pose control ladder
- Text first (default): terse angle line, escalate to full photographic
paragraphs (weight distribution, gaze, camera height, 20–30° body angle) when
stances drift.
- Skeleton pose tunes: train OpenPose stick-figure renders as
pose tunes
(front / 45° / back), lead the prompt with <faceid:POSE:1> pose, refine verbally.
- Silhouette lock (to clone the brand's existing photography stance-for-
stance): threshold a real catalog photo to a black silhouette, register as
pose, prompt replace the <faceid:POSE:1> pose … Keep the pose exactly as in the silhouette. Ignore the pose from the outfit. (see templatize-page).
7.5 Video add-on (optional)
- Runway loop per look: Seedance, 16:9, 8–9s, three timestamped beats — walk in
from left → stop center & pose → walk past camera and exit;
Static camera, continuous motion, no cuts.
- Product turntable: one storyboard prompt,
slow smooth 360-degree rotation over 8 seconds, per-second angle checkpoints, a negative block (avoid fast spinning, deformation, extra objects, text, logo).
Phase 8 — Pilot, QA, scale
- Render the pilot: each pack × 2–3 SKUs of its category, one avatar held
constant per pack. Keep it modest (≤ ~40 images).
- QA each render: garment/jewel shape·color·print fidelity; layering (tucks,
hems, waistbands); face = avatar (no drift); background exactly the house hex;
anatomy (hands, feet); no leaked artifacts (room backgrounds, mannequin
stands, care labels);
no yellow cast on golds; brand text/logos legible.
- Stop and get sign-off before scaling — mass generation is real spend.
Fix by tightening the responsible clause (add a guard or negative), not by
rerolling blindly. If an item renders wrong repeatedly, inspect the tune's
training images (bad crops / wrong class / wrong variant are the usual cause).
- Scale in phases: best-sellers/newest first for sign-off, then the rest.
Iterate over the crawled product list —
tunes create per SKU, one generate
per template with the SKU's tokens swapped in. Name batches
(<BRAND> BATCH1 LOOK 1–N).
- Post-production at volume: background-removal passes for cutouts, 16:9
recrops for banners, upscale passes for hero shots.
Phase 9 — Landing page & handoff
Generate the workspace landing page from the brief (see landing-page-editor):
astria landing set -w <id> --brief "<positioning, palette, collections, packs to feature>".
Report to the customer: workspace link, the casting board, each pack (/p/<slug>)
with its battery, pilot images, and the one-step instruction for future
collections — point us at the new products; the packs re-shoot the whole drop
automatically.
Appendix — Style presets by positioning
| Positioning |
Background |
Lighting |
Body / styling |
Suffix vocabulary |
| Kids / family mass |
#e9e9e9 softbox |
even softbox, small smile |
height guard, playful poses |
clean e-com, --create_crops |
| Contemporary basics |
#F5F5F5 seamless |
soft studio light |
natural relaxed stance |
Kodak film 400 grain |
| Premium menswear |
#E7E7E7 / light gray |
professional fashion editorial lighting |
tall supermodel proportions |
quiet-luxury comps (COS / ARKET… Minimal. Architectural. Retail-ready.) |
| Luxury womenswear |
pure #FFFFFF, no floor |
direct on-camera flash |
sleek slicked-back bun, elongated legs |
sharp e-commerce catalog image |
| Street / cool |
dark or night urban |
hard flash, underexposed bg, ISO 400 grain |
candid mid-stride, not posing |
by William Eggleston / Tillmans |
| Jewelry / beauty |
cream-beige, tactile surfaces |
soft neutral-warm, no yellow cast |
manicured hands, rotated skin tones |
quiet luxury product photography, 4K clarity |
Keep the preset reasoning inside the Brand DNA brief — the customer confirms it
once, and every template inherits it.
1---2name: store-photoshoot3description: Use when turning a brand's whole online store (Shopify or WooCommerce) into a reusable Astria AI photoshoot — crawl the catalog, extract the brand's DNA, cast avatars, and build packs that re-shoot the entire collection (and every future drop) in the brand's own look. Trigger phrases — "build a photoshoot from my store", "crawl STORE_URL and make packs", "AI product photography for BRAND", "re-shoot our catalog". For a single lookbook/collection PAGE use `templatize-page` instead.4---56# Store Photoshoot Builder78Given a brand's storefront URL, crawl the shop, extract its brand DNA, and build9a complete, reusable AI photoshoot system in an Astria workspace: a casting10board of brand avatars (when on-model shots are needed), product reference11tunes, and a set of **packs** (prompt templates) that can re-shoot the brand's12entire catalog — and every future collection — in the brand's own visual13language.1415All Astria operations go through the `astria` CLI (see the **astria-api**16skill) — never raw API calls, never tokens in skill text. Scope every command17with `-w <workspace_id>`. Everything you register in Astria — faces, garments,18shoes, jewels, poses, backgrounds, props, logo lockups — is a **single-image19faceid reference tune** whose `name` is a controlled class noun (`woman`, `man`,20`boy`, `girl`, `dress`, `shirt`, `pants`, `shoes`, `ring`, `necklace`, `chain`,21`earrings`, `bracelet`, `pose`, `background`, `outfit`, `bottle`, …) and whose22`title` is the human/SKU label. Prompts address them as `<faceid:ID:1>23<class-noun>` — the class noun immediately after the token is the routing24mechanism that tells the model what to take from that reference.2526**Deliverable of a full run:** a workspace containing (1) a confirmed Brand DNA27brief, (2) a 2–5 avatar casting board (on-model only), (3) product reference28tunes, (4) one pack per item-type / outfit formula with a fixed shot battery,29(5) a QA'd pilot render, then the scaled catalog, and (6) a workspace landing30page.3132Related skills: **astria-api** (the CLI), **unique-headshot** (avatar casting),33**prompt-writing** (prompt grammar & parameters), **packs-guide** (packs),34**templatize-page** (silhouette/pose-swap technique, single page),35**landing-page-editor** (the `/w/:slug` page).3637---3839## Phase 1 — Crawl the store4041**Detect the platform first**, then use its public JSON endpoints. Crawl42politely: sequential requests, a normal browser User-Agent.4344**Shopify** — `{store}/products.json` returns JSON:45```46GET {store}/products.json?limit=250&page=N # loop N=1,2,3… until "products" is empty47GET {store}/collections.json?limit=250 # collections + products_count48GET {store}/collections/{handle}/products.json # per-collection membership49GET {store}/pages.json?limit=100 # About / editorial / brand-story pages50```51Per product capture: `title`, `product_type`, `tags`, `vendor`, `body_html`52(strip HTML), `variants[].price`, `images[].src` (CDN URLs — the tune training53source), `options` (sizes → audience signal).5455**WooCommerce** — `{store}/products.json` returns the homepage, not JSON. Use56the Store API instead:57```58GET {store}/wp-json/wc/store/v1/products?per_page=100&page=N # loop until empty59GET {store}/wp-json/wc/store/v1/products/categories?per_page=10060```61Per product: `id`, `name`, `sku`, `type` (`simple`|`variable`),62`prices.price` (÷ 10^`currency_minor_unit`), `images[].src`, `categories[].name`,63`variations`. Homepage `og:` meta and `/product-sitemap.xml` give the brand64name, logo, and a full product-URL list if the Store API is disabled.6566**Fallbacks** — if JSON is gated (password/B2B): `{store}/sitemap.xml` →67`sitemap_products_*.xml`, or ask the customer for a product-export CSV, or for68direct image URLs.6970**Image audit (critical).** Download 20–40 product images across categories and71*look at them* (actually view each image). Record, per category: shot style (on-model vs72packshot vs flat-lay vs atmosphere); angle coverage (front/back/side/detail);73the house background hex (sample corner pixels); model casting (age, gender mix,74ethnicity, styling); lighting fingerprint (softbox-even vs flash vs daylight).75The photoshoot you build must be recognizably *the same brand* — these76observations become the pack defaults. Front+back product photos also decide77which items can support back-view templates.7879## Phase 2 — Extract the Brand DNA brief8081Synthesize a structured brief and **confirm it with the customer before82building** — one round with your ask-user question tool (`AskUserQuestion` in83Claude Code, `ask_user` in the Astria chat agent): brand read, shoot register,84casting direction. Capture:8586- `brand`, `vertical` (fashion | footwear | jewelry | beauty | supplements | home-decor | mixed)87- `categories`: product_type histogram → tune classes, SKU counts, back-photo availability88- `sku_scale`: boutique(<100) | catalog(100–1K) | factory(1K–10K) | enterprise(10K+)89- `audience`: gender (women/men/both/kids/family), age band (from sizes, copy, collection names), a **body-guard** line for prompts (see Phase 5)90- `positioning`: mass/family | contemporary | premium | luxury — from price stats (median/max variant price) and About/collection copy tone91- `aesthetic`: `background_hex` (from the image audit), lighting, brand comps92- `shoot_plan`: which registers (Phase 3), how many avatars93- `pilot_skus`: 8–15 products spanning the top categories9495**SKU scale drives the architecture:** boutique → hand-picked hero looks, richer96editorial per look; catalog → pack-per-outfit-formula factory, `--create_crops`97for detail shots, one avatar per pack; factory+ → hardened templates run as98named batches (3 angles/look, per-colorway tunes) — prioritize best-sellers and99the newest collection, never try to shoot the whole 10K in the pilot.100101## Phase 3 — Choose the photoshoot registers102103A brand usually gets one primary register + one or two supporting. Ask the104customer which they want as the lead when the vertical supports several105(a single ask-user question). Avatars are cast **only** for on-model registers.106107| Vertical | Primary | Supporting |108|---|---|---|109| Fashion (garments) | Studio lookbook on-model (front/45°/back battery) | Ghost/3D packshots; location campaign |110| Footwear | Product packshot 5-angle battery | On-model legs-down crops; atmosphere still-life |111| Jewelry | Still-life on tactile surfaces + worn close-ups | Extreme macro; hand-model for rings |112| Beauty (bottles/cremes/sprays) | Packshots on seamless + atmosphere (marble, stone, water, botanicals) | Texture macro; application close-ups |113| Supplements | Clean packshots + kitchen/gym lifestyle | Ingredient still-life; hand-holding product |114| Home decor | In-room styled atmosphere | Detail/texture macro; ghost packshot |115116## Phase 4 — Create / target the workspace117118Use the customer's existing workspace when they name one (`astria workspaces119list` → target with `-w <id>`); otherwise create one named after the brand120(via the workspace UI, or `astria api POST /workspaces` if available — confirm121the id with `astria workspaces list`). Note the house background hex — every122studio template pins it twice (in prose and via `--background_color`).123124Two-greys convention: packshots on `#F2F2F2` (luminance-flattened), on-model125studio on `#F5F5F5`/`#e9e9e9`-family off-whites, luxury lookbooks on pure126`#FFFFFF` + flash — unless the brand's own photography says otherwise.127128## Phase 5 — Cast the avatars (on-model registers only)129130Avatars are synthetic faces generated from trait-dense prompts, **no reference131tune** — the **unique-headshot** method. Generate with132`astria generate --model recraft-4-1 --num-images 2 --aspect-ratio 1:1`, bare133shoulders, hair pulled back, **no jewelry on the face ref** (critical for134jewelry brands — earrings on a face ref contaminate every render), ≥1 unique135distinguishing feature, never repeat an ethnicity in a batch. Match casting to136the Brand DNA (audience age, ethnicity mix, positioning). Present a candidate137board (ask-user question with thumbnails), then register each winner:138139```140astria tunes create -w <id> --title "<Name> — <brand>" --name woman|man|boy|girl --image-url <winner.jpg>141```142143**Casting board size: 2–5 faces.** Production brands run one avatar per144ethnicity and hold **one avatar constant across all shots of a pack** —145consistency beats variety. Attach the brand's **body-guard** text (rides after146the person token in every prompt):147- kids/tween: `boy 1.30 high` / `girl 1.30 high`; toddler: `girl 1.5 yo toddler, proportional head`148- womenswear luxury: `tall supermodel proportions, elongated legs, long neck, narrow waist` + `sleek, low, slicked-back bun`149- menswear premium: `tall male supermodel proportions, elongated athletic body, broad shoulders narrow waist, masculine confident posture`150- explicit age when relevant: `11 y o teen girl`, `teen 15 y o man`151152Footwear legs-down crops, pure packshot, and atmosphere plans skip avatars —153the model (if any) is described verbally and the face is cropped out.154155## Phase 6 — Ingest product references156157For each pilot SKU, create a faceid tune from the shop's CDN images:158159```160astria tunes create -w <id> --title "<SKU or product title>" --name <class> \161 --image-url <front.jpg> [--image-url <back.jpg>]162```163164- Map `product_type` → tune class with a controlled vocabulary. The class must165 be the *actual subject* — "jewelry" is a poor name; use `ring`/`necklace`/166 `chain`/`earrings`. Rename + retrain if wrong (`astria tunes update <id> --name ring`).167- **Variant products (`type: variable`):** do NOT blindly take `images[0]` — it168 is often the wrong colorway/variant. Match the chosen image to the intended169 variant (or ingest one tune per variant). A mismatch trains a faithful render170 of the *wrong* product.171- **Non-ASCII image URLs** (Hebrew/RTL/Cyrillic paths) must be172 **percent-encoded** before `--image-url`, or Astria returns HTTP 422 "could173 not download".174- Prefer clean product-only images over on-model shots for garment fidelity.175 Include the back photo only when the battery has back views. One tune per176 colorway. Keep the SKU code in the title — it's the join key back to the shop.177- Optionally register support tunes: a `background` set plate, `pose` refs178 (OpenPose skeletons or black product silhouettes — see **templatize-page**),179 brand `label`/`text` lockups for print fidelity, props (`chair`, `car`).180181## Phase 7 — Author the packs (the core)182183**A pack = one item-type or outfit formula × a fixed shot battery.** Shot184variety lives in the templates; per-SKU variety comes from swapping the185reference tokens. Create with `astria packs create --title "<Brand> — <Formula>"`186and author each template into the pack (see **astria-api** for pack-authoring).187Iterate until the pilot passes QA.188189### 7.1 House prompt grammar (studio lookbook)190191```192<shot/pose line: framing + angle + stance>193<faceid:AVATAR:1> woman <body-guard text>194<faceid:GARMENT_TOP:1> shirt <fit & layering directives>195<faceid:GARMENT_BOTTOM:1> pants <coverage directives>196<faceid:SHOES:1> shoes197[<faceid:BACKGROUND:1> background] plain background {HEX} softbox --background_color {HEX} [--create_crops 70]198```199200- Weight is always `1.0`.201- Free text after each garment's class noun does the **fit/layering** work:202 `shirt over size, sleeves reach just past the elbow, shirt out of the pants`,203 `front shirt half tucked inside the pants`, `pants cover the shoes`,204 `buttoned shirt worn open over the shirt, top two buttons open, untucked hem`,205 `pants reach the shoes, no socks visible`.206- **Layer-visibility clauses** control partial garments: `visible hem of`,207 `visible waistband of`, `only the bottom hem is visible at the top of the frame`,208 `Absolutely no part of the dress fabric is visible` (for shoe macros).209- **Fidelity guards** where reference photos are messy: `ignore back label`,210 `don't change the color of the pants`, `Use the outfit reference only for the211 clothing: garment shape, fabric, color, print, trims, sleeve length…`,212 `Model identity, face, body, hands, nails and hair come from the model213 reference`, plus a negative tail (`Avoid hair down, bangs, copied room214 background, rug, carpet, barefoot, missing shoes; no plastic skin, no beauty215 filter, no extra limbs`).216- Params: **3:4, 4K, num_images 1** (2–4 for the hero front shot). Discover the217 default model with `astria models`. Detail shots come free via218 `--create_crops 66–72` (full frame + 2 crops) instead of separate prompts.219220### 7.2 Shot batteries per item type221222Author one pack per formula the shop actually sells; each bullet = one template.223224- **Tops (shirt/polo/tee/sweater)** — front full · 35–45° front-side · back full · half-body front · waist/tuck detail · optional walking / left profile.225- **Coat / jacket / blazer** — front closed · front open over inner top · 45° · back (highlight structure) · half-body back over-shoulder · collar/shoulder macro.226- **Pants / jeans / shorts** — front · 45° · back · waistline crop · lower-half at 45° (`weight shifted to back leg, showcasing drape`) · walking.227- **Dress / skirt** — front · 45° · back · walking/movement (`fabric swishes`) · half-body · fabric macro · optional seated.228- **Footwear — packshots (no model):** strict side elevation (toe right, heel left, camera level with centerline) · straight-on front from low camera · rear three-quarter · overhead flat-lay · pair at 3/4 one shoe staggered · tight macro on stitching. Every template carries `no foot, no model, no extra objects, seamless light neutral grey studio background, realistic contact shadow beneath the product, natural scale, no compression or squashing` + `--background_color`.229- **Footwear — on-model:** lower-half 45° · legs-down crop (`close shot from the knees down, always focus on the shoes`) · low-angle shoe close-up (`see only hem of pants above the footwear`) · seated with shoes in foreground.230- **Bags & accessories** — 3-framing trio: front centered with negative space · three-quarter for depth · tight macro on hardware · plus one on-model hold/wear. Eyewear: `45 degree side-profile fully open, showing the temple arms` + front + worn close-up.231- **Jewelry** — three families (1:1): *still life* on smooth white fabric / silk / matte stone / sculpted ceramic, `not a close-up, medium distance framing` for negative space; *worn close-ups* `<faceid:WOMAN:1> woman wearing <faceid:JEWEL:1> earrings` with strict crops — necklace bust `upper chest and neck` or `cropped just below the eyes`; earrings `tight close-up, crop from ear to collarbone, side profile`; ring on a hand model (`hand resting on a stone tray beside an espresso`, always `manicured nails`); chain worn on bare chest/neck; *macro* 100mm. House stanza: `soft neutral-warm studio lighting, diffused directional light from front-side, very soft highlights, no yellow cast, balanced white tones, natural beige palette slightly warm but desaturated`. Rotate skin tone across templates.232- **Beauty (cremes/bottles/sprays/lotions)** — *packshot* front label-centered · 45° · back (label legible — register a `label` text tune if type fidelity matters) · line family shot; *atmosphere* product on marble/travertine/wet stone with droplets · botanical styling · backlit translucency · texture macro (cream smear, spray mist); optional application close-ups (hands/cheek/collarbone, no face identity). Surfaces & lighting borrow the jewelry vocabulary (`no yellow cast` for golds/ambers).233- **Supplements** — packshot battery + lifestyle atmosphere (morning kitchen with citrus and water; gym-bag still life; hand holding the jar label-forward) + ingredient flat-lay.234- **Home decor** — in-room atmosphere (one coherent interior per collection, palette-matched) · straight-on packshot on seamless · texture/detail macro · scale shot with a human element (hand on ceramic, figure near the lamp — face optional).235236### 7.3 Campaign register (hero content, optional)237238Not pack templates first — long-form prompts in the brand's language, promoted239to a pack once a scene wins. Structure with labeled sections240(`LOCATION / FOREGROUND / SUBJECT / BACKGROUND / CAMERA / LIGHTING / MOOD / STYLE`),241one coherent location vocabulary per campaign (reuse the same scene description242verbatim across the set; pin it with a `background`/`location` tune). Film/camera243vocabulary is the realism lever matched to positioning: luxury `85mm, shallow244depth of field, Kodak Portra 400 film grain`; street-cool `35mm, f/8, hard245direct on-camera flash, ISO 400`; family-candid `soft diffused overcast246daylight`. For premium work add an anti-CGI block (`visible pores, no smoothing,247natural fabric behavior, imperfect drape, soft analog 35mm grain`). Formats2489:16 / 16:9, 4K, num_images 2–3.249250### 7.4 Pose control ladder2512521. **Text first** (default): terse angle line, escalate to full photographic253 paragraphs (weight distribution, gaze, camera height, 20–30° body angle) when254 stances drift.2552. **Skeleton pose tunes**: train OpenPose stick-figure renders as `pose` tunes256 (front / 45° / back), lead the prompt with `<faceid:POSE:1> pose`, refine verbally.2573. **Silhouette lock** (to clone the brand's *existing* photography stance-for-258 stance): threshold a real catalog photo to a black silhouette, register as259 `pose`, prompt `replace the <faceid:POSE:1> pose … Keep the pose exactly as260 in the silhouette. Ignore the pose from the outfit.` (see **templatize-page**).261262### 7.5 Video add-on (optional)263264- Runway loop per look: Seedance, 16:9, 8–9s, three timestamped beats — walk in265 from left → stop center & pose → walk past camera and exit; `Static camera,266 continuous motion, no cuts`.267- Product turntable: one storyboard prompt, `slow smooth 360-degree rotation over268 8 seconds`, per-second angle checkpoints, a negative block (`avoid fast269 spinning, deformation, extra objects, text, logo`).270271## Phase 8 — Pilot, QA, scale2722731. Render the pilot: each pack × 2–3 SKUs of its category, one avatar held274 constant per pack. Keep it modest (≤ ~40 images).2752. QA each render: garment/jewel shape·color·print fidelity; layering (tucks,276 hems, waistbands); face = avatar (no drift); background exactly the house hex;277 anatomy (hands, feet); no leaked artifacts (room backgrounds, mannequin278 stands, care labels); `no yellow cast` on golds; brand text/logos legible.2793. **Stop and get sign-off before scaling** — mass generation is real spend.280 Fix by tightening the responsible clause (add a guard or negative), not by281 rerolling blindly. If an item renders wrong repeatedly, inspect the tune's282 training images (bad crops / wrong class / wrong variant are the usual cause).2834. Scale in phases: best-sellers/newest first for sign-off, then the rest.284 Iterate over the crawled product list — `tunes create` per SKU, one generate285 per template with the SKU's tokens swapped in. Name batches286 (`<BRAND> BATCH1 LOOK 1–N`).2875. Post-production at volume: background-removal passes for cutouts, 16:9288 recrops for banners, upscale passes for hero shots.289290## Phase 9 — Landing page & handoff291292Generate the workspace landing page from the brief (see **landing-page-editor**):293`astria landing set -w <id> --brief "<positioning, palette, collections, packs to feature>"`.294Report to the customer: workspace link, the casting board, each pack (`/p/<slug>`)295with its battery, pilot images, and the one-step instruction for future296collections — *point us at the new products; the packs re-shoot the whole drop297automatically.*298299---300301## Appendix — Style presets by positioning302303| Positioning | Background | Lighting | Body / styling | Suffix vocabulary |304|---|---|---|---|---|305| Kids / family mass | `#e9e9e9` softbox | even softbox, `small smile` | height guard, playful poses | clean e-com, `--create_crops` |306| Contemporary basics | `#F5F5F5` seamless | soft studio light | natural relaxed stance | `Kodak film 400 grain` |307| Premium menswear | `#E7E7E7` / light gray | professional fashion editorial lighting | tall supermodel proportions | quiet-luxury comps (`COS / ARKET… Minimal. Architectural. Retail-ready.`) |308| Luxury womenswear | pure `#FFFFFF`, no floor | **direct on-camera flash** | sleek slicked-back bun, elongated legs | sharp e-commerce catalog image |309| Street / cool | dark or night urban | hard flash, underexposed bg, ISO 400 grain | candid mid-stride, `not posing` | `by William Eggleston` / Tillmans |310| Jewelry / beauty | cream-beige, tactile surfaces | soft neutral-warm, **no yellow cast** | manicured hands, rotated skin tones | quiet luxury product photography, 4K clarity |311312Keep the preset reasoning inside the Brand DNA brief — the customer confirms it313once, and every template inherits it.