excalidraw-slides
Excalidraw Slide Generator
Transform text into professional Excalidraw slide decks (16:9 aspect ratio) using a robotic, resumable 2-phase workflow.
Core Philosophy
Act as a Presentation Designer. The goal is not just to put text on a canvas, but to visualize ideas.
- Extract Content: Avoid copy-pasting. Summarize, simplify, and structure text into bullet points or punchy headlines.
- Visual Hierarchy: Use size, color, and position to guide the eye.
- 16:9 Canvas: All work happens in 1600x900 pixel frames.
Workflow (Resumable & Robust)
Follow this 2-phase process to ensure stability and fault tolerance.
Phase 1: Planning (Outline)
Trigger: When the user provides a topic or content but NO project folder exists.
- Read Content: Analyze the user's input text.
- Load System Prompt: Read
resources/prompt.mdto understand the outlining strategy. - Create Project Folder:
- Generate a kebab-case folder name from the topic (2-4 words).
- Example: "AI Coding Assistant" →
ai-coding-assistant/ - Example: "Climate Change Solutions" →
climate-change-solutions/ - Create this folder in the root directory.
- Generate Outline: Create
slides_list.mdinside the project folder.- This file must be a Markdown checklist (
- [ ]). - Each item represents one slide.
- Include nested bullets for Narrative, Content, Visuals, and Layout for EACH slide.
- This file must be a Markdown checklist (
- Stop: Notify the user that the outline is ready for review.
Phase 2: Execution (Generation)
Trigger: When slides_list.md exists in a project folder (either just created or user provided).
Execution Strategy: Use sub-agents for efficiency. You have two options:
Option A: Sequential Generation (Default)
- Generate one slide at a time
- Good for: Early validation, user feedback iterations
Option B: Batch Generation with Sub-Agent (Recommended for speed)
- Use Task tool to generate 2-3 slides in parallel
- Good for: Finalizing complete decks, faster iteration
Batch Generation Workflow:
- Read next 2-3 unchecked items from
slides_list.md - Call Task tool with
subagent_type="general-purpose" - Prompt: "Generate these N slides following the workflow below. For each slide:
- Read SKILL.md to understand Phase 2 execution steps
- Generate Excalidraw JSON for each slide
- Generate SVG illustration for each slide (theme is in the outline)
- Save each slide file
- Report back with file paths created"
- Wait for completion and verify all files exist
- Mark items as completed in
slides_list.md
Detailed Steps (for Sequential or Batch):
-
Locate Project: Find the project folder containing
slides_list.md. -
Read Checklist: Open
slides_list.md. -
Find Next Task: LOCATE the first unchecked item (
- [ ]) OR next 2-3 unchecked items (for batch).- If all checked, stop.
-
Generate Slide:
- Extract the details (Narrative, Content, Visuals, Layout) for that specific slide.
- Select the matching layout from
resources/slide-patterns.md. - Generate the Excalidraw JSON.
-
Generate SVG Illustration (Always required - theme from outline):
- Extract SVG theme from the "视觉画面" section in
slides_list.md. - Read SVG prompt template from
resources/svg-prompt.md. - Use Task tool to generate SVG code:
- Call
Tasktool withsubagent_type="general-purpose" - Prompt: "Read resources/svg-prompt.md. Using that template, generate SVG code for theme: '[EXTRACTED SVG THEME]'. Output ONLY the SVG code, no explanations."
- Wait for completion and capture the output
- Verify the output is valid SVG code (starts with
<svg, contains</svg>)
- Call
- Generate unique 32-character hexadecimal file ID (use
openssl rand -hex 16). - Save SVG as
[folder-name].illustration-[N].svgin project folder. - Embed SVG in markdown file:
- Add
## Embedded Filessection between## Text Elementsand## Drawing - Format:
[fileId]: [[filename.svg]](e.g.,e9c970134433484397edf4ca2699fd74355d9c22: [[ai-coding-assistant.illustration-01.svg]]) - Add image element to JSON elements array with
fileIdmatching the ID above - Keep
filesobject as empty{}
- Add
- See examples/svg-embed-example.md for complete reference
- Extract SVG theme from the "视觉画面" section in
-
Save File: Save as
[folder-name].Slide-[N].excalidraw.mdinside the project folder.- Example:
ai-coding-assistant/ai-coding-assistant.Slide-01.excalidraw.md - N is the slide number (01, 02...).
- Example:
-
Update Checklist: Edit
slides_list.mdto mark items as completed (- [x]). -
Loop: REPEAT step 3-7 until you decide to stop for user feedback or finish all slides.
Output Format (Slide Files)
Follow this output structure precisely:
⚠️ CRITICAL: JSON Format Requirements
- The JSON output must be valid JSON without any comments
- DO NOT use
//comments inside the JSON block- DO NOT use trailing commas
- DO NOT use unquoted keys
- All strings must use double quotes
"not single quotes'- NO nested double quotes in values: Use single quotes
'inside text values
- ✅ Correct:
"text": "He said 'hello'"- ❌ Wrong:
"text": "He said \"hello\""(causes JSON parsing errors)
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
%%
## Drawing
\`\`\`json
{JSON 完整数据}
\`\`\`
%%
Coordinate System & Frames
- Slide Size: 1600 (width) x 900 (height).
- Positioning: Since files are separate, always place the Frame at
x: 0, y: 0. - Frames: Use Frame elements (
type: "frame") for all slides.- All elements for a slide must be visually inside the frame's bounds.
- Crucial: element
frameIdmust point to the parent frame'sid.
Styled Elements
Typography
- Font: Use
fontFamily: 5(Excalifont) for a hand-drawn look, or1(Virgil) if requested. - Sizes:
- Title: 60-80px
- Subtitle / Header: 36-48px
- Body: 20-28px
- Small: 16px
Colors (Theme) - "Warm Paper & Morandi"
Use this specific palette for all slides.
- Canvas Background:
#F0EEE6(Warm Cream). - Text Main:
#1A1A1A(Charcoal). - Text Secondary:
#4A4A4A(Dark Gray). - Brand Accent:
#D97757(Terracotta) - for Headers, key highlights, buttons. - Card/Shape Backgrounds:
- Sand:
#EBE5D5(Default for containers) - Sage:
#D1E0D7 - Lavender:
#D0D0E3 - Soft Red:
#E09F87
- Sand:
JSON Structure Template
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"id": "slide-frame",
"type": "frame",
"x": 0, "y": 0, "width": 1600, "height": 900,
"name": "01 Title",
"backgroundColor": "#F0EEE6"
},
{
"id": "title-text",
"type": "text",
"x": 800, "y": 450,
"text": "Presentation Title",
"textAlign": "center",
"strokeColor": "#1A1A1A",
"frameId": "slide-frame"
}
],
"appState": { "viewBackgroundColor": "#F0EEE6" },
"files": {}
}
References
Core Resources
- resources/prompt.md: System prompt for generating the outline (emphasizes text hierarchy and layout over visuals).
- resources/slide-patterns.md: Standard layouts (Title, Content, Split, Grid).
- resources/excalidraw-schema.md: JSON element reference (colors, shapes, text).
- resources/svg-prompt.md: SVG illustration prompt template for Anthropic-style graphics.
Examples
- examples/project-structure.md: Directory structure and file naming conventions.
- examples/slides_list.md: Sample outline file structure.
- examples/pitch-deck.md: Complete JSON example (3 slides).
- examples/svg-embed-example.md: SVG embedding guide with file ID generation and positioning.