--- name: ai-model-photoshoot description: Turn one consented photo of a person (or a synthetic model) into a full editorial fashion shoot - six to eight looks across different locations, light and wardrobe, with the same face, body and identity in every frame. Magazine-style lighting, real lenses and film colour, delivered as 4:5 images plus a contact sheet. Built for labels, stylists and creators who need a lookbook without booking a crew. metadata: type: image version: 1.0.0 category: Fashion tagline: Use this Skill to turn one photo of a model into a six-look editorial shoot with the same face in every frame. made-for: Fashion labels, Stylists, Creators, E-commerce sellers, Agencies generates-with: 6-8 JPEG looks at 4:5 (1024 x 1280) and a contact sheet requires: Node.js 18 or newer for the request scripts; Node 20.9 or newer and sharp (run npm install sharp in the Skill folder) for the contact sheet; your own FAL_KEY to send the requests outside-costs: About $0.27 per look at high quality with GPT Image 2 edit (about $1.60 for six), $0.08 per draft look, $0.06 for a synthetic casting portrait. Billed by fal to your own key. Always ask before each paid step. updated: 2026-10-16 title: AI model photoshoot availability: live summary: Turn one consented photo of a model into a six-look editorial shoot, with the same face in every location and light. command: /ai-model-photoshoot my model photo, 6 looks for our linen resort collection, seaside and city at dusk output: JPEG · 6-8 looks at 4:5 + contact sheet required-input: Consented model photo + wardrobe brief creator: meleon --- # AI model photoshoot Use this skill when someone wants an editorial shoot of one person: a lookbook, a campaign or a portfolio, with the model in several outfits and places, and the same face in every frame. It plans the shoot like a photographer (light, lens, pose, wardrobe, film stock per look), generates each look from the person's photo, checks the identity, and lays the set out as a contact sheet. ## What you need - **A photo of the person, with consent.** Their own photo, or a photo of someone who has given written consent for AI fashion images. Clear face, front-on, even light, no sunglasses, waist-up or closer, 1000 px or more. A second photo of the same person from another angle helps (passed with `--extra-image`). - Or **no photo**: a short description of a synthetic model (age 18 or over, hair, skin tone, build). The skill casts a synthetic person first. - **The label and the story**: brand name, collection or season, the wardrobe (described, or as garment photos: flat-lay or on a hanger, plain background), and the mood or locations. - **Number of looks**: 6 by default, 4 to 8. ### Consent (ask every time) Before you use any photo of a real person, ask: "Is this a photo of you? If not, do you have the written consent of the person in it to create AI fashion images of them?" Quote their answer word for word in your reply. Continue only if the answer clearly says it is their own photo or that they have written consent. Never assume consent, never fill it in yourself, and never treat silence as a yes. Refuse photos of celebrities, public figures or anyone who looks under 18, whatever the answer. If you can't use the photo, offer a synthetic model instead. Keep every look tasteful: swimwear and resort looks are fine, but no nudity, no sexualised posing or camera angles, adults only. ## What you make - 6 looks (or the agreed number), each a 1024 x 1280 JPEG at 4:5, named `01-sea-terrace.jpg`, `02-city-dusk.jpg` and so on. - A contact sheet of the set (2 x 3 grid for six looks, thin gutters, a caption line), as `contact-sheet.webp`. - The shoot plan you used, so the label can re-shoot or extend it. ## How to run it 1. **Consent and photo.** Ask the consent question above and quote the answer. Look at the photo with your image tool: if the face is small, blurred, in sunglasses or heavily filtered, ask for a better one before spending anything. 2. **No photo? Cast a synthetic model.** Run `node scripts/build-casting-input.mjs --brief "adult woman in her early thirties, short curly black hair, warm brown skin, athletic build" --out casting.json` (more example briefs, including men and non-binary models, are in `assets/casting-template.md`; the script refuses anything that reads as under 18). Tell the person it costs about $0.06, wait for a yes, then POST the `input` to fal model `openai/gpt-image-2` (see step 5 for how). Show the portrait and get approval; it becomes the reference photo. 3. **Plan the shoot.** Read `references/shoot-plan.md`. Copy `assets/example-shoot-plan.json` (the Marlow Studio plan behind the preview) to a new file such as `my-plan.json`, set `label`, `collection` and `model_note`, and replace every look with the person's own: one entry per look with `wardrobe`, `location`, `light`, `pose`, `camera`, `film`, `framing`. State the body type positively in `model_note`. For a garment the label supplies, add `"garment": "garments/shirt.jpg"` to that look and name it in `wardrobe` ("the cream linen shirt from the garment photo"). Vary light, distance, gaze and palette across the set and include one head-and-shoulders close-up. Show the plan as one line per look, with the cost (looks x $0.27), and wait for a yes. 4. **Build the requests.** `node scripts/build-requests.mjs --photo person.jpg --plan my-plan.json --out requests.json` (`--plan` is required; the script never falls back to the example plan). Add `--extra-image side.jpg` (repeatable) for more angles of the same person; garment photos named in the plan are added per look, and the prompt says what each reference image is. A local photo is embedded in the request as a data URI, so it never has to be uploaded publicly. To check one look cheaply first, add `--look 06-studio-portrait --draft` (medium quality, about $0.08). Without `--draft`, the settings are the ones that made `assets/preview.webp`: 1024 x 1280, quality high, one image. Never upscale the results. 5. **Send each request.** POST each look's `input` to fal model `openai/gpt-image-2/edit` at `https://queue.fal.run/openai/gpt-image-2/edit` with the header `Authorization: Key `, then poll the returned `status_url` and fetch `response_url`; the image is at `images[0].url`. The Skill never stores keys. Without a key, paste each prompt and the reference photo into any GPT-Image-class image editor. The alternative, `fal-ai/nano-banana-pro/edit`, costs about $0.15 per look and takes the same `prompt` and `image_urls`, but uses `aspect_ratio: "4:5"` and `resolution: "2K"` instead of `image_size` and `quality`; it gives softer, more filmic results, but the face drifted more in testing. 6. **Check identity, look by look.** Install sharp once (`npm install sharp` in the Skill folder, Node 20.9 or newer), then run `node scripts/contact-sheet.mjs --reference person.jpg --images 01.jpg,02.jpg,... --cols 4 --output identity-check.jpg` and open it. This sheet shows the person's real face: keep it out of the delivery folder and delete it when the check is done. Compare every face with the reference: face shape, eyes, brows, nose, lips, freckles, skin tone, apparent age, body type. Then check hands, feet, garments and backgrounds against `references/output-spec.md`. 7. **Fix failures: at most 3 attempts per look.** Change one thing per attempt and say what (a clearer pose with a job for the hands, a closer framing, a second reference photo, a reworded wardrobe line; see the fixes table in `references/shoot-plan.md`). View each attempt beside the reference. Then keep the best and say plainly what still differs. 8. **Make the contact sheet.** `node scripts/contact-sheet.mjs --images 01.jpg,02.jpg,03.jpg,04.jpg,05.jpg,06.jpg --caption "LABEL NAME|COLLECTION · 6 LOOKS" --output contact-sheet.webp`. The defaults (1800 px wide, 3 columns, 12 px gutters, WebP quality 90) are the ones that made the preview. 9. **Deliver** the looks, the contact sheet and the plan. If you uploaded the person's photo anywhere to get a URL, delete it now. Don't put the reference photo or `identity-check.jpg` in the delivery folder; delete the identity check. ## Files - `references/shoot-plan.md`: lighting setups, lenses, film stocks, poses, wardrobe notes (garment photos, prints, modest fashion, menswear, swimwear), example plans for menswear, plus-size and product-in-hand looks, identity rules and a fixes table. - `references/output-spec.md`: sizes, names and the pass/fail checklist for every look. - `assets/example-shoot-plan.json`: the Marlow Studio plan that produced the preview. An example to copy, never a default. - `assets/prompt-template.md`: the per-look prompt, filled from the plan. - `assets/casting-template.md`: the synthetic casting portrait prompt and example briefs (women, men, non-binary, a range of ages and bodies). - `assets/generation-input.json`: models, sizes, quality and approximate costs. - `assets/example-input.jpg` and `assets/preview.webp`: the synthetic model photo and the six-look Marlow Studio contact sheet made from it. - `scripts/build-requests.mjs`: prints one image-edit request per look, with any extra angles and garment photos as more reference images. It calls no API. - `scripts/build-casting-input.mjs`: prints the casting request for a synthetic model. It calls no API. - `scripts/contact-sheet.mjs`: lays the looks out as a contact sheet, or as an identity check with the reference first.