--- name: destination-teaser description: Make a 15 to 20 second vertical travel or hospitality teaser reel that feels filmed on location. Plans 4 to 6 shots in teaser order (aerial establishing, place detail, signature amenity, people enjoying it, closing hero), keeps the place identical from shot to shot with a reference still or the property's own photos, renders photoreal keyframes with GPT Image 2, animates each with Seedance 2.5, then cuts and grades them with ffmpeg into one text-free 9:16 MP4 ready for the user's own captions. 16:9 on request. For hotels, lodges, resorts, villas, restaurants, tourism boards and travel creators. metadata: type: video version: 1.0.0 category: Video & animation tagline: Use this Skill to turn a place, a season and a mood into a graded 15 to 20 second vertical teaser, text-free and ready for captions. made-for: Hotels and resorts, Tourism boards, Travel creators, Agencies, Restaurants generates-with: Shot list + 4-6 keyframes + 4-6 Seedance clips, cut into one text-free MP4, 9:16 or 16:9, 720p requires: Node.js 18 or newer and ffmpeg with ffprobe for the scripts; your own FAL_KEY only if you run scripts/fal-run.mjs outside-costs: About $12-16 for a 5-shot 720p teaser on fal, about $9.50 of it the Seedance 2.5 finals ($0.47/s); the sample cost $12.24. Billed to your own fal account; quote the total and get a yes before the first paid call. updated: 2026-10-16 title: Destination teaser availability: live summary: Turn a place, a season and a mood into a graded 15 to 20 second vertical teaser reel, text-free and ready for your own captions. command: /destination-teaser our mountain lodge in winter, blue hour, cosy, 9:16 output: MP4 · 9:16 or 16:9 teaser, 15-20 s, 720p required-input: Place + season and mood creator: meleon --- # Destination teaser Turn a destination or property, a season and a mood into a short vertical reel: a drone establishing shot, a detail that says the season, the signature amenity, people enjoying it from behind, and a closing hero shot of the place, graded as one roll of film and left text-free so the user adds their own captions. The stills are approved before any video is paid for, and every shot after the first uses the approved aerial (or the user's own photos) as a reference so the place stays the same. ## What you need - Destination or property name, and season plus mood ("deep winter, blue hour, warm and quiet"). - Aspect: 9:16 (default) or 16:9. Length: 15–20 s (4–6 shots, default 5). Resolution 720p (default) or 1080p. - Optional, strongly recommended for a real property: up to 3 of the user's own photos of the place (an exterior, an interior, a detail). Only the user's own photos or photos they have rights to, and no recognisable guests or staff in them (crop people out first). - People: fictional guests (default) or none. Never generate real guests, staff, celebrities or public figures, and never from a photo of a real person. - **Limits: faces.** Seedance on fal refuses start frames that show a clearly visible realistic face, even a synthetic one, so people in the teaser are seen from behind, in profile shadow, in silhouette or small (the sample couple sits with their backs to camera). If the user insists on a face, offer Kling 3 turbo pro (`fal-ai/kling-video/v3/turbo/pro/image-to-video`, about $0.14/s; `prompt`, `image_url`, `duration` "3"–"15"; no resolution or audio fields) or Veo 3.1 (`fal-ai/veo3.1/image-to-video`, $0.20/s silent, $0.40/s with audio; `duration` "4s"/"6s"/"8s") for that one shot. In a test on a face-forward synthetic close-up both accepted it; Kling kept the same face, Veo's face drifted within 4 s. Test one draft first, and say the look will differ. - Optional: music the user owns or licensed (see Sound in `references/output-spec.md`). If the place is real, agree with the user that the teaser will only show what the place really has. ## What you make 1. `teaser.json`: the filled shot list (locks, prompts, trims). 2. 4–6 approved keyframes (JPEG, 864 × 1536 for 9:16). 3. 4–6 Seedance clips. 4. The teaser: H.264 MP4, 720 × 1280, 24 fps, 15–20 s, one grade, grain, a 0.5 s fade-out, no text. Optional 4:5 crop for feed posts and a silent web preview under 8 MB. ## How to run it **Budget: about $12–16 for a 5-shot 720p teaser ($11–16 for 4 shots, $14–19 for 6). The Seedance 2.5 finals are about $9.50 of it; the Vael Lodge sample cost $12.24 with no re-rolls. 1080p finals cost about 2.5 times as much.** Before the first paid call, run `node scripts/build-requests.mjs --teaser teaser.json --stage estimate`, quote the total it prints, and get one explicit yes on it. Then, at every paid step, tell the user the model, the number of calls and the cost, and ask again if the spend will go past the quoted total. To send a request, POST the printed JSON `input` to the fal model id in that request with the user's own FAL_KEY (`scripts/fal-run.mjs --request --out --approved` does this and embeds local photos as data URIs; the Skill never stores keys), or paste the prompt and images into any GPT-Image-class image editor and Seedance-class image-to-video tool. Seedance requests always carry `prompt`, `image_url`, `resolution` ("480p" draft, "720p" final), `duration` (a string, "4"; "5" for 4-shot teasers), `aspect_ratio` "auto" and `generate_audio`. 1. **Brief (free).** Confirm place, season and mood, aspect, number of shots, people option, and whether it is a real place. Choose the grade from `references/look-and-light.md` (blue-hour, teal-amber, warm-kodak, cool-fuji, natural). 2. **Shot list (free).** `node scripts/build-shot-list.mjs --out teaser.json --place "..." --season-mood "..." --grade [--shots 4|5|6] [--aspect 16:9] [--people none] [--place-photos a.jpg,b.jpg]`. Fill every `FILL:` field: `locks.place`, `locks.people`, each shot's `keyframe_prompt` and `motion_prompt`, using `references/shot-grammar.md` (slots by destination type and season) and `references/prompt-patterns.md` (anatomy, the Vael Lodge prompts, failure modes). People face away from the camera (the Seedance safety check refuses visible faces). Describe the plan to the user in plain words. 3. **Spend gate (free).** `node scripts/build-requests.mjs --teaser teaser.json --stage estimate`. Quote the printed total and wait for one explicit yes before any paid call. 4. **Aerial first (about $0.25).** `node scripts/build-requests.mjs --teaser teaser.json --stage keyframe --shot 1 --out requests --inline` (model `openai/gpt-image-2`, or `openai/gpt-image-2/edit` with the user's photos; `image_size` 864 × 1536, `quality` "high"). Approve it, then set `references.place` to it, unless the user's photos are the reference. 5. **Other keyframes (about $0.27 each).** `--stage keyframe --shot all` (model `openai/gpt-image-2/edit`). Open every still: same building and landscape as the aerial (and as the user's photos), no text or signs, no extra people, faces away, natural hands, and the tasteful-framing rules in `references/prompt-patterns.md`. For a real place, compare with its photos side by side. Re-roll a still by changing one thing (max 3 attempts). Put each approved path in `keyframe` and show the user the set before any video. 6. **Drafts (about $0.29 per 4 s shot).** `--stage draft` (Seedance 2.0 mini, `bytedance/seedance-2.0/mini/image-to-video`, 480p). Make a contact sheet per clip (`ffmpeg -i clip.mp4 -vf "fps=2,scale=180:-2,tile=8x1" -frames:v 1 sheet.jpg`) and look: accepted, motion reads, nothing spawns. Adjust motion prompts. 7. **Finals (about $1.89 per 4 s shot at 720p).** `--stage final` (Seedance 2.5, `bytedance/seedance-2.5/image-to-video`, `resolution` "720p", `duration` "4", `generate_audio` true, `bitrate_mode` "high", `codec` "H264"). Contact-sheet each clip at 3 fps, note clean in/out points (skip the first 0.2 s; stop before an object fills the frame or anything odd happens), and fill `clip`, `in`, `out`, `transition_in` (cut; at most one dissolve). Fail path per shot: max 3 attempts, one change each (motion prompt, trim or keyframe), say which; then deliver the best and say what still differs. 8. **Assemble (free).** `node scripts/assemble-teaser.mjs --teaser teaser.json --out -teaser.mp4 --crf 20`. Web preview: `--max-mb 7.5`. Feed version: `--crop 4:5`. Sound: read Sound in `references/output-spec.md` first; `--audio clips` is model-made ambience (listen before shipping), `--music track.mp3` takes owned or licensed music only, and reel platforms usually want a silent export with music added in the app. 9. **Check (free).** `node scripts/check-teaser.mjs --file -teaser.mp4 --edl -teaser.mp4.edl.json --aspect 9:16 --resolution 720p --min-seconds 15 --max-seconds 20`, then open the contact sheet and go through `references/output-spec.md`. Fireplaces, candles and lanterns can trip the flash check: look at the moment, and if it is real flicker, re-run with `--ignore `. 10. **Deliver.** The teaser, the keyframes and teaser.json; say which shots were re-rolled and anything imperfect. For a thumbnail use the aerial or the hero frame, never a frame of people in swimwear or robes. 11. **Clean up.** Delete the user's place photos from the working folders unless they want them kept, and any public copy. fal keeps request inputs (including inline photos) and outputs on its side for a period: tell the user they can delete them from their fal dashboard or ask fal to, and to check fal's current retention policy. ## Files - `references/shot-grammar.md`: teaser order, cutting rules for short vertical edits, slots for alpine, beach, city, countryside, desert, safari, spa, ski and cruise, seasons, real places, lengths. - `references/look-and-light.md`: grades and when to use each, light and lens vocabulary, vertical safe zones, why the teaser is text-free. - `references/prompt-patterns.md`: locks, keyframe and motion prompt anatomy with the sample prompts, tasteful framing, the Seedance face check, failure modes and fixes, drafts versus finals, fail path and the alternative models. - `references/output-spec.md`: deliverables, sizes, costs, sound, thumbnails, the pass/fail checklist and the sample's known imperfections. - `assets/prompt-template.md`: aerial, keyframe and motion prompts with placeholders. - `assets/generation-input.json`: model ids, sizes, defaults and costs (the settings that made the preview). - `assets/shot-list-example.json`: the filled shot list behind the preview (Vael Lodge, an invented alpine lodge). - `assets/preview.mp4`: the 16.7 s sample teaser, silent, 7 MB. - `scripts/build-shot-list.mjs`: writes teaser.json with the slots and FILL fields. - `scripts/build-requests.mjs`: the cost estimate for the whole teaser, and the model requests for one stage. Calls no API. - `scripts/fal-run.mjs`: sends one request with the user's FAL_KEY after `--approved`, waits, downloads (never overwrites without `--force`). - `scripts/assemble-teaser.mjs`: trims, cuts, grade, bloom, grain, vignette, crop, fade-out, audio or music, H.264 +faststart, edit list. - `scripts/check-teaser.mjs`: technical checks, black-frame and flash detection (`--ignore` for real firelight), contact sheet.