MCP App Store
by KeenEthics
sync. labs icon

sync. labs

By sync. labs

Get New App Alerts

Overview

Use sync. labs to dub videos, replace dialogue, generate lip-synced performances, and animate images.

Tools

ack-studio-draft

ChatGPT
Studio-only acknowledgement after validating, applying and persisting the exact revision. Does not edit settings or start jobs.

ack-studio-view

ChatGPT
Studio-only application receipt. No provider work.

assets_count

ChatGPT
Count assets matching the same filters as assets_get-all (project, creator, search text, type). Returns a number, not the assets.

assets_create

ChatGPT
Register a media URL as a reusable asset (e.g. the url from assets_create-upload-url, or any public URL). Returns an asset id to use as input[].assetId in a generation, or as a voice-clone sample.

assets_create-upload-url

ChatGPT
Upload step 1: get a presigned URL for a local file. PUT the raw bytes to the returned uploadUrl (same Content-Type), then register it with assets_create using the returned url. Use this when your media is not already at a public URL. Max 5GB.

assets_delete

ChatGPT
Delete an asset by id. Use only on an explicit user request, after confirming which asset.

assets_get

ChatGPT
Get one asset by id (details + URL).

assets_get-all

ChatGPT
List assets (video/audio/image) in your organization. Use to find an existing assetId.

assets_get-download-url

ChatGPT
Get a download URL for an accessible asset. Return the URL exactly as given; signed URLs must not be edited.

assets_update

ChatGPT
Rename an asset or change its visibility by id. Change only what the user asked for.

continue-studio-generation

ChatGPT
For an explicit user request, stage an existing generation’s source input or output as a new editable draft in the selected workflow. Replaces the active draft and archives its prior state; output continuation may register existing output as Sync media. Does not generate or synthesize media. First get-studio-view for the exact published viewId, use its expectedRevision and a fresh UUID id; retry an uncertain handoff with the SAME id/body. Do not replace unresolved actions, guess a widget, or overwrite stale edits. This never repeats backend creation or paid work. Check the action receipt through get-studio-view: only applied confirms UI display; pending/blocked/failed do not. Draft selection/settings edits use get-studio-draft and update-studio-draft.

create-dialogue-preview

ChatGPT
Preview timed word changes/removals in the original speaker’s voice. This is a synthesis action. Use a completed transcription, or a prior preview of this source when reopening. Confirm edits first. Never retry an ambiguous creation automatically. This is not arbitrary full-transcript replacement.

create-dialogue-transcription

ChatGPT
Use this to start correcting or removing spoken words in a saved single-speaker video while keeping the original speaker voice. Transcribes timed words for Edit Dialogue; not whole-script replacement, translation, or choosing a different voice. Transcription is unbilled and identical sources reuse their existing job. Does not replace dialogue or generate a video.

create-dialogue-video

ChatGPT
Generate the final video from an approved completed audio preview matching the current edits. Confirm the estimate first. Reuse the same idempotency key and inputs for recovery; poll generate_get-generation for the returned ID.

create-lipsync

ChatGPT
Create a lipsync video from audio + EITHER a video or a still image (an image drives sync-3 image-to-video). For "make this image/video say X" requests, pass script with a voiceId from voices_get-voices; do not call tts_create first. Pass URLs whenever you have them — set audioUrl to any public audio URL, and videoUrl/imageUrl to a hosted media URL. If media was uploaded to Sync first, pass audioAssetId, videoAssetId, or imageAssetId. For files the user uploaded in chat, prefer calling upload-media first and pass the returned assetId here; direct audio/video/image file params are supported only when a host invokes this tool with file params directly. If the user wants to choose a local image/audio file that is not attached yet, use open-upload-widget first. Provide exactly one visual input (video or image) and exactly one driver input (audio or script). Returns a generation id — call generate_get-generation once with wait: true and timeout: 55, then read outputUrl. Copy signed outputUrl values exactly from the tool result; never reconstruct or shorten them. For advanced options (segments, speaker selection), use generate_create-generation.

create-lipsync-from-assets

ChatGPT
Create one lipsync generation from saved Sync image/video and audio asset IDs, or a saved visual asset plus script and voiceId. Uses the same project access, options, and idempotency rules as create-lipsync. For embedded Sync interfaces only.

create-speech-preview

ChatGPT
Synthesize the confirmed script and selected available voice into a durable audio job for the project. This is a potentially paid action. Persist idempotencyKey before calling, reuse that same key and identical input after uncertain admission, and poll get-speech-preview by returned id. Never create again merely because attaching the resulting audio failed.

create-translate-and-dub

ChatGPT
Use this when the user wants to translate and dub a video into another language with matching lip movements. Not for subtitles only or translating a text document. Requires a saved video asset, selected project, model, and persistent idempotency key. This is a paid action: confirm the requested language, configuration and estimated cost with the user before calling. Use generate_estimate-cost with workflow=translate-and-dub when that input is supported, and disclose any excluded external provider charges. Without the combined breakdown, lip-sync pricing is not the full workflow cost. The API manages dubbing and final rendering under the returned generation id. Poll generate_get-generation for that same id until COMPLETED; do not create another job to finish or recover it.

create-translation-preview

ChatGPT
Create one paid translated-audio preview from a saved audio asset. Confirm language and displayed cost first. Persist one UUID idempotencyKey and reuse the same immutable request after an uncertain response. Poll the returned job; never redub because audio attachment failed. Final video generation is a separate, explicitly approved lip-sync operation using the translated audio asset.

estimate-dialogue-video

ChatGPT
Estimate final video cost using the completed dialogue preview and canonical server retiming. Does not generate or reserve credits.

estimate-translation-preview

ChatGPT
Read the server quote for translating saved audio in an accessible project. Does not translate, create a video, modify saved audio, or incur provider charges. If preview.quotedDurationSeconds is shorter than preview.sourceDurationSeconds, explain the duration limit and offer the bounded preview. Before admission, save a new trimmed audio asset and quote that asset; this estimate never trims the original. External provider charges must be disclosed separately.

generate_estimate-cost

ChatGPT
Estimate Sync cost before generating. Supply model, duration in seconds, optional fps and reasoningEnabled. If the schema supports workflow=translate-and-dub, use it for both stages and show the returned breakdown; disclose excluded external provider charges. Otherwise this prices lip-sync only. Does not create jobs or reserve credits.

generate_get-generation

ChatGPT
Get a generation by id. In ChatGPT, pass wait: true and timeout: 55 for generation results instead of making repeated manual polls. When status is COMPLETED, copy the exact structuredContent.outputUrl string verbatim; signed URLs must not be reconstructed, shortened, or edited.

generate_get-generations

ChatGPT
List recent generations for your organization. Use to find generation ids or check status.

get-account-context

ChatGPT
Read the authenticated account and selected organization for account display and personal asset scope, team seats and voice-clone limits. API keys have no signed-in account. This does not grant permissions or change the connected organization.

get-account-usage

ChatGPT
Read the connected organization’s available credits, free allowance, or complete billed usage for the current period. Does not purchase credits, change plans, or start generation.

get-asset-creators

ChatGPT
Read the connected organization's members (display name, email and avatar) for the Sync interface's asset creator filter. Organization scope is resolved from the authenticated connection.

get-dialogue-options

ChatGPT
Check whether the connected API supports timed-word Edit Dialogue. Does not transcribe, synthesize or generate.

get-dialogue-preview

ChatGPT
Read one existing Edit Dialogue audio preview. Partial completion must be disclosed, not described as every edit succeeding.

get-dialogue-transcription

ChatGPT
Read the same transcription job until complete. Requires its original saved video and accessible project.

get-generation-continuation

ChatGPT
Read one accessible generation and its original inputs through the same Studio API. Rechecks project and referenced asset access. Does not create a draft, asset, transcription, preview or generation. Use the shared Studio continuation policy to choose source versus completed output.

get-playback-metadata

ChatGPT
Read timing, frame rate, dimensions and playback proxy metadata for an accessible Sync asset. Requires a connected user; API keys return unsupported. Missing metadata stays unknown. Does not analyze media, read transcripts, or modify assets.

get-speech-options

ChatGPT
Read speech-preview availability and the connected organization’s billing mode/free allowance for a Studio quote. Does not synthesize or change billing.

get-speech-preview

ChatGPT
Read the same durable speech job until SUCCESS or FAILED. Reads do not synthesize. Requires an accessible project in the connected organization; the audio is attached separately by the app.

get-studio-draft

ChatGPT
Read the draftId/projectId published by the open Studio. Use its current revision before changing selections or settings. appliedRevision equal to revision means Studio acknowledged the change; otherwise it is saved but awaiting Studio. Never infer a displayed selection from chat prose.

get-studio-view

ChatGPT
Read the exact viewId published by the mounted Studio, including its current revision and last action receipt. No view list or inferred latest widget. pending means not displayed; blocked needs the UI action/recovery completed; failed was not confirmed; applied confirms that action was displayed. An unavailable view must be reopened.

get-translation-options

ChatGPT
Read the source and target languages supported by the current translation API. Does not create a generation or estimate pricing.

get-translation-preview

ChatGPT
Read the same project-authorized translation job. A recoveryRequired result means provider acceptance is uncertain; do not create another job. Does not start or retry translation.

models_get

ChatGPT
List the current lipsync models and their capabilities from Sync. Use a returned model name as the model in create-lipsync; do not invent model names.

open-studio-project

ChatGPT
Open an existing project in the mounted Studio, optionally selecting its workflow. Can replace the active editor state, archiving the prior draft. Does not create a project or generate media. First get-studio-view for the exact published viewId, use its expectedRevision and a fresh UUID id; retry an uncertain handoff with the SAME id/body. Do not replace unresolved actions, guess a widget, or overwrite stale edits. This never repeats backend creation or paid work. Check the action receipt through get-studio-view: only applied confirms UI display; pending/blocked/failed do not. Draft selection/settings edits use get-studio-draft and update-studio-draft.

open-sync-app

ChatGPT
Use this when the user asks to open Sync, upload media in its interface, or visually configure a talking photo, lipsync video, Translate & Dub, or Edit Dialogue workflow. Browse existing projects and choose media before generating. This interface does not provide subtitle-only output, standalone MP3 voiceovers, trimming, or background-music mixing; explain that limitation rather than opening it to fulfill those tasks. Requesting the interface does not start a generation or spend credits. The result only confirms the request; do not claim the interface rendered unless the user confirms it.

open-upload-widget

ChatGPT
Open the Sync image/audio upload widget so a user can choose a ChatGPT file or upload a supported local image/audio file, then stage it as a durable Sync assetId. Use this by default when the user wants to upload or choose a local image/audio file and has not attached the file to ChatGPT yet. For image-to-speech requests, call this with requestedMediaType: "image" and tell the user to enter the exact requested text in the widget Script field. This widget cannot accept video or MP4 files. Never use, recommend, or describe this tool for local video requests, and never use requestedMediaType: "video". For local video or MP4, ask the user to attach the video to the ChatGPT composer, then call upload-media or create-lipsync with file params.

projects_create

ChatGPT
Create a project to group related generations and assets. Pass the returned id as projectId on generate_create-generation or assets_create so they show up together in Studio.

projects_get

ChatGPT
Get a project by id.

projects_get-all

ChatGPT
Search and paginate your accessible Sync projects. Use the returned id as projectId in create-lipsync to work in the same project as the Sync web app.

projects_get-generations

ChatGPT
Read generation history for an accessible Sync project. Requires a projectId returned by projects_get-all. Pass limit and the last returned generation id as cursor to load another page. These are the same records used by the Sync web app.

refresh-studio-assets

ChatGPT
Refresh an existing project’s media in the mounted Studio after an upload or asset registration succeeds. Does not upload, register, delete or select media. First get-studio-view for the exact published viewId, use its expectedRevision and a fresh UUID id; retry an uncertain handoff with the SAME id/body. Do not replace unresolved actions, guess a widget, or overwrite stale edits. This never repeats backend creation or paid work. Check the action receipt through get-studio-view: only applied confirms UI display; pending/blocked/failed do not. Draft selection/settings edits use get-studio-draft and update-studio-draft.

refresh-studio-project

ChatGPT
Refresh an existing project in the mounted Studio after its backend details change, such as a rename. Does not rename or create the project. First get-studio-view for the exact published viewId, use its expectedRevision and a fresh UUID id; retry an uncertain handoff with the SAME id/body. Do not replace unresolved actions, guess a widget, or overwrite stale edits. This never repeats backend creation or paid work. Check the action receipt through get-studio-view: only applied confirms UI display; pending/blocked/failed do not. Draft selection/settings edits use get-studio-draft and update-studio-draft.

register-studio-view

ChatGPT
Studio-only view ownership/context registration. No provider work.

rename-project

ChatGPT
Change only the name of an accessible Sync project in the connected organization. Does not change visibility, ownership, media, or generations. Requires an explicit user request.

save-studio-draft

ChatGPT
Studio-only replacement of the editable snapshot and current recovery lock, guarded by compare-and-set. Overwrites existing draft selections and settings. No provider work is performed.

show-studio-generation

ChatGPT
Display an already accepted generation or its result in the mounted Studio, opening its project if needed. Replaces the active editor state and archives the prior draft. Does not submit or retry generation. First get-studio-view for the exact published viewId, use its expectedRevision and a fresh UUID id; retry an uncertain handoff with the SAME id/body. Do not replace unresolved actions, guess a widget, or overwrite stale edits. This never repeats backend creation or paid work. Check the action receipt through get-studio-view: only applied confirms UI display; pending/blocked/failed do not. Draft selection/settings edits use get-studio-draft and update-studio-draft.

update-studio-draft

ChatGPT
Update only the open editable Studio draft, using its published draftId/projectId and the expectedRevision returned by get-studio-draft. Replaces the specified media selections, workflow, model options, language or unsent speech settings; changing the visual can clear audio derived from the previous visual. Only make changes requested by the user. This does not generate, translate, clone, upload, or spend credits. On a conflict, read the draft and reconcile; never automatically overwrite newer edits. A successful save is awaiting Studio until appliedRevision equals revision; only then claim the UI applied it.

upload-dialogue-source

ChatGPT
Copy an accessible saved video into Sync storage when transcription rejects its external source URL. Returns a new asset; use its id as videoAssetId for transcription, preview, and final video generation. Does not transcribe or spend generation credits.

upload-media

ChatGPT
Upload a user-provided image, video, or audio file to Sync asset storage and return a durable assetId. Use this when the user uploaded media in chat and a later Sync tool call should reference it by assetId. The file field must be the uploaded ChatGPT file object. For public URLs, use assets_create or pass the URL directly to create-lipsync. This tool only stores the media; it does not create a lipsync generation. After it returns, pass the assetId to create-lipsync as imageAssetId, videoAssetId, or audioAssetId.

voices_clone-voice

ChatGPT
Use this when the user explicitly wants to save a reusable clone of their own voice or a voice they have permission to clone. Confirm the sample and name first; plan limits and provider requirements apply, so do not claim this is free. Pass exactly one Sync-hosted url or accessible assetId, plus provider (elevenlabs) and name. Upload/register local samples first. Video samples have audio extracted by the API. Returns a Sync id: use that id as voiceId in create-lipsync with script, not the provider-specific voiceId field. Do not use for Edit Dialogue previews, selecting an existing voice, or designing a voice from a text description. This creates a persistent voice and is not idempotent. On timeout or uncertain failure, list voices and reconcile; never automatically retry. Surface API plan limits, sample errors and duplicate-name errors without retrying or changing accounts.

voices_get-voices

ChatGPT
List available voices — premade ElevenLabs voices plus voices your org has cloned. For "make this image/video say X", use a returned voice id as voiceId in create-lipsync with script directly. Use tts_create only when the user explicitly asks for standalone audio.

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

Similar Apps