Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

make-slides

Auto-generate academic presentations from a folder of source material. Quarto + Reveal.js, with ElevenLabs voice-cloned narration.

Philosophy

Academic talks win on delivery and Q&A, not visual design. This skill puts time where it matters: structuring content, writing speaker scripts calibrated to your actual speaking pace, and generating narration so you can rehearse by listening to yourself.

Install (one-time)

1. Drop the skill into your skills directory

unzip make-slides.zip -d ~/.skills/user/
# or on Claude.ai: place into /mnt/skills/user/make-slides/

2. System dependencies

# Quarto (slide renderer)
brew install quarto                    # macOS
# or https://quarto.org/docs/get-started/ for other OSes

# Audio tooling (for stitching narration)
brew install ffmpeg                    # macOS
sudo apt install ffmpeg                # Debian/Ubuntu

# Python packages
pip install elevenlabs pydub requests python-frontmatter

3. ElevenLabs credentials

mkdir -p ~/.config/make-slides
cp assets/.env.example ~/.config/make-slides/.env
# edit ~/.config/make-slides/.env and paste your real key
chmod 600 ~/.config/make-slides/.env

Get your API key at https://elevenlabs.io/app/settings/api-keys. Creator plan ($22/mo, 100k chars/mo) recommended; Starter ($5/mo, 30k chars) is tight.

4. Clone your voice (IVC to start)

Record 60-120 seconds of clean audio (quiet room, good mic, your natural conference pace). A sample script is in references/voice-narration.md. Then:

python scripts/clone_voice.py --sample /path/to/sample.mp3 --name "my-voice"

This stores the voice_id at ~/.config/make-slides/voice.env. One-time setup.

5. (Recommended) Install OpenEvidence MCP for citation discovery

OpenEvidence is an LLM-powered clinical evidence assistant. This skill uses it for discovery (finding which papers support a claim), with PubMed MCP as the authoritative source for BibTeX metadata. There's no hosted OpenEvidence MCP — you install an unofficial open-source server locally:

git clone https://github.com/bakhtiersizhaev/openevidence-mcp
cd openevidence-mcp
./scripts/setup-macos.sh           # or setup-ubuntu.sh on Linux
npm run login                      # opens browser; sign in to OpenEvidence
npm run smoke

Then register with Claude Desktop / Claude Code by adding to your mcp_servers config:

{
  "mcpServers": {
    "openevidence": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/openevidence-mcp/dist/server.js"]
    }
  }
}

Restart Claude. You'll see openevidence in your connected MCPs, exposing tools oe_auth_status, oe_ask, oe_history_list, and oe_article_get. Requires Node.js 20+ and an OpenEvidence account. Full details in references/citation-workflow.md.

You'll also need PubMed MCP enabled in Claude.ai connectors — this is a hosted MCP, no local install required.

6. (Optional) Calibrate speaking pace

Read references/pace-calibration.md and save your real wpm to ~/.config/make-slides/pace.env. Default: English 140 wpm, Mandarin 180 cpm.

Usage

In a Claude conversation

Invoke by saying any of:

  • "make slides on [topic]"
  • "build a deck from these sources"
  • "準備簡報"
  • "做投影片"

Claude will:

  1. Inventory your folder
  2. Ask 4 questions (duration, audience, take-home, pace)
  3. Propose an outline — stop for your approval
  4. Draft talk.qmd with speaker notes, citations, figure placeholders
  5. Validate timing with check_timing.py
  6. Render to HTML+PDF with render.sh
  7. Narrate to per-slide MP3s with narrate.py
  8. Stitch to talk.mp3 with stitch_audio.py

From the command line directly

# Start a new talk folder
python scripts/new_talk.py "Robotic TME SDI"
cd robotic-tme-sdi

# Edit talk.qmd — structure and write speaker notes in ::: {.notes} blocks

# Validate timing (30 min target)
python ../scripts/check_timing.py talk.qmd --duration 30

# Render to Reveal.js HTML (add --pdf for handout)
bash ../scripts/render.sh talk.qmd

# Preview TTS-cleaned text without spending ElevenLabs quota
python ../scripts/text_cleaner.py talk.qmd --preview

# Show character count and cost estimate
python ../scripts/narrate.py talk.qmd --dry-run

# Generate narration (caches; reruns only regenerate changed slides)
python ../scripts/narrate.py talk.qmd

# Stitch to talk.mp3 and Reveal.js config
python ../scripts/stitch_audio.py audio/

File structure

make-slides/
├── SKILL.md                      # Top-level workflow (what Claude reads first)
├── README.md                     # This file
├── references/                   # Detailed guides, loaded by Claude as needed
│   ├── quarto-template.qmd       # Starter deck template
│   ├── timing-math.md            # wpm -> word budget math
│   ├── placeholders.md           # FIGURE_PLACEHOLDER conventions
│   ├── citation-workflow.md      # BibTeX + PubMed MCP
│   ├── pace-calibration.md       # How to measure real wpm
│   └── voice-narration.md        # ElevenLabs IVC/PVC, models, cleaning rules
├── scripts/                      # Executable utilities
│   ├── new_talk.py               # Bootstrap a talk folder
│   ├── parse_qmd.py              # Shared .qmd parser (library)
│   ├── text_cleaner.py           # TTS prep (library + CLI preview)
│   ├── check_timing.py           # Word count -> duration validation
│   ├── render.sh                 # Quarto render wrapper
│   ├── clone_voice.py            # ElevenLabs IVC/PVC setup
│   ├── narrate.py                # .qmd -> per-slide MP3
│   └── stitch_audio.py           # MP3s -> talk.mp3 + Reveal.js config
└── assets/
    ├── .env.example              # Template for API key
    └── reveal_audio_config.html  # Reveal.js audio-slideshow plugin snippet

Key design decisions

  • Quarto over Slidev/Marp: native BibTeX support (superscripted Vancouver citations without manual formatting), live Python/R code chunks, one source file rendering to slides + PDF + manuscript draft.
  • Two-tool citation pipeline: OpenEvidence MCP for discovery (find papers supporting a claim via oe_ask), PubMed MCP for authoritative metadata (BibTeX). OE output never becomes the citation — PubMed is always the ground truth. This protects against LLM hallucination in medical claim synthesis.
  • Folder-as-context: dump sources into a folder; skill inventories and works from that — no step-by-step context pasting.
  • Placeholder-driven visuals: FIGURE_PLACEHOLDER: KM plot, 16:9, full width marks where art belongs; user supplies the real figure later.
  • Timing by speaker-notes word count: each ::: {.notes} block's word count drives the duration estimate for that slide, with complexity multipliers for math/tables/figures. Bilingual-aware (English words + CJK chars counted separately at configurable rates).
  • Content-hashed narration cache: only regenerates MP3 for slides whose text actually changed, saving ElevenLabs character quota on iteration.
  • IVC -> PVC upgrade path: starts with Instant Voice Clone (1-2 min sample, good enough for rehearsal); upgrade to Professional Voice Clone later once you have 1+ hour of clean recordings for async delivery content.

Troubleshooting

quarto: command not found — install from https://quarto.org/docs/get-started/

ModuleNotFoundError: elevenlabspip install elevenlabs

PDF render failsquarto install tinytex

Voice sounds off / robotic — lower --stability to 0.35, shorten long sentences in speaker notes

Chinese tones wrong — try --model eleven_v3 for the v3 model (better tonal accuracy than multilingual_v2)

Timing drift >10% — recalibrate your wpm via references/pace-calibration.md. The default (140 wpm English) is an estimate; your real rate might be 125 or 155.

Updates

The skill is fully standalone — no external fetches on invocation. To update, replace the folder with a newer version. Your ~/.config/make-slides/ state (API key, voice, pace) is preserved.

About

Auto-generates academic presentations from a folder of source material — Quarto + Reveal.js slides with speaker scripts calibrated to your speaking pace and ElevenLabs voice-cloned narration for rehearsal. Citations via PubMed / OpenEvidence.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages