agentleFS
astriaaiastriaai/skills/store-photoshoot/SKILL.md

store-photoshoot

Skill2 starsChanged 28 days agoMITView on GitHub

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".

The file

We split this skill into the rules it gives an agent

10 rules. About 0 are common, 3 are distinctive, and 7 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 7

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Use the connected Astria MCP tools (see astria-api) for model discovery, references, generation, template reads/runs and result checks.

    line 16
  2. Very specific:

    Use list_workspaces to identify the customer's existing workspace and pass its ID to subsequent tools.

    line 124
  3. Very specific:

    Use create_reference with workspace, title: "<Name> — <brand>", the chosen subject class in name, image_url: ["<winner HTTPS URL>"], and a …

    line 146
  4. Very specific:

    Call create_reference with the workspace ID, SKU/product title, subject class name, an image_url array of front/back HTTPS URLs, and a …

    line 166
  5. Very specific:

    Variant products (type: variable): do NOT blindly take images[0] — it is often the wrong colorway/variant.

    line 173
  6. Very specific:

    percent-encoded: before supplying image_url, or Astria returns HTTP 422 "could not download".

    line 178
  7. Distinctive:

    Prefer clean product-only images over on-model shots for garment fidelity.

    line 180
  8. Distinctive:

    Not pack templates first — long-form prompts in the brand's language, promoted to a pack once a scene wins.

    line 246
  9. Very specific:

    Do not report the landing page as complete until it was saved and verified.

    line 304
  10. Distinctive:

    Keep the preset reasoning inside the Brand DNA brief — the customer confirms it once, and every template inherits it.

    line 323

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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.

Use the connected Astria MCP tools (see astria-api) for model discovery, references, generation, template reads/runs and result checks. Pass workspace: "<workspace_id>" consistently. Workspace/template creation and landing-page HTML currently need the Astria UI or an independently authenticated CLI; read astria-api's optional CLI reference for those steps. Establish access to these required capabilities before promising the full deliverable. OAuth in the host does not authenticate the CLI.

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 (MCP and optional CLI), avatar (avatar casting), prompt-writing (prompt grammar & parameters), packs-guide (packs), 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.

VerticalPrimarySupporting
Fashion (garments)Studio lookbook on-model (front/45°/back battery)Ghost/3D packshots; location campaign
FootwearProduct packshot 5-angle batteryOn-model legs-down crops; atmosphere still-life
JewelryStill-life on tactile surfaces + worn close-upsExtreme macro; hand-model for rings
Beauty (bottles/cremes/sprays)Packshots on seamless + atmosphere (marble, stone, water, botanicals)Texture macro; application close-ups
SupplementsClean packshots + kitchen/gym lifestyleIngredient still-life; hand-holding product
Home decorIn-room styled atmosphereDetail/texture macro; ghost packshot

Phase 4 — Create / target the workspace

Use list_workspaces to identify the customer's existing workspace and pass its ID to subsequent tools. If a new workspace is needed, create it via the Astria UI or the optional CLI astria workspaces create --title "<Brand>", then confirm its ID with list_workspaces. 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 avatar method. Generate with generate_images with the live Recraft 4.1 Pro model ID, num_images: "2", aspect_ratio: "1:1", inpaint_faces: false, and a fresh idempotency key, 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:

Use create_reference with workspace, title: "<Name> — <brand>", the chosen subject class in name, image_url: ["<winner HTTPS URL>"], and a fresh idempotency key.

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:

Call create_reference with the workspace ID, SKU/product title, subject class name, an image_url array of front/back HTTPS URLs, and a fresh idempotency key per SKU/colorway.

  • 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 and retrain in the tune UI if wrong; reference updates are CLI/UI-only.
  • 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 supplying 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), 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 the pack in the Astria UI or with the optional CLI astria packs create --title "<Brand> — <Formula>". Then author each template with generate_images and pack_id; include a fine-tuned reference token in text and a fresh idempotency key per shot (see astria-api). 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 and supported resolutions with list_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

  1. Text first (default): terse angle line, escalate to full photographic paragraphs (weight distribution, gaze, camera height, 20–30° body angle) when stances drift.
  2. Skeleton pose tunes: train OpenPose stick-figure renders as pose tunes (front / 45° / back), lead the prompt with <faceid:POSE:1> pose, refine verbally.
  3. 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.

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

  1. Render the pilot: each pack × 2–3 SKUs of its category, one avatar held constant per pack. Keep it modest (≤ ~40 images).
  2. 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.
  3. 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).
  4. Scale in phases: best-sellers/newest first for sign-off, then the rest. Iterate over the crawled product list — create_reference per SKU, then run_template with its reference IDs (or generate_images for individual shots). Use distinct idempotency keys per SKU/run and inspect results with list_prompts/get_prompt before retrying. Name batches (<BRAND> BATCH1 LOOK 1–N).
  5. 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 through the Astria UI or optional CLI (see landing-page-editor). This step has no MCP tool yet. Do not report the landing page as complete until it was saved and verified. 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

PositioningBackgroundLightingBody / stylingSuffix vocabulary
Kids / family mass#e9e9e9 softboxeven softbox, small smileheight guard, playful posesclean e-com, --create_crops
Contemporary basics#F5F5F5 seamlesssoft studio lightnatural relaxed stanceKodak film 400 grain
Premium menswear#E7E7E7 / light grayprofessional fashion editorial lightingtall supermodel proportionsquiet-luxury comps (COS / ARKET… Minimal. Architectural. Retail-ready.)
Luxury womenswearpure #FFFFFF, no floordirect on-camera flashsleek slicked-back bun, elongated legssharp e-commerce catalog image
Street / cooldark or night urbanhard flash, underexposed bg, ISO 400 graincandid mid-stride, not posingby William Eggleston / Tillmans
Jewelry / beautycream-beige, tactile surfacessoft neutral-warm, no yellow castmanicured hands, rotated skin tonesquiet luxury product photography, 4K clarity

Keep the preset reasoning inside the Brand DNA brief — the customer confirms it once, and every template inherits it.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.