---
name: character-replace
description: Put the person's AI character into a film frame in four modes — the whole character, the head only, the face only, the face keeping the frame's paint or make-up — with GPT Image 2.5 edit at quality low, blind role-only prompts and a look sentence that keeps the gaze off the lens.
---
# Replace a character in a frame

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 `character` for the shared rules. Picture 1 is always the person's own {character sheet}; picture 2 is the {frame} at full size. Write every prompt fresh for the frame; the templates give the tested structure.

## Where the frame comes from

- The person's own frame: an upload receipt or one of their results.
- The film corpus: `search_movie_frames` with `query` = what happens in the scene ("a pirate captain at a ship's wheel, low angle"); each frame names the film, scene and timecode. `get_movie_frame_preview` shows it; its `previewHandle` goes into `referencePreviewHandles`.
- A frame of one of their own videos: `extract_video_frame`.

## Settings

`generate_image` with `gpt-image-25-flare` or `gpt-image-25-sunburst` · `quality: "low"` set explicitly · one image · the size = the frame's aspect at width 1920 (`1920 × 1088` for 16:9, `1920 × 816` for 2.35:1) · picture 1 = the sheet (`referenceGenerationIds`), picture 2 = the frame (its handle or receipt). A refusal is not charged.

## Blind rule

Prompts name picture roles only. Never describe {character}'s face, hair or clothes, and never describe the frame — not the costume pieces, not the paint's colour. The one exception: the expression of picture 2 may be named — where the eyes look, the brows, the mouth.

## The prompt — one opening, one mode sentence, one look sentence

```
Picture 2 is a frame from a film. Shoot it again exactly the same — the same camera, framing, set, light, pose, head turn, gaze and expression — but {MODE}. {LOOK} Change nothing else.
```

| Mode | Changes | Stays | {MODE} |
|---|---|---|---|
| 1 · Whole character | face, hair, clothes | camera, set, light, pose, what the hands hold | the person in it is {character} from picture 1: their face, hair and clothes exactly as in picture 1. Nothing of the clothes, headwear or gear of the person in picture 2 stays |
| 2 · Head only | face and hair | the costume, body, hands, props | the head of the person is {character}'s head from picture 1: their face and hair, bare-headed, exactly as in picture 1. Nothing of the actor's head stays: not the face, hair, facial hair, make-up or anything worn on the head. Everything from the neck down stays exactly as in picture 2: the body, hands, clothes, jewellery and everything the person holds |
| 3 · Face only | the face, clean | hair, hat, costume — the whole silhouette | the face of the person is {character}'s face from picture 1: the features, eyes, brows, nose, mouth and skin, clean and bare exactly as in picture 1, with no facial hair and no paint or make-up. Only the face changes. The hair, everything worn on the head, the clothes and everything the person holds stay exactly as in picture 2 |
| 4 · Face, keep the surface | the features | paint, make-up, facial hair, dirt — and everything else | the face of the person is {character}'s face from picture 1: the features, the shape of the face, the eyes, brows, nose and mouth, so {character} is clearly recognisable. Everything on the surface of the face stays exactly as in picture 2: every paint, make-up, facial hair, dirt and mark, exactly where it covers the skin. The hair, the clothes and everything the person holds stay exactly as in picture 2 |

{LOOK} — always, or {character} stares into the lens like on the sheet:
```
{character}'s eyes look exactly where the eyes in picture 2 look and the head keeps the tilt of picture 2. The expression is the one in picture 2: {the expression of picture 2 in words — where the eyes look, the brows, the mouth}. Take the look and the expression from picture 2, never from picture 1.
```

What the tests showed: mode 4 kept the war paint on the same diagonal with the character's face; mode 2 came back clean (bare-headed, costume kept) but needed the expression named to lose the sheet's frown; mode 1 on a small figure from behind kept none of the actor's gear. Without {LOOK} every mode stared into the lens; with it the stare went, but the side of the gaze is a coin toss.

## Steps

1. **No sheet yet** → `character-sheet` (with a back panel if the figure is seen from behind).
2. **Pick the mode** (ask if unclear): the character as themselves (1), in the film's costume (2), only a new face in the film's look (3), the film's paint, make-up or beard kept (4).
3. **Write the prompt** from the opening + {MODE} + {LOOK} and run 2–3 takes when the look matters.
4. **Refused** (content policy) → resubmit as is, then reword. Removing a look passes moderation more easily than keeping it: a famous look kept in mode 4 may never pass — pick another frame.
5. **Check with crops**: `crop_image` the head (about 350 px), then `describe_media` with a question — is the face {character}'s and not the actor's? Is anything of the actor's costume left in mode 1 (hat, belts, straps, boots)? Are the paint edges clean in modes 3–4? Do the eyes look where picture 2's do?
6. **Next**: animate it as a start or end frame (`animate`); a whole music video with every face replaced → `musicvideo-replace`.

## Never

- Describe the character's looks or the frame's content (blind prompts only).
- Trust one run for the gaze or a famous face — check crops.
- Use a demo character's sheet, frame or prompt for a person.

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

Read: `character`, `character-sheet`, `animate`, `musicvideo-replace`. Source experiments and demo materials are historical; use the person's own approved media.
