# Planning the shoot A good AI photoshoot is planned like a real one: one model, a wardrobe story, and a sequence of looks that each change the location, the light and the pose, so the set feels like a day with a crew rather than six copies of one picture. Write your own plan file (copy `assets/example-shoot-plan.json`) with one entry per look. Each field is a short phrase a photographer would write on a call sheet. ## The rule of variety Across the set, change these from look to look. Never repeat the same combination twice: - **Light**: golden hour backlight, blue hour with warm practicals, soft window light, hard midday sun, overcast, studio. - **Distance**: at least one full length, one three-quarter, one head-and-shoulders close-up (the close-up proves identity). - **Gaze**: mix direct-to-lens, looking away, eyes down. Six direct stares look like a passport set. - **Body**: sitting, walking, leaning, standing still, a candid moment (hand on collar, shading eyes, holding a cup). - **Palette**: alternate warm and cool looks so the contact sheet has rhythm. ## Lighting setups (write these in `light`) | Setup | Phrase that works | Good for | |---|---|---| | Golden hour backlight | "late golden hour, low sun behind the model putting a warm rim light in the hair, face lit by soft warm bounce from a white wall" | Linen, resort, swim cover-ups, summer dresses | | Blue hour with practicals | "deep blue dusk sky with warm tungsten spill from shop windows lighting one side of the face" | Tailoring, coats, eveningwear, city | | Window light | "soft overcast north window light from the left, gentle falloff into shadow on the right" | Knitwear, loungewear, home, beauty | | Hard sun | "hard midday sun casting crisp palm-frond shadows across the model and the wall" | Bold colour, summer, graphic editorials | | Overcast | "soft overcast daylight, even and cool, no harsh shadows" | Outerwear, denim, coastal, true colour | | Studio softbox | "one large softbox from camera left, a Rembrandt triangle of light on the far cheek, deep soft shadow on the right" | Close-ups, jewellery, beauty, identity proof | | Studio hard flash | "direct on-camera flash, crisp shadow on the backdrop behind the model, slightly overexposed skin" | Streetwear, party, Y2K, playful | | Night flash outdoors | "on-camera flash at night, dark background, city lights as small points" | Nightlife, sequins, leather | | Neon | "pink and blue neon signs as the only light, coloured reflections on the skin" (signs out of focus) | Nightwear, urban, music | | Underwater or pool | "turquoise pool, sunlight caustics rippling across the model" | Swimwear (keep it tasteful, see below) | ## Lenses and cameras (write these in `camera`) - **35mm, f/2.8 to f/5.6**: environmental, full length, the place matters. Slight wide-angle energy. - **50mm, f/1.8 to f/2**: natural, three-quarter length, street and lifestyle. - **85mm, f/2**: classic fashion portrait, soft background, flattering faces. - **105 to 135mm, f/4**: beauty close-ups, compressed backgrounds, studio. - "Medium-format look" adds depth and softness; "on-camera flash" adds a candid party feel. Avoid "8K, ultra-detailed, masterpiece" style words. They push the model towards plastic, over-sharpened skin. ## Film and colour (write these in `film`) - **Kodak Portra 400**: warm, soft, flattering skin. The default for daylight. - **Kodak Portra 800**: same warmth for dusk and indoor. - **Kodak Ektar 100**: rich, saturated colour for hard sun and bold wardrobe. - **Fuji Pro 400H**: cool pastel, minty greens, airy overcast. - **Cinestill 800T**: night, neon, red halos around lights. - **Neutral with a slight film fade**: studio and clean e-commerce. Keep one or two film stocks across a set so it looks like one shoot. The prompt template already adds fine grain, soft highlight roll-off and real skin texture. ## Poses that read as editorial (write these in `pose`) - Sitting on steps, one forearm on a knee, looking past the camera. - Caught mid-stride crossing a street, body turned three-quarters, hand in a pocket. - Leaning one shoulder on a wall, shading the eyes with one hand, chin raised. - Sitting sideways on a window seat, knees drawn up, cup in both hands, looking out. - Walking towards camera, wind in hair and coat, one hand holding the collar, eyes down. - Head and shoulders, turned slightly, calm direct gaze (the identity anchor). - Adjusting a cuff, tucking hair behind an ear, looking back over a shoulder. Give hands something to do (a pocket, a collar, a cup, a railing). Empty hands in mid-air are where extra fingers appear. ## Wardrobe notes (write these in `wardrobe`) Describe the garment the way a stylist would: colour, fabric, cut, how it is worn, shoes. "A buttoned oatmeal linen shirt with rolled sleeves and matching wide-leg linen trousers, barefoot" beats "a nice summer outfit". - **The brand's own garments**: add `"garment": "garments/shirt.jpg"` to the look (a path relative to the plan file, an https URL, or a list for a top and trousers). `build-requests.mjs` adds the photo as an extra reference image and tells the model it is "a garment photo: the model wears that exact garment, with the same colour, fabric, pattern or print, buttons, collar, length and fit". In `wardrobe`, name it the same way ("the cream linen shirt from the garment photo, buttoned, sleeves rolled") and describe the rest of the outfit. Use a flat-lay or hanger photo on a plain background. Check fidelity side by side; logos and small prints drift first. For exact fidelity on a real product listing, use a virtual try-on Skill instead. - **Prints and patterns**: stripes and checks hold up; small all-over prints and lettering drift. Say "the same print, same scale". - **Logos and text on clothes**: avoid in the prompt. If the label wants its logo, add it afterwards in design software. - **Shoes**: name them, or the model invents them. Full-length shots show shoes. - **Jewellery**: keep it small and named (small gold hoops); big jewellery fights the face. - **Menswear, non-binary and other bodies**: change `model_note` and the wardrobe language only; the template does not assume a gender. State the body type positively and precisely in `model_note` ("a curvy size-18 woman with a defined waist", "a tall, broad-shouldered man", "a petite model, about 1.55 m"), because the identity line asks the model to keep it, and unstated bodies drift slimmer and taller between looks. Avoid euphemisms ("flattering", "forgiving") and avoid correcting words ("slimming"). - **Modest fashion**: name the coverage ("long-sleeved", "ankle-length", "hijab in sage silk") so the model never removes it. - **Swimwear and resort**: allowed and common, but keep it tasteful: one-pieces, cover-ups, natural poses, no sexualised posing or camera angles, adults only. ## Locations (write these in `location`) Name a real kind of place with two concrete details: "sun-bleached whitewashed stone steps above a calm turquoise sea", "a deep window seat in a timber cabin, pine forest with snow outside". Ask for any signs to be out of focus and unreadable (the template already does). ## Example plans for other shoots `assets/example-shoot-plan.json` is a womenswear resort shoot. The same fields work for any shoot; three short examples (one look each, written as plan entries): **Menswear, tailoring** (`model_note`: "the man in the reference photo, an adult in his thirties, tall and broad-shouldered") ```json { "id": "01-station-coat", "wardrobe": "a camel wool overcoat over a navy roll-neck, grey flannel trousers and brown suede chelsea boots", "location": "an empty railway platform with a steel and glass canopy", "light": "soft overcast daylight from the open end of the platform, cool and even", "pose": "standing with both hands in the coat pockets, weight on one leg, looking down the platform away from the camera", "camera": "50mm lens at f/2", "film": "Kodak Portra 400 colour", "framing": "full length, centred, the platform edge leading into the frame" } ``` **Mid- and plus-size, swim and resort** (`model_note`: "the woman in the reference photo, an adult in her forties, curvy size-18 figure with a defined waist"; keep it tasteful) ```json { "id": "02-pool-kaftan", "wardrobe": "a terracotta one-piece swimsuit with a sheer white cotton kaftan worn open, gold sandals", "location": "the edge of a pale stone pool with olive trees behind", "light": "late afternoon sun from the side, warm, long soft shadows", "pose": "walking along the pool edge, the kaftan moving, looking ahead and laughing", "camera": "85mm lens at f/2.8", "film": "Kodak Portra 400 colour", "framing": "full length, she walks from the left third towards the centre" } ``` **Product in hand** (a bag, a bottle, a phone case; pass the product photo as the look's `"garment"` so it stays exact) ```json { "id": "03-bag-cafe", "wardrobe": "a cream knit vest over a white shirt, straight blue jeans; carrying the exact tan leather tote bag from the garment photo on one shoulder", "location": "a pavement cafe table with a marble top", "light": "soft morning sun through a cream awning", "pose": "standing beside the table, one hand resting on the bag strap, the bag facing the camera, glancing at the street", "camera": "50mm lens at f/2", "film": "Kodak Portra 400 colour", "framing": "three-quarter length, the bag at the centre of the frame" } ``` For a product-in-hand look, keep the product large and facing the camera, and check its shape, colour, hardware and any logo against the photo as strictly as the face. ## Identity: keeping one person across every look - Use the clearest photo: face front-on, even light, no sunglasses, no heavy filter, waist-up or closer, 1000 px or more. - A second photo of the same person from another angle helps: pass it with `--extra-image side.jpg` (repeatable). The prompt then says reference images 2 onward show the same person and are only for the face and body. - The identity line in the template names face, bone structure, eyes, brows, nose, lips, freckles and marks, skin tone, body type and hair. Don't change it per look. - Keep at least one close-up in the set; it is where drift shows. - Hairstyle changes (an updo, wet hair) are fine if you say so in `wardrobe`; don't change hair colour unless asked. - **Identity check**: run `scripts/contact-sheet.mjs --reference --images ... --cols 4` and compare every face to the reference. Reject a look if the face shape, eye colour, nose, freckles or apparent age changed, or if the skin tone drifted lighter or darker. Re-run only that look. ## Group shots and couples The template is for one person. For two people, both must be the user's own photos or consented, pass both references, and say which is which by position ("the woman from the first reference on the left, the man from the second reference on the right"). Expect more drift; check both faces. ## Failure modes and fixes | Problem | Fix (one change per attempt) | |---|---| | The face drifted (different nose, eyes, age) | Use a clearer reference, add a second reference photo, or move the camera closer | | Same stiff, front-on pose in every look | Rewrite `pose` with an action and a gaze direction ("looking down the street away from the camera") | | Extra or melted fingers | Give the hands a job (pocket, cup, collar) or crop to three-quarter length | | Plastic, airbrushed skin | Remove words like "flawless", "perfect", "ultra-detailed"; keep "real skin texture with pores" | | Readable sign or fake logo in the background | Say "out of focus and unreadable", or move the scene away from shopfronts | | Wardrobe changed colour or cut | Name colour and fabric twice: in `wardrobe` and once more at the end of `pose` | | The model went too young or too glamorous | Add the adult age and "natural make-up" to `model_note`, e.g. "the man in the reference photo, an adult in his late twenties, natural grooming" | | Body changed between looks | Keep body type in the identity line, avoid words like "slim", "petite" in wardrobe | | Off-brand lighting colour | Change `film` (e.g. Ektar for punch, Fuji for cool) rather than adding colour words |