Template-fill routes for social graphics (Claude + existing designs)
Template-fill routes for social graphics (Claude + existing designs)
Researched 2026-10-20. Question: can Claude fill text into an existing designed template (esp. the Canva carousel / quote-card template Seeds of Renaissance already has) without moving anything, rather than generating designs from scratch?
TL;DR
- Yes, very probably, via the official Canva MCP / Claude connector. Since late 2025 it exposes an editing transaction on existing designs:
start-editing-transaction→perform-editing-operations(withreplace_text/find_and_replace_text) →commit-editing-transaction→export-design. Text replacement is a targeted operation on an element; position only changes if Claude callsposition_element/resize_element. Not yet tested by us. Whether long text reflows/overflows a fixed text box is the real risk, not elements moving. - Autofill (brand template + named data fields) is the cleanest "fill, don't touch" route, but plan rules conflict: the Connect API docs now say autofill works on Pro, Teams, Canva for Nonprofits and Enterprise; Canva's AI-connector / MCP pages and the skills built on them still say "Enterprise only" for the MCP
autofill-designtool. Test it. - Bulk Create (CSV → many pages) is manual-in-UI but available on Nonprofits and is a good no-code fallback: Claude writes the CSV, a human clicks Bulk Create.
- If Canva disappoints, the strongest alternatives are: Templated.io or Orshot (both import Canva designs, have official MCP servers, render multi-slide carousels, ~$29–39/month entry), or a code route (HTML/CSS template → PNG via Playwright) which is free, deterministic and fully Claude-drivable.
1. Canva
1a. Canva MCP server / Claude connector (official)
Endpoint https://mcp.canva.com/mcp (Claude Code: claude mcp add --transport http canva https://mcp.canva.com/mcp, OAuth). Also available as a connector in Claude's directory.
Tools documented by Canva (verify-integration doc):
| Group | Tool | Notes |
|---|---|---|
| Discovery | search-designs, get-design-content, get-design-pages | get-design-content returns text but not editable element IDs |
| Generation | generate-design, create-design-from-candidate | the "generate from scratch" path the team found poor |
| Editing | start-editing-transaction, perform-editing-operations, commit-editing-transaction (+ cancel-editing-transaction) | edits are a draft until commit; concurrent browser edits can make the transaction stale |
| Assets/export | upload-asset-from-url, export-design | export returns a download link (PNG/PDF etc.) |
| Templates (Enterprise per Canva) | search-brand-templates, get-brand-template-dataset, autofill-design | see 1b |
Operations inside perform-editing-operations (from the OpenAI-plugins Canva skill mirrored on tessl; secondary source, consistent with Canva's docs): replace_text (whole element), find_and_replace_text (substring, across pages), format_text, update_fill / insert_fill (swap image), delete_element, position_element, resize_element, update_title, update_autofill_field. Limits: no group/ungroup, no animation, shapes can't be restyled; responsive pages block position/resize.
Implication for the untested question: a "fill this template" prompt only needs replace_text or find_and_replace_text. Nothing in that path moves elements. Best practice: put placeholder tokens in the template ({{HEADLINE}}, {{QUOTE}}, {{AUTHOR}}, {{SLIDE_2_BODY}}) and tell Claude to use find_and_replace_text only, on a copy of the template. Unverified: whether text formatting (font, size) is always kept on replace_text, and how overflow is handled — check thumbnails before commit.
Plan: Canva says all Canva plans (incl. Free) can connect; resize is paid-only; autofill/brand templates Enterprise-only (per Canva AI connector page, via search snippets; the page returns 403 to fetchers). Claude side: connectors need a paid Claude plan (per Canva setup docs, now at canva.com/help/mcp-agent-setup).
Caveat: there is no documented "duplicate design" tool in the list above. Workflow is either (a) a human duplicates the template in Canva and Claude edits the copy, or (b) use autofill, which always creates a new design.
1b. Canva Connect API: brand templates + Autofill
- Flow (autofill guide): publish design as brand template →
GET /brand-templates/{id}/dataset(field names/types) →POST /autofillswith values → poll job → returns new design → export via export API. - Fields are defined in the Canva editor with the "Data autofill" app (text, image, chart, sheet fields per create-autofill-job reference). Omitted fields keep template defaults.
- Plan (verified in current docs): "available when your app acts on behalf of a user on Canva Pro (including Canva Education and Canva for Nonprofits), Canva Teams, or Canva Enterprise." MFA must be on. 60 requests/min/user. "Usage limits will be introduced in the future." Scope
design:content:write. - Historically this was Enterprise-only; the docs have widened. The MCP
autofill-designtool and Canva's marketing still say Enterprise-only. Treat as unresolved until tested on the Life Itself Nonprofits account. - Using the Connect API directly means building a small integration (OAuth app in Developer Portal). Doable from a script Claude writes; heavier than the MCP.
1c. Bulk Create (UI)
- Help: Bulk Create: available to Pro, Teams, Business, Enterprise, Education and Nonprofits, desktop only, up to 150 data fields. Connect each text/image element to a column ("Connect data"), upload CSV/XLSX or paste, one page per row.
- Not an API. Agent role: Claude writes the CSV (one row per quote card, or one row per carousel slide); a human runs Bulk Create. Zero layout drift, because Canva only substitutes text.
- For a carousel, Bulk Create gives one page per row, which suits "one row = one slide" if every slide uses the same layout; mixed layouts (cover / body / CTA) need separate runs or a multi-page autofill template.
1d. Canva for Nonprofits
Free Canva Pro-level features for one team of up to 50 people, including publishing brand templates (help). So Life Itself likely has: brand templates, Bulk Create, and (per the Connect docs) Connect API Autofill. Not Enterprise, so MCP autofill-design may be blocked.
1e. Apps SDK
Canva Apps SDK builds in-editor apps (a panel inside Canva). It can modify the current design, but it's a JS app to build and host; overkill for this. Skip.
2. Alternatives: template + data → image
| Tool | Canva/Figma import | Carousel (multi-slide) | Agent access | Entry price (verify) |
|---|---|---|---|---|
| Templated.io | "Import your existing designs" (Canva) | Yes, render call takes a slides array → array of images | Official remote MCP (all plans), 25+ tools | $29/mo annual for 1,000 credits; 1 credit/image; 50 free credits |
| Orshot | Canva (public share link, all pages, text/image layers auto-parameterised) and Figma import | Yes (multi-page) | Hosted MCP mcp.orshot.com | Free 100 credits/mo; $39/mo 1,500 credits; 1 credit/image or PDF page |
| Bannerbear | No Canva import | No native multi-slide; render per slide | REST API; MCP mentioned on some plans | ~$49/mo for 1,000 credits |
| Placid | Own editor | Multi-page PDF (2 credits/page) | API; MCP listed as integration; community MCP server | Basic 500 credits; prices not shown; nonprofit discount on request |
| Creatomate | Own editor | Images and video | Official MCP api.creatomate.com/mcp | Essential 2,000 credits; 1 credit/image; 50 free credits |
| RenderForm, Abyssale | Own editors | Abyssale supports multi-format "design sets" | APIs, Zapier | Not checked in detail |
| Figma | Native | Frames per slide | Figma MCP write-to-canvas (use_figma), beta, needs Full seat on paid plan; free during beta | Figma Professional seat |
| Code: HTML/CSS → PNG | n/a (rebuild template in HTML once) | Yes, one HTML per slide or one page with N sections | Claude edits JSON/Markdown, script renders with Playwright page.screenshot or Satori / @vercel/og | Free |
Notes:
- Templated and Orshot are the most direct "keep our Canva design, make it an API" routes. Import fidelity (fonts, effects) is a marketing claim; test with the real template.
- Pricing pages are vendor-sourced; numbers above are as fetched 2026-10-20.
- Code route: most deterministic and cheapest, and Claude is good at it, but someone has to rebuild the template as HTML/CSS once, and non-technical teammates can't tweak it in Canva. Satori supports only a subset of CSS (flexbox, no grid); Playwright renders full CSS and web fonts.
- Figma write-to-canvas is beta and seat-gated; only worth it if the team designs in Figma, which it doesn't.
3. Video / clips / audiograms (template-fill angle)
- Creatomate: templates with named elements; render API takes
modifications(text, media URLs); official MCP. Good for audiograms (waveform element) and quote-over-video clips. ~14 credits per 720p minute. - Remotion: React components as video templates; pass props (quote, audio file, captions) → render locally or on Lambda (~$0.10/min 720p compute). Free for individuals and very small companies; company licence otherwise (check remotion.pro). Fully code; Claude can write it.
- Opus Clip / Riverside Magic Clips / Descript: template fill is via brand templates / brand themes set once in the UI (captions style, fonts, logo, intro/outro) and applied automatically to every clip. AI picks the clip; the template keeps the look. No confirmed public API for applying templates in Opus or Riverside; treat as human-in-the-loop tools. Descript has layouts/templates in-app (not verified this session).
4. Recommended routes and tiny tests
Route A (try first): Canva MCP edit-in-place on a copy
- In Canva, duplicate the existing carousel template. Replace live text with tokens (
{{TITLE}},{{S2}},{{S3}}, …,{{CTA}}). - In Claude (Canva connector on), prompt: "Open design X copy. Using only find_and_replace_text, replace these tokens with this text: … Do not move, resize or reformat anything. Show me thumbnails before committing." Then commit and
export-designas PNG. - Pass/fail: no element moved; fonts kept; text fits boxes; PNGs downloadable. Time it and note tokens used vs. the old generate-from-scratch flow.
Route B: Autofill on the Nonprofits plan (MCP or Connect API)
- Publish the quote-card design as a brand template; with the Data autofill app name fields
QUOTE,AUTHOR,SOURCE. - Ask Claude: "search-brand-templates, then autofill-design template Y with QUOTE=…, AUTHOR=…". If the MCP refuses (Enterprise-only), fall back to a 30-line script against
POST /autofills(Connect docs say Nonprofits qualifies), or to Bulk Create with a Claude-written CSV. - Pass/fail: new design created per call with fields filled and nothing else changed; export works.
Route C (fallback / scale): Templated.io or Orshot, or HTML→PNG
- Templated/Orshot: import the Canva template via share link on the free tier (50 / 100 credits), connect the MCP to Claude, render a 6-slide carousel from a
slidesarray. Pass/fail: import fidelity (fonts, spacing) good enough without manual rework. - HTML→PNG: Claude rebuilds the quote card in HTML/CSS once; a script reads
cards.yamland screenshots 1080×1350 PNGs with Playwright. Pass/fail: matches brand visually; 10 cards render in under a minute.
Verified vs. claimed
- Verified in official docs: Canva MCP tool list and transaction flow; Connect API autofill plan list (Pro/Teams/Nonprofits/Enterprise), field types, rate limit; Bulk Create plans; Nonprofits = Pro features for up to 50; Figma write-to-canvas seat rules; Creatomate MCP endpoint; Templated/Orshot/Placid/Creatomate pricing pages.
- Secondary / unverified: exact
perform-editing-operationsoperation names (from an OpenAI-plugins skill mirror); MCP autofill "Enterprise only" (Canva marketing page, 403 to fetch, via search snippets); Templated/Orshot Canva import fidelity; Bannerbear pricing (third-party); Remotion licence terms. - Untested by us: everything in section 4.