Skip to main content
Glama

Lip Sync Video

lip_sync_video

Lip-sync audio onto one of your videos. For action="create" without engine, session_id, or face_id, the default is Sync Labs Sync 3: video_url + sound_file (base64 data URI) processes the whole clip without a face-identification step or manual timing. engine="best" explicitly selects Sync 3. Kling provides manual timing control with engine="kling", or with session_id/face_id when engine is omitted: (1) action="identify-face" with video_url (MP4/MOV, 2-60s, <=100MB, 720p/1080p); (2) action="create" with session_id + face_id + audio + timing IN MILLISECONDS (sound_start_time, sound_end_time, sound_insert_time) + optional speech_volume/original_audio_volume (0-100); (3) action="status" with the task_id to poll — returns a branded SwitchApp view_url when done. Charges credits on create; failed jobs are refunded. PRICE: One price per lip sync job, charged when the job is created; returned if it fails. Checking status is free. Pass quote_only: true first to get the exact price; nothing is made and nothing is charged. To run it (not for a quote) send action.

Input Schema

NameRequiredDescriptionDefault
actionNoWhich step to run.
engineNocreate: optional. "best" selects Sync Labs Sync 3 for whole-clip lip sync using video_url + sound_file. When engine is omitted, Sync 3 is used unless session_id or face_id is supplied. "kling" selects the timeline flow with manual audio placement in milliseconds.
face_idNocreate: a face_id from identify-face (one face supported).
task_idNostatus: the task_id from create.
audio_idNocreate: alternative to sound_file — an existing audio id.
video_urlNoidentify-face: the source video (MP4/MOV, 2-60s, <=100MB, 720p/1080p). Use a SwitchApp/public URL.
quote_onlyNotrue answers the price only: nothing is made and nothing is charged.
session_idNocreate: from identify-face.
sound_fileNocreate: base64 data URI of the audio (e.g. data:audio/mpeg;base64,...).
speech_volumeNocreate: how loud the new speech is, as a percent 0-100 (default 100).
sound_end_timeNocreate: audio end, in MILLISECONDS.
keep_backgroundNocreate, Sync 3 engine: keep the clip's own music and room under the new speech (default true); false gives the new speech alone.
sound_start_timeNocreate: audio start, in MILLISECONDS.
sound_insert_timeNocreate: where in the video to place the audio, in MILLISECONDS.
original_audio_volumeNocreate: how loud the clip's own sound stays, as a percent 0-100 (default 100, the clip keeps its sound).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / quote_only
      Added value: +{
      +  "description": "true answers the price only: nothing is made and nothing is charged.",
      +  "type": "boolean"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "action"
      -]
  2. Changed2 schema fields changed
    • changedInput schema / properties / engine / description
      Previous value: -"create: optional. \"best\" selects Sync Labs Sync 3 for whole-clip lip sync using video_url + sound_file. When engine is omitted, this lane is used unless session_id or face_id is supplied. \"kling\" selects the timeline flow with manual audio placement in milliseconds."New value: +"create: optional. \"best\" selects Sync Labs Sync 3 for whole-clip lip sync using video_url + sound_file. When engine is omitted, Sync 3 is used unless session_id or face_id is supplied. \"kling\" selects the timeline flow with manual audio placement in milliseconds."
    • changedInput schema / properties / keep_background / description
      Previous value: -"create, Sync 3 lane: keep the clip's own music and room under the new speech (default true); false gives the new speech alone."New value: +"create, Sync 3 engine: keep the clip's own music and room under the new speech (default true); false gives the new speech alone."
  3. Changed1 schema field changed
    • changedInput schema / properties / engine / description
      Previous value: -"create: OPTIONAL. Leave it out — the default is \"best\", Sync Labs Sync 3, whole-clip and highest quality, needing only video_url + sound_file. Pass \"kling\" only for the timeline flow where you place the audio yourself in milliseconds."New value: +"create: optional. \"best\" selects Sync Labs Sync 3 for whole-clip lip sync using video_url + sound_file. When engine is omitted, this lane is used unless session_id or face_id is supplied. \"kling\" selects the timeline flow with manual audio placement in milliseconds."
  4. Changed2 schema fields changed
    • addedInput schema / properties / keep_background
      Added value: +{
      +  "description": "create, Sync 3 lane: keep the clip's own music and room under the new speech (default true); false gives the new speech alone.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / original_audio_volume / description
      Previous value: -"create: how loud the clip's own sound stays, as a percent 0-100 (default 0)."New value: +"create: how loud the clip's own sound stays, as a percent 0-100 (default 100, the clip keeps its sound)."
  5. Changed1 schema field changed
    • changedInput schema / properties / engine / description
      Previous value: -"create: \"best\" = highest-quality whole-clip sync (needs only video_url + sound_file). Default \"kling\" (timeline flow)."New value: +"create: OPTIONAL. Leave it out — the default is \"best\", Sync Labs Sync 3, whole-clip and highest quality, needing only video_url + sound_file. Pass \"kling\" only for the timeline flow where you place the audio yourself in milliseconds."
  6. Changed4 schema fields changed
    • changedInput schema / properties / original_audio_volume / description
      Previous value: -"create: 0-100 (default 0)."New value: +"create: how loud the clip's own sound stays, as a percent 0-100 (default 0)."
    • changedInput schema / properties / original_audio_volume / type
      Previous value: -"integer"New value: +"number"
    • changedInput schema / properties / speech_volume / description
      Previous value: -"create: 0-100 (default 100)."New value: +"create: how loud the new speech is, as a percent 0-100 (default 100)."
    • changedInput schema / properties / speech_volume / type
      Previous value: -"integer"New value: +"number"
  7. Changed1 schema field changed
    • addedInput schema / properties / engine
      Added value: +{
      +  "description": "create: \"best\" = highest-quality whole-clip sync (needs only video_url + sound_file). Default \"kling\" (timeline flow).",
      +  "enum": [
      +    "best",
      +    "kling"
      +  ],
      +  "type": "string"
      +}
  8. First observed

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already flagging a non-read-only, open-world mutation, the description adds substantial cost and side-effect context: credits charged on create, refunded on failure, status polling free, quote_only makes nothing and charges nothing. It also discloses that status returns a branded view_url when done — none of which is inferable from the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the numbered Kling sequence is well structured, but the pricing information is stated twice ("Charges credits on create; failed jobs are refunded" followed by the near-identical PRICE sentence) and the trailing fragment "To run it (not for a quote) send action." is garbled and adds nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter, no-output-schema, multi-step pipeline tool this covers the essentials: which parameters gate which flow, pricing behavior, and what status returns. It still leaves minor gaps — what identify-face hands back (the session_id/face_id mapping) and how long a session stays valid before create must be called.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining cross-parameter semantics the schema cannot — the parameter combinations that select each flow, that timing values are in MILLISECONDS, that sound_file is a base64 data URI, and that volume fields are 0-100 percent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line gives a specific verb+resource ("Lip-sync audio onto one of your videos") and the body enumerates the three action modes and two engines, so an agent can tell what it does. It does not, however, differentiate itself from the sibling `sync3_lip_sync_video` tool even though it explicitly offers Sync 3 as an engine, leaving real ambiguity about which entry point to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Strong internal routing guidance: it states the default (Sync 3 when no engine/session_id/face_id), when to pick engine="best" vs "kling", the three-step Kling sequence, and to call quote_only:true before running. Missing only external routing — nothing says when to prefer this over `sync3_lip_sync_video`, `talking_avatar_video`, or `dub_audio`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources