---
name: avatar
description: Route an AI avatar that speaks a voice track of any length from one picture and the voice — a standing talking head, a solo video podcast or YouTube host in 16:9 with two angles, or a walk-and-talk room tour — on a MiniMax H3 Max Turbo stub + Extend chain, with Seedance 2.5 as the quality route.
---
# Talking avatar of any length

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.

Work for the person's own character: their picture, look sheet and saved voice.

Slots used in all avatar guides: {character} · {picture} (the speaker, the first frame) · {look sheet} · {voice} · {speech} (the whole voice track) · {place} · {route} (where the character walks) · {mood}.

> **Sound effects.** Room tone, ambience and effects can be generated with ElevenLabs Sound Effects: `generate_audio` with `model: "elevenlabs-sound-effects-v2"`, `text` = what is heard, `audioDurationSeconds` 0.5–22, `loop: true` for an ambience bed. Generated effects come out louder than voices: mix them about 13 dB under the speech (`gain` about 0.22 in `mix_audio_tracks`) and listen before publishing. The speech is always the clip's own, never the original voice track.

## Entry level — the quick route first

Make everything first on the cheap route: pictures on GPT Image 2.5 Flare 2K (`gpt-image-25-flare`, `quality: "low"`), video on H3 Max Turbo (`minimax-h3-max-turbo`) at 480P from a fresh start frame in the format's shape. **Up to 15 s** Turbo speaks the line from the prompt and the voice is changed into the character's afterwards (`reels-lipsync-turbo`). **Longer speech** always goes through the stub + Extend chain (`avatar-long-speech`), never into one clip. After a result the person likes: a Magnific upscale for pictures, a Seedance 2.5 re-shoot or a video enhancement only on their pick.

## References first — offer them in the first reply

Offer to look at references together ("Show me references" / "I have my own" / "Skip"; skip it if the person already sent references or a clear look): `vidiq_research` with `tool: "instagram_tiktok_outlier_search"` for short talks or `tool: "youtube_search"` for long ones, and the FlashBoards gallery (`search_references`) for the studio or the place. The pick sets the framing and the setting. Show at most three picks, one line each (the hook or scene and why). Each person has a few vidIQ searches a day: one call per question.

## FlashBoards choice — a speaker of any length (H3 Max Turbo)

1. **{speech}** — the person's audio as it is, or `generate_voice_audio` with {voice}, `model: "eleven_v4"` and emotion tags (`reels-voice`, `reels-emotion-tags`).
2. **{picture}** — the person's frame as it is, or a start frame from {look sheet}: `generate_image` with `gpt-image-25-flare`, `quality: "low"`, `width: 1152, height: 2048` (16:9: `2048 × 1152`).
3. **Pieces** — `transcribe_media` (`model: "scribe_v2"`) → `plan_audio_timeline` with `chunkMaxSeconds: 14` → `cut_audio_span` for every `speechChunks` entry: even pieces of at most 14 s, cut at pauses.
4. **Video** — a silent stub from {picture}, then one `minimax-h3-max-turbo-extend` step per piece with the piece as `reference_audio_urls` and **`output: "continuation"`**; the stub is cut off at the end → `avatar-long-speech`.

**Quality route — Seedance 2.5** (`seedance-2-5`): up to 30 s a call with {picture} in `referenceGenerationIds` (@Image1) and the voice in `referenceAudioUrls` (@Audio1), the same prompt as an H3 piece — a whole segment in one generation, no chain, no stub. It looks much better and costs much more per second: quote both with `estimate_generation_cost` / `estimate_skill_model` and let the person choose.

## Classify

| The job | Go to |
|---|---|
| One line of text up to 15 s, the exact frame matters | `reels-lipsync-turbo` |
| The person's own audio up to 15 s and the lips must follow it | `avatar-long-speech` with one piece, or `reels-talking-head` (H3 Max Reference to Video). Not Turbo's `targetAudioUrl`: it only lays the track under the clip |
| One line up to 15 s, the most natural creator acting | `reels-talking-head` |
| A speech longer than 15 s, standing or sitting, to camera | `avatar-long-speech` |
| A solo video podcast or a YouTube host, 16:9, a minute and longer | `avatar-podcast` (+ `avatar-long-speech` for each chain) |
| The character walks while talking: room tour, show-around | `avatar-walk-talk` (+ `avatar-long-speech`) |
| Pick, make or clone the voice, add emotion | `reels-voice`, `reels-voice-clone`, `reels-emotion-tags` |
| The finished video: will it work before posting | `viral-score` |
| Ready to post: versions per platform, the platform checks, the AI label and a caption | `viral-publish` |

## Global rules

1. **`output: "continuation"`, not `"extended"`** (the model's default): `"extended"` re-generates the whole clip at every step and the picture softens faster.
2. **Extend has no pinned audio.** The piece goes in `reference_audio_urls` and the prompt says "Audio 1 is <their> voice: <they> say(s) exactly these words…". The words are kept, but **pauses and laughs are re-timed** — the clip drifts up to about 3 s a minute. The lips follow the clip's own sound: **never lay the original track over the result**.
3. **Pieces of 2–14 s, at pauses.** The source of each step is the whole clip so far and must stay within 60 s, so one chain holds about a minute of speech.
4. **The stub is silent and short** and is always cut off; the model may put its own noise on the stub frames — cut at the stub's end, not at the first silence.
5. Prompts are blind: never describe {picture} in words — "everything stays exactly as in the video". Expression may be named.
6. Every piece's prompt has **its own words and its own acting beats tied to words** (as in `reels-talking-head`).
7. `enable_prompt_expansion: false`, no seed.

## Not measured yet

- **Dubbing** (the same video in another language with the same voice): voice the translated speech with {voice} and run `avatar-long-speech` on the same {picture}.
- A speech longer than a minute in one chain — cut to the other angle with a fresh stub instead (`avatar-podcast`).

## 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-talking-avatar/skills/avatar.md)
- Updated from the owner's skill sources of 2026-10-11.

Read: `avatar-long-speech`, `avatar-podcast`, `avatar-walk-talk`, `youtube`, `reels-voice`, `reels-lipsync-turbo`, `reels-talking-head`. Source experiments and demo materials are historical; use the person's own approved media.
