# Output spec ## Hero keyframe | Property | Value | |---|---| | Model | `openai/gpt-image-2/edit`, quality high (draft: low) | | Size | 1536 x 864 (16:9), 864 x 1536 (9:16) or 1280 x 1280 (1:1); never upscaled | | Format | JPEG | | Naming | `keyframe__.jpg`, e.g. `keyframe_headphones_16x9.jpg` | ## Reveal clip | Property | Value | |---|---| | Model | `bytedance/seedance-2.5/image-to-video` (draft: `bytedance/seedance-2.0/mini/image-to-video` at 480p) | | Resolution | 720p by default: 1280 x 720 (16:9) or 720 x 1280 (9:16). 1080p on request | | Duration | 8 s by default (6 to 8 s recommended, 4 to 30 s possible) | | Frame rate | 24 fps | | Finish | `scripts/finish.mjs`: 1.2 s fade up from black, 0.5 s fade out, fine moving grain, H.264 High, CRF 18, `+faststart` | | Audio | Muted by default. With `--audio` on the request and `--keep-audio` on the finish, AAC 160 kbps | | File size | Under 8 MB at 720p and 8 s (the preview is 2.7 MB) | | Naming | `reveal___.mp4`, e.g. `reveal_headphones_16x9_720p.mp4` | | First frame | Black, because of the fade up. Never use it as a poster or thumbnail | ## Poster still | Property | Value | |---|---| | Source | The finished clip at 3 s, after the fade (`finish.mjs --poster`, or `ffmpeg -ss 3 -i reveal.mp4 -frames:v 1 poster.jpg`) | | Size | Same as the clip (1280 x 720 or 720 x 1280) | | Format | JPEG | | Use | Any page, player or card that shows a still before the video plays | ## Checks before delivery Run `scripts/check-frames.mjs` and open the board and the contact sheet. On a finished clip the first board frame is taken at 1.4 s, after the fade; on a raw clip pass `--first-at 0`. 1. **Same product, start to end.** In the board (product photo, first, middle, last frame): same silhouette, same number of parts, same buttons, ports, seams and hinges in the same places, same colour and finish. 2. **Label and logo.** Any printed text is spelled exactly as in the photo in every frame you can read it. No logo appeared on an unbranded product. 3. **No invented features.** No new lights, screens, straps, buttons or text; highlights move like reflections, not like LEDs. 4. **Motion.** One smooth continuous move, no jumps, no cuts, no flicker, no morphing between frames in the contact sheet. 5. **Light.** The light visibly travels across the product (the reveal), then settles. 6. **Format.** Duration and resolution as ordered (the script checks both), H.264, plays in a browser, muted unless audio was asked for. 7. **Clean frame.** No hands, people, watermarks or text overlays. 8. **Poster.** The poster still exists, is taken after the fade, and shows the product clearly. If check 1, 2 or 3 fails, the clip misrepresents the product: never deliver it as finished. Follow the fail path in SKILL.md.