Personalized sales video from a Canva deck
This recipe covers the Canva side for the three inputs: a finished deck, a template plus a
client-details doc, or a brand kit or brand guide plus a client-details doc. Everything else,
including what to pull from the details doc, asking who presents and the whole video, follows
recipe-sales-video-from-pitch-deck.
Needs
The Canva connector (read-design, copy-design, edit-design, export-design; for C, also
list-brand-kits, search-brand-templates, request-outline-review and
generate-design-structured). Without it, ask the person to download the deck as a PDF and use
the pitch-deck recipe.
A. A finished Canva deck
- Call
read-designwith the design id (11 characters after/design/) and the fieldsdesign_metadata,design_content,presenter_notesandthumbnails. Look at every thumbnail. - Drop duplicates. Canva decks often carry an older copy of the deck at the end (in the first run, pages 9–14 repeated 1–8), or a slide that restates another as text. Say which you dropped.
- Speaker notes with talking points are the script's first draft.
- Go to Export.
B. A Canva template plus a client-details doc
- Read the doc and list the missing fields (pitch-deck recipe, Part 1). Ask for anything the deck needs that the doc doesn't say.
- Call
copy-designon the template. Never edit the master. Keep only the pages this deal needs, usingpage_numbers. - Call
read-designon the copy withopen_transaction: trueanddesign_content. Text lives in three places:textelements;textelements insidegroupchildren (cards, list rows);textContentsonshapeelements (pills, tags, badges). Read all three, or fields get missed. A big result is saved to a file: parse it with Python and list everylocator_idwith its text.
- Fill each field with
edit-design, one page per call, usingreplace_texton the full locator id (<page>-<group>-<element>for children) andupdate_titlefor the deck's name. Look at each page's returned thumbnail before moving on:- Keep each value about as long as the placeholder. A long value wraps or runs into the
element beside it (a price beside "/fixed", a heading over two lines). Fix it with a
shorter value, or with
\nwhere a heading should break. - Swap photos with
update_fillon the image element, using assets uploaded withupload-asset-from-urlfrom the client's images. - Clear the template's instruction notes with
replace_speaker_notes. Put the script's first draft there if you like.
- Keep each value about as long as the placeholder. A long value wraps or runs into the
element beside it (a price beside "/fixed", a heading over two lines). Fix it with a
shorter value, or with
- Check for leftover placeholders: search the copy's
design_contentfor[. Then commit the transaction, and show the thumbnails for approval. - Go to Export.
C. A Canva brand kit or brand guide plus a client-details doc
- Read the doc and fill the gaps, as in B.
- Find the brand. Use
list-brand-kitsfor the person's kit, andsearch-brand-templatesfor a presentation template in it. If a brand template exists, use route B on it. - Otherwise generate: write the outline (title "Prepared for ", what we heard,
approach, deliverables, timeline, pricing, end card), each slide's description holding the
real values from the doc. Call
request-outline-review, wait for the person's approval, then callgenerate-design-structuredwith thebrand_kit_id. If the guide is a PDF or a website, not a Canva kit, upload its logo and set the colours and type by hand afterwards withedit-design. - Check every page against the doc (
read-designwith thumbnails): generated decks invent filler. Replace any number, quote or claim the doc doesn't support. Commit, then show the deck for approval. - Go to Export.
Export
Call export-design with {type: "png", pages: [kept pages], width: 1920, export_quality: "pro"}. A 4:3 deck comes out 1920×1440. Download the links right away (they expire) into the
job folder on the person's computer as source/slideNN.png, from its own shell. Record the
design id, title and route (A, B or C) in job-notes.md, then continue at the pitch-deck recipe's
Part 2.
When the deck changes later
Export only the changed pages again, to the same names, and re-render only their spans with
hn4a-compositor render --frames A:B --into. If what's said about a slide changes too,
re-voice that section and redo its lip-sync chunks.
Dead ends
- Reading only top-level
textelements: it missed every field inside cards and pills. - Thumbnails from
read-design(516 px) as video frames: too small. Always export.


