---
name: reels-talking-head
description: Make the person's AI character talk to camera like a real creator's story — H3 Max Reference to Video with the look sheet as Image 1 and the voiced line as Audio 1, 9:16, the blind prompt that works; Seedance 2.5 as the quality route.
---
# Talking head like a real creator's story

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 `reels` for the shared rules. Inputs are the person's own: Image 1 = their {look sheet} (or {photo}), Audio 1 = {line} voiced with their {voice} (`reels-voice`).

> **Quality route:** Seedance 2.5 (`seedance-2-5`) with the same inputs — the sheet in `referenceGenerationIds` (@Image1), the line in `referenceAudioUrls` (@Audio1), `sound: true` — does this job much better. The H3 method below is the low-cost route; quote both and let the person choose. Seedance voices @Audio1 again with its own synthesis: in a Russian test (2026-10-14) it slurred words ("Зрирна" for "Зёрна"). Check the words with `transcribe_media`; where they must be exact, keep the H3 Max Reference to Video route, where the lips follow the given voice.

## The call

`generate_video` with `minimax-h3-max-reference-to-video`:

- `referenceGenerationIds: [<look sheet generationId>]`
- `referenceAudioUrls: [<the voiced line: its generationId, audioVoiceTaskId or audioFinishingTaskId>]` — the line is read on the server; at most one own audio, 2–15 s
- `duration`: the line plus about a second, at most 15, at least as long as any video reference
- `resolution: "768P"`, `aspectRatio: "9:16"`

Prompt expansion is always off on this model. Quote first with `estimate_generation_cost` using the same references.

## The prompt (blind — nothing about the sheet is described)

Fill the slots and keep the sentence order; use the character's pronouns.

```text
Image 1 is only the look of the <man/woman/person>. <They> wear(s) exactly the outfit of Image 1 and <have/has> exactly the hairstyle of Image 1 — the same garments, colours and hair, nothing added, removed or swapped. Image 1 is a reference and never appears on screen. Audio 1 is <their> voice: <they> say(s) exactly these words, <their> lips in sync with Audio 1: "<the line>". A vertical 9:16 Instagram talking-head video shot with a phone's front camera; the phone itself is never seen. <They> <sit/stand> in <the place and light — 3–4 concrete background details, soft in the background>. <They> talk(s) straight into the phone camera, casual and natural, like recording a story for <their> followers. <acting beats tied to words>. The framing is slightly crooked and wobbles a little, like a handheld phone. Light: <the light sources of the place: glow, bokeh, flare, dust in the beam>. One continuous shot, no cuts, no music, no text on screen.
```

- `<the place and light>`, for example: "a small bedroom in the evening: a warm desk lamp, fairy lights on the wall behind, an unmade bed and a plant soft in the background".
- `<acting beats tied to words>`: one beat per word or pause of {line} — "on '<word>' <they> lean(s) in closer to the lens", a pause before a word, a smirk, a soft laugh, a small gesture — matched to {mood}.
- Never describe face, hair or clothes in words, only "exactly … of Image 1".
- Do not put service words such as BEGINNING / THEN / END next to the quoted line: the model speaks prompt words that stand near the quote.

## What was learned

| Prompt | Result |
|---|---|
| "filmed on a phone propped up on the desk" | the phone appears in the frame |
| "face, hair and clothes from Image 1" | the outfit was swapped for a casual T-shirt |
| + "exactly the outfit and hairstyle of Image 1, nothing swapped" | the outfit returned |
| + acting beats tied to words | every beat was played |
| + light sources: lamp glow, bokeh, flare, dust | warm glow and bokeh |
| + "reverb of the room, a car passing" | no ambience is added → `reels-room-sound` |

## Check

- The model may fill the time after the line with extra speech. `transcribe_media` the clip and compare the words with {line}; cut a talking tail with `trim_video` (`endSeconds` just after the last word).
- `describe_media` with `prompt: "Is the outfit and hair the same as the character sheet? Do the lips move with the speech?"` and a `sourceRange` around a key word.
- Listen before publishing: Audio 1 drives the lips but is not played back one to one.

## 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/formats-and-exhibition/ai-reels-and-shorts/skills/reels-talking-head.md)
- Updated from the owner's skill sources of 2026-10-11.

Read: `reels`, `reels-voice`, `reels-room-sound`. Source experiments and demo materials are historical; use the person's own approved media.
