Automating Keynote (JXA-first, AppleScript discovery)
Contents
- •Relationship to the macOS automation skill
- •Core framing
- •Workflow (default)
- •Quick Examples
- •What to load
Relationship to the macOS automation skill
- •This skill focuses on Keynote-specific automation (documents, slides, charts).
- •Use
automating-mac-appsfor cross-app workflows or general macOS scripting foundations. - •Assumes Apple Events knowledge from the related skill.
- •PyXA Installation: To use PyXA examples in this skill, see the installation instructions in
automating-mac-appsskill (PyXA Installation section).
Core Framing
- •JXA (JavaScript for Automation) enables macOS app scripting with JavaScript syntax.
- •AppleScript dictionaries define Keynote's object model—discover via Script Editor.
- •JXA objects are specifiers: read with methods like
.name(), write with assignments. - •Production scripts use JXA for reliability; AppleScript for prototyping.
- •Important: The JXA
Path()function is required when specifying file paths to Keynote (e.g., for images, exports, or opening documents). UsePath("/path/to/file")instead of plain strings.
Workflow (default)
- •Discover terms in Script Editor > File > Open Dictionary > Keynote.
- •Prototype minimal AppleScript:
tell application "Keynote" to get name of document 1. - •Port to JXA:
Application("Keynote").documents[0].name()with try-catch blocks. - •Validate with read-only probes:
Application("Keynote").documents.length > 0. - •Use UI scripting only when dictionary lacks features (e.g.
Application("System Events")).
Quick Examples
Prototype (AppleScript):
applescript
tell application "Keynote"
get name of document 1
end tell
Production (JXA):
javascript
const keynote = Application("Keynote");
if (keynote.documents.length > 0) {
console.log(keynote.documents[0].name());
}
Create Slide:
javascript
const doc = keynote.documents[0];
const slide = doc.slides.push(keynote.Slide({baseSlide: doc.masterSlides['Title - Center']}));
slide.defaultTitleItem.objectText = "New Slide";
Add Image to Slide (note Path() usage):
javascript
const slide = doc.slides[0];
const img = keynote.Image({
file: Path("/Users/you/Desktop/diagram.png"), // Path() required!
position: { x: 100, y: 100 },
width: 800
});
slide.images.push(img);
Validation Checklist
After implementing Keynote automation:
- • Verify Keynote is running and accessible
- • Test slide creation with master slide assignment
- • Confirm image paths use
Path()function - • Check text rendering in default text items
- • Validate export operations complete without errors
When Not to Use
- •For cross-platform presentation automation (use PowerPoint with Python libraries)
- •When AppleScript alone suffices (skip JXA complexity)
- •For web-based presentations (Google Slides, reveal.js)
- •For non-macOS platforms
What to load
- •Keynote JXA basics + runtime caveats:
automating-keynote/references/keynote-basics.md - •Keynote recipes (slides, text, images, export):
automating-keynote/references/keynote-recipes.md - •Deck generator example:
automating-keynote/references/keynote-deck-generator.md - •Chart-aware deck pattern:
automating-keynote/references/keynote-chart-aware-deck.md - •Advanced workflows (charts bridge, magic move, UI scripting):
automating-keynote/references/keynote-advanced.md - •PyXA (Python) practical examples:
automating-keynote/references/keynote-pyxa.md - •PyXA API Reference (complete class/method docs):
automating-keynote/references/keynote-pyxa-api-reference.md