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".
What this skill does
# 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 edRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.