Canva Presentation Time Fitting logo

Canva Presentation Time Fitting

Organization
canva-sdks
canva-presentation-time-fitting

Fit a Canva presentation to a target speaking duration by generating or rewriting presenter notes only (visible slide text is not edited). Use when users say "make this a 10-minute presentation", "split time evenly across slides", "generate speaker notes for a 15-minute talk", "fit my deck to [duration]", or "how long per slide for a 20-minute slot".

Overview

Publishercanva-sdks
Repositorycanva-skills
Skill namecanva-presentation-time-fitting
Stars
141
Forks
33
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by canva-sdks on GitHub. Read the source before you install it.

Installation

Install the Canva Presentation Time Fitting AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/canva-sdks/canva-skills/tree/main/plugins/canva/inactive-skills/presentation-time-fitting
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/canva-sdks/canva-skills.git /tmp/canva-skills
mkdir -p .claude/skills
cp -r /tmp/canva-skills/plugins/canva/inactive-skills/presentation-time-fitting .claude/skills/canva-presentation-time-fitting
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Canva Presentation Time Fitting in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Canva Presentation Time Fitting on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Canva Presentation Time Fitting is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Presentation Time-Fitting

Take an existing Canva presentation and align it with a target speaking duration using presenter notes only. Visible on-slide text is read for context and timing, but must not be changed by this skill. The flow is: confirm design + total duration (before cloning), read slide text, divide time across slides, add, replace, or trim speaker notes per slide to match each slot, write notes only back via Canva editing tools.

Primary workflow (time-balanced presenter notes)

Step 1: Collect design and duration (before other Canva tool calls)

  • Gather everything you need before calling Canva:resize-design, Canva:get-design-content or other editing/content tools:
    • Design: link (canva.link), full Canva URL, design ID, or design name (see Step 2 for how each maps to design_id)
    • Total speaking time for delivering the deck (e.g. "15 minutes", "45 min", "1 hour"). Parse to total seconds (or minutes as a decimal). If the user is vague, confirm the total minutes they want for speaking through the slides (include Q&A in that total only if they say so)
  • If either design or duration is missing, ask and wait before proceeding

Step 2: Resolve the design

  • If the user provides a short link (canva.link), call Canva:resolve-shortlink to get the design URL
  • If the user provides a full Canva URL, extract the design ID (https://www.canva.com/design/{design_id}/...)
  • If the user provides a design ID directly (typically starts with D, e.g. DABcd1234ef), use it as design_id; do not use Canva:search-designs for a raw ID
  • If the user provides a design name (not an ID), use Canva:search-designs; if multiple matches, ask for clarification
  • If you still cannot resolve a design, ask for the design ID or link

Step 3: Work on a copy (required)

  • Use Canva:resize-design with the same dimensions as the source to clone the presentation; do not modify the original

Step 4: Read slide content

  • Call Canva:get-design-content on the copy to extract visible text per slide/page (headings, bullets, body)
  • Build a per-slide summary: slide index or title, text content, and whether speaker notes already exist if the payload includes them
  • Slide count = number of content-bearing pages from this response (use for the division in Step 5)

Step 5: Calculate time per slide

  • Target speaking time per slide = total_duration ÷ number_of_slides (equal split unless the user asks to weight title/closing differently; then adjust and state the assumption)
  • Derive a word budget per slide using ~150 words/minute as a guide: target_words ≈ (target_minutes_per_slide) × 150 (floor/round sensibly; treat as guidance, not a hard cap)
  • Show the user a small table: slide count, total duration, seconds (or mm:ss) per slide, approximate word budget per slide

Step 6: Generate speaker notes (in this session)

  • Generate the notes directly in this response; no external API call is required. For each slide, using that slide’s text from Step 4 plus the per-slide time/word budget from Step 5, compose presenter notes (this is the only content you may author or edit for timing):
    • Aim to fill roughly the allocated time when spoken aloud
    • Expand thin slides with context, transitions, and delivery cues in the notes; shorten notes if the budget is small (do not shorten on-slide text)
    • Stay faithful to the slide’s visible messages; do not invent facts
  • If a slide is visual-heavy with little text, write notes that describe what to say about the visual in the allotted time

Step 7: Write notes back to Canva

  • Call Canva:get-design-pages on the copy to obtain page_id (or equivalent) for each slide that needs notes
  • Call Canva:start-editing-transaction on the copy if not already active; use the returned transaction_id for edits
  • Optional ordering: start the editing transaction soon after you have the copy’s design ID (e.g. right after Step 4 or right after get-design-pages) so the session is open before you spend a long time composing notes in chat; some environments time out less often when the transaction is not deferred. If the connector allows one long-lived transaction for the whole flow, prefer opening it once and reusing transaction_id for Step 7 edits
  • Call Canva:perform-editing-operations using only the operation type the Canva MCP exposes for presenter/speaker notes (name may vary by connector; use the schema for updating notes per page). Do not call replace_text, find_and_replace_text, or any operation that changes visible on-slide text. Apply all note updates, batched in as few calls as allowed
  • Call Canva:commit-editing-transaction to save

Step 8: Hand off

  • Share the link to the copy of the design and a one-line recap: total target time and per-slide time allocation
  • Remind the user that pace (~150 wpm) varies by speaker and that equal split is a default; they can ask for a different weighting in a follow-up

Scope: notes only

  • In scope: Read on-slide text via get-design-content. Create, update, lengthen, or shorten presenter/speaker notes only, using the MCP’s note operation per page.
  • Out of scope: Do not change visible slide content (replace_text, find_and_replace_text, formatting, media, layout, title, etc.). If the user asks to cut or pad the slides themselves, say this skill only adjusts notes; they can edit slides in Canva or use another skill/workflow.
  • Slide count: The API cannot add or remove pages. If the time target is unrealistic for the amount of on-slide material (e.g. 60 minutes of talking from two dense slides), say so and suggest splitting or simplifying slides in the editor, or revising the target duration. You may still write notes that acknowledge the squeeze (e.g. “prioritise X, skim Y”) without changing slide text.

When start-editing-transaction fails or times out

Cause (usually not the skill text): Canva or the MCP gateway can abort with “The operation was aborted due to timeout” when the design is large (many pages/assets), the network is slow, or servers are under load. That is an infrastructure / product limit, not something fixed by editing SKILL.md.

What to do in the session:

  1. Retry once Canva:start-editing-transaction after a short pause (e.g. 15–30 seconds). Transient failures often succeed on a second attempt.
  2. Open the transaction earlier in the flow (see Step 7 bullet) so a long note-generation stretch in chat does not sit between “ready to edit” and “start transaction.”
  3. If it still fails: tell the user clearly this is a Canva/MCP timeout, not a logic error in the skill. Suggest they try again later, use a stable network / VPN per org policy, or test on a smaller copy of the deck (fewer pages) to confirm the pipeline works.
  4. Fallback: paste the generated speaker notes into the chat grouped by slide (Slide 1: …, Slide 2: …) so the user can enter them manually in Canva’s presenter notes if automation keeps timing out.

Rules

  • Always clone with Canva:resize-design (same dimensions) before edits
  • Read with Canva:get-design-content; resolve page IDs with Canva:get-design-pages before writing notes
  • Primary path: confirm duration early → per-slide budget → generate notes → note-only perform-editing-operations → commit
  • Never edit on-slide text in this skill; only presenter/speaker notes (see Scope: notes only)
  • On start-editing-transaction timeout: retry once, then explain and offer the manual notes fallback (see When start-editing-transaction fails or times out)
  • Batch editing operations where possible

Frequently asked questions

What does the Canva Presentation Time Fitting AI skill do?

Fit a Canva presentation to a target speaking duration by generating or rewriting presenter notes only (visible slide text is not edited). Use when users say "make this a 10-minute presentation", "split time evenly across slides", "generate speaker notes for a 15-minute talk", "fit my deck to [duration]", or "how long per slide for a 20-minute slot".

Why use Canva Presentation Time Fitting on TypingMind?

Because you install it once and use it with any model. Canva Presentation Time Fitting is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Canva Presentation Time Fitting in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/canva-sdks/canva-skills/tree/main/plugins/canva/inactive-skills/presentation-time-fitting. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Canva Presentation Time Fitting?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Canva Presentation Time Fitting?

As many as you like. As long as a model supports skills, you can use Canva Presentation Time Fitting with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Canva Presentation Time Fitting AI skill free?

Yes. It is published on GitHub by canva-sdks under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇