AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Paper Slides

skill-wanshuiyin-auto-claude-code-research-in-sleep-paper-slides · by wanshuiyin

Generate conference presentation slides (beamer LaTeX → PDF + editable PPTX) from a compiled paper, with speaker notes and full talk script. Use when user says \"做PPT\", \"做幻灯片\", \"make slides\", \"conference talk\", \"presentation slides\", \"生成slides\", \"写演讲稿\", or wants beamer slides for a conference talk.

No reviews yet
0 installs
18 views
0.0% view→install

Install

$ agentstack add skill-wanshuiyin-auto-claude-code-research-in-sleep-paper-slides

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-wanshuiyin-auto-claude-code-research-in-sleep-paper-slides)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Paper Slides? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Paper Slides: From Paper to Conference Talk

Generate conference presentation slides from: $ARGUMENTS

Context

This skill runs after Workflow 3 (/paper-writing). It takes a compiled paper and generates a presentation slide deck for conference oral talks, spotlight presentations, or poster lightning talks.

Unlike posters (single page, visual-first), slides tell a temporal story: each slide builds on the previous one, with progressive revelation of the research narrative. A good talk makes the audience understand why this matters before showing what was done.

Constants

  • VENUE = NeurIPS — Target venue, determines color scheme. Supported: NeurIPS, ICML, ICLR, AAAI, ACL, EMNLP, CVPR, ECCV, GENERIC. Override via argument.
  • TALK_TYPE = spotlight — Talk format. Options: oral (15-20 min), spotlight (5-8 min), poster-talk (3-5 min), invited (30-45 min). Determines slide count and content depth.
  • TALK_MINUTES = 15 — Talk duration in minutes. Auto-adjusts slide count (~1 slide/minute for oral, ~1.5 slides/minute for spotlight). Override explicitly if needed.
  • ASPECT_RATIO = 16:9 — Slide aspect ratio. Options: 16:9 (default, modern projectors), 4:3 (legacy).
  • SPEAKER_NOTES = true — Generate \note{} blocks in beamer and corresponding PPTX notes. Set false for clean slides without notes.
  • PAPER_DIR = paper/ — Directory containing the compiled paper.
  • OUTPUT_DIR = slides/ — Output directory for all slide files.
  • REVIEWER_MODEL = gpt-5.5 — Model used via Codex MCP for slide review.
  • AUTO_PROCEED = false — At each checkpoint, always wait for explicit user confirmation.
  • COMPILER = latexmk — LaTeX build tool.
  • ENGINE = pdflatex — LaTeX engine. Use xelatex for CJK text.

> 💡 Override: /paper-slides "paper/" — talk_type: oral, venue: ICML, minutes: 20, aspect: 4:3

Optional: Style reference (— style-ref: , opt-in)

Lets the user steer the talk's structural rhythm (story beats, theorem density, figure density inherited from the source paper) toward a reference paper. Default OFF — when the user does not pass — style-ref, do nothing differently from before.

Only when — style-ref: appears in $ARGUMENTS, run the helper FIRST:

# Resolve $STYLE_HELPER via the canonical strict-safe chain (see
# shared-references/integration-contract.md §2). Policy A — gate:
# unresolved helper means --style-ref cannot be satisfied, so abort.
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills.txt ]; then
    ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null) || true
fi
STYLE_HELPER=".aris/tools/extract_paper_style.py"
[ -f "$STYLE_HELPER" ] || STYLE_HELPER="tools/extract_paper_style.py"
[ -f "$STYLE_HELPER" ] || { [ -n "${ARIS_REPO:-}" ] && STYLE_HELPER="$ARIS_REPO/tools/extract_paper_style.py"; }
[ -f "$STYLE_HELPER" ] || {
  echo "ERROR: extract_paper_style.py not resolved at .aris/tools/, tools/, or \$ARIS_REPO/tools/." >&2
  echo "       Fix: rerun bash tools/install_aris.sh, export ARIS_REPO, or copy the helper to tools/." >&2
  echo "       --style-ref cannot be satisfied; aborting." >&2
  exit 1
}
STYLE_STATUS=0
CACHE=$(python3 "$STYLE_HELPER" --source "") || STYLE_STATUS=$?
case "$STYLE_STATUS" in
  0) ;;                                       # use $CACHE/style_profile.md as structural guidance
  2) echo "warning: style-ref skipped (missing optional dep)" >&2 ;;
  3) echo "error: --style-ref source failed; aborting slides" >&2 ; exit 1 ;;
  *) echo "error: helper failed unexpectedly; aborting slides" >&2 ; exit 1 ;;
esac

Sources accepted: local TeX dir / file, local PDF, arXiv id, http(s) URL. Overleaf URLs/IDs are rejected — clone via /overleaf-sync setup first and pass the local clone path.

Strict rules (full contract in tools/extract_paper_style.py docstring):

  • Use style_profile.md to align section-budget tendency and theorem-environment density. Talk-type slide count above still takes precedence.
  • Never copy speaker-note prose, slide titles, or examples from anything reachable through the cache. The talk content is from the user's paper, not the reference.
  • Never pass — style-ref (or the cache contents) to the GPT-5.5 reviewer sub-agent — the reviewer must judge the talk's clarity on its own merits.

Talk Type → Slide Count

| Talk Type | Duration | Slides | Content Depth | |-----------|----------|:------:|---------------| | poster-talk | 3-5 min | 5-8 | Problem + 1 method slide + 1 result + conclusion | | spotlight | 5-8 min | 8-12 | Problem + 2 method + 2 results + conclusion | | oral | 15-20 min | 15-22 | Full story with motivation, method detail, experiments, analysis | | invited | 30-45 min | 25-40 | Comprehensive: background, related work, deep method, extensive results, discussion |

Venue Color Schemes

Same as /paper-poster-html:

| Venue | Primary | Accent | Background | Text | |-------|---------|--------|------------|------| | NeurIPS | #8B5CF6 | #2563EB | #FFFFFF | #1E1E1E | | ICML | #DC2626 | #1D4ED8 | #FFFFFF | #1E1E1E | | ICLR | #059669 | #0284C7 | #FFFFFF | #1E1E1E | | CVPR | #2563EB | #7C3AED | #FFFFFF | #1E1E1E | | GENERIC | #334155 | #2563EB | #FFFFFF | #1E1E1E |

State Persistence (Compact Recovery)

Persist state to slides/SLIDES_STATE.json after each phase:

{
  "phase": 3,
  "venue": "NeurIPS",
  "talk_type": "spotlight",
  "slide_count": 10,
  "codex_thread_id": "019cfcf4-...",
  "status": "in_progress",
  "timestamp": "2026-03-18T15:00:00"
}

On startup: if SLIDES_STATE.json exists with "status": "in_progress" and within 24h → resume. Otherwise → fresh start.

Workflow

Phase 0: Input Validation & Setup

  1. Check prerequisites:

``bash which pdflatex && which latexmk ``

  1. Verify paper exists:

``bash ls $PAPER_DIR/main.tex || ls $PAPER_DIR/main.pdf ls $PAPER_DIR/sections/*.tex ls $PAPER_DIR/figures/ ``

  1. Backup existing slides: if slides/ exists, copy to slides-backup-{timestamp}/
  1. Create output directory: mkdir -p slides/figures
  1. Detect CJK: if paper contains Chinese/Japanese/Korean, set ENGINE to xelatex
  1. Determine slide count: from TALKTYPE and TALKMINUTES using the table above
  1. Check for resume: read slides/SLIDES_STATE.json if it exists

State: Write SLIDES_STATE.json with phase: 0.

Phase 1: Content Extraction & Slide Outline

Read paper/sections/*.tex and build a slide-by-slide outline.

Slide template by talk type:

Oral (15-22 slides)

| Slide | Purpose | Content Source | Figure? | |:-----:|---------|----------------|:-------:| | 1 | Title | Paper metadata | No | | 2 | Outline | Section headers | No | | 3-4 | Motivation & Problem | Introduction | Optional | | 5 | Key Insight | Introduction (contribution) | No | | 6-9 | Method | Method section | Yes (hero figure) | | 10-14 | Results | Experiments | Yes (per slide) | | 15-16 | Analysis / Ablations | Experiments | Yes | | 17 | Limitations | Conclusion | No | | 18 | Conclusion / Takeaway | Conclusion | No | | 19 | Thank You + QR | — | QR code |

Spotlight (8-12 slides)

| Slide | Purpose | Content Source | Figure? | |:-----:|---------|----------------|:-------:| | 1 | Title | Paper metadata | No | | 2-3 | Problem + Why It Matters | Introduction | Optional | | 4 | Key Insight | Contribution | No | | 5-6 | Method | Method (condensed) | Yes (hero) | | 7-9 | Results | Key results only | Yes | | 10 | Takeaway | Conclusion | No | | 11 | Thank You + QR | — | QR code |

Poster-talk (5-8 slides)

| Slide | Purpose | Content Source | Figure? | |:-----:|---------|----------------|:-------:| | 1 | Title | Paper metadata | No | | 2 | Problem | Introduction (1 slide) | No | | 3 | Method | Method (1 slide) | Yes | | 4-5 | Results | Key result only | Yes | | 6 | Takeaway + QR | Conclusion | QR |

For each slide, specify:

  • Title (max 8 words)
  • 3-5 bullet points (max 8 words each)
  • Figure reference (if any) from paper/figures/
  • Speaker note (2-3 sentences of what to say)
  • Time allocation (in seconds)

Output: slides/SLIDE_OUTLINE.md

🚦 Checkpoint:

📊 Slide outline ready:
- Talk type: [TALK_TYPE] ([TALK_MINUTES] min)
- Slide count: [N] slides
- Figures used: [N] from paper/figures/
- Time budget: [breakdown]

Slide-by-slide outline:
1. [Title slide]
2. [Motivation — 1.5 min]
3. [Problem statement — 1 min]
...

Proceed to drafting? Or adjust the outline?

⛔ STOP HERE and wait for user response. This is the most critical checkpoint — the outline determines the entire talk flow.

Options:

  • "go" → proceed to Phase 2
  • adjustments (e.g., "merge slides 3-4", "add a demo slide", "cut the ablation") → revise
  • "stop" → save to slides/SLIDE_OUTLINE.md

State: Write SLIDES_STATE.json with phase: 1.

Phase 2: Slide-by-Slide Content Drafting

For each slide in the outline, draft the actual content.

Presentation rules (enforced strictly):

| Rule | Rationale | |------|-----------| | One message per slide | If a slide has two ideas, split it | | Max 6 lines per slide | More than 6 lines = wall of text | | Max 8 words per line | Audience reads, not listens, if text is long | | Sentence fragments, not sentences | "Improves F1 by 3.2%" not "Our method improves the F1 score by 3.2 percentage points" | | Figure slides: figure ≥60% area | The figure IS the content; bullets are annotations | | Bold key numbers | "Achieves 94.3% accuracy" | | Progressive disclosure | Use \pause or \onslide for complex slides | | No Related Work slide | Unless invited talk (30+ min) |

For each slide, produce:

  1. \frametitle{}
  2. Content (itemize or figure + caption)
  3. \note{} with speaker text (if SPEAKER_NOTES=true)

Phase 3: Generate Slides LaTeX

Create slides/main.tex using beamer.

Template structure:

\documentclass[aspectratio=169]{beamer}

% Venue theme
\usepackage{xcolor}
\definecolor{primary}{HTML}{VENUE_PRIMARY}
\definecolor{accent}{HTML}{VENUE_ACCENT}

% Clean theme
\usetheme{default}
\usecolortheme{default}
\setbeamercolor{frametitle}{fg=primary}
\setbeamercolor{title}{fg=primary}
\setbeamercolor{structure}{fg=accent}
\setbeamercolor{itemize item}{fg=primary}
\setbeamercolor{itemize subitem}{fg=accent}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{footline}{
  \hfill\insertframenumber/\inserttotalframenumber\hspace{2mm}\vspace{2mm}
}

% Packages
\usepackage{graphicx,amsmath,booktabs}
\graphicspath{{figures/}}

% Speaker notes (if enabled)
% \setbeameroption{show notes on second screen=right}

% Metadata
\title{PAPER TITLE}
\author{Author 1 \and Author 2}
\institute{Affiliation}
\date{VENUE YEAR}

\begin{document}

\begin{frame}
\titlepage
\end{frame}

% Content slides follow...

\begin{frame}{Motivation}
\begin{itemize}
  \item Bullet point 1
  \item Bullet point 2
  \item \textbf{Key insight in bold}
\end{itemize}
\note{Speaker note: explain the motivation...}
\end{frame}

% Figure slide example
\begin{frame}{Method Overview}
\centering
\includegraphics[width=0.85\textwidth]{method_overview.pdf}
\vspace{0.5em}
\begin{itemize}
  \item Key annotation about the figure
\end{itemize}
\note{Walk through the figure left to right...}
\end{frame}

% ... more slides ...

\begin{frame}{Thank You}
\centering
{\Large Questions?}\\[2em]
Paper: [URL or QR placeholder]\\
Code: [URL or QR placeholder]
\end{frame}

\end{document}

Symlink figures:

ln -sf ../paper/figures/*.pdf slides/figures/ 2>/dev/null
ln -sf ../paper/figures/*.png slides/figures/ 2>/dev/null

Key formatting rules:

  • Title font: ≥28pt, venue primary color
  • Body font: ≥20pt
  • Footnotes: ≥14pt
  • No navigation symbols
  • Frame numbers in bottom-right
  • Clean white background (no gradients, no decorative elements)

Phase 4: Compile Slides

cd slides && latexmk -$ENGINE -interaction=nonstopmode main.tex

Error handling loop (max 3 attempts):

  1. Parse error log
  2. Fix: missing package, undefined command, file not found, overfull boxes
  3. Recompile

Verification:

# Check slide count matches outline
pdfinfo slides/main.pdf | grep Pages

If page count differs significantly from outline (>2 slides off), investigate.

State: Write SLIDES_STATE.json with phase: 4.

Phase 5: Codex MCP Review

Send the slide outline + selected LaTeX frames to GPT-5.5 xhigh:

mcp__codex__codex:
  config: {"model_reasoning_effort": "xhigh"}
  prompt: |
    Review this [TALK_TYPE] presentation ([TALK_MINUTES] min) for [VENUE].

    Evaluate using these criteria (score 1-5 each):

    1. **Story arc** — Does the talk build a compelling narrative? (Problem → insight → method → evidence → takeaway)
    2. **Slide density** — Any slides with too much text? (Max 6 lines, 8 words/line)
    3. **Time budget** — Is [N] slides realistic for [TALK_MINUTES] minutes?
    4. **Figure visibility** — Will figures be readable on a projector?
    5. **Opening hook** — Do slides 2-3 grab attention? (Not "In this paper, we...")
    6. **Takeaway** — Is the final message clear and memorable?
    7. **Progressive build** — Are complex ideas revealed gradually?

    Slide outline:
    [PASTE SLIDE_OUTLINE.md]

    Selected frames (LaTeX):
    [PASTE KEY FRAMES]

    Provide:
    - Score for each criterion
    - Top 3 actionable fixes
    - Overall: Ready to present? (Yes / Needs revision / Major issues)

Apply fixes. Recompile if LaTeX was changed.

> ⚠️ If mcp__codex__codex is not available (no OpenAI API key), skip external review and proceed to Phase 6. Note the skip in SLIDES_STATE.json.

Save review to slides/SLIDES_REVIEW.md.

State: Write SLIDES_STATE.json with phase: 5.

Phase 6: Speaker Notes

For each slide, ensure a \note{} block exists with:

  1. What to say (2-3 complete sentences, conversational tone)
  2. Timing hint (e.g., "spend 1 minute here", "quick — 20 seconds")
  3. Transition phrase to the next slide (e.g., "So how do we actually implement this? Let me show you...")

Also generate slides/speaker_notes.md as a standalone backup:

# Speaker Notes

## Slide 1: Title
[No speaking — wait for introduction]

## Slide 2: Motivation
"Thank you. So let me start with the problem we're trying to solve..."
[Time: 1.5 min]

## Slide 3: Problem Statement
"Specifically, the challenge is..."
→ Transition: "To address this, our key insight is..."
[Time: 1 min]

...

State: Write SLIDES_STATE.json with phase: 6.

Phase 7: PowerPoint Export

Generate an editable PPTX using python-pptx:

python3 -c "import pptx" 2>/dev/null || pip install python-pptx

Write slides/generate_pptx.py that:

  1. Creates a PPTX with correct aspect ratio (16:9 → 13.33" x 7.5"; 4:3 → 10" x 7.5")
  2. For each beamer frame:
  • Creates a slide with matching layout
  • Title in venue primary color, bold
  • Bullet points with venue accent color markers
  • Figures embedded as images (from slides/figures/)
  • Speaker notes transferred to PPTX notes field
  1. Title slide with special formatting (centered, larger title)
  2. Thank You slide with centered text
  3. Applies venue color scheme throughout
cd slides && python3 generate_pptx.py
# Output: slides/presentation.pptx

> ⚠️ If python-pptx is not installed, skip with a note: "Install pip install python-pptx to enable PowerPoint export."

State: Write SLIDES_STATE.json with phase: 7.

Phase 8: Full Talk Script

Generate slides/TALK_SCRIPT.md — a complete, word-for-word script for the talk.

This is different from speaker notes (brief reminders). The talk script is a full manuscript that can be read aloud or used for pract

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.