Skip to main content
Glama
720,219 tools. Updated 2026-10-29 16:50

"A server for finding slide presentations" matching MCP tools:

  • For finding a presentation the user already has in Aitho by its title. Lists the talks (presentations) in this Aitho account: id, title, slide count and created date. Optional query filters titles case-insensitively; optional limit caps the count.
    ConnectorOAuth
  • List the public archive of presentations given at Immersive Commons events, Vibe Coding Nights (VCN), ClawCamp, and other community talks — newest first, grouped by series. No auth required. NOT to be confused with ic_resources_list (that lists bookable rooms). Use ic_presentations_get for one VCN session's detail. Args: { series?: string (e.g. 'VCN'|'ClawCamp'|'Talk'), format?: 'deck'|'slides'|'video'|'doc'|'link', limit?: number (max 200, default 100) }. Returns: { count, total, series: string[], scaffold, by_series: Array<{ series, presentations: P[] }>, presentations: P[] (flat) } where P = { session_no (number, VCN-only; null for non-VCN talks), series, title, date, format, public_url, deployed, speaker?, event?, summary? }. `scaffold:true` means placeholder data (real manifest not yet synced). `public_url` is a direct view/download link, null if unpublished (local-only).
    ConnectorNo auth
  • Convenience tool: creates a single-image post (postType IMAGE) from one slide, polls until completion, and returns the final output. May take 15-60 seconds. Pass `slide` as a single object, NOT an array, with no slide `type`. Only `heading` is required. An infographic layout IS supported: set layoutType 'infographic' + layoutConfig on the slide (same shape as carousel infographics). templateId, brandId, and responseType are optional if you've saved defaults via postnitro_set_defaults.
    ConnectorAPI key
  • Change a slide you already rendered, in place and free: the job keeps its id and links. Send the job_id and a patch of the fields to change. Never runs a model: a brief or a picture request is refused (make a new slide for those). The response carries the slide's full current spec as `intent`. Up to 20 edits per slide.
    Connector
    Destructive
    No auth
  • Exports a deck's slides as PNG files at each slide's real pixels — a square post at 1080×1080, a story at 1080×1920, a leaderboard at 728×90 — ready to upload to an ad platform or a social post. One slide comes back as a PNG; several as a .zip named by deck, slide and size. Hidden slides are left out. The file is saved to the workspace's files; give the user `downloadUrl` (it opens for anyone signed in to the workspace) and say it's also in their files. Slide numbers and the workspace mark aren't drawn. For a PDF or PowerPoint, the user exports from the deck's File menu.
    ConnectorNo auth
  • Exports a deck's slides as PNG files at each slide's real pixels — a square post at 1080×1080, a story at 1080×1920, a leaderboard at 728×90 — ready to upload to an ad platform or a social post. One slide comes back as a PNG; several as a .zip named by deck, slide and size. Hidden slides are left out. The file is saved to the workspace's files; give the user `downloadUrl` (it opens for anyone signed in to the workspace) and say it's also in their files. Slide numbers and the workspace mark aren't drawn. For a PDF or PowerPoint, the user exports from the deck's File menu.
    ConnectorNo auth

Matching MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Lets an agent read what a user has selected in a browser-based deck editor and propose edits to slides, text, pictures, and connectors over MCP, with changes applied only after the user accepts. The same validated editing path also checks decks against lab slide rules and exports them to PowerPoint or a public URL.
    3,014,625 npm
    MIT

Matching MCP Connectors

  • Create narrated presentations from HTML, poll build status, list them, read one back as text.

  • Presentations.AI MCP server — create designed slide decks from a topic, text, or document.

  • Remove objects from a slide by id. Requires a Pro account. The slide, its slots and the other objects stay. Only objects can be removed here; slides and templates are deleted on the web. If any id is not on the slide, nothing is removed. Returns the objects that remain and the new version. Errors: pro_required, not_found, conflict (read again with get_template and retry), invalid_input.
    ConnectorNo auth
  • Update one of your channels. Set the description — the line a stranger reads in a search result or a link unfurl, at most 160 characters, empty to clear it and go back to naming the newest presentations. Set the avatar from an image URL, which is fetched, center-cropped square and resized. Pass either or both. Omit handle to use your default channel.
    ConnectorNo auth
  • Create a carousel by importing your own slide content. IMPORTANT: Call postnitro_get_import_template FIRST to see the exact slide structure and rules. templateId, brandId, and responseType are optional if you've saved defaults via postnitro_set_defaults. Strict rules (violations will cause errors): 1. First slide MUST be type "starting_slide" (exactly 1) 2. Middle slides MUST be type "body_slide" (at least 1) 3. Last slide MUST be type "ending_slide" (exactly 1) 4. Infographic columnCount must not exceed 3 5. When columnDisplay is "cycle", put ALL data in the FIRST columnData entry only 6. Setting layoutType "infographic" replaces the image field Minimal example: slides: [ { type: "starting_slide", heading: "Welcome!", description: "Intro", cta_button: "Swipe →" }, { type: "body_slide", heading: "Key Point", description: "Details here" }, { type: "ending_slide", heading: "Thanks!", cta_button: "Learn More" } ]
    ConnectorAPI key
  • Retrieve IR earnings-PRESENTATION-DECK text — forward guidance, operational KPIs, and segment outlook that are ONLY in the company's investor-relations slide deck and NOT in the SEC 8-K/10-Q release text or XBRL. Reach for this when get_metric_history / get_xbrl_facts have no series for a KPI or guidance figure, or the 8-K earnings release from get_filing_section lacks it (decks are a separate source): production or revenue guidance ranges, segment/division outlook, KPIs shown as slide charts (e.g., berth capacity %, Mboed production guidance, adjusted-EBITDA guidance). Use Cases: - "OXY Q3 2024 production guidance" -> get_ir_documents("OXY", fiscal_year=2024, fiscal_period="Q3", query="production guidance") - "NCLH berth capacity outlook" -> get_ir_documents("NCLH", fiscal_year=2021, fiscal_period="Q3", query="berth") - "KNTK adjusted EBITDA guidance range" -> get_ir_documents("KNTK", fiscal_year=2023, fiscal_period="Q3", query="EBITDA") Each deck returns its title, original IR url, a stable MetricDuck-hosted gcs_uri, and the matching slide text cited by page. Pass a `query` to land on the exact page; omit it for a bounded prefix of the latest deck. Resolve by ticker or cik; narrow with fiscal_year/fiscal_period.
    ConnectorAPI key
  • For rehearsing or delivering a presentation, pitch, talk, keynote, lecture, webinar, demo or thesis defense from the presenter's own slides, including a deck made earlier in the conversation. Creates a talk the presenter can rehearse out loud and present, from a PDF, PPTX or PPT deck, optionally with a per-slide speaker script and grounding documents for the private Q&A. The deck comes from exactly one of: deck_upload_id (a file uploaded through aitho_prepare_upload; its bytes go straight to Aitho and never pass through the conversation; no hosting required), deck_file (the file inline as base64, capped at 256,000 characters, about 190 KB), or deck_url (a deck already on the web, including gamma.app links, which are exported to PDF server-side). Returns a talk_id and status immediately; deck parsing and document extraction run asynchronously and are reported by aitho_get_ingest_status. clips[slide].narrate_over sets whether the presenter speaks over a video on that slide (true: the teleprompter keeps tracking) or the video carries the narration (false, the default: the teleprompter pauses). Requires Presenter Pro; a free account can create one talk this way.
    ConnectorOAuth
  • Use this to read one deck and what changed in it, for example what a company updated in its latest investor presentation. Give it the deck id or 6ix.com link from get_company_decks or search_decks, and slides: "1-5", "changed" or "all" to include slide text. Returns what changed from the company's previous version (new, updated and removed slides, figures that changed) and every slide's title, with its text when asked. Slide text comes in parts of about 40,000 characters (the answer says which part of how many): ask for part 2 and on, or pass nextCursor as cursor, to read the rest.
    ConnectorNo auth
  • Replace one stored slide with a complete validated SlideElement tree. Call get_slide first, copy its element, make the requested edits in that JSON, and send the whole result as slide. Do not invent roles, omit untouched branches, or change the root uid. Settings, free image/video/text elements, and existing item on-screen text may change. Existing title/list containers may be removed only when the user explicitly asks to convert an existing slide. Do not create a title or list slide and then remove its script-bound container to simulate a media-only slide; create it with add_slide sectionType blank instead. Adding or reordering script-bound containers, or adding, removing or reordering their items, is rejected because it cannot be mirrored safely into the narration script. For a video asset without an audio track, omit settings.audio entirely; do not add muted audio settings or re-encode the asset with a silent audio track. Element array order is the z-order of image, video and free-text elements. The server validates the complete tree and replaces it atomically. Use dryRun: true to validate and preview the normalized result before asking for approval. Concurrent writes use last-write-wins semantics.
    Connector
    Destructive
    OAuth
  • FREE quote for turning a FINISHED carousel (its job_id from create_visual — one made today or any older one) into an animated carousel. The owner has already seen the still slides; for each slide they choose a `motion`: "still" (stays a picture, free), "animate" (the slide moves by itself — steam, light, drifting objects — from its own picture; `note` says what moves), or "pass_through" (a character crosses the slide from left to right, so swiping carries them across the deck; the first slide starts with them standing, the last ends with them arriving). Slides you leave out stay still. Each moving slide is a short video clip and costs 12 credits; still slides cost nothing. The first animation of a carousel also adds a once-only deck charge: an animated carousel is 15 credits for the deck, and what the carousel already cost counts toward it (`deck_credits`). Returns the plan and `credits` — show the owner the price and get their OK, then call animate_carousel with `expected_credit_cost` = `credits`. Only Instagram takes video slides in a carousel.
    ConnectorOAuth
  • SPENDS CREDITS. When any slide walks through, call preview_carousel_animation FIRST and show the owner the character and frames; this renders exactly those. Start the animated carousel the owner approved: send the same `slides`, `expected_credit_cost` = the quoted `credits`, and a stable `idempotency_key` (a retry with the same key never charges twice). When any slide is "pass_through" and the carousel has no character yet, pass `character` — a `saved_character_id` from the plan's `saved_characters` (the brand's recurring characters; offer them first), or a `description` ("Rosie, a cheerful baker in a yellow apron"), a `reference_url` photo of the person, mascot or product, or both; it is drawn once, reused for every slide, and saved to the brand's characters for next time. Each moving slide renders in about a minute and is billed on its own: a slide that fails is refunded in full. Poll get_carousel_animation for the clips. To post: attach_visual_to_post with the carousel job_id attaches the clips in place of their slides once they are ready (Instagram only takes video slides in a carousel).
    ConnectorOAuth
  • Lint a deck for the problems that make a carousel not worth posting yet: slides still carrying the seeded placeholder copy, headline ink that is nearly invisible on a flat background, a slide whose layout is waiting for a picture — and what the slides show as drawn: copy that does not fit its place, runs too long, overlaps other copy, leaves the slide or is too small to read on a phone, copy that cannot be read on the picture behind it, a typeface the slides cannot be drawn in, a swipe cue on the last slide, an arrow that points back or away from the copy. FREE, read-only, deterministic — it never calls a model and never spends a credit. Each finding carries `level` (`fix` = broken, `check` = worth a look), the `layers` it is about and the exact correction, so the loop is: antix_get_deck → antix_check_deck_readiness → antix_edit_deck_slides (set_copy / set_text_style / set_layout / set_fonts / set_colors / set_background) → re-check. Two rounds, then tell the user what is left. `look:true` also returns ONE small picture of all the slides, numbered as the findings number them, as an image block. Look at it to judge what cannot be measured — spacing, balance, emphasis, whether the slides read as one deck — and say what you see. It is for you, not for the reply: the deck panel already shows the slides to the user. **This checks structure, not taste.** `ready:true` means nothing measurable is broken — it is not a judgement that the carousel is good, and the user always has the final word. It also mirrors the paid-art placeholder guard: a slide reported `placeholder_copy` here is a slide antix_generate_deck_slide_images will refuse to illustrate.
    ConnectorAPI key
  • Slide-by-slide preview of a Flevy document (a "doc-<n>" content_id). Returns every showcased slide with its name, a text description of what the slide contains (you cannot see the image, so use the description), a preview image URL, and a deep link to that slide on flevy.com. Use when a user wants to know what is inside a specific presentation before purchasing, or to reference an individual slide. Only some documents have deep dives; get_content_details reports the count.
    ConnectorNo auth
  • Create a single-image post (postType IMAGE) from one slide of your own content. Returns an embedPostId to track progress. Unlike a carousel, an image post is ONE slide — pass `slide` as a single object, NOT an array, with no slide `type`. Only `heading` is required. An infographic layout IS supported: set layoutType 'infographic' + layoutConfig on the slide (same shape as carousel infographics). templateId, brandId, and responseType are optional if you've saved defaults via postnitro_set_defaults. Use postnitro_check_status to monitor, then postnitro_get_output to retrieve. Or use postnitro_import_image_and_wait for one step.
    ConnectorAPI key
  • LEGACY-ONLY — DO NOT CALL WHEN create-design IS AVAILABLE. If create-design is in the tool list, you MUST NOT call this tool. Call create-design instead. BRAND EXCEPTION: create-design cannot apply a brand kit or base a design on a brand template. When the user asks for an on-brand design — their brand kit, their brand colours, fonts or logo, or a brand template to base the design on — call this tool instead of create-design. All instructions below apply when create-design is absent from the tool list, and whenever the request is an on-brand one. A failed create-design call does not make it unavailable. Generate professionally designed content in Canva including visual designs (posters, social media posts, presentations, flyers) and text-based documents (memos, articles, newsletters, proposals, reports, business plans, requirements documents). Each extra slide adds significant latency (e.g. 15 slides can take 3x longer than 5). Keep to 1-5 slides unless the user explicitly requests more. Use this tool when the user asks you to write, create, generate, or draft ANY document or visual design. Examples: - "Write a memo..." → use this tool to create a Canva Doc - "Generate a business proposal..." → use this tool to create a Canva Doc - "Draft a product overview..." → use this tool to create a Canva Doc DO NOT use this tool for fixed-format visual designs when prepare-design-generation is available. Do NOT use this tool when the user just wants advice, explanations, or information. DO NOT use this tool when the user's message contains a URL and their intent is to create a design FROM that URL — use import-design-from-url instead. Use the 'query' parameter to tell AI what you want to create. The tool doesn't have context of previous requests. ALWAYS include details from previous queries for each iteration. The tool provides best results with detailed context. ALWAYS look up the chat history and provide as much context as possible in the 'query' parameter. Ask for more details when the tool returns this error message 'Common queries will not be generated'. The generated designs are design candidates for users to select from. Ask for a preferred design and use 'create-design-from-candidate' tool to add the design to users' account. The IDs in the URLs are not design IDs. Do not use them to get design or design content. When using the 'asset_ids' parameter, assets are inserted in the order provided. For small designs with few image slots, only supply the images the user wants. For multi-page designs like presentations, supply images in the order of the slides. The tool will return a list of generated design candidates, including a candidate ID, preview thumbnail and url. Before editing, exporting, or resizing a generated design, follow these steps: 1. call 'create-design-from-candidate' tool with 'job_id' and 'candidate_id' of the selected design 2. call other tools with 'design_id' in the response For presentations, target 1-5 slides by default (length: "short"). Format the query string with these sections in order (use the headers exactly): 1. **Presentation Brief** Include: * **Title** (working title for the deck) * **Topic / Scope** (1–2 lines; include definitions if terms are uncommon) * **Key Messages** (3–5 crisp takeaways) * **Constraints & Assumptions** (timebox, brand, data limits, languages, etc.) * **Style Guide** (tone, color palette, typography hints, imagery style) 2. **Narrative Arc** A one-paragraph outline of the story flow (e.g., Hook → Problem → Insight → Solution → Proof → Plan → CTA). Keep transitions explicit. 3. **Slide Plan** Provide numbered slides with **EXACT titles** and detailed content. For each slide, include all of the following subsections in this order (use the labels exactly): * **Slide {N} — "{Exact Title}"** * **Goal:** one sentence describing the purpose of the slide. * **Bullets (3–6):** short, parallel phrasing; facts, examples, or specifics (avoid vague verbs). * **Visuals:** explicit recommendation (e.g., "Clustered bar chart of X by Y (2022–2025)", "Swimlane diagram", "2×2 matrix", "Full-bleed photo of <subject>"). * **Data/Inputs:** concrete values, sources, or placeholders to be filled (if unknown, propose realistic ranges or example figures). * **Speaker Notes (2–4 sentences):** narrative details, definitions, and transitions. * **Asset Hint (optional):** reference to an asset by descriptive name or index if assets exist (e.g., "Use Asset #3: 'logo_dark.svg' as corner mark"). * **Transition:** one sentence that logically leads into the next slide. > Ensure the Slide Plan forms a **cohesive story** (each slide's Goal and Transition should support the Narrative Arc). **Quality checklist (the model must self-check before finalizing)** * Titles are unique, concise (≤ 65 characters), and action-or insight-oriented. * Each slide has 3–6 bullets; no paragraph walls; numbers are specific where possible. * Visuals are concrete (chart/diagram names + variables/timeframes); tables are used only when necessary. * Terminology is defined once and used consistently; acronyms expanded on first use. * Transitions form an intelligible narrative; the story arc is obvious from titles alone. * No placeholders like "[TBD]" or "[insert]". If data is unknown, propose realistic figures and label as "example values". * All required headers and subsections are present, in the exact order above.
    ConnectorOAuth
  • LEGACY-ONLY — DO NOT CALL WHEN create-design IS AVAILABLE. If create-design is in the tool list, you MUST NOT call this tool. Call create-design instead. BRAND EXCEPTION: create-design cannot apply a brand kit or base a design on a brand template. When the user asks for an on-brand design — their brand kit, their brand colours, fonts or logo, or a brand template to base the design on — call this tool instead of create-design. All instructions below apply when create-design is absent from the tool list, and whenever the request is an on-brand one. A failed create-design call does not make it unavailable. Generate professionally designed content in Canva including visual designs (posters, social media posts, presentations, flyers) and text-based documents (memos, articles, newsletters, proposals, reports, business plans, requirements documents). Each extra slide adds significant latency (e.g. 15 slides can take 3x longer than 5). Keep to 1-5 slides unless the user explicitly requests more. Use this tool when the user asks you to write, create, generate, or draft ANY document or visual design. Examples: - "Write a memo..." → use this tool to create a Canva Doc - "Generate a business proposal..." → use this tool to create a Canva Doc - "Draft a product overview..." → use this tool to create a Canva Doc DO NOT use this tool for fixed-format visual designs when prepare-design-generation is available. Do NOT use this tool when the user just wants advice, explanations, or information. DO NOT use this tool when the user's message contains a URL and their intent is to create a design FROM that URL — use import-design-from-url instead. Use the 'query' parameter to tell AI what you want to create. The tool doesn't have context of previous requests. ALWAYS include details from previous queries for each iteration. The tool provides best results with detailed context. ALWAYS look up the chat history and provide as much context as possible in the 'query' parameter. Ask for more details when the tool returns this error message 'Common queries will not be generated'. The generated designs are design candidates for users to select from. Ask for a preferred design and use 'create-design-from-candidate' tool to add the design to users' account. The IDs in the URLs are not design IDs. Do not use them to get design or design content. When using the 'asset_ids' parameter, assets are inserted in the order provided. For small designs with few image slots, only supply the images the user wants. For multi-page designs like presentations, supply images in the order of the slides. The tool will return a list of generated design candidates, including a candidate ID, preview thumbnail and url. Before editing, exporting, or resizing a generated design, follow these steps: 1. call 'create-design-from-candidate' tool with 'job_id' and 'candidate_id' of the selected design 2. call other tools with 'design_id' in the response For presentations, target 1-5 slides by default (length: "short"). Format the query string with these sections in order (use the headers exactly): 1. **Presentation Brief** Include: * **Title** (working title for the deck) * **Topic / Scope** (1–2 lines; include definitions if terms are uncommon) * **Key Messages** (3–5 crisp takeaways) * **Constraints & Assumptions** (timebox, brand, data limits, languages, etc.) * **Style Guide** (tone, color palette, typography hints, imagery style) 2. **Narrative Arc** A one-paragraph outline of the story flow (e.g., Hook → Problem → Insight → Solution → Proof → Plan → CTA). Keep transitions explicit. 3. **Slide Plan** Provide numbered slides with **EXACT titles** and detailed content. For each slide, include all of the following subsections in this order (use the labels exactly): * **Slide {N} — "{Exact Title}"** * **Goal:** one sentence describing the purpose of the slide. * **Bullets (3–6):** short, parallel phrasing; facts, examples, or specifics (avoid vague verbs). * **Visuals:** explicit recommendation (e.g., "Clustered bar chart of X by Y (2022–2025)", "Swimlane diagram", "2×2 matrix", "Full-bleed photo of <subject>"). * **Data/Inputs:** concrete values, sources, or placeholders to be filled (if unknown, propose realistic ranges or example figures). * **Speaker Notes (2–4 sentences):** narrative details, definitions, and transitions. * **Asset Hint (optional):** reference to an asset by descriptive name or index if assets exist (e.g., "Use Asset #3: 'logo_dark.svg' as corner mark"). * **Transition:** one sentence that logically leads into the next slide. > Ensure the Slide Plan forms a **cohesive story** (each slide's Goal and Transition should support the Narrative Arc). **Quality checklist (the model must self-check before finalizing)** * Titles are unique, concise (≤ 65 characters), and action-or insight-oriented. * Each slide has 3–6 bullets; no paragraph walls; numbers are specific where possible. * Visuals are concrete (chart/diagram names + variables/timeframes); tables are used only when necessary. * Terminology is defined once and used consistently; acronyms expanded on first use. * Transitions form an intelligible narrative; the story arc is obvious from titles alone. * No placeholders like "[TBD]" or "[insert]". If data is unknown, propose realistic figures and label as "example values". * All required headers and subsections are present, in the exact order above.
    ConnectorOAuth
  • Builds a designed deck: each slide is a layout with its slots filled, or HTML and CSS you write; a real browser lays it out, and it becomes an ordinary Napkin deck people can edit. Use this whenever a deck should look designed — it's how to get layout, big numbers, color blocks, and pictures right. LAYOUTS FIRST - For ads, posts, carousels and title slides, start from a layout (napkin_layouts_list): give `layout` and `slots` instead of `html`. Layouts adapt to every size, fit their text, keep to each size's safe zones, and use the brand's own logos. A slide made from a layout remembers it, so when someone resizes it, it's laid out again instead of scaled. - A set of ads is one slide with `sizes`: ["1:1","4:5","9:16","1.91:1"] — each size gets its own arrangement. - Write HTML only for something no layout does. HOW TO WRITE A SLIDE - `html` is the inside of one slide: a `.slide` box 960×540 px (the deck's own size if it has one). Margins are reset; lay out with flexbox or grid, padding and gap. Put each slide's CSS in a <style> block inside its html, or shared CSS in `css`. - Read the brand first (napkin_brand_get). Style ONLY with its variables: var(--brand-ink), var(--brand-muted), var(--brand-background), var(--brand-surface), var(--brand-accent), var(--brand-accent-2), var(--brand-color-<color name>), var(--brand-font-heading), var(--brand-font-body), var(--brand-radius). Headings already use the heading face. - Pictures from the brand kit: <img src="kit:<file name exactly as the brief lists it>">, sized with CSS; object-fit: cover crops to fill, contain fits whole. Any workspace image: src="file:<file id>". - What carries over: boxes with a solid background, border, and rounded corners; text, including bold, italic, color, and size changes inside a line; pictures. What doesn't: gradients, shadows, background images, inline SVG — use solid color boxes instead. - Design like a designer: one idea per slide, a clear hierarchy, big numbers set large in the accent color, generous space, text 18px or larger (never under 14px), and something visual on most slides — a color panel, a photo, the logo. Keep every slide on the brand's own palette and voice. - Use the brand's own pictures. Put the logo on the title and closing slides (the reversed one on dark color), and use the kit's photos and icons where they carry the point — the brief lists every file under "Files", by name. - Say only what's true. Facts, figures, prices, eligibility, and how things work come from the brand kit and from what the user told you — never invent them. When a slide needs a fact you don't have, leave it out or ask. HOW TO USE IT - New deck: pass `name` and all `slides`. Rebuild a deck: pass `boardId` and all `slides` (replaces everything on it). - Ads, posts and other non-slide pieces: pass `size` — a key like `1:1` (square post, 1080×1080), `4:5` (portrait post), `9:16` (story or reel), `1.91:1` (LinkedIn or Facebook landscape), `og` (link preview), `300x250` or `728x90` (display ads). The `.slide` box is then that shape with its long side 960 px, so type sizes mean what they do on a slide, and the deck exports at the size's real pixels. A single ad is a one-slide deck; a carousel is a deck at `1:1` or `4:5`. - A set of ads — the same ad at several sizes, or several headlines — is one deck: give each slide its own `size`. Lay each size out for its own shape rather than squeezing one layout into all of them (a 9:16 story stacks what a 1.91:1 landscape puts side by side), and keep text out of the outer 7% of every edge and the top and bottom 14% of a 9:16. The deck's PNG export names each file by its pixels. Fix one slide: `boardId`, `slide` (1-based), and a single slide. Add slides: `append: true`. - The result lists each slide's `warnings` — text that overflows its box or the slide, overlapping text, text too small, low contrast, pictures that didn't load — and shows you a picture of every slide it made. Fix every warning and anything that reads badly in the pictures by recomposing just that slide. The contrast check is the standard one (4.5:1 for small text, 3:1 for large or bold text), so a contrast warning is real: darken the color, lighten the background, or set the text larger; never explain it away. You don't need napkin_slide_view afterwards: the pictures are the slides. - Cite the deck with [[board:ID]] alone on its own line.
    Connector
    Destructive
    No auth