$npx -y skills add Boom5426/Nature-Paper-Skills --skill academic-presentationsCreate academic presentation slide decks and optionally demo videos from research papers. Use when the user asks to "make slides", "create a deck", "make a presentation", "demo video", "paper slides", "conference talk slides", or wants to turn a paper into a visual presentation.
| 1 | # Academic Presentations |
| 2 | |
| 3 | Produce slide decks (and optionally narrated demo videos) from research papers. The human drives all outline and visual decisions — the agent executes. |
| 4 | |
| 5 | ## Pipeline |
| 6 | |
| 7 | ``` |
| 8 | [1] Script Draft ──→ [2] Slide Generation ──→ [3] TTS Audio (optional) ──→ [4] Video Assembly (optional) |
| 9 | Claude Code nanobanana /edit edge-tts / Kokoro / ElevenLabs ffmpeg |
| 10 | ``` |
| 11 | |
| 12 | Skip stages 3–4 for slide-only output. User can enter at any stage. |
| 13 | |
| 14 | ## Stage 1: Script / Outline |
| 15 | |
| 16 | **Input**: paper + user-provided outline or slide plan |
| 17 | **Output**: `video-scripts.md` or `slide-outline.md` — per-slide content with talking points |
| 18 | |
| 19 | The agent drafts scripts based on the user's outline. The user owns the structure — agent does not decide slide count, order, or what to emphasize. |
| 20 | |
| 21 | ## Stage 2: Slide Generation |
| 22 | |
| 23 | > Full reference: [references/slide-generation.md](references/slide-generation.md) |
| 24 | |
| 25 | **Tool**: nanobanana (Gemini CLI extension) |
| 26 | |
| 27 | **Priority order** (edit-first): |
| 28 | 1. **Has paper figure** → nanobanana `/edit` to wrap into slide frame |
| 29 | 2. **Has existing slide** → `/edit` to adapt |
| 30 | 3. **User-provided reference** (e.g., from NotebookLM or PPTX the user made) → `/edit` to refine |
| 31 | 4. **Title slide from scratch** → generate with academic style prompt |
| 32 | 5. **Content slide from scratch** → generate with deck-style preamble |
| 33 | |
| 34 | **Key principle**: prefer `/edit` on existing HQ paper figures over generating from scratch. |
| 35 | |
| 36 | **Deck style**: create `deck-style.md` once per deck, prepend to all generate-from-scratch prompts. For `/edit`, style is inherited from the base image. |
| 37 | |
| 38 | Example `deck-style.md`: |
| 39 | ```markdown |
| 40 | - Canvas: 1920x1080, white background |
| 41 | - Accent: #2563EB blue, text: #1e293b dark slate |
| 42 | - Clean sans-serif, flat design, no gradients/shadows |
| 43 | - Bottom bar: blue accent with white affiliation text |
| 44 | ``` |
| 45 | |
| 46 | ## Stage 3: TTS Audio (optional) |
| 47 | |
| 48 | > Full reference: [references/tts-engines.md](references/tts-engines.md) |
| 49 | > Batch scripts: [scripts/batch_tts_edge.py](scripts/batch_tts_edge.py), [scripts/batch_tts_kokoro.py](scripts/batch_tts_kokoro.py) |
| 50 | |
| 51 | **Output**: one audio file per narrated slide |
| 52 | |
| 53 | ### Engine Selection |
| 54 | |
| 55 | | Engine | Quality | Cost | Latency | Best For | |
| 56 | |--------|---------|------|---------|----------| |
| 57 | | **edge-tts** (default) | Very good | Free, unlimited | ~6s/slide (cloud) | Quick generation, good male voices | |
| 58 | | **Kokoro** | Very good | Free, unlimited | ~1.5s/slide (local) | Offline use, fast batch, good female voices | |
| 59 | | **ElevenLabs** | Premium | 10k chars free/mo | ~3s/slide (cloud) | Highest quality, voice cloning | |
| 60 | |
| 61 | **Default**: Use edge-tts unless user requests offline or premium quality. |
| 62 | |
| 63 | ### Quick Start (edge-tts) |
| 64 | |
| 65 | ```python |
| 66 | import edge_tts, asyncio |
| 67 | |
| 68 | async def tts_slide(text, output, voice="en-US-AndrewNeural"): |
| 69 | await edge_tts.Communicate(text, voice).save(output) |
| 70 | |
| 71 | asyncio.run(tts_slide("Your slide text here", "slide_01.mp3")) |
| 72 | ``` |
| 73 | |
| 74 | **Voices**: AndrewNeural (male, presenter), AriaNeural (female), GuyNeural (male, warm), JennyNeural (female, pro) |
| 75 | |
| 76 | ## Stage 4: Video Assembly (optional) |
| 77 | |
| 78 | **Tool**: ffmpeg |
| 79 | **Input**: slide PNGs + audio files + optional demo recording |
| 80 | |
| 81 | ```bash |
| 82 | # Use symlink to avoid iCloud path spaces: ln -sfn "long path" /tmp/workdir |
| 83 | |
| 84 | # Slide with audio: |
| 85 | ffmpeg -y -loop 1 -i slide.png -i audio.mp3 \ |
| 86 | -c:v libx264 -tune stillimage -pix_fmt yuv420p \ |
| 87 | -c:a aac -ar 44100 -ac 2 -shortest seg.mp4 |
| 88 | |
| 89 | # Silent slide (N seconds): |
| 90 | ffmpeg -y -loop 1 -i slide.png -f lavfi -i anullsrc=r=44100:cl=stereo \ |
| 91 | -c:v libx264 -tune stillimage -pix_fmt yuv420p \ |
| 92 | -c:a aac -ar 44100 -ac 2 -t N seg.mp4 |
| 93 | |
| 94 | # Concat (always re-encode, never -c copy): |
| 95 | printf "file 'seg1.mp4'\nfile 'seg2.mp4'\n..." > concat.txt |
| 96 | ffmpeg -y -f concat -safe 0 -i concat.txt \ |
| 97 | -c:v libx264 -pix_fmt yuv420p -c:a aac -ar 44100 -ac 2 final.mp4 |
| 98 | ``` |
| 99 | |
| 100 | All segments MUST share: 44100Hz sample rate, stereo, AAC codec. |
| 101 | |
| 102 | ## PPTX Conversion (if needed) |
| 103 | |
| 104 | > Full reference: [references/pptx-conversion.md](references/pptx-conversion.md) |
| 105 | |
| 106 | If starting from an existing PPTX, convert slides to PNG images first: |
| 107 | ```bash |
| 108 | soffice --headless --convert-to pdf --outdir output/ presentation.pptx |
| 109 | pdftoppm -png -r 300 output/presentation.pdf output/slide |
| 110 | ``` |
| 111 | |
| 112 | ## NotebookLM — Human Reference Only |
| 113 | |
| 114 | **The agent must NOT auto-invoke NotebookLM or use its outputs to drive slide/script decisions.** The human owns the outline, visual arrangement, and deck direction. |
| 115 | |
| 116 | **When to recommend**: only when the user says they're unsure what to put on slides or need inspiration. |
| 117 | |
| 118 | ## Gotchas |
| 119 | |
| 120 | - **iCloud paths with spaces break ffmpeg** — symlink to `/tmp/` |
| 121 | - **Audio forma |