{"id":44832,"plugin_id":"plugin_asdk_app_697a947e772c8191b888e4e23376bcf2","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:19:09.942Z","digest":"c78e46b3b5cc80b2cda1bac07895df14cd639bf7a4cd1b5ddc55daa07040e7c5","against":null,"payload":{"description":"Render images (PNG, JPG, WebP), PDFs and MP4 videos from the user's Templated templates, such as social media posts, banners, Open Graph images, certificates, invoices and menus, one at a time or as a batch from a list. Use when the user mentions Templated or one of their templates, or asks to fill a saved design with new text, images or colors, to make one version per name or row, to merge PDFs, or to render a design at another size.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":129}],"name":"templated","skill_md_contents":"---\nname: templated\ndescription: \"Render images (PNG, JPG, WebP), PDFs and MP4 videos from the user's Templated templates, such as social media posts, banners, Open Graph images, certificates, invoices and menus, one at a time or as a batch from a list. Use when the user mentions Templated or one of their templates, or asks to fill a saved design with new text, images or colors, to make one version per name or row, to merge PDFs, or to render a design at another size.\"\n---\n\n# Render designs with Templated\n\nTemplated fills a saved template (a design with named layers) with the exact\ntext, images and colors it is given, and returns the finished file. The output\nalways follows the template's layout. Templated renders templates; it does not\ngenerate pictures from a text prompt.\n\nExplicit instructions from the user take priority over the guidance in this\nskill.\n\n## Tools at a glance\n\n| Goal | Tool |\n|---|---|\n| Find a template | `list_templates` (filter with `query`, `width`, `height`) |\n| See what can be changed | `get_template_layers`; for multi-page or multi-size templates, `get_template_pages` |\n| Produce the file | `create_render` |\n| Check a render again or find its URL | `get_render`, `list_renders` |\n| Combine renders into one PDF | `merge_renders` |\n| No template fits | Design one with the `templated-design` skill (`create_template`) |\n\n## Render flow\n\n1. **Find the template.** Call `list_templates`. If the user named a template,\n   match it by name. If several could fit, list the candidates by name and size\n   and ask which one to use. If none fits or the account has no templates,\n   offer to design one (see `templated-design`) instead of stopping.\n2. **Read its layers.** Call `get_template_layers` with the template ID. The\n   layer names it returns are the only keys `create_render` accepts in\n   `layers`. For a template with several pages or sizes, call\n   `get_template_pages`.\n3. **Map the content to layers.** Put each value in the layer that plays that\n   role: the title in the headline layer, the person's name in the name layer,\n   a photo URL in the image layer. A layer that still shows placeholder copy\n   and has no value from the user gets either real content or `\"hide\": true`,\n   so no placeholder text ends up in the result. When the layer names don't\n   clearly match the content, state the mapping in one line before rendering.\n4. **Render once.** Call `create_render` with `template`, `layers` and the\n   `format` the user asked for (`jpg` is the default).\n5. **Show the result.** Share the render (the preview card or the file URL) and\n   ask whether anything should change. Apply changes and render again.\n\nLayer values are objects keyed by layer name:\n\n```json\n{\n  \"headline\": { \"text\": \"Grand Opening\" },\n  \"date\": { \"text\": \"Saturday, May 9\", \"color\": \"#FFD166\" },\n  \"photo\": { \"image_url\": \"https://example.com/storefront.jpg\" },\n  \"badge\": { \"hide\": true }\n}\n```\n\n## Text that has to fit\n\n- On a text layer that uses autofit, send `text` alone. An explicit\n  `font_size` cancels autofit, and long text can then overflow its box.\n- To keep long text inside its box, send `\"autofit\": \"height\"` with\n  `min_font_size` and `max_font_size` (numbers, in pixels). If the text still\n  overflows, lower `max_font_size` and render again.\n- In a batch, test the longest value first, not a typical one.\n\n## Images\n\n- `image_url` must be a public HTTPS link to a JPG, PNG, WebP or SVG file.\n- If the user only has a file in the chat and no link, explain that Templated\n  needs a public link to the image. They can also upload it in the Templated\n  web app (app.templated.io), after which `list_uploads` returns its URL.\n- Don't make up image URLs.\n\n## Batches: one design per name or row\n\n1. Render the first item alone and show it. Check that every value appears in\n   the right place. Ask the user to confirm the first result before rendering\n   the rest, unless they already said to go ahead.\n2. Call `create_render` once per remaining item, each with its own `layers`.\n   Don't put several rows into one call.\n3. Keep the render IDs in order. For a single file, call `merge_renders` with\n   those IDs; image renders become PDF pages.\n4. Report what was produced. If an item failed, name it and give the reason\n   instead of skipping it silently.\n\n## Formats and sizes\n\n- `png` for transparency (`\"transparent\": true`) and sharp text or graphics,\n  `jpg` for photos, `webp` for the web.\n- `pdf` for documents. For printing, add `\"flatten\": true`, and `\"cmyk\": true`\n  when the printer asks for CMYK.\n- `mp4` for video: `duration` in milliseconds (up to 90000), optional `fps`\n  (1 to 60), and an optional `animation` object per layer with `in` (slide,\n  fade, zoom or rotate), `loop` (spin or pulse) and `out`, all timed in\n  milliseconds. Videos take longer to render than images.\n- For one render at another size, pass `width` and `height` (100 to 5000\n  pixels) to `create_render`, then check the result: a layout made for a\n  square can crop or crowd at another ratio. For a size the user will reuse,\n  add it as a page of a multi-size template (see `templated-design`).\n\nCommon sizes: Instagram post 1080x1080, story or reel 1080x1920, link preview\n(Open Graph) 1200x630, YouTube thumbnail 1280x720, A4 landscape certificate\n1754x1240, A4 portrait document 1240x1754.\n\n## Multi-page and multi-size templates\n\n- `get_template_pages` returns each page's name, size and layers. Layer names\n  can differ between pages, for example with a `-copy` suffix on the second\n  page.\n- To give pages their own content, pass `pages` to `create_render`:\n  `[{ \"page\": \"<page name>\", \"layers\": { ... } }]`. Only the listed pages are\n  rendered. Use either `layers` or `pages` in one call.\n- A multi-page render returns one file per page. Use `merge_renders` to\n  combine them into one PDF.\n\n## When Templated is not the right tool\n\n- Artwork or photos generated from a text prompt with no template involved:\n  Templated doesn't do this. Say so in one sentence.\n- Editing an existing photo (background removal, retouching) or posting to\n  social networks: not supported.\n- When the user asked to use Templated or one of their templates, complete the\n  request with Templated tools, because a picture made another way would not\n  match their saved design.\n\n## Errors and safety\n\n- Read the error message. It names the problem, such as a missing template, a\n  layer name the template doesn't have (with the valid names), or an image URL\n  that can't be fetched. Correct the call and retry once.\n- If the account has reached its render limit, say plainly that the Templated\n  account can't render more right now and that the details are in the user's\n  Templated account. Don't promote plans or upgrades.\n- If a tool reports an authorization error, ask the user to reconnect the\n  Templated plugin. Never ask for passwords or API keys in the chat.\n- Delete templates, renders, uploads, fonts or folders only when the user\n  explicitly asks, and confirm which items first.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}