---
name: musicvideo-replace
description: Replace every face in the music video's frames — the lead becomes the person's character (with their look sheet, or the film's costume with the face board), every other person gets an invented face — with GPT Image 2.5 edit, one person per pass, every face checked with crops.
---
# No actor's face on screen

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 `musicvideo` for the shared rules. Picture 1 is always the person's own {face board} or {look sheet}. Write every prompt fresh; [brackets] are example values.

## Steps

0. **Cast first.** {character} is the lead. A second main role in the frame: ask the person — another of their characters, an invented face, or removed. Never a demo character. An invented face that comes back in several frames: make it once as a sheet (`character-sheet` from one generated face) and give it as that role's picture in every frame (step 3), or it becomes a different person each time.
1. **A new costume or prop?** Make a {look sheet} first: `generate_image` with `gpt-image-25-flare`, `quality: "low"`, `width: 2048, height: 1152`, picture 1 = the character sheet, "take their face and hair, never their clothes"; face close-up + full body + the prop.
2. **Replace**: `generate_image` with `gpt-image-25-flare`, `quality: "low"`, `width: 1920, height: 1088`; picture 1 = {look sheet} (or {face board} when the film's costume stays), picture 2 = the frame (its `previewHandle` from `search_movie_frames`). Prompt structure:
   ```
   Picture 1 is only the look of {character}: their face, hair and their whole [outfit name, e.g. "welder's outfit"]. Picture 2 is a frame from a film. Shoot picture 2 again exactly the same:
   the same camera, framing, set, light and atmosphere; but the main person of the frame is {character} from picture 1, in exactly their outfit from picture 1, in the
   same place, pose and movement. Every other person in the frame keeps their place, pose, clothes and hair colour but gets a completely different, invented
   face that belongs to nobody from any film or real life. Change nothing else.
   ```
   With {face board} only: "only the look of {character}: their face and hair", and keep the clothes of picture 2. Crowd-only frames: the same without picture 1. A prop in hand: "{character} holds the [prop] from picture 1 [how and where]…". Never add words about the person's looks.
3. **A second of the person's characters** in the same frame: one person per pass — the second pass takes the replaced frame as picture 2 and that character's sheet as picture 1; check both faces.
4. **Check every face side by side**: `crop_image` the same face from the original frame and from the replaced one, `arrange_images` the two crops (`columns: 2`, original left) and `describe_media` the pair: "Is the person on the right the same person as on the left? Answer yes or no, then why." For {character}, put a crop of their sheet on the left instead: "Is it the same person?" Ask the same pair "How many people are in each picture?" to catch a person the model added. Do not ask "Is this a well-known actor?": on generated faces describe_media named a random celebrity almost every time (2026-10-14). GPT Image keeps famous faces: they can survive both the first prompt and a "change every other face" pass.
5. **The original face survived** ("yes" on the pair) **or a person was added**: run the pass again on the replaced frame, or pick another frame.
6. **Remove an unwanted lead**: a pass on the replaced frame — "keep {character} exactly as they are… remove the [person next to them] completely, show the [place] where they were".
7. A refusal by the content checker (hugs, a romantic pose): rerun on `gpt-image-25-sunburst`.

## Never

- Describe the frame or the person's looks in the prompt (blind prompts only).
- Trust one pass for "everyone else" — check crops of every visible face.
- Use a demo character's sheet or a demo frame 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/formats-and-exhibition/ai-music-video/skills/musicvideo-replace.md)
- Updated from the owner's skill sources of 2026-10-11.

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