---
name: toon
description: Route a short animated cartoon with the person's recurring character in any style — one 3×3 storyboard picture on GPT Image 2.5 Flare, one 15 s H3 Max Turbo image-to-video request whose voices, foley and music come from the model, the board flash cut off; Seedance 2.5 as the quality route.
---
# Short cartoon episode

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 and story. Styles that held on 13 test episodes: 3D feature, anime, claymation, watercolour picture book, 1930s rubber hose, 16-bit pixel art, comic book halftone, paper cut-out, flat vector, 1970s Soviet hand-drawn, ukiyo-e woodblock, chalkboard, neon synthwave.

> **The tested method uses the model's own sound** — voices, foley and music come from the video. In the test, ElevenLabs voices and effects added afterwards sounded worse and louder than the voices. An effect the model missed can be added with ElevenLabs Sound Effects (`generate_audio` with `model: "elevenlabs-sound-effects-v2"`), mixed under the voices.
> **No splitting by shot** — one storyboard, one generation per episode.

## Entry level — the quick route first

Make everything first on the cheap route: the board on GPT Image 2.5 Flare 2K (`gpt-image-25-flare`), always 16:9 at `2048 × 1152`, video on H3 Max Turbo (`minimax-h3-max-turbo`) 480P. After an episode the person likes: a Seedance 2.5 re-shoot or a video enhancement (`upscale-video-final`) 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"): the FlashBoards gallery (`search_references` with style words such as "claymation stop motion", "2d anime cel shaded", "watercolor picture book", "pixel art"). The pick sets the storyboard style. Show at most three picks, one line each.

## FlashBoards choice

1. **One picture in** — a 3×3 storyboard: nine numbered 16:9 frames on black, the whole story, drawn in one `generate_image` request from the character sheet, in the style → `toon-storyboard`.
2. **One request out** — `generate_video` with `minimax-h3-max-turbo`, the board as `firstFrameUrl` only (no end frame, no `targetAudioUrl`; the model always makes its own soundtrack, which is wanted here), 15 s, 480P, a detailed emotional cartoon prompt with nine shots, their seconds and the lines in quotes; the model makes the voices, foley and music → `toon-turbo`.
3. **Cut the board flash** at the start (`detect_video_cuts` → `trim_video`). The trim's `generationId` is the finished episode. Done.

## Two routes — offer both with their current quotes

| Route | Model | When |
|---|---|---|
| Low cost — the method above | H3 Max Turbo image-to-video, 480P | drafts, many takes, a tight budget |
| Quality | Seedance 2.5 (`seedance-2-5`): the board and the character sheet in `referenceGenerationIds` (@Image1, @Image2), up to 30 s a call, `sound: true`, 720p or 1080p | the final cut, when the look matters |

Seedance 2.5 does this job much better; the H3 method stays the low-cost route. Write the same shot-by-shot prompt in plain text and name the references @Image1, @Image2. Quote both with `estimate_generation_cost` before any paid video and let the person choose.

## What was tried and dropped

| Approach | Why dropped |
|---|---|
| Keyframes per shot, many Turbo generations, ElevenLabs voices and effects | strange sound (effects louder than the voices), several times the price, stiffer acting |
| A 12-frame board first and the character sheet last, native sound | the sheet flashed at the end; in one style a whole shot played over the sheet |

**Before posting:** check the finished episode with `viral-score`, then make the publish pack with `viral-publish` (versions per platform, the checks, the AI label and a caption).

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

Read: `toon-storyboard`, `toon-turbo`, `character-sheet`, `upscale-video-final`. Source experiments and demo materials are historical; use the person's own approved media.
