Use when generating visual asset design specs for a campaign, creating Canva-ready design briefs, producing Instagram posts, carousel posts, Stories, TikTok covers, YouTube thumbnails, LinkedIn images, ad banners, or email headers. Triggers on phrases like "generate assets", "create visuals", "design specs", "Instagram post", "YouTube thumbnail", "make assets for this campaign", or when a brief exists and visual creative needs to be produced alongside scripts.
Generate Canva-ready visual asset design specifications for all campaign surfaces. Given a creative brief and brand assets, produce detailed design specs for each requested asset type — detailed enough for a designer (or Canva) to produce the asset without additional direction.
generate-brief
│
├──────────────────────┬──────────────────────┐
│ │ │
script-tiktok script-* generate-assets
script-instagram (all platforms) │
script-youtube-* Kie.ai Nano Banana
script-linkedin (2K draft / 4K final)
│ │
│ upload-asset-from-url
│ (final tier)
│ │
└──────────────────────┴──────────────────────┘
│
storyboard
│
full campaign delivery
generate-assets runs in parallel with all script-* skills after generate-brief completes. It does not depend on scripts, and scripts do not depend on it. Both feed into storyboard and final campaign delivery.
This skill generates images via Kie.ai Nano Banana and — on canva_assembly: final — automatically assembles the full Canva design: creates the design at correct dimensions, places the generated image as background, and adds all text layers as editable Canva elements. The result is a ready-to-edit Canva design URL, not just loose assets.
See references/canva-integration.md for the full MCP call sequence and setup requirements.
StackdMedia generates campaign images using Kie.ai Nano Banana — Google Gemini-powered image generation accessible via the Kie.ai MCP server. Images are generated from the design spec, then uploaded directly to Canva for design assembly.
Draft (Nano Banana 2K — $0.02/image) Use during creative development and client preview rounds.
Final (Nano Banana 4K — $0.04/image) Use for production-ready assets ready for campaign delivery.
upload-asset-from-urlWhen translating a design spec into a Nano Banana image prompt:
Example prompt structure:
[Subject/key visual], [composition], [background], [lighting], [mood/style], [aspect ratio], high quality, professional photography, commercial advertising
After Nano Banana returns an image, visually inspect the thumbnail to confirm it contains no embedded text, logos, or typography. If text artifacts are present, regenerate with the prompt adjusted (strengthen the avoid-text rule: append "absolutely no text, no words, no letters, no typography, no labels" to the prompt).
canva_assembly flag)canva_assembly: skip — Return the image URL only. No Canva interaction.
canva_assembly: draft (default) — Upload only:
mcp__claude_ai_Canva__upload-asset-from-url with the image URL and asset namecanva_assembly: final — Full design assembly:
mcp__claude_ai_Canva__upload-asset-from-url — upload the Nano Banana image, receive Asset IDmcp__claude_ai_Canva__generate-design-structured — create a new design at the correct platform dimensions (see Asset Type Specifications for exact px), using a clean single-image layoutmcp__claude_ai_Canva__start-editing-transaction — open an editing session on the new designmcp__claude_ai_Canva__perform-editing-operations — insert the uploaded asset as the full-bleed background image, then add each row from the Text Layers table as an editable text element at the specified position, font style, size, and colormcp__claude_ai_Canva__commit-editing-transaction — save and close the editing sessionmcp__claude_ai_Canva__get-design-thumbnail — retrieve a preview thumbnail URLCost note: canva_assembly: final consumes Canva API quota — use draft for iteration rounds and final only for production delivery.