---
name: animate-scene-pairs
description: Remake a film scene longer than 15 s with the person's character — pairs of shots on H3 Max Turbo from real start and end frames (actor replaced), a face board as the end image so the face holds, the board cut off and the pairs joined with the scene's sound.
---
# A whole scene in shot pairs with a face board

FlashBoards user skill, version 1.2.3 (2026-10-13).

On the board, read these guides with `list_skills` and `get_skill` when the assistant exposes them; otherwise use the hosted index through an available read-only retrieval tool. Use that runtime’s actual model discovery, current page context and guarded board actions for execution. Keep native readiness, approval and cost gates; do not claim a guide was read when retrieval is unavailable.

Read related guides with `get_skill({skillId:"<id>"})` or the [hosted index](https://pub-78da82d51ed14147ac554d38094b0c0b.r2.dev/user-skills/1.2.3/index.html). Reading a guide does not start or authorize a paid generation.

Read `animate` for the shared rules. {film} · {scene} longer than 15 s → pairs of shots on H3 Max Turbo image-to-video at 768P, joined with the scene's sound, the person's {character} in every shot. A scene of 15 s or less → `animate-film-scene-refs` or `animate-storyboard-turbo`.

> **Entry level:** every part starts from a fresh Flare 2K start frame made with the sheet (`generate_image`, the previous last frame only as a composition reference) — chaining last frames loses the face after the first part.

> **Quality route:** Seedance 2.5 (`seedance-2-5`) takes up to 30 s a call with the same pictures as @Image1… and does this job much better; quote both.

## Steps

1. **Cut the scene at every cut and pair the shots**: one generation = two shots, 5–15 s. A long single shot goes alone. On the person's own video `detect_video_cuts` gives the cut times; on the film corpus every frame carries its scene and timecode (`search_movie_frames`), but the corpus cannot list one scene's frames: a film browse (`filmId`) is shuffled, about 1,500 frames a film, text search covers every film and `mode: "similar"` leaves the film out. Several shots of one scene come from the person's own clip of it (`trim_video`, then `extract_video_frame` per shot); from the corpus alone expect one or two frames of a scene.
2. **Keyframes from the film itself**: the first frame of the first shot and the last frame of the second — never from the other side of a cut. On a video, `extract_video_frame` at those times.
3. **Replace the actor** in keyframes that show the actor (`character-replace`, mode 1, with the person's sheet). Frames with nobody in them go in as they are: replacing an empty street or a closed door makes the model invent a character.
4. **The end image is a face board**, two full frames side by side on black: left — {character}'s face as close as it goes, brows to lips, filling a frame of the film's aspect (`crop_image` from the sheet); right — the true last frame of the pair. Build it with `arrange_images` (`columns: 2`, cells of the film's size, `background: "black"`).
5. **Write the prompt shot by shot** (camera, action in three steps, every turn as a side of the frame, the music in words) and add **one frozen board shot after the scene**, with `cut_at` = the pair's length + 0.2 s. Four changes against a plain start/end prompt:
   - `output` — "… Then a hard cut to the given last image, which stays on screen as a completely still picture until the end of the video. The video begins exactly on the given first frame."
   - `keyframes.last_frame` — "a still reference board of two full frames side by side on black: picture 1 on the left — only a reference for {character}'s face (an extreme close-up of {character}'s face filling the frame, from the brows to the lips): never use its framing, background or light in any shot; picture 2 on the right — the end of shot 2, the true last frame of the scene … It appears only in shot 3, after the scene is over."
   - `keyframes.rules` — every shot is full screen, "the pictures are never shown together", "the screen is never split and the board never appears", the board shot is frozen.
   - `characters.{character}.face` — "exactly the face in picture 1 (on the left) of the last image — the same face, skin, every mark and the same hairline in every shot …" (point to the picture, do not list features).
6. **Generate every pair**: `generate_video` with `minimax-h3-max-turbo`, `firstFrameUrl: <first frame>`, `endFrameUrl: <face board>`, `duration` = the pair's length plus about a second (whole seconds, at least 5), `resolution: "768P"`, `promptExpansion: "disabled"`. Start all pairs, then check each once.
7. **Cut off the board**: `detect_video_cuts` finds the cut to the board; `trim_video` keeps the scene before it, fitted to the film's length (the model usually gives the scene a few tenths more). If a generation lingers on its start frame, drop that moment too. `concat_videos` the pairs in order and `replace_video_audio` lays the scene's sound under them.

## What to expect

- Two shots per generation keep the poses: each shot is anchored by a real frame at one end.
- The board costs about a second of generation per pair and one cut in the edit; it never reaches the finished video.
- Without the board (start + end frame only) the face drifts over ten seconds of close-ups and turns.
- Final: the same pairs again at 1080P, joined, then one video enhancement (`upscale-video-final`).

## Never

- Only a start and an end frame over long close-ups and turns — the face drifts.
- A keyframe taken across a cut.
- Replacing a frame that has nobody in it.
- Leaving the board tail in the edit.

## Execute through MCP or on the board

Use the person's FlashBoards account; never ask for a personal provider key or run the source's local scripts. Discover `get_account`, `list_generation_models` and the tools of this client first: a published guide does not prove a feature is deployed.

**Headless, no open board.** Quote with `estimate_generation_cost` (skill models: `estimate_skill_model`), then run `generate_image`, `generate_video`, `generate_audio` or `run_skill_model` with one stable `generationAttemptId` per logical attempt. Pass `maxCostUsd` only when the current operation and selected model support it; otherwise use the quoted cost and the person's explicit approval with the supported controls. Never silently ignore an unsupported spending cap; make one `get_generation` check after `retryAfterSeconds`. Pass the person's own results by `generationId`: images in `referenceGenerationIds`, `firstFrameUrl` and `endFrameUrl`, audio in `referenceAudioUrls` or `targetAudioUrl`, videos in `referenceVideoGenerationIds`. They are read on the server; signed result links do not work as public URLs. Every `generationId` a tool returns stays valid: a later read of the same result gives a different string, and both work. Film frames and gallery pictures go in by `previewHandle`: `referencePreviewHandles` of the generation tools, a `{previewHandle}` source of `arrange_images`, `crop_image` and `pad_image`, and `describe_media`. New files come from `show_media_upload_picker` as receipts. The person's character comes in as its sheet, by `generationId` or as an upload; there is no search by name. If the person names a character without the sheet, ask for it or make one with `character-sheet`; do not scan recent results for it. Free server steps: `trim_video`, `concat_videos`, `conform_video`, `replace_video_audio`, `extract_video_frame`, `extract_video_audio`, `detect_video_cuts`, `crop_image`, `pad_image`, `arrange_images`, `cut_audio_span`, `concat_audio_tracks`, `mix_audio_tracks`, `fit_audio_duration`, `add_audio_reverb`. Check every result with `describe_media` (a question about an image; `model`, `mode` and `sourceRange` only for a video) and `transcribe_media` for speech. Both checks are paid: `describe_media` costs a fraction of a cent for an image and about 2–4 ¢ for a short video (more for a long one), `transcribe_media` under 1 ¢ a minute — count the checks you plan in the price you name before the first paid step. `describe_media` is not reliable about sound: it misses effects mixed under music and can hear voices or instruments that are not there. Check speech with `transcribe_media` and ask the person to listen for effects and music. Never repay an uncertain submission; reuse an attempt ID only for the identical request. Make each new `requestId` or `generationAttemptId` unique, for example the task, the date and a short random suffix: an ID used before, even in another chat, replays that earlier request or answers `REQUEST_ID_CONFLICT`.

**On the board.** Inspect with `list_board_sessions` and `get_board_snapshot` and carry the same `sessionId` and a fresh `activeBoardId` as `expectedBoardId`. Native cards: `execute_board_action` (`listNativeModels`, `setModel`), `prepare_board_generation` with ordered board items or owned outputs, then one `generate_on_board` within the authorized budget. Board media tools: `list_media_tools` → `start_media_tool` → `get_media_tool_run`. Put headless results on a board with `add_media_to_board`.

Keep mandatory safety settings and the live limits of each model. Prices, timings, endpoints and "free retry" claims in the sources are historical, not FlashBoards contracts. If a step this guide needs is not available or is refused (a tool error, `audio_not_configured`, a missing model or input), keep the finished assets, tell the person which step is blocked and why, and ask how to go on. A single generation that ends `failed` is not a blocked step: submit it once more with a new `generationAttemptId` (reworded if it may have hit the content checker), and stop to ask only if it fails again. A failed attempt is not always refunded, so the retry may be paid again and `maxCostUsd` caps each request on its own: count both against the budget the person approved. Never swap in another route on your own: no image model redrawing a layout or a frame, no `describe_media` in place of the frames it should check, no clip generated only to take its sound, no picture drawn where the guide takes a film frame.

## Source and related guides

- [Original Learn guide](https://flashboards-h01.vercel.app/learn/acting/animate-ai-character/skills/animate-scene-pairs.md)
- Updated from the owner's skill sources of 2026-10-11.

Read: `animate`, `animate-film-scene-refs`, `character-replace`, `upscale-video-final`. Source experiments and demo materials are historical; use the person's own approved media.
