Update to sync. labs
Snapshot Nov 6, 2026 · 18:14 UTC · version 2.1.1
Collection source: downloaded plugin package.
Instructions updated for edit-dialogue
Full description — Now says: labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or...
Observed in instructions or declared skills. Runtime behavior has not been tested.
Up to 3 plugins free · no card required.
All fields and original values.
Full description
Nov 3, 2026 · 18:14 UTC
labs, keeping the speaker's own voice and re-syncing the lips. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, or cutting a filler word or phrase without reshooting. Not for replacing a whole scr...
Nov 6, 2026 · 18:14 UTC
labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, a typo in a spoken line, or cutting a filler word or phra...
Skill instructions
Nov 3, 2026 · 18:14 UTC
labs, keeping the speaker's own voice and re-syncing the lips. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, or cutting a filler word or phrase without reshooting. Not for replacing a whole scr...
Nov 6, 2026 · 18:14 UTC
labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, a typo in a spoken line, or cutting a filler word or phra...
Supporting files
Nov 3, 2026 · 18:14 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":203}]
Nov 6, 2026 · 18:14 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":206},{"relative_path":"references/connect.md","size_in_bytes":3346},{"relative_path":"references/media-input.md","size_in_bytes":3853}]
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -1,48 +1,53 @@ --- name: edit-dialogue -description: Change or remove a few spoken words in a single-speaker video with sync. labs, keeping the speaker's own voice and re-syncing the lips. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, or cutting a filler word or phrase without reshooting. Not for replacing a whole script (lipsync-video with a script), translation (translate-and-dub) or switching to a different voice. +description: Change or remove a few spoken words in a single-speaker video with sync. labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, a typo in a spoken line, or cutting a filler word or phrase. Not for replacing a whole script (lipsync with a new script), translation (translate-and-dub), or switching to a different voice. +license: MIT +compatibility: Needs the sync. MCP server. See references/connect.md. --- # Fix spoken words Delivers one MP4 where only the agreed words change. Everything else keeps the original picture and voice. +If no sync. tools are available, follow [references/connect.md](references/connect.md) first. The REST version of this workflow is in early access and needs features enabled per organization; see https://sync.so/docs/developer-guides/dialogue-editing. + ## Inputs -- **Video**: a single-speaker video, as a file in this conversation, a public URL or a Sync video asset ID. -- **The fix**: which words to change or remove, and what to say instead. Never guess the replacement words. +- **Video:** one person speaking, up to 10 minutes, as a local file, public URL or sync. video asset ID. +- **The fix:** which words to change or remove, and what to say instead. Never guess the replacement words. ## Tools | Step | Tool | | --- | --- | -| Check support | `get-dialogue-options` | +| Check support | `dialogue_get-options` | | Create the project | `projects_create` | -| Save the video | `upload-media`, `assets_create`, `upload-dialogue-source` | -| Transcribe | `create-dialogue-transcription`, `get-dialogue-transcription` | -| Preview the new audio | `create-dialogue-preview`, `get-dialogue-preview` | -| Quote | `estimate-dialogue-video` | -| Create | `create-dialogue-video` | -| Wait for the result | `generate_get-generation` | +| Save the video | `assets_upload`, `assets_create-upload-url` + `assets_create` (local files), or `assets_create` (URLs) | +| Transcribe | `dialogue-transcriptions_create`, `dialogue-transcriptions_get` | +| Preview the new audio | `dialogue-previews_create`, `dialogue-previews_get` | +| Quote | `dialogue-videos_estimate` | +| Create | `dialogue-videos_create` | +| Wait | `generations_get` | ## Steps -1. **Support.** Call `get-dialogue-options`. If Edit Dialogue isn't available, say so and stop. Note whether it advertises `keyedPreview`. -2. **Project.** Call `projects_create` with a new random UUID as `id`, a short `name` and `defaultWorkflow: "edit_dialogue"`. Pass the returned `projectId` with `projectIntent: "explicit"` in every later call. -3. **Save the video.** For a file, use `upload-media` with `mediaType: "video"`. For a URL, use `assets_create` with `type: "VIDEO"` and the project. -4. **Transcribe.** Call `create-dialogue-transcription`, then `get-dialogue-transcription` with the returned `id` until it completes. If the API rejects the video's storage, call `upload-dialogue-source` and use its new asset ID for every later step. +1. **Support.** Call `dialogue_get-options`. If Edit Dialogue isn't available for this account, say so and stop. Note whether it reports `keyedPreview`. +2. **Project.** Call `projects_create` with a new random UUID as `id`, a short `name` and `defaultWorkflow: "edit_dialogue"`. Save the returned `id` as `projectId`. Pass it wherever a tool asks for `projectId`, and add `projectIntent: "explicit"` only on tools that take that field. +3. **Save the video** into that project. Follow [references/media-input.md](references/media-input.md). +4. **Transcribe.** Call `dialogue-transcriptions_create` with the `projectId` and `videoAssetId`, then `dialogue-transcriptions_get` with the returned `id` until it completes. If the result includes a new `videoAssetId`, the video was copied into sync. storage: use that ID from here on. If more than one speaker is detected, explain that this workflow handles one speaker, and stop. 5. **Agree the edits.** Show the transcript lines around the fix. Turn the request into edits that use the transcript's word IDs: - - `{ "kind": "change", "wordId": "w35", "replacement": "Mia" }`, adding `"pronunciation": "Meeah"` only for a name the voice might say wrong; - - `{ "kind": "remove", "wordIds": ["w12", "w13"] }`. + - `{"kind": "change", "wordId": "w35", "replacement": "Mia"}`, adding `"pronunciation": "meeah"` only for a name the voice might say wrong. Write respellings as plain words, without hyphens or capitals, which the voice may spell out. + - `{"kind": "remove", "wordIds": ["w12", "w13"]}` for consecutive words. - Confirm the edits, and confirm the user has permission to use this speaker's voice. -6. **Preview.** Call `create-dialogue-preview` with the edits and `transcriptionId`, plus a new `idempotencyKey` if `keyedPreview` is advertised. Poll `get-dialogue-preview` until it completes. If some edits failed, say which ones; don't present it as fully successful. -7. **Quote.** Call `estimate-dialogue-video` with the completed preview's ID as `dialogueEditId` and `model: "sync-3"`. Show the estimate and wait for approval of the preview and the cost. -8. **Create.** Call `create-dialogue-video` once with the same `dialogueEditId`, `model`, project and a new `idempotencyKey`. On a lost response, retry once with the same key and inputs. -9. **Wait and deliver.** Poll `generate_get-generation` with the returned `id` and `wait: true`. Give the exact `outputUrl`, unchanged. + Confirm the edits with the user. +6. **Preview.** The preview clones the speaker's voice and can incur synthesis charges, so mention that when you confirm the edits. Call `dialogue-previews_create` with the edits and the `transcriptionJobId`, plus a new `idempotencyKey` saved before the call when `keyedPreview` is reported. If that call's outcome is unclear, retry only the identical request with the same key. Poll `dialogue-previews_get` until it completes, and share the preview audio. If some edits failed (a partial completion), for example because a replacement is too long for the gap it fills, say which, suggest shorter wording, confirm the revised edits, and make a new preview with `previousPreviewId`. +7. **Quote.** Call `dialogue-videos_estimate` with the completed preview's ID as `dialogueEditId` and `model: "sync-3"`. Show the estimate and wait for approval of both the preview and the cost. +8. **Create.** Call `dialogue-videos_create` once with the same `dialogueEditId`, the model, the project and a new `idempotencyKey`. If the response is lost, retry once with the same key and inputs. +9. **Wait and deliver.** Poll `generations_get` with the returned `id` and `wait: true` until it's final. Give the exact `outputMediaUrl` unchanged. ## Limits -- One speaker only. If several people talk, say so before transcribing. -- Targeted words only. If the user wants a whole new script, explain that this keeps the original recording, and offer lipsync-video with a script and a chosen voice instead. -- Never split a new script into many word edits to get around this limit. +- One speaker per video, up to 10 minutes, and at most 100 edits per preview. +- Targeted words only. For a whole new script, explain that this workflow keeps the original recording, and offer the lipsync skill with a script and a chosen voice instead. Never split a new script into many word edits to get around this. +- The speaker's voice is cloned for the new words. Assume the user has the rights to their own media, and don't ask about consent on routine requests. Decline only when the request is to make a real, identifiable person, such as a politician or celebrity, appear to say something they didn't say, in order to deceive. +- To make many variants of one recording, such as one per recipient's name, use one preview per variant, then render them together with the batch-lipsync skill.
Full technical diff · 3 changed fields
changed /description
"Change or remove a few spoken words in a single-speaker video with sync. labs, keeping the speaker's own voice and re-syncing the lips. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, or cutting a filler word or phrase without reshooting. Not for replacing a whole script (lipsync-video with a script), translation (translate-and-dub) or switching to a different voice."
"Change or remove a few spoken words in a single-speaker video with sync. labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, a typo in a spoken line, or cutting a filler word or phrase. Not for replacing a whole script (lipsync with a new script), translation (translate-and-dub), or switching to a different voice."
changed /included_files
[
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 203
}
][
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 206
},
{
"relative_path": "references/connect.md",
"size_in_bytes": 3346
},
{
"relative_path": "references/media-input.md",
"size_in_bytes": 3853
}
]changed /skill_md_contents
"---\nname: edit-dialogue\ndescription: Change or remove a few spoken words in a single-speaker video with sync. labs, keeping the speaker's own voice and re-syncing the lips. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, or cutting a filler word or phrase without reshooting. Not for replacing a whole script (lipsync-video with a script), translation (translate-and-dub) or switching to a different voice.\n---\n\n# Fix spoken words\n\nDelivers one MP4 where only the agreed words change. Everything else keeps the original picture and voice.\n\n## Inputs\n\n- **Video**: a single-speaker video, as a file in this conversation, a public URL or a Sync video asset ID.\n- **The fix**: which words to change or remove, and what to say instead. Never guess the replacement words.\n\n## Tools\n\n| Step | Tool |\n| --- | --- |\n| Check support | `get-dialogue-options` |\n| Create the project | `projects_create` |\n| Save the video | `upload-media`, `assets_create`, `upload-dialogue-source` |\n| Transcribe | `create-dialogue-transcription`, `get-dialogue-transcription` |\n| Preview the new audio | `create-dialogue-preview`, `get-dialogue-preview` |\n| Quote | `estimate-dialogue-video` |\n| Create | `create-dialogue-video` |\n| Wait for the result | `generate_get-generation` |\n\n## Steps\n\n1. **Support.** Call `get-dialogue-options`. If Edit Dialogue isn't available, say so and stop. Note whether it advertises `keyedPreview`.\n2. **Project.** Call `projects_create` with a new random UUID as `id`, a short `name` and `defaultWorkflow: \"edit_dialogue\"`. Pass the returned `projectId` with `projectIntent: \"explicit\"` in every later call.\n3. **Save the video.** For a file, use `upload-media` with `mediaType: \"video\"`. For a URL, use `assets_create` with `type: \"VIDEO\"` and the project.\n4. **Transcribe.** Call `create-dialogue-transcription`, then `get-dialogue-transcription` with the returned `id` until it completes. If the API rejects the video's storage, call `upload-dialogue-source` and use its new asset ID for every later step.\n5. **Agree the edits.** Show the transcript lines around the fix. Turn the request into edits that use the transcript's word IDs:\n - `{ \"kind\": \"change\", \"wordId\": \"w35\", \"replacement\": \"Mia\" }`, adding `\"pronunciation\": \"Meeah\"` only for a name the voice might say wrong;\n - `{ \"kind\": \"remove\", \"wordIds\": [\"w12\", \"w13\"] }`.\n\n Confirm the edits, and confirm the user has permission to use this speaker's voice.\n6. **Preview.** Call `create-dialogue-preview` with the edits and `transcriptionId`, plus a new `idempotencyKey` if `keyedPreview` is advertised. Poll `get-dialogue-preview` until it completes. If some edits failed, say which ones; don't present it as fully successful.\n7. **Quote.** Call `estimate-dialogue-video` with the completed preview's ID as `dialogueEditId` and `model: \"sync-3\"`. Show the estimate and wait for approval of the preview and the cost.\n8. **Create.** Call `create-dialogue-video` once with the same `dialogueEditId`, `model`, project and a new `idempotencyKey`. On a lost response, retry once with the same key and inputs.\n9. **Wait and deliver.** Poll `generate_get-generation` with the returned `id` and `wait: true`. Give the exact `outputUrl`, unchanged.\n\n## Limits\n\n- One speaker only. If several people talk, say so before transcribing.\n- Targeted words only. If the user wants a whole new script, explain that this keeps the original recording, and offer lipsync-video with a script and a chosen voice instead.\n- Never split a new script into many word edits to get around this limit.\n""---\nname: edit-dialogue\ndescription: Change or remove a few spoken words in a single-speaker video with sync. labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, a typo in a spoken line, or cutting a filler word or phrase. Not for replacing a whole script (lipsync with a new script), translation (translate-and-dub), or switching to a different voice.\nlicense: MIT\ncompatibility: Needs the sync. MCP server. See references/connect.md.\n---\n\n# Fix spoken words\n\nDelivers one MP4 where only the agreed words change. Everything else keeps the original picture and voice.\n\nIf no sync. tools are available, follow [references/connect.md](references/connect.md) first. The REST version of this workflow is in early access and needs features enabled per organization; see https://sync.so/docs/developer-guides/dialogue-editing.\n\n## Inputs\n\n- **Video:** one person speaking, up to 10 minutes, as a local file, public URL or sync. video asset ID.\n- **The fix:** which words to change or remove, and what to say instead. Never guess the replacement words.\n\n## Tools\n\n| Step | Tool |\n| --- | --- |\n| Check support | `dialogue_get-options` |\n| Create the project | `projects_create` |\n| Save the video | `assets_upload`, `assets_create-upload-url` + `assets_create` (local files), or `assets_create` (URLs) |\n| Transcribe | `dialogue-transcriptions_create`, `dialogue-transcriptions_get` |\n| Preview the new audio | `dialogue-previews_create`, `dialogue-previews_get` |\n| Quote | `dialogue-videos_estimate` |\n| Create | `dialogue-videos_create` |\n| Wait | `generations_get` |\n\n## Steps\n\n1. **Support.** Call `dialogue_get-options`. If Edit Dialogue isn't available for this account, say so and stop. Note whether it reports `keyedPreview`.\n2. **Project.** Call `projects_create` with a new random UUID as `id`, a short `name` and `defaultWorkflow: \"edit_dialogue\"`. Save the returned `id` as `projectId`. Pass it wherever a tool asks for `projectId`, and add `projectIntent: \"explicit\"` only on tools that take that field.\n3. **Save the video** into that project. Follow [references/media-input.md](references/media-input.md).\n4. **Transcribe.** Call `dialogue-transcriptions_create` with the `projectId` and `videoAssetId`, then `dialogue-transcriptions_get` with the returned `id` until it completes. If the result includes a new `videoAssetId`, the video was copied into sync. storage: use that ID from here on. If more than one speaker is detected, explain that this workflow handles one speaker, and stop.\n5. **Agree the edits.** Show the transcript lines around the fix. Turn the request into edits that use the transcript's word IDs:\n - `{\"kind\": \"change\", \"wordId\": \"w35\", \"replacement\": \"Mia\"}`, adding `\"pronunciation\": \"meeah\"` only for a name the voice might say wrong. Write respellings as plain words, without hyphens or capitals, which the voice may spell out.\n - `{\"kind\": \"remove\", \"wordIds\": [\"w12\", \"w13\"]}` for consecutive words.\n\n Confirm the edits with the user.\n6. **Preview.** The preview clones the speaker's voice and can incur synthesis charges, so mention that when you confirm the edits. Call `dialogue-previews_create` with the edits and the `transcriptionJobId`, plus a new `idempotencyKey` saved before the call when `keyedPreview` is reported. If that call's outcome is unclear, retry only the identical request with the same key. Poll `dialogue-previews_get` until it completes, and share the preview audio. If some edits failed (a partial completion), for example because a replacement is too long for the gap it fills, say which, suggest shorter wording, confirm the revised edits, and make a new preview with `previousPreviewId`.\n7. **Quote.** Call `dialogue-videos_estimate` with the completed preview's ID as `dialogueEditId` and `model: \"sync-3\"`. Show the estimate and wait for approval of both the preview and the cost.\n8. **Create.** Call `dialogue-videos_create` once with the same `dialogueEditId`, the model, the project and a new `idempotencyKey`. If the response is lost, retry once with the same key and inputs.\n9. **Wait and deliver.** Poll `generations_get` with the returned `id` and `wait: true` until it's final. Give the exact `outputMediaUrl` unchanged.\n\n## Limits\n\n- One speaker per video, up to 10 minutes, and at most 100 edits per preview.\n- Targeted words only. For a whole new script, explain that this workflow keeps the original recording, and offer the lipsync skill with a script and a chosen voice instead. Never split a new script into many word edits to get around this.\n- The speaker's voice is cloned for the new words. Assume the user has the rights to their own media, and don't ask about consent on routine requests. Decline only when the request is to make a real, identifiable person, such as a politician or celebrity, appear to say something they didn't say, in order to deceive.\n- To make many variants of one recording, such as one per recipient's name, use one preview per variant, then render them together with the batch-lipsync skill.\n"Full snapshot data
{
"description": "Change or remove a few spoken words in a single-speaker video with sync. labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, a typo in a spoken line, or cutting a filler word or phrase. Not for replacing a whole script (lipsync with a new script), translation (translate-and-dub), or switching to a different voice.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 206
},
{
"relative_path": "references/connect.md",
"size_in_bytes": 3346
},
{
"relative_path": "references/media-input.md",
"size_in_bytes": 3853
}
],
"name": "edit-dialogue",
"skill_md_contents": "---\nname: edit-dialogue\ndescription: Change or remove a few spoken words in a single-speaker video with sync. labs (sync.so), keeping the speaker's own voice and re-syncing the lips, with no reshoot. Use for fixing a misspoken word, a wrong name, number, price or date, a mispronunciation, a typo in a spoken line, or cutting a filler word or phrase. Not for replacing a whole script (lipsync with a new script), translation (translate-and-dub), or switching to a different voice.\nlicense: MIT\ncompatibility: Needs the sync. MCP server. See references/connect.md.\n---\n\n# Fix spoken words\n\nDelivers one MP4 where only the agreed words change. Everything else keeps the original picture and voice.\n\nIf no sync. tools are available, follow [references/connect.md](references/connect.md) first. The REST version of this workflow is in early access and needs features enabled per organization; see https://sync.so/docs/developer-guides/dialogue-editing.\n\n## Inputs\n\n- **Video:** one person speaking, up to 10 minutes, as a local file, public URL or sync. video asset ID.\n- **The fix:** which words to change or remove, and what to say instead. Never guess the replacement words.\n\n## Tools\n\n| Step | Tool |\n| --- | --- |\n| Check support | `dialogue_get-options` |\n| Create the project | `projects_create` |\n| Save the video | `assets_upload`, `assets_create-upload-url` + `assets_create` (local files), or `assets_create` (URLs) |\n| Transcribe | `dialogue-transcriptions_create`, `dialogue-transcriptions_get` |\n| Preview the new audio | `dialogue-previews_create`, `dialogue-previews_get` |\n| Quote | `dialogue-videos_estimate` |\n| Create | `dialogue-videos_create` |\n| Wait | `generations_get` |\n\n## Steps\n\n1. **Support.** Call `dialogue_get-options`. If Edit Dialogue isn't available for this account, say so and stop. Note whether it reports `keyedPreview`.\n2. **Project.** Call `projects_create` with a new random UUID as `id`, a short `name` and `defaultWorkflow: \"edit_dialogue\"`. Save the returned `id` as `projectId`. Pass it wherever a tool asks for `projectId`, and add `projectIntent: \"explicit\"` only on tools that take that field.\n3. **Save the video** into that project. Follow [references/media-input.md](references/media-input.md).\n4. **Transcribe.** Call `dialogue-transcriptions_create` with the `projectId` and `videoAssetId`, then `dialogue-transcriptions_get` with the returned `id` until it completes. If the result includes a new `videoAssetId`, the video was copied into sync. storage: use that ID from here on. If more than one speaker is detected, explain that this workflow handles one speaker, and stop.\n5. **Agree the edits.** Show the transcript lines around the fix. Turn the request into edits that use the transcript's word IDs:\n - `{\"kind\": \"change\", \"wordId\": \"w35\", \"replacement\": \"Mia\"}`, adding `\"pronunciation\": \"meeah\"` only for a name the voice might say wrong. Write respellings as plain words, without hyphens or capitals, which the voice may spell out.\n - `{\"kind\": \"remove\", \"wordIds\": [\"w12\", \"w13\"]}` for consecutive words.\n\n Confirm the edits with the user.\n6. **Preview.** The preview clones the speaker's voice and can incur synthesis charges, so mention that when you confirm the edits. Call `dialogue-previews_create` with the edits and the `transcriptionJobId`, plus a new `idempotencyKey` saved before the call when `keyedPreview` is reported. If that call's outcome is unclear, retry only the identical request with the same key. Poll `dialogue-previews_get` until it completes, and share the preview audio. If some edits failed (a partial completion), for example because a replacement is too long for the gap it fills, say which, suggest shorter wording, confirm the revised edits, and make a new preview with `previousPreviewId`.\n7. **Quote.** Call `dialogue-videos_estimate` with the completed preview's ID as `dialogueEditId` and `model: \"sync-3\"`. Show the estimate and wait for approval of both the preview and the cost.\n8. **Create.** Call `dialogue-videos_create` once with the same `dialogueEditId`, the model, the project and a new `idempotencyKey`. If the response is lost, retry once with the same key and inputs.\n9. **Wait and deliver.** Poll `generations_get` with the returned `id` and `wait: true` until it's final. Give the exact `outputMediaUrl` unchanged.\n\n## Limits\n\n- One speaker per video, up to 10 minutes, and at most 100 edits per preview.\n- Targeted words only. For a whole new script, explain that this workflow keeps the original recording, and offer the lipsync skill with a script and a chosen voice instead. Never split a new script into many word edits to get around this.\n- The speaker's voice is cloned for the new words. Assume the user has the rights to their own media, and don't ask about consent on routine requests. Decline only when the request is to make a real, identifiable person, such as a politician or celebrity, appear to say something they didn't say, in order to deceive.\n- To make many variants of one recording, such as one per recipient's name, use one preview per variant, then render them together with the batch-lipsync skill.\n"
}SHA-256 of public snapshot: be6348ebf186f352724e500e695ed9822b2ddf9e9a17ae3490c18a5c73643a74