← sync. labsCONTENT HISTORY
WHAT CHANGED
Update to sync. labs
Snapshot Nov 3, 2026 · 18:14 UTC · version 2.0.4
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save sync. labs and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Make a still photo, portrait, mascot, illustration or AI character talk with sync. labs, as a lip-synced video from a typed script (sync. labs voices it) or from the user's own audio. Use for \"make this photo talk\", \"make this picture say…\", a talking avatar or character, or animating a portrait with speech, including when the user has no picture yet and wants one created first. Not for moving video footage (lipsync-video), translation (translate-and-dub) or changing a few words in an existing video (edit-dialogue).",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 213
}
],
"name": "talking-photo",
"skill_md_contents": "---\nname: talking-photo\ndescription: Make a still photo, portrait, mascot, illustration or AI character talk with sync. labs, as a lip-synced video from a typed script (sync. labs voices it) or from the user's own audio. Use for \"make this photo talk\", \"make this picture say…\", a talking avatar or character, or animating a portrait with speech, including when the user has no picture yet and wants one created first. Not for moving video footage (lipsync-video), translation (translate-and-dub) or changing a few words in an existing video (edit-dialogue).\n---\n\n# Make a photo talk\n\nDelivers one MP4 of the picture speaking the user's words.\n\n## Inputs\n\n- **Picture**: an image file in this conversation (uploaded, or generated here), a public image URL, or a Sync image asset ID. If the user has no picture, offer to create one with image generation first: one clear face, looking at the camera, mouth closed, head and shoulders, plain background.\n- **Speech**: either a script, which needs a voice, or an audio file, audio URL or Sync audio asset.\n\nAsk only for what is missing. Never invent the words the character says. If the user asks you to write them, draft a short script and get approval before quoting.\n\n## Tools\n\n| Step | Tool |\n| --- | --- |\n| Save files from the chat | `upload-media` |\n| Pick a voice (script only) | `voices_get-voices` |\n| Quote | `generate_estimate-cost` |\n| Create | `create-lipsync` |\n| Wait for the result | `generate_get-generation` |\n\n## Steps\n\n1. **Save files.** For each file in this conversation (the picture, or the user's audio), call `upload-media` once with `mediaType` `image` or `audio`. Use the returned asset IDs from here on, including for every retry; a file re-sent later becomes a different asset. Public URLs and Sync asset IDs need no upload.\n2. **Voice.** For a script, call `voices_get-voices`. Unless the user named a voice, suggest two or three that fit the character, each with a few words on its style. Use the chosen voice's returned `id` as `voiceId`; never invent an ID.\n3. **Quote.** Call `generate_estimate-cost` with `model: \"sync-3\"`, `visualType: \"image\"`, and either `script` or the measured `audioDuration`. Say that script quotes are approximate and exclude speech synthesis.\n4. **Confirm.** Show the picture, the script or audio, the voice and the estimate, then wait for approval. Skip this only when the user already approved this exact request and cost.\n5. **Create.** Call `create-lipsync` once with:\n - the picture as `imageAssetId` (saved in step 1) or `imageUrl`;\n - `script` with `voiceId`, or the audio as `audioAssetId` or `audioUrl`;\n - `model: \"sync-3\"`;\n - a new `idempotencyKey` and a new random UUID as `projectCreationKey`;\n - a short `projectName` such as \"Talking fox\".\n\n Do not pass `projectId` for new work. If the response is lost, retry once with the same keys and inputs; never generate new keys for a retry.\n6. **Wait.** Call `generate_get-generation` with the returned `id` and `wait: true`. If it is still pending, call it again with the same `id`. Never create a second generation to check progress.\n7. **Deliver.** When the status is `COMPLETED`, give the exact `outputUrl`, unchanged. Offer one next step, such as another line, another voice, or dubbing it into another language.\n\n## When something fails\n\n- **The picture is rejected** (no clear face, several faces, too small): explain the reason and suggest a clearer head-and-shoulders picture.\n- **Out of credits or over a plan limit**: explain the returned message plainly. Don't promote plans or pricing.\n- **Any other error**: quote the returned message, say no video was created, and stop. Don't retry with different inputs unless the user asks.\n"
}SHA-256 of public snapshot: 6511a92e878bf863a6055fe6c1684635ef3c36d8d102050c9c8b1c90208e274d