# Prompt patterns A board frame is a film keyframe drawn quickly and cheaply. Write the prompt you would want for the real film: the film Skill re-renders the same prompt at high quality later, so a good board prompt is never wasted. The caption is what a person reads on the board; the prompt is what the model reads. ## Locks and tokens Write each lock once in board.json and reuse it through tokens, so every frame describes the same things the same way: - `locks.place` (`{{PLACE}}`): the place or world, architecture, materials, landscape, season and time of day. "a fictional small-batch coffee roastery in an old red-brick boathouse with a slate roof on a quiet stone fishing harbour: tall arched windows, a black cast-iron drum roaster, burlap sacks of green beans, a worn oak floor and counter, grey sea and moored wooden boats outside, early morning in late autumn". - `locks.product` (`{{PRODUCT}}`): shape, material, colours, label layout and the exact visible label text, read off the user's photo, not imagined. "a matte kraft-paper stand-up coffee pouch with a zip seal and two small tear notches near the top, and a square black front label with a small white oval emblem above the word OSTRA in white spaced capital letters". - `locks.people` (`{{PEOPLE}}`): fictional adults only; apparent age range, build, hair. No names of real people. - `locks.wardrobe` (`{{WARDROBE}}`): every garment with colour and cut, the same in every shot. - `locks.look`: written by build-shot-list.mjs from the grade; added to every frame. A trailing full stop is dropped when a token is filled, so "{{PRODUCT}} stands beside the cup" reads as one sentence. Keep the brand name out of `locks.place` and the scene: a name in a scene sentence invites the model to paint it on walls, boats and signs. The board title carries the name, and the product carries it through its photo. The OSTRA sample kept it out, and no frame had stray lettering. ## Captions The caption is printed under the frame, at most 60 characters. Say what we see, in plain words, so a client who has never seen a shot list understands it. - Good: "Fresh beans tumble in the cooling tray, steam rising". "A couple by the fire, seen from behind". "The pouch on the oak counter, the harbour behind". - Avoid camera jargon (the camera note has its own line), prices, claims ("the best coffee in town") and names of real people. - `label` (the slot name, at most 18 characters) and `camera` (at most 40) can be rewritten too: "Opening aerial", "drone descends to the door". ## Frame prompt anatomy build-requests.mjs wraps your text as: "A 16:9 still frame from a cinematic short film. {your keyframe_prompt} {reference sentences} {people line or "Nobody in frame."} {locks.look} Photorealistic, true-to-life scale and anatomy. {text rule}". The place sentence also says "Seen from inside, its windows show the surroundings, never the building itself", because an aerial establishing frame as the only place reference led the model to paint the boathouse into its own window. With a `rough_frame`, a last reference sentence asks the model to keep that draft's composition, angle and framing and render it cleanly. The text rule is "No text, no signage, no logos, no watermark", or, in a frame with the product photo, "No text, signage or logos anywhere except the product's own label, exactly as in its reference." Write `keyframe_prompt` as: shot size and angle, then the subject, then what in the frame will move, then light, then lens and where things sit in the frame. - Never number reference images ("the boathouse in reference image 1"). The script adds the reference sentences, and the film Skills number references differently. Say "the place" or "the product". - Name what moves even though this is a still ("a thin wisp of steam rises", "the curtain lifts"), so the film can move it. - Say where the subject sits ("in the lower third", "in the right third, space on the left for an end card"). Examples (the OSTRA sample, as used and approved; the first shot has no reference, the rest use the approved establishing frame and the product photo; the full shot list is `assets/board-example.json`): - Establishing: "Cinematic drone aerial photograph at first light of {{PLACE}}. Seen from about 60 metres up at a 35 degree downward angle; the boathouse sits in the lower third with a thin curl of steam from its chimney, the grey harbour and moored boats fill the top. Soft pink dawn light, light sea mist." - Detail: "Close detail inside the roastery: freshly roasted coffee beans tumble in the round steel cooling tray of the drum roaster while a thin wisp of steam rises; {{PRODUCT}} stands softly out of focus at the edge of the frame. 85mm lens, shallow depth of field, warm window light from the left." (The model kept the pouch sharp, which helps the label.) - Signature, hands only: "Close shot of a pour-over on the worn oak counter: one hand, the forearm in a cream sleeve pushed up, pours a thin stream of water from a gooseneck kettle onto coffee in a ceramic dripper set on a dark stoneware mug with a pale drip glaze; steam rises; {{PRODUCT}} stands beside the mug. Only that hand and forearm are in frame. 50mm lens at counter height, warm morning light from the arched window." One hand, one action: a natural hand at the first attempt. The mug is the one in the product photo, so it matches across shots. - People: "Medium shot from behind and slightly to the side: {{PEOPLE}}, wearing {{WARDROBE}}, stands at a tall arched window of the roastery holding a handful of roasted beans up to the light, face turned towards the harbour and away from the camera; steam from the roaster drifts through the light. 35mm lens, soft backlight; the window is at ground level and shows only the harbour water, the stone quay and the moored boats, soft through the glass." - Hero close: "Hero close-up of {{PRODUCT}} standing on the worn oak counter, label facing the camera, a dark stoneware mug of black coffee with a pale drip glaze beside it and a thin curl of steam rising from the mug; the arched window and the grey harbour softly out of focus behind. Calm and still, the pouch in the right third, space on the left for an end card. 85mm lens, soft window light." ## Motion prompts (written now, paid for later) The board makes no video, but each shot carries the `motion_prompt` the film Skill will send to Seedance. Writing it now forces the question "what moves here?" while the frame can still change. One camera move, what moves in the scene, guards: - "Cinematic drone shot at first light: the drone glides slowly forward and down towards the boathouse, smooth and steady; mist drifts over the harbour, the boats rock gently. One continuous shot, no cuts, no people, no text." - "The beans turn slowly in the cooling tray, steam drifts upward; the camera makes a very slow push-in. One continuous shot, no cuts, nobody in frame." - "The roaster lets the beans run slowly through their fingers; the camera holds with a very slow push-in. Their face stays turned away. One continuous shot, no cuts." Moves that work in 4 to 6 s: slow drone glide or descent, very slow push-in, slow rise, slow lateral dolly, gimbal follow from behind. Avoid orbits around people, whip pans, zooms through windows and "fast" anything. ## People, faces and Seedance Seedance on fal refuses start frames with a clearly visible realistic face (`content_policy_violation`, "likenesses of real people"), even for fictional people. The board is planned for Seedance, so: - People are seen from behind, in three-quarter back view, in profile shadow, in silhouette or small in frame. Hands can carry a whole signature moment. - Every person is a fictional adult; the script adds "must not resemble any real or famous person". - If the user insists on a face, set `face_visible: true` on that shot. check-board warns, and the price table shows Kling 3 and Veo 3.1 for that shot. In testing on one synthetic close-up, Kling 3 turbo kept the face for 3 s and Veo 3.1 let it drift within 4 s. ## Tasteful framing - People are dressed: knitwear, linen, aprons, robes. Swimwear only in the water or in silhouette, from behind or the side. - Pin garments in the prompt ("the robe stays closed", "the apron is tied"). No wind-lifted shirts or skirts. - Never centre a frame on hips or buttocks; no low angles from behind on swimwear. - Couples are affectionate and calm: a head on a shoulder, an arm around. ## Products and labels - With `--product-photo`, every product shot carries the photo as a reference and the prompt says "same shape, colours, materials, label layout and text; do not re-letter or redesign it". - Write the exact label text into `locks.product` ("reading OSTRA in white capital letters"). Read the label on every frame, letter by letter. - Keep the product 20 to 50% of the frame in product shots; small labels at board size are fine, but they must not be wrong. - No other text: menus, signs and posters come out misspelled. Choose details without lettering. ## Low or medium quality - `low` (about $0.005 a frame at 1280 × 720 on fal's price table, plus about $0.01 per reference): composition, order and light. Use it to agree the plan when the user is unsure. In the OSTRA sample the low frames already held the place, the framing and even the label; textures, hands and grain were softer. - `medium` (about $0.044 a frame plus references): the default. Clear enough for a client to approve the film from, and for a 480p draft video (`handoff.mjs --use-board-frames`). - After a rough pass, put each approved low frame in that shot's `rough_frame` before the medium pass. Without it, every medium frame is a new composition and the agreed framing is lost; with it, the OSTRA clean frames kept the rough frames' framing almost exactly. It adds one reference (about $0.01) a frame, and needs a free reference slot (at most 3). - `high` is not used here. The film Skill re-renders every keyframe at high quality (1536 × 864) before any final video. ## Failure modes and fixes | You see | Cause | Fix | | -------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------- | | The building or room changes between frames | No place reference, or a weak one | Approve shot 1, set `references.place` to it (or the user's photo), re-roll the frame | | The label is misspelled or redesigned | No product photo, or the product is tiny | Add `--product-photo`; write the label text into `locks.product`; bring the product closer | | Garbled signs, menus or posters | The scene invites lettering | Choose details without text; the text rule is already in the prompt | | A face turned to camera | The pose invites it | "seen from behind", "face turned towards the window and away from the camera" | | Extra people in the background | Busy places invite crowds | "Nobody else anywhere in the frame"; choose an early or late hour | | Two frames look the same | Same size and angle twice | Change the size (wide, close, medium) or the angle (overhead, low) | | The frame is static, nothing to move | No movement named | Name the steam, water, fabric or light that will move | | The look drifts (one frame cold, one warm) | Time of day differs between prompts | Same time of day in every prompt except slot 5; the look line does the rest | | A refusal from the image model | A real person, a famous brand or unsafe content | Remove it from the prompt or photo; there is nothing to retry as it is | | The building appears in its own window | The aerial establishing frame is the only place reference | The script's place line covers it; also say what the window shows ("at ground level, only the harbour water and boats") | | The clean frame loses the agreed rough framing | The medium pass is a new render | Set `rough_frame` to the approved rough frame before the medium pass | ## Fail path At most 3 attempts per frame. Change one thing each time and say which: the subject, the framing, the light or the reference. Look at every attempt beside shot 1 (and the user's photos). After three, keep the best one and tell the user what still differs; the film Skill re-renders it at high quality anyway.