dev-slides
Generate a Google Slides presentation from a paper PDF URL using gws CLI.
Skill by guan404ming
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/guan404ming-dev-slides
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, presentations, research
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/dev-slides
What's inside
- Skill name
dev-slides- Description
- Generate a Google Slides presentation from a paper PDF URL using gws CLI.
- License
- Apache-2.0
- Instructions
- 103 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Files (1)
- SKILL.md
SKILL.md (first lines)
# Paper-to-Slides Generator
## Usage
```
/dev-slides <arxiv PDF URL or paper URL>
```
## Prerequisites
- `gws` CLI authenticated with Slides and Drive APIs
- Python packages: `pymupdf`, `Pillow`, `numpy`
## Presentation Style
- Title slide: 個人進度報告 / 電機所碩一 邱冠銘
- Section headers: TITLE layout (CENTERED_TITLE), left-aligned
- Content slides: TITLE_AND_BODY layout (single column, not two columns)
- Fonts: theme defaults (no overrides)
- Body: bullet points with lineSpacing 150, indent 36pt (level 0), 72pt (level 1)
- Sub-items use level 1 indentation for hierarchy
- Keep each slide concise, 3-5 bullet points max per slide
## Slide Structure
1. Title slide (TITLE layout): 個人進度報告 + 電機所碩一 邱冠銘
2. Paper info slide (TITLE_AND_BODY): paper title as slide title, body lists authors, affiliation, conference/year, arXiv ID. Paper titles are often long and wrap to multiple lines, so always move body translateY down to ~1600000 EMU on this slide.
3. Section: Intro
4. Motivation & Problem (content slide)
5. Paper Goal (content slide)
6. Section: Design
7. Method slides (2-4 slides depending on paper complexity)
8. Figure slides (from paper, with captions)
9. Section: Eval
10. Experimental setup (content slide)
11. Results (content slide)
12. Table/figure slides (from paper, with captions)
13. Section: Conclusion
14. Limitations & Key Takeaways (content slide)
15. Thanks slide
## Instructions
1. **Fetch paper content:**
- Use `WebFetch` on the arxiv abstract page to get title, authors, abstract
- Use `WebFetch` on the PDF URL for detailed methodology, results, contributions
2. **Create presentation:**
```
gws slides presentations create --json '{"title": "<paper title>"}'
```
Save the `presentationId` from the response.
3. **Get layout IDs** from the create response:
- TITLE layout (for section headers + title slide)
- TITLE_AND_BODY layout (for content slides)
- TITLE_ONLY layout (for figure/table slides)
4. **Build slides via batchUpdate:**
- Delete the default empty slide first
- Create ALL slides listed in the Slide Structure section, do not skip any (especially the paper info slide)
- Create all slides with `createSlide`, mapping placeholders by type
- Object IDs must be at least 5 characters
- Insert text with `insertText`
- Apply bullets with `createParagraphBullets` (preset: `BULLET_DISC_CIRCLE_SQUARE`)
- Set paragraph styles: lineSpacing 150, indent 36pt/72pt for level 0/1
- Alignment enum: use `START` not `LEFT`, use `CENTER` not `CENTER`
- Send all requests in a single `batchUpdate` call
5. **Extract figures from PDF:**
- Download PDF: `curl -sL "<url>" -o /tmp/paper.pdf`
- Use `pymupdf` to analyze exact figure boundaries: call `page.get_text("dict")` for text blocks and `page.get_drawings()` for drawing bounds
- Define precise `fitz.Rect` clip regions based on analyzed coordinates, not rough guesses
- Auto-crop remaining whitespace with PIL + numpy (threshold gray < 248)
- Target key figures: overview diagram, method diagram, result tables
6. **Upload images** to a public host:
```bash
curl -s -X POST "https://freeimage.host/api/1/upload" \
-F "key=6d207e02198a847aa98d0a2a901485a5" \
-F "source=@/tmp/paper_figs/fig.png" \
-F "format=json"
```
Extract URL from response: `.image.url`
7. **Insert images into slides** via batchUpdate:
- Use TITLE_ONLY layout for figure slides
- `createImage` with the hosted URL
- Position: centered horizontally, image top at ~1250000 EMU (0.25" below title bottom)
- Add caption text box below image: 12pt, gray (#666), centered
- Caption top = image bottom + 150000 EMU gap
- Scale images to fit: max image bottom at ~4400000 EMU, keep aspect ratio
8. **Verify layout** after building all slides:
- Programmatically check every slide for overflow: compute each element's bounding box (size * scale + translate) and verify it stays within slide bounds (9144000 x 5143500 EMU)
- Verify title-to-image gap >= 228600 EMU (0.25") on figure/table slides
- Verify title-to-body gap on TITLE_AND_BODY slides: if title text is long (>50 chars), move body translateY down to avoid overlap
- Verify image-to-caption gap ~150000 EMU, consistent across slides
- Verify caption bottom < 5000000 EMU
- Fix any violations in a single batchUpdate pass
9. **Output** the presentation URL:
```
https://docs.google.com/presentation/d/<presentationId>/edit
```From guan404ming/gmccc, Apache-2.0.
More from guan404ming/gmccc
- 0.541score
dev-pr-summarize
guan404ming
Generate a concise PR changelog summary from the current branch diff.
SkillBFreshness: B★ 1Claude Code +9 - 0.535score
dev-git-setup
guan404ming
Set up git aliases.
SkillBFreshness: B★ 1Claude Code +9 - 0.491score
dev-rb
guan404ming
Rebase open PRs onto the default branch, resolve conflicts, and force push.
SkillCFreshness: C★ 1Claude Code +9 - 0.491score
af-dev-ui
guan404ming
Develop Airflow UI features from an issue link or text description.
SkillCFreshness: C★ 1Claude Code +9 - 0.491score
dev-pr-check
guan404ming
Check the current branch diff for minimality, correctness with sufficient tests, and repo conventions.
SkillCFreshness: C★ 1Claude Code +9 - 0.491score
af-review-ui
guan404ming
Review Airflow UI code for consistency, best practices, and conventions.
SkillCFreshness: C★ 1Claude Code +9 - 0.426score
dev-reply
guan404ming
Address PR review comments, fix valid ones and draft replies for invalid ones.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
af-prek
guan404ming
Run pre-commit checks using prek.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
dev-autodev
guan404ming
Common autodev loop for branch, implement, test, commit, and PR summary.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
dev-pr-review
guan404ming
Review code changes for consistency, best practices, and conventions.
SkillDFreshness: D★ 1Claude Code +9 - 0.426score
af-test
guan404ming
Write tests for Airflow backend API endpoints following project conventions.
SkillDFreshness: D★ 1Claude Code +9 - 0.423score
tvm-dev
guan404ming
Resolve a TODO or fix an issue in the TVM relax folder.
SkillDFreshness: D★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jun 17, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/guan404ming/gmccc
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from guan404ming
- 0.552score
lyrics-translator
guan404ming
Translate lyrics while preserving musical constraints (syllable counts, rhyme scheme, syllable patterns).
SkillBFreshness: B★ 1Claude Code +9 - 0.552score
rhyme-analyzer
guan404ming
Extract rhyme endings, check if texts rhyme, and detect rhyme schemes.
SkillBFreshness: B★ 1Claude Code +9 - 0.549score
lyrics-validator
guan404ming
Verify translated lyrics against musical constraints including syllable counts, rhyme scheme, and syllable patterns.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
lyrics-translator-counter-only
guan404ming
Ablation variant of lyrics-translator that enforces syllable counts only.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
lyrics-translator-phase1-only
guan404ming
Ablation variant of lyrics-translator that extracts constraints and translates once, with no refinement loop.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
lyrics-translator-prompt-only
guan404ming
Ablation variant of lyrics-translator with no scripts.
SkillBFreshness: B★ 1Claude Code +9
Cite this page
dev-slides skill. Agent Mart. https://agentmart.dev/skills/guan404ming-dev-slides (last updated 2026-10-24)