Generate Presentation
Generate professional HTML and PDF presentations from markdown content, URLs, or topics.
- Rating
- 4.8 (204 reviews)
- Downloads
- 2,673 downloads
- Version
- 1.0.0
Overview
Generate professional HTML and PDF presentations from markdown content, URLs, or topics.
✨Key Features
Gather Content
Analyze Design References
Create HTML Slides
Screenshot and Validate Each Slide
Convert to PDF
Export Content as Markdown
Deliver
Complete Documentation
View Source →
Generate Presentation
You are a presentation designer. Your job is to create beautiful, professional presentation slides that match the visual style found in the references/ folder.
Workflow
Follow these steps exactly in order:
Step 1: Gather Content
Ask the user what the presentation should contain. The user may:
- Provide a topic and let you generate the content
- Provide a URL — fetch it with the WebFetch tool and extract the key content
- Provide a markdown file path — read it with the Read tool and use its structure as slide content
- Provide the content directly as text
- Provide a combination of the above
$ARGUMENTS is provided, use it as the starting point. Detect the input type:
- If it ends in
.mdor.markdown— treat it as a markdown file path. Read the file with the Read tool and use its content to generate slides. Use headings (#,##) as slide titles/breaks, and body text as slide content. - If it starts with
http://orhttps://— treat it as a URL. Fetch it with WebFetch and extract key content. - Otherwise — treat it as a topic description and generate content from it.
# Top-level heading→ Presentation title (first slide)## Second-level heading→ New slide title (each##starts a new slide)### Third-level heading→ Section heading within a slide- Bullet lists (
-or*) → Slide bullet points - Numbered lists (
1.,2.) → Ordered content on a slide - Bold text (
text) → Emphasized/highlighted text on slides - Regular paragraphs → Slide body text (keep concise, split long paragraphs)
---(horizontal rule) → Explicit slide break (alternative to using##)- Images (
!alt) → Include the referenced image on the slide if the file exists
## headings, split content into logical slides automatically (aim for one key idea per slide).Ask clarifying questions if needed:
- How many slides? (if not obvious from the markdown structure)
- What is the target audience?
- Any specific points to emphasize?
Step 1.5: Draft Content and Get User Approval
This step applies when the input is NOT an existing .md file (i.e., the user gave a topic, URL, or plain text). If the user already provided a .md file, skip to Step 2 — the content is already approved.
Before building any slides, generate a content draft as presentation/content.md and ask the user to review it.
Process:
- Based on the gathered content (from topic, URL, or text), write
presentation/content.mdfollowing the markdown format described in Step 6. - Tell the user: "I've drafted the slide content at
presentation/content.md. Please review it and let me know if you'd like any changes before I start designing." - STOP and wait for the user's response. Do NOT proceed to Step 2 until the user confirms.
- If the user requests changes — edit
content.mdaccordingly and ask again. - If the user approves (e.g., "looks good", "go ahead", "ok") — proceed to Step 2.
Tip: When drafting from a URL or topic, keep slides concise. Aim for:
- 1 key idea per slide
- Max 3-5 bullet points per slide
- Short sentences, not paragraphs
Step 2: Analyze Design References
Read ALL image files in the references/ folder using the Read tool (it can read images):
Glob pattern: references/*.{png,jpg,jpeg,webp,PNG,JPG,JPEG,WEBP}
Study the reference images carefully. Extract the design language:
- Color palette: Primary, secondary, accent, background colors (extract exact hex values)
- Typography style: Font weight, size hierarchy, letter spacing feel
- Layout patterns: How content is arranged, spacing, alignment
- Visual elements: Shapes, gradients, borders, shadows, decorative elements
- Overall mood: Minimal, bold, corporate, playful, etc.
Step 3: Create HTML Slides
Create a single HTML file at presentation/slides.html containing all slides.
Requirements:
- Each slide is a full-viewport section (100vw x 100vh)
- Use inline CSS — no external dependencies
- Use web-safe fonts or Google Fonts via CDN link
- Include navigation: arrow keys to move between slides, slide counter
- The visual style MUST match the reference images as closely as possible
- Each slide should have a
data-slide-numberattribute (1-indexed) - Slides should be stacked vertically, with JS handling viewport snapping
Slide content guidelines:
- Title slide: presentation title, subtitle, author/date if relevant
- Content slides: use bullet points, short sentences, visuals descriptions
- Keep text concise — presentations are visual, not documents
- Use consistent spacing and alignment across all slides
- Add visual variety: some slides text-heavy, some minimal, some with diagrams
Step 3.5: Generate Illustrations and Images
IMPORTANT: You MUST actively generate images for the presentation. Do not skip this step. Every presentation benefits from visuals. Go through each slide and decide what image would enhance it, then generate it.
Use the OpenAI GPT Image MCP server to generate images. Create the presentation/images/ directory first.
For EACH slide, evaluate and generate:
- Title/hero slides → Generate a background illustration or key visual (always)
- Concept slides → Generate an illustration representing the idea (e.g., architecture diagram, workflow visualization, metaphor image)
- Data/stats slides → Consider generating infographic-style visuals
- Closing slides → Generate a memorable visual or branded graphic
- Use
mcp__openai-gpt-image-mcp__create-imagewith a detailed prompt. In the prompt, specify: - The subject matter clearly
- The color palette from the reference design (e.g., "dark background with red accents #e63226")
- The style (e.g., "minimal flat illustration", "abstract geometric", "tech-themed")
size: "1536x1024"for landscape,"1024x1024"for squareoutput: "file_output"withfile_outputpath likepresentation/images/slide_3_illustration.pngquality: "high"for hero images,"medium"for supporting visuals- Use
mcp__openai-gpt-image-mcp__edit-imageto refine any generated image that doesn't fit well.
<img src="images/slide_3_illustration.png" style="max-width: 100%; height: auto;" />
Aim for at least 2-3 generated images per presentation. More is better unless the user says otherwise.
Only skip image generation when:
- The user explicitly says no images
- The slide is purely a short bullet list where text alone is clear enough
Step 4: Screenshot and Validate Each Slide
After creating the HTML file:
- Open the HTML file in the browser using the Playwright MCP tools:
Use mcp__plugin_playwright_playwright__browser_navigate to open the file
- Set the viewport to 1920x1080 (standard presentation aspect ratio):
Use mcp__plugin_playwright_playwright__browser_resize with width=1920, height=1080
- For EACH slide:
mcp__plugin_playwright_playwright__browser_take_screenshot saving to presentation/slide_N.png
c. Read the screenshot with the Read tool to visually inspect it
d. Read the reference images again for comparison
e. Compare the screenshot against the reference design:
- Does the color scheme match?
- Does the layout feel similar?
- Is the typography style consistent?
- Are visual elements (shapes, gradients) similar?
- Identify what's wrong
- Edit the HTML/CSS to fix the issues
- Reload and re-screenshot
- Repeat until the slide matches the reference style
Step 5: Convert to PDF
After all slides are validated, convert the slide screenshots to a single PDF.
Run the bundled Python script:
python3 <skill-directory>/scripts/slides_to_pdf.py presentation/ presentation/presentation.pdf
Where is the path to this skill's directory (e.g., .claude/skills/generate-presentation).
This script:
- Finds all
slide_*.pngfiles in the presentation directory - Sorts them by slide number
- Combines them into a single PDF (one slide per page, 1920x1080 aspect ratio)
- Outputs to
presentation/presentation.pdf
pip install Pillow
Step 6: Export Content as Markdown
Generate a presentation/content.md file that contains the final text content of every slide in an editable markdown format. This file serves as a single source of truth — the user can edit it and ask you to regenerate the presentation from it.
Format:
# Presentation Title
## Slide 2: Slide Title Here
Body text of the slide goes here.
- Bullet point one
- Bullet point two
- Bullet point three
## Slide 3: Another Slide Title
More content here. **Bold text** for emphasis.
1. Numbered item one
2. Numbered item two
---
## Slide N: Final Slide Title
Closing content.
Rules for content.md:
- Start with
# Titlematching the title slide - Each subsequent slide starts with
## Slide N: Title - Include ALL text exactly as it appears on the slides (not paraphrased)
- Preserve bullet lists, numbered lists, bold text, and emphasis
- Use
---between sections if a slide has no heading - If a slide has a generated image, note it:
!description - Do NOT include CSS, HTML, or layout instructions — only content
- Open
content.md, edit any text - Run
/generate-presentation presentation/content.mdto regenerate with updated content
Step 7: Deliver
Tell the user:
- The HTML presentation is at
presentation/slides.html(interactive, can be opened in browser) - The PDF is at
presentation/presentation.pdf - Individual slide images are at
presentation/slide_N.png - The editable content is at
presentation/content.md— edit this file and run/generate-presentation presentation/content.mdto regenerate with changes
Important Notes
- Always create the
presentation/directory before writing files - The HTML must be completely self-contained (inline styles, no external CSS files)
- Target 1920x1080 resolution (16:9 aspect ratio) for all slides
- Keep slide count reasonable (5-15 slides unless user specifies otherwise)
- If Playwright tools are not available, inform the user and skip the screenshot/validation step
- If Python is not available, inform the user and provide just the HTML + screenshots
Installation
openclaw install generate-presentation
💻Code Examples
Glob pattern: references/*.{png,jpg,jpeg,webp,PNG,JPG,JPEG,WEBP}
Study the reference images carefully. Extract the design language:
- **Color palette**: Primary, secondary, accent, background colors (extract exact hex values)
- **Typography style**: Font weight, size hierarchy, letter spacing feel
- **Layout patterns**: How content is arranged, spacing, alignment
- **Visual elements**: Shapes, gradients, borders, shadows, decorative elements
- **Overall mood**: Minimal, bold, corporate, playful, etc.
If no reference images exist, inform the user and use a clean, modern default style (dark background, sans-serif fonts, generous whitespace).
### Step 3: Create HTML Slides
Create a single HTML file at `presentation/slides.html` containing all slides.
Requirements:
- Each slide is a full-viewport section (100vw x 100vh)
- Use inline CSS — no external dependencies
- Use web-safe fonts or Google Fonts via CDN link
- Include navigation: arrow keys to move between slides, slide counter
- The visual style MUST match the reference images as closely as possible
- Each slide should have a `data-slide-number` attribute (1-indexed)
- Slides should be stacked vertically, with JS handling viewport snapping
Use the template structure in [templates/slide-template.html](templates/slide-template.html) as a starting point but adapt the styling entirely to match the references.
Slide content guidelines:
- Title slide: presentation title, subtitle, author/date if relevant
- Content slides: use bullet points, short sentences, visuals descriptions
- Keep text concise — presentations are visual, not documents
- Use consistent spacing and alignment across all slides
- Add visual variety: some slides text-heavy, some minimal, some with diagrams
### Step 3.5: Generate Illustrations and Images
**IMPORTANT: You MUST actively generate images for the presentation.** Do not skip this step. Every presentation benefits from visuals. Go through each slide and decide what image would enhance it, then generate it.
Use the **OpenAI GPT Image MCP server** to generate images. Create the `presentation/images/` directory first.
**For EACH slide, evaluate and generate:**
1. **Title/hero slides** → Generate a background illustration or key visual (always)
2. **Concept slides** → Generate an illustration representing the idea (e.g., architecture diagram, workflow visualization, metaphor image)
3. **Data/stats slides** → Consider generating infographic-style visuals
4. **Closing slides** → Generate a memorable visual or branded graphic
**How to generate:**
- Use `mcp__openai-gpt-image-mcp__create-image` with a detailed prompt. In the prompt, specify:
- The subject matter clearly
- The color palette from the reference design (e.g., "dark background with red accents #e63226")
- The style (e.g., "minimal flat illustration", "abstract geometric", "tech-themed")
- `size: "1536x1024"` for landscape, `"1024x1024"` for square
- `output: "file_output"` with `file_output` path like `presentation/images/slide_3_illustration.png`
- `quality: "high"` for hero images, `"medium"` for supporting visuals
- Use `mcp__openai-gpt-image-mcp__edit-image` to refine any generated image that doesn't fit well.
**Embed images in the HTML** using relative paths:<img src="images/slide_3_illustration.png" style="max-width: 100%; height: auto;" />
**Aim for at least 2-3 generated images per presentation.** More is better unless the user says otherwise.
**Only skip image generation when:**
- The user explicitly says no images
- The slide is purely a short bullet list where text alone is clear enough
### Step 4: Screenshot and Validate Each Slide
After creating the HTML file:
1. Open the HTML file in the browser using the Playwright MCP tools:python3 <skill-directory>/scripts/slides_to_pdf.py presentation/ presentation/presentation.pdf
Where `<skill-directory>` is the path to this skill's directory (e.g., `.claude/skills/generate-presentation`).
This script:
- Finds all `slide_*.png` files in the presentation directory
- Sorts them by slide number
- Combines them into a single PDF (one slide per page, 1920x1080 aspect ratio)
- Outputs to `presentation/presentation.pdf`
If the script fails (missing dependencies), install them:pip install Pillow
### Step 6: Export Content as Markdown
Generate a `presentation/content.md` file that contains the **final text content** of every slide in an editable markdown format. This file serves as a single source of truth — the user can edit it and ask you to regenerate the presentation from it.
Format:# Presentation Title
## Slide 2: Slide Title Here
Body text of the slide goes here.
- Bullet point one
- Bullet point two
- Bullet point three
## Slide 3: Another Slide Title
More content here. **Bold text** for emphasis.
1. Numbered item one
2. Numbered item two
---
## Slide N: Final Slide Title
Closing content.Tags
Quick Info
Ready to Install?
Get started with this skill in seconds
Related Skills
4claw
4claw — a moderated imageboard for AI agents.
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
Acestep Lyrics Transcription
Transcribe audio to timestamped lyrics using OpenAI Whisper or ElevenLabs Scribe API.
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.