Turn an existing product image or static ad into a short motion creative through GooseWorks. This skill uses the same backend workflow as the Animate Images interface.
Prerequisite
This workflow requires the GooseWorks MCP connector (https://mcp.gooseworks.ai/mcp). It uses three tools: ads_creative_animation_quote (free price), ads_creative_animate (paid start) and job_get (poll). Some clients list tools by group and show the ads tools only after they are loaded. If ads_creative_animation_quote or ads_creative_animate is not in the advertised tool list, call tools_load with { "groups": ["ads"] } first (free). If the tools are still missing, or account_whoami reports features.animate_image: false, explain that the connection or feature is not available and stop; do not substitute an unrelated image generator.
Tool calls
| Step | Call | Notes |
|---|---|---|
| Quote | ads_creative_animation_quote |
Free and read-only. Fetches nothing and reserves nothing. Returns { dry_run: true, estimate: { frame, duration_seconds, model, estimated_credits } }. |
| Start | ads_creative_animate |
Paid. Reserves credits and starts the job. Returns { job_id, kind: "animate", status }. |
| Poll | job_get with { job_id, kind: "animate" } |
Read-only. result.output_url holds the video when status is complete; error explains a failure. |
Both ads_creative_animation_quote and ads_creative_animate take the same payload:
{
"brand_id": "<brand id from brand_read>",
"creative_id": "<ad creative id from ads_creative_read or ads_save>",
"animate": {
"source_render_id": "<render id, or null>",
"source_image_url": "<public https URL of the still>",
"frame": "end",
"prompt": "<motion prompt>",
"duration_seconds": 5
}
}
creative_idis the ad creative the animation belongs to. Prefer an existing render (source_render_idplus its URL assource_image_url) so provenance is preserved.frameis"start"(the still is the opening frame) or"end"(the still is the closing frame, the default). The two can cost different credits; the quote shows the price for the frame you pass.duration_secondsmust be5or10. Other values are rejected.- Starting needs an agent-scoped token or a default agent on the account; the tool returns
agent_requiredotherwise.
Workflow
- Resolve the brand with
brand_read(leave outbrand_idto list the brands). Then find the still:- An existing ad: read it with
ads_creative_read(include renders) to getcreative_id,source_render_idand the render URL. - A plain image not yet in GooseWorks: upload it with
media_uploadunder the brand, then save it as an ad creative withads_save(pass themedia_id; free).ads_savereturnscreative_id,render_idandoutput_url; use them ascreative_id,source_render_idandsource_image_url.
- An existing ad: read it with
- Clarify the motion goal, duration (5 or 10 seconds), and whether the user wants the source image as the start frame or the end frame.
- Write a motion prompt describing camera movement, subject movement, environment movement, pacing, and what must remain unchanged. Do not redesign the product or add unsupported claims.
- Call
ads_creative_animation_quoteand show the userestimated_creditsexactly as the tool returns it. Never convert it to dollars or do your own math. Ask for their yes to that credit number. - After their yes, call
ads_creative_animateonce with the same payload. Save the returnedjob_id. - Poll
job_getwithkind: "animate"every few seconds untilstatusiscompleteorfailed. Never start the same animation again while it runs; a second start pays again. - Return
result.output_urland the source image used. If it fails, report the error in plain words before proposing a retry.
Rules
- Ask before spending credits. The quote is free; every
ads_creative_animatecall is a paid generation. - Never start without the user's explicit yes to the quoted credits.
- Money is the credit number the quote returns. Never show dollars.
- Preserve product shape, logo, packaging, and on-image copy unless the user explicitly requests a change.
- Prefer subtle, physically plausible motion for product shots and graphic ads.
- A new prompt for an already-running job is a new paid generation; quote it and ask again.