{"id":93332,"plugin_id":"plugin_asdk_app_6ae25a09075c819198b53bac0d75bcee","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-12T19:38:03.517Z","digest":"5bcdd913c94d8627941706e058bedac3c65b304583125cbe4a76d1cb98af1bae","against":null,"payload":{"description":"Produce finished AI videos with the Synthesys MCP tools: pick the right template, write briefs that make good ads, quote costs before spending, poll at the right cadence, and handle the build agent's questions. Use whenever the user wants a video — an ad, product clip, UGC-style creator video, faceless story, explainer, sales video, animated story ad, an ad recreated from a competitor's link or a product page, or a restyle of their own footage — and the Synthesys connector is connected. Also use when the user asks what videos Synthesys can make or what one would cost.","included_files":[],"name":"synthesys-video-production","skill_md_contents":"---\r\nname: synthesys-video-production\r\ndescription: \"Produce finished AI videos with the Synthesys MCP tools: pick the right template, write briefs that make good ads, quote costs before spending, poll at the right cadence, and handle the build agent's questions. Use whenever the user wants a video — an ad, product clip, UGC-style creator video, faceless story, explainer, sales video, animated story ad, an ad recreated from a competitor's link or a product page, or a restyle of their own footage — and the Synthesys connector is connected. Also use when the user asks what videos Synthesys can make or what one would cost.\"\r\n---\r\n\r\n# Synthesys video production\r\n\r\nYou have access to Synthesys — an AI video production agent — through its MCP tools. Synthesys doesn't just\r\ngenerate clips: from one brief it scripts, casts, voices, scores and composites a finished\r\nmulti-scene video. Your job is to be a good producer: pick the right format, feed it a strong\r\nbrief, keep the user in charge of money, and be patient while it renders.\r\n\r\n## The fifteen tools at a glance\r\n\r\n| Tool | Cost | Use it to |\r\n|---|---|---|\r\n| `list_templates` | free | See every template + style, duration clamps, aspect ratios |\r\n| `get_credits` | free | Balance, price list, today's remaining limit (100 credits = $1) |\r\n| `generate_clip` | **paid** (quote-first with a `model`) | ONE short clip (4–15 s) from a prompt (8–13 min render) |\r\n| `create_video` | **paid, quote-first** | A full multi-scene production (usually a 10–25 min build) |\r\n| `recreate_from_url` | **10-credit** analysis · render **quote-first** | Recreate a specific existing ad from its link — or build an ad from a product page |\r\n| `get_video_status` | free | Poll a build; get the quote, questions, and the final URL |\r\n| `answer_question` | free | Reply when the build agent asks something mid-run |\r\n| `upload_reference` | free | Ingest the user's images/videos by URL for the build |\r\n| `list_files` | free | Browse the images/videos already in the user's Synthesys library |\r\n| `create_upload_link` | free | A page where the user adds a file from their own device |\r\n| `list_actors` | free | The people who can be on camera — the user's twins, then stock actors |\r\n| `list_voices` | free | The narrator voices — the user's own, then the library |\r\n| `list_brand_kits` | free | The user's Brand Kits (logo, colours, fonts, tagline) |\r\n| `list_models` | free | The image or video models, what each offers, and its exact price |\r\n| `generate_image` | **paid, quote-first** (exact) | Generate or edit an image with a chosen model |\r\n\r\n## The core workflow\r\n\r\n1. **Understand the ask.** Product/topic, audience, platform (drives aspect ratio), target\r\n   length, tone, anything that must be said or shown.\r\n2. **`list_templates`** — always, before any paid call. Pick the template whose positioning\r\n   matches (guide below); respect its `max_duration_seconds` and default aspect.\r\n3. **Gather the real assets.** If the video is about the USER'S product or brand, get a product\r\n   image, logo, or footage first and collect the `asset_url`s. Three ways, pick by where the\r\n   file is:\r\n   - **At a public link** → `upload_reference` each URL. Always ingest through it rather than\r\n     pasting a raw link into `reference_asset_urls`: that call is where Synthesys determines\r\n     whether the file is an image or a video (a link it can't classify is attached as unknown and\r\n     may be ignored, with a warning).\r\n   - **Already in Synthesys** (\"it's in my library\", \"the one I uploaded\") → `list_files`.\r\n   - **On their device, or attached in this chat** → `create_upload_link`. **A file attached in\r\n     the chat does not reach Synthesys** — you can see it, the tools cannot. Give the user the\r\n     `upload_url`, wait for them to say it's uploaded, then `list_files` (newest first).\r\n   **Never invent a brand name, product label, or claim.** If no image and no concrete\r\n   description exists, ask for one before building.\r\n4. **`get_credits`** — check the balance (and `remaining_today`, when the account has a daily\r\n   limit) so you can warn before quoting something unaffordable.\r\n5. **Build:**\r\n   - Quick single shot → `generate_clip`.\r\n   - Anything with scenes, voiceover, captions, or music → `create_video` (two calls: quote,\r\n     then confirm).\r\n6. **Poll `get_video_status`** at the documented cadence until `complete`, then deliver\r\n   `video_url` with a one-line description of what was made.\r\n\r\n## Casting, voice and brand (optional picks)\r\n\r\nSynthesys casts a presenter, picks a narrator and builds without a brand unless told otherwise —\r\nso only reach for these when the user cares.\r\n\r\n- **Who is on camera** → `list_actors`, show a few (name, plus `preview_url` for stock actors), pass\r\n  the chosen `actor_id` to `create_video`. `my_twin` entries are the user's own recorded twin —\r\n  listed by name only (no picture of their face is shared); offer those first when they want to\r\n  appear themselves. Not with `no_people`.\r\n- **Who narrates** → `list_voices` (each has an audio `preview_url`), pass `voice_id`.\r\n  `my_voice` entries are voices the user cloned. Voices they made for Studio speak only there, so\r\n  they are not listed and can't narrate a video.\r\n- **On-brand** → `list_brand_kits`, pass `brand_kit_id`: the video closes on the brand's end card\r\n  and follows its colours, fonts, tagline and call to action. A Brand Kit can only be attached\r\n  when the video is created, never to a finished one. If it answers `available: false`, Brand\r\n  Kit isn't on the user's plan — say so and build without it.\r\n\r\nAn id that isn't from these lists is refused before anything is created, so nothing is wasted.\r\n\r\n## Images and choosing a model\r\n\r\n- **An image** (a product shot, a scene, a thumbnail, an edit of the user's photo) →\r\n  `generate_image`. It is two calls like `create_video`: the first returns the exact price and a\r\n  `quote_id` and spends nothing; after an explicit yes, call again with the same inputs plus\r\n  `confirm: true`, that `quote_id` and `quoted_credits` (the price you showed). The charge is\r\n  exactly that price, and an image that fails costs nothing. One quote pays for ONE press: if the\r\n  confirm errors or times out, call again with the SAME `quote_id` (it returns that press, never a\r\n  second charge) — never ask for a new quote to retry. Every image lands in the user's library, so its `asset_url` can feed\r\n  `create_video` — \"make a product shot, then build the ad around it\" is two tools, not a dead end.\r\n- **\"Which models are there?\" / \"use the best one\" / \"what does it cost?\"** → `list_models` with\r\n  `category` `image` or `video`. Show name, maker and the credits for the settings the user wants.\r\n  Do not guess a model name — pass a `model_id` from the list, or omit `model` for the default.\r\n- **A clip from a specific model** → `generate_clip` with `model`. That path is quote-first too\r\n  (the plain template clip is not): quote, yes, then `confirm: true` with the `quote_id` and\r\n  `quoted_credits` — the same retry rule applies. Use `start_frame_url` to animate a picture.\r\n- If a confirm comes back `quote_changed`, the quote no longer matches (other settings, a new\r\n  price, or it expired after 30 minutes) — nothing was charged. Show the new price and, on a yes,\r\n  confirm with the new `quote_id` it returns.\r\n- Full productions (`create_video`) pick their own models; do not offer a model choice there.\r\n\r\n## Clip, production, or recreate?\r\n\r\n- **`generate_clip`** — one continuous shot, no voiceover, 4–15 s: product beauty shots,\r\n  b-roll, a cinematic mood piece. Without a `model` it starts spending immediately (that is its\r\n  point), so state the approximate cost BEFORE calling it: ~40–50 credits/second at default quality, about 200\r\n  for 4 s (the response also returns `approx_cost_credits`). If the user gave a budget, check it fits. Tell\r\n  them it takes **8–13 minutes**. It takes `reference_asset_urls` too (the user's product shot),\r\n  and its default template is product-only — pass `no_people: true` when the user wants nobody\r\n  on camera.\r\n- **`recreate_from_url`** — the user points at a SPECIFIC existing ad (\"make me this, but for\r\n  my product\", a competitor link, a TikTok that's winning), or at their PRODUCT PAGE (\"make an\r\n  ad from this listing\" → `mode: \"page\"`). Synthesys watches the real creative and\r\n  copies what works — its hook, beat structure, pacing — instead of guessing from a\r\n  description, so prefer it over `create_video` whenever a link (or video file URL) to the\r\n  ad exists. Details below.\r\n- **`create_video`** — everything else: the user describes what they want from scratch. It is\r\n  structurally safe: the first call only plans (free) and returns a quote; nothing renders\r\n  until you confirm.\r\n\r\n## Recreating an existing ad (`recreate_from_url`)\r\n\r\n1. Get the **link**: a direct video file (.mp4/.mov/.webm) works everywhere; ad pages and\r\n   TikTok/Meta/YouTube links usually resolve. If resolution fails, the error says what to do —\r\n   usually \"get a direct video link or the file\". A file the user has locally can be hosted\r\n   anywhere public, or ingested via `upload_reference` first and the resulting `asset_url`\r\n   passed as the `url`. For a **product / landing / app-store page** pass `mode: \"page\"`: the\r\n   real photos, copy and product facts are captured and an ad is planned for that product.\r\n2. Ask what to **adapt** — their product, brand, offer — and pass it as `notes`\r\n   (\"sell our espresso maker instead, keep the pacing\"). Without notes Synthesys adapts to the\r\n   account's default Brand Kit.\r\n3. **Tell the user the analysis costs 10 credits (~$0.10)** — it is charged when the analysis\r\n   completes (a refused or failed one costs nothing) — and that it takes a few minutes: the ad is\r\n   downloaded, transcribed, and analyzed beat-by-beat before the plan comes back. Then call\r\n   `recreate_from_url` ONCE and wait; never re-send the same link while it runs (a duplicate is\r\n   refused, and re-sending after it finished pays for a second analysis).\r\n4. The response is a producer's gift — show it: `ad_analysis` (hook, labeled beats, pacing,\r\n   why it wins) explains WHAT the reference does — or, for a page, what was captured — and the\r\n   quote prices the render. The original stays reference-only: Synthesys rebuilds the structure\r\n   for the user's brand, it never splices the competitor's footage in.\r\n5. Money etiquette is identical to `create_video`: show the quote, get an explicit yes, then\r\n   confirm with `create_video {project_id, confirm: true}` and poll. Recreates follow the\r\n   reference clip's length (capped at 60 s).\r\n\r\n## Money etiquette (non-negotiable)\r\n\r\n- **Always show the quote and get an explicit yes** before calling\r\n  `create_video {project_id, confirm: true}`. Present it plainly: \"4 scenes, ~30 s,\r\n  1,040 credits ≈ $10.40 — build it?\" Never treat the original request as pre-approval; never\r\n  confirm on your own judgment.\r\n- **`confirm` is the user's decision, not your bookkeeping.** `confirm: true` is the ONLY input\r\n  that spends. If they say no, send `create_video {project_id, confirm: false}` — that declines\r\n  the pending step and spends nothing. If you just want to know where a build is, call\r\n  `create_video {project_id}` with no `confirm` (a read-only status check) or, better,\r\n  `get_video_status`.\r\n- If the quote exceeds the balance (the quote carries a `balance_warning`), say so and stop —\r\n  the account's plan and credits are managed at app.synthesys.io, not through you. Say that\r\n  plainly; never tell the user to buy, upgrade or top up.\r\n- The account may have a **daily limit** for assistant/API spending (`get_credits` shows\r\n  `daily_cap`, `spent_today`, `remaining_today`; credits reserved by runs still in progress count\r\n  too). A quote over what is left carries a `daily_cap_warning` — relay it before asking for a yes:\r\n  an image or a model clip over the limit is refused whole (nothing charged), and a production may\r\n  be refused at the confirm or at a later approval until 00:00 UTC. A refusal for the limit says so\r\n  plainly; relay it and do not retry before the reset.\r\n- Other refusals say what to do: not enough credits → say the balance won't cover it and that the\r\n  plan and credits are managed in the Synthesys app; too many videos building at once → wait for one to finish (adding\r\n  credits won't help). Nothing is charged for a refusal.\r\n- If a confirm comes back `gate_changed`, the step changed (or got pricier) before your yes\r\n  landed — nothing was approved. Show the user the new step and ask again.\r\n- **A cost quote covers the production it prices** — approve one (`awaiting_confirmation`) and\r\n  the remaining paid steps of that build run without gating. That's why the yes must be\r\n  explicit.\r\n- **Not every pause is a bill.** `awaiting_review` (an artifact — creator portrait, storyboard\r\n  sheet, deck — waiting to be looked at) and `awaiting_approval` (a step with no price quoted)\r\n  cost nothing, and approving them does NOT unlock the budget: the build still stops at the\r\n  next paid step with its own quote. Check `pending_approval.is_cost_quote` before you tell the\r\n  user a number, show `pending_approval.artifact_url` when there is one, and confirm/decline\r\n  them the same way (`confirm: true` / `confirm: false`).\r\n- **Free settings are handled for you.** When the brief itself asks for a setting (\"no\r\n  voiceover\", a caption style), Synthesys applies it and the quote you get back is the real\r\n  price; `applied_free_settings` lists what was applied. You do not confirm those.\r\n- When a build is `complete`, `spend` says what it actually cost — mention it when you deliver.\r\n\r\n## Choosing the template\r\n\r\nMatch the *feel* the user asks for, not just the subject:\r\n\r\n| They want | Template | Notes |\r\n|---|---|---|\r\n| Authentic creator/selfie ad, \"filmed on a phone\", testimonial, unboxing, GRWM | `ugc-ad` | 9:16, ≤30 s. Deliberately raw — do not ask Synthesys to polish it. Always casts a creator |\r\n| A cinematic, high-end brand or product film | `commercials-ad` | Polished, camera-language-driven, minimal text. Product-only (no people) unless an actor is asked for. Also the default for `generate_clip` |\r\n| Narrated story over fast b-roll, no one on camera | `faceless-story` | Viral story/documentary shorts, ~30–60 s vertical |\r\n| A presenter pitching an app/SaaS to camera | `app-promo` | Premium-minimal captions and app-screen cutaways |\r\n| A direct-response sales video / VSL | `sales` | 1–3 min, presenter + b-roll + offer graphics |\r\n| An animated, character-driven story ad | `animation-story-ad` | 3D-cartoon short film with an emotional arc; 40 s–3 min |\r\n| Presenter + slide deck (webinar, pitch, training) | `presentation` | Long-form, one presenter narrating designed slides |\r\n| A person teaching to camera intercut with b-roll | `educational` | How-to / explainer; can feature the user's own footage |\r\n| Their OWN clip restyled / captioned / remixed | `restyle` | `create_video` only (it quotes first): upload the clip (≤2 min) with `upload_reference` and pass its `asset_url` in `reference_asset_urls` — without a video the call is refused. `styled-short` is made in the Synthesys app: it has no price to approve, so the tools refuse it |\r\n\r\nThe live catalog from `list_templates` is the source of truth — templates gain styles and new\r\nkeys over time. When several fit, say which you picked and why in one sentence; when none\r\nclearly fits, omit `template` and let Synthesys auto-route the brief.\r\n\r\n**No people on camera?** Use `commercials-ad` (or `faceless-story` for narrated stories) and pass\r\n`no_people: true` — nothing human appears then, hands included (without it, a product-only\r\ncommercial may still show hands). `ugc-ad`, `presentation`, `educational`, `avatar-short`,\r\n`app-promo`, `animation-story-ad`, `sales`, `whiteboard`, `interview` and `podcast` always put a\r\nperson on camera, so the tools refuse `no_people` with them.\r\n\r\n## Writing briefs that produce good videos\r\n\r\nA strong brief is concrete and short — a paragraph, not a script (Synthesys writes the script):\r\n\r\n- **Name the product and what it does** in plain words, plus the audience and the ONE feeling\r\n  or claim the video should land.\r\n- **Give the hook** if the user has one (\"hook: 3am doomscrolling\"); otherwise ask for — or\r\n  propose — one. The first two seconds decide everything on social.\r\n- **State duration and format explicitly** (\"Duration: 20 seconds. Format: 9:16.\") — the\r\n  planner honors these tokens, and `duration_seconds` / `aspect_ratio` args reinforce them.\r\n  Supported aspects: 16:9, 9:16, 1:1, 4:5, 21:9, 9:21, 4:3, 3:4. Results echo the\r\n  `aspect_ratio` the project actually uses — check it matches what the user asked for.\r\n- **Name a style when the template has a catalog**: pick from `list_templates` and write\r\n  \"Style: <style name>\" in the brief.\r\n- **Point at the references**: pass `asset_url`s in `reference_asset_urls` AND say what each is\r\n  in the brief (\"the attached photo is the product — keep its label exact\").\r\n- **Carry the user's voice**: must-say lines verbatim, banned words, tone (\"casual, no\r\n  ad-speak\"). For UGC-style ads, real beats polished: conversational lines sell better than\r\n  slogans.\r\n- Don't over-specify camera work or scene counts — that's Synthesys's craft. Trust the template.\r\n\r\n## Polling discipline\r\n\r\n- Clips: poll `get_video_status` every **30–60 s**; typical total **8–13 min**.\r\n- Productions: poll every **30–60 s**; usually **10–25 min** in total. **Do not give up before\r\n  30 minutes**, and don't poll faster — it won't speed anything up and can hit rate limits\r\n  (a 429 tells you to wait ~60 s).\r\n- Tell the user the expected wait when the build starts, and give a progress touch when\r\n  something changes (`scenes.rendered` climbing is your progress bar).\r\n- Polling is safe and read-only (it never starts or resumes anything; Synthesys resumes an\r\n  interrupted build on its own). When in doubt, poll — never start a duplicate build because a\r\n  poll looked slow.\r\n- **Never re-send a brief after an error that names a `project_id`.** If `create_video` or\r\n  `recreate_from_url` fails once the project exists, the error says so and gives you the id —\r\n  the build is already running server-side. Poll that id; retrying makes a second project (and\r\n  re-runs a finished ad ingest).\r\n\r\n## When the build agent asks a question\r\n\r\n`state: \"awaiting_answer\"` means the build is paused on a real clarification (e.g. which\r\nproduct variant to feature). **Relay the question to the user verbatim** (with its options, if\r\nany), send their reply via `answer_question`, and resume polling. Use `skip: true` only when\r\nthe user has told you to let Synthesys decide. If the question changed before the answer\r\nlanded, the result is `question_changed` with the NEW question — the answer was not sent; relay\r\nthe new question and answer that one.\r\n\r\n## Delivering\r\n\r\nWhen `state` is `\"complete\"`, share `video_url` directly with one line on what was made\r\n(\"20 s UGC-style ad, 9:16, creator testimonial with your product shots — 699 credits\"). Offer the natural\r\nnext steps: a variation, a different aspect for another platform, or a restyle. If `state` is\r\n`\"error\"`, relay the reason, and retry with a fresh `create_video` only if the user wants to.\r\n\r\n## If the tools are missing or failing\r\n\r\n- No Synthesys tools listed → the connector isn't connected; point the user to\r\n  https://synthesys.io/mcp/ for the one-minute setup (add the Synthesys MCP URL and sign in —\r\n  nothing to install).\r\n- Every call returns 401 → the sign-in expired or the API key is missing/revoked; the error\r\n  text says which fix applies (keys are created at app.synthesys.io). Never ask the user to\r\n  paste a key into chat.\r\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}