Docs/Workflows/character-swap

Character swap

Replace every person in a video with the people of your photos, keeping the moves, lip sync, set and original audio.

Requiressource.urlone photo per person (media.provided images and/or characterIds), left to right, up to 4
media: ai-videovoice-over: off by defaultmusic: off by defaultcaptions: not usedratio: kept from the source

Build your request

Only the parameters that apply to character-swap are shown. Set values on the left, copy the payload on the right.

View as Markdown (for LLMs)
source.prompt

What the video should be about: the AI writes the script. For music-to-video it is an optional creative brief for the visual storyline. For lyrics-to-video, a description of the song to write (10 to 500 characters). For song-ad, the ad to write: the product or its page, the audience and the outcome. For character-swap, optional instructions on top of the swap (an outfit, ...).

source.url

The source content URL: audio file, video file, YouTube link, Spotify track, article page, or PDF depending on the workflow. http(s) is enforced; bare domains get https:// prepended. For character-swap, the video whose people are replaced (a file URL, or a YouTube, TikTok or Instagram link).

media.type

The visual engine for the video.

media.quality

Convenience profile that picks imageModel + videoModel for you. Explicit media.imageModel / media.videoModel override it.

media.density

How many distinct visuals per minute of video. More visuals = livelier video and higher generation cost.

media.animation

How still images are animated. Ignored for other media types.

media.mediaPreset

Visual style preset slug (e.g. DEFAULT, ANIME, PIXAR, GHIBLI, REALISM, ...). See the preset list in the docs. A preset can override media.imageModel when it requires a specific model. With media.type motion-graphics it is the motion graphics category instead, the create form's category cards: MOTION_INSPIRATION_AUTO (Auto, default: Let the agent choose the best category and reference for your brief), MOTION_INSPIRATION_CLEAN_WORDMARK (Minimal & type: Spacious layouts, expressive typography and focused graphic reveals), MOTION_INSPIRATION_PRODUCT_DEMOS (Product demos: Interface walkthroughs, cursor actions and clear feature demonstrations), MOTION_INSPIRATION_DARK_SAAS (Immersive SaaS: Layered interfaces, dramatic depth and polished feature launches), MOTION_INSPIRATION_WARM_LAUNCH (Mixed media: Photography, cutouts and textures woven into animated graphics), MOTION_INSPIRATION_FOOTAGE_LED (Footage-led: People, places and product footage with supporting motion graphics), MOTION_INSPIRATION_MASCOT (Mascot: A character mascot that acts and talks over clean product UI), MOTION_INSPIRATION_EDITORIAL (Editorial: Paper collage, archive photos, highlighted documents and maps, like a news explainer), MOTION_INSPIRATION_DIAGRAM (Diagram: Step-by-step schematics and labelled parts that build an idea), MOTION_INSPIRATION_ILLUSTRATED (Illustrated: Flat illustrated scenes and characters that turn each idea into a picture), MOTION_INSPIRATION_DATA_STORY (Data story: Charts, counters, rankings and maps that make numbers mean something), MOTION_INSPIRATION_MAPS (Maps: Animated maps: borders, routes and zooms from the world down to a city). Values match case-insensitively, with or without the MOTION_INSPIRATION_ prefix, or by label ("footage-led", "Minimal & type"); no value, DEFAULT or an image preset sent with motion-graphics means Auto, like the create form.

media.provided

Your own media items. Used as the only visuals when media.type = custom or media.useOnlyProvided = true; otherwise used as references/anchors. Items: { url (required), type, title, ... }.

{
  "workflow": "character-swap",
  "source": {
    "url": "https://cdn.revid.ai/uploads/dance-two-people.mp4"
  },
  "media": {
    "provided": [
      {
        "url": "https://cdn.revid.ai/uploads/me.jpg",
        "type": "image"
      },
      {
        "url": "https://cdn.revid.ai/uploads/friend.jpg",
        "type": "image"
      }
    ]
  }
}
Free, no API key needed.

Good to know

  • →Runs the same tool as the Character Swap form on /create. The source keeps its own ratio and soundtrack.
  • →source.url is the video: a file URL, or a YouTube, TikTok or Instagram link. Up to 2 minutes are swapped: options.clipRange ("start:end" in seconds) picks the part.
  • →People go left to right: media.provided images first, then the saved characters of characterIds, in the order given.
  • →media.videoModel picks the model: base (Wan 3.0, default), pro (Seedance 2.5, retried on Wan if refused) or ultra (MiniMax Recast, swaps everyone in one pass, public figures included). Billed per second of the swapped part.
  • →source.prompt adds instructions on top of the swap, for example an outfit.
  • →metadata.duration (seconds of the source) makes the credit estimate exact; the build measures the video either way.