{"id":55024,"plugin_id":"plugin_asdk_app_6a608e436adc8191affb546011f744cf","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-26T00:04:41.380Z","digest":"c0b7ebccc031b38d75d91c27fbdb4e096e80386c92d849b52ae6cf7295062f59","against":null,"payload":{"description":"Use when the user has a finished image or ad and needs it in other sizes or aspect ratios for other placements (story 9:16, feed 1:1 or 4:5, banner 16:9, marketplace square) without cropping out the product or the text. Not for making new ads from a product photo (use product-ad-set).","included_files":[],"name":"ad-placement-adaptation","skill_md_contents":"---\nname: ad-placement-adaptation\ndescription: Use when the user has a finished image or ad and needs it in other sizes or aspect ratios for other placements (story 9:16, feed 1:1 or 4:5, banner 16:9, marketplace square) without cropping out the product or the text. Not for making new ads from a product photo (use product-ad-set).\n---\n\n# Ad placement adaptation\n\nReframe one finished creative into the other formats a campaign needs. `change_aspect_ratio` extends the scene around the existing image instead of stretching or cropping it, so the product and copy stay intact.\n\n## What you need\n\n- The finished image (attached or a public URL).\n- Target placements. If not given, offer the common set: 1:1 feed, 4:5 portrait, 9:16 story, 16:9 banner. Skip the format the image is already in.\n\n## Recipe\n\n1. `upload_asset({ url })`; keep the `asset_id`.\n2. One call per target format, always from the original (not from an earlier reframe):\n\n```json\n{ \"tool\": \"change_aspect_ratio\", \"arguments\": {\n  \"config\": { \"model\": \"nano-banana-2\", \"targetAspectRatio\": \"9:16\" },\n  \"inputs\": { \"input_image\": { \"kind\": \"image\", \"assetId\": \"<asset_id>\" } },\n  \"confirm_above_credits\": 40,\n  \"idempotency_key\": \"ad-placement-adaptation-1\"\n} }\n```\n\n`nano-banana-2` takes `1:1`, `4:5`, `5:4`, `3:4`, `4:3`, `2:3`, `3:2`, `9:16`, `16:9`, `21:9` and more.\n\n3. If a reframe placed the headline where a platform covers it (bottom fifth of a story), fix that one image with `edit_image`: \"Move the headline \\\"<exact text>\\\" to the top third. Change nothing else.\"\n4. Show all formats with `preview_asset`, labeled by placement.\n\n## Cost, waiting and retries\n\nGive every paid call its own `idempotency_key`, unique to that request (for example `mug-packshot-1`). Send the same key again only to resend a call that was interrupted or whose result you never saw, such as after a permission or file-download prompt; the first result then comes back instead of a second charge. Before re-running anything, check `list_runs` or `get_run` for a result that already finished. To redo something on purpose (a failed run, an image that missed, changed settings), use a new key: the old one would replay the same result, failure included.\n\nOne paid call per format; pass `confirm_above_credits`, ask before going over. On `timed_out: true`, `wait_for_run`. Redo only the formats that failed, each with a new key.\n\n## Quality check\n\n- Product fully visible, not cut at the edges, same as in the original.\n- Headline and any copy readable, unchanged and not duplicated by the extension.\n- The extended area matches the original's lighting and style; no visible seams.\n- Story formats keep the bottom fifth clear of text.\n\n## Next edits to offer\n\n- More creative directions to test: ad-concept-variations.\n- A motion version of the story format: product-motion.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}