Split PDF
scunning1975/MixtapeTools
Download, split, and deeply read academic PDFs. An agent skill from scunning1975/MixtapeTools.
Convert a PDF (research paper, technical report, or project document) into a beautiful single-page academic/project website with a structured outline JSON.
$ npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install zai-org/GLM-skills glmv-pdf-to-web --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/zai-org/GLM-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/glmv-pdf-to-web .claude/skills/glmv-pdf-to-web && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "glmv-pdf-to-web" agent skill from https://github.com/zai-org/GLM-skills/tree/main/skills/glmv-pdf-to-web into .claude/skills/glmv-pdf-to-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "glmv-pdf-to-web", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/zai-org/GLM-skills/tree/main/skills/glmv-pdf-to-webType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install zai-org/GLM-skills glmv-pdf-to-web --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zai-org/GLM-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/glmv-pdf-to-web .agents/skills/glmv-pdf-to-web && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "glmv-pdf-to-web" agent skill from https://github.com/zai-org/GLM-skills/tree/main/skills/glmv-pdf-to-web into .agents/skills/glmv-pdf-to-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "glmv-pdf-to-web", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install zai-org/GLM-skills glmv-pdf-to-web --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zai-org/GLM-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/glmv-pdf-to-web .cursor/skills/glmv-pdf-to-web && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "glmv-pdf-to-web" agent skill from https://github.com/zai-org/GLM-skills/tree/main/skills/glmv-pdf-to-web into .cursor/skills/glmv-pdf-to-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "glmv-pdf-to-web", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/zai-org/GLM-skills.git --path skills/glmv-pdf-to-web--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install zai-org/GLM-skills glmv-pdf-to-web --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zai-org/GLM-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/glmv-pdf-to-web .gemini/skills/glmv-pdf-to-web && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "glmv-pdf-to-web" agent skill from https://github.com/zai-org/GLM-skills/tree/main/skills/glmv-pdf-to-web into .gemini/skills/glmv-pdf-to-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "glmv-pdf-to-web", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install zai-org/GLM-skills glmv-pdf-to-webInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/zai-org/GLM-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/glmv-pdf-to-web .github/skills/glmv-pdf-to-web && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "glmv-pdf-to-web" agent skill from https://github.com/zai-org/GLM-skills/tree/main/skills/glmv-pdf-to-web into .github/skills/glmv-pdf-to-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "glmv-pdf-to-web", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install zai-org/GLM-skills glmv-pdf-to-web --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zai-org/GLM-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/glmv-pdf-to-web .opencode/skills/glmv-pdf-to-web && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "glmv-pdf-to-web" agent skill from https://github.com/zai-org/GLM-skills/tree/main/skills/glmv-pdf-to-web into .opencode/skills/glmv-pdf-to-web/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "glmv-pdf-to-web", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
glmv-pdf-to-webConvert a PDF (research paper, technical report, or project document) into a beautiful single-page academic/project website with a structured outline JSON.
Glmv PDF To Web is an agent skill from zai-org/GLM-skills. Convert a PDF (research paper, technical report, or project document) into a beautiful single-page academic/project website with a structured outline JSON. Trigger this skill when the user wants to make a paper page, project homepage, or academic website from a PDF — in Chinese or English.
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts (for example `scripts/crop.py`, `scripts/generate_web.py` and `scripts/pdf_to_images.py`).
It sits in Documents & Office, covering PDF. The repository describes itself as: Official skills for the GLM family of models. The licence is Apache-2.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2ecd31c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 3 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonpipcurlpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip and curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Glmv PDF To Web loads about 3k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 1,001 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from zai-org/GLM-skills at commit 2ecd31c, republished under its Apache-2.0 licence (© zai-org). 1,001 words, ~2,965 tokens.
.claude/skills/glmv-pdf-to-web/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Convert a research paper or technical document PDF into a polished single-page project website — the kind used for NeurIPS/CVPR/ICLR paper releases. Pages are converted locally at DPI 120, a structured outline.json is saved, images are cropped locally, and the final page is saved with generate_web.py.
Scripts are in: {SKILL_DIR}/scripts/
Python packages (install once):
pip install pymupdf pillowSystem tools: curl (pre-installed on macOS/Linux).
Trigger when the user asks to create a webpage or project page from a PDF — phrases like: "make a project page from a PDF", "create a paper website", "build an academic website for this paper", "论文主页", "做项目主页", "根据pdf做网页", "把论文做成主页", or any similar intent in Chinese or English.
All output goes under {WORKSPACE}/web/<pdf_stem>_<timestamp>/:
web/
└── <pdf_stem>_<timestamp>/
├── outline.json ← structured web plan (WebPlan schema)
├── crops/ ← locally-saved cropped images
│ ├── fig_arch_crop.png
│ ├── table_results_crop.png
│ └── ...
└── index.html ← the website<pdf_stem> = PDF filename without extension<timestamp> = format YYYYMMDD_HHMMSScrops/<name>_crop.png$ARGUMENTS is the path to the PDF file (local) or an HTTP/HTTPS URL.
import os, datetime
pdf_stem = os.path.splitext(os.path.basename(pdf_path))[0]
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
out_dir = os.path.join(workspace, "web", f"{pdf_stem}_{timestamp}")mkdir -p "<out_dir>/crops"If the input is a URL, download it first:
pdf_stem=$(basename "$ARGUMENTS" .pdf)
curl -L -o "/tmp/${pdf_stem}.pdf" "$ARGUMENTS"Then convert (pass either the downloaded path or the original local path):
python {SKILL_DIR}/scripts/pdf_to_images.py "<pdf_path>" --dpi 120Outputs JSON to stdout:
[{"page": 1, "path": "/abs/path/page_001.png"}, ...]Parse and store the full page → path map.
View all page images sequentially before planning. Goal: pure understanding of the document's content, figures, and structure.
While reading, note:
Do NOT plan sections yet — read everything first.
Plan the website sections. Standard structure for academic papers (adapt as needed):
section_id | Purpose |
|---|---|
hero | Title, authors, venue badge, link buttons |
abstract | Full abstract text |
contributions | 3–5 key contribution cards |
method | Architecture figure + method explanation |
results | Quantitative table + qualitative figures |
conclusion | Brief conclusion |
citation | BibTeX block |
For each section that needs an image, identify:
Save as <out_dir>/outline.json using exactly this schema:
{
"project_title": "Paper Title",
"lang": "English",
"authors": ["Author One", "Author Two"],
"sections_plan": [
{
"section_index": 1,
"section_id": "hero",
"title": "Hero",
"content": "Title, authors, venue, teaser figure description",
"required_images": [
{
"url": "<local_page_path_from_phase1>",
"visual_description": "Figure 1: teaser showing input-output examples",
"usage_reason": "Hero section visual to immediately show the paper's output"
}
]
}
]
}Field notes:
lang: "Chinese" or "English" — match the PDF languagerequired_images: empty array [] if section needs no imagesurl: the local file path of the source page (from Phase 1 path field)Write outline.json using the Write tool to <out_dir>/outline.json.
IMPORTANT: You MUST delegate ALL cropping to a clean subagent using the Agent tool. By this phase your context is very long (all page images + outline), which degrades visual coordinate accuracy. A fresh subagent with only the target image produces much more precise coordinates.
IMPORTANT: You MUST use the provided {SKILL_DIR}/scripts/crop.py script for ALL image cropping. Do NOT write your own cropping code, do NOT use PIL/Pillow directly, do NOT use any other method.
Read outline.json. Collect all crops needed, then launch one subagent per source page (or one per crop if pages differ). The subagent uses grounding-style localization — it views the image, locates the target element, and outputs a precise bounding box in normalized 0–999 coordinates.
Use the Agent tool like this:
Agent tool call:
description: "Grounding crop page N"
prompt: |
You are a visual grounding and cropping assistant. Your task is to precisely
locate specified visual elements in a page image and crop them out.
## Grounding method
Use visual grounding to locate each target:
1. Read the source image using the Read tool to view it
2. Identify the target element described below
3. Determine its bounding box as normalized coordinates in the 0–999 range:
- 0 = left/top edge of the image
- 999 = right/bottom edge of the image
- These are thousandths, NOT pixels, NOT percentages (0–100)
- Format: [x1, y1, x2, y2] where (x1,y1) is top-left, (x2,y2) is bottom-right
- Example: [0, 0, 500, 500] = top-left quarter of the image
4. Be precise: tightly bound the target element with a small margin (~10–20 units)
around it. Do NOT crop too wide or too narrow.
## Source image
<page_image_path>
## Crops needed
For each crop below, first do grounding (locate the element), then crop:
1. Name: "<descriptive_name>"
Target: "<visual_description from outline.json>"
Context: "<usage_reason from outline.json>"
## Crop command
After determining the bounding box [X1, Y1, X2, Y2] for each target, run:
```bash
python <SKILL_DIR>/scripts/crop.py \
--path "<page_image_path>" \
--box X1 Y1 X2 Y2 \
--name "<crop_name>" \
--out-dir "<out_dir>/crops"
```
## Verification
After each crop, READ the output image to visually verify the correct region
was captured. If the crop missed the target or is too wide/narrow, adjust the
coordinates and re-run crop.py.
## Output
Report the final results as a list:
- crop_name: <name>, file: <output_filename>, box: [X1, Y1, X2, Y2]Replace <page_image_path>, <SKILL_DIR>, <out_dir>, and crop details with actual values from your context.
The crop.py script outputs JSON: {"path": "/abs/path/<name>_crop.png"}
Collect results from all subagents and build the mapping: section_id → [crop filename, ...] to reference in HTML.
Launch subagents for independent pages in parallel when possible. Wait for all to complete before proceeding.
python3 -c "
from PIL import Image; import os, json
d = '<out_dir>/crops'
sizes = {}
for f in sorted(os.listdir(d)):
if f.endswith('.png'):
w, h = Image.open(os.path.join(d, f)).size
sizes[f] = {'width': w, 'height': h, 'aspect': round(w/h, 2)}
print(json.dumps(sizes, indent=2))
"| Aspect ratio | Layout recommendation |
|---|---|
| < 0.7 (tall/narrow) | max-width: 400–500px, centered |
| 0.7 – 1.3 (square-ish) | max-width: 600–700px |
| > 1.3 (wide) | Full-width, max-width: 100% |
| > 2.0 (very wide, e.g. tables) | Full-width with horizontal scroll fallback |
Step A — Write HTML to /tmp/website.html
<img src="..."> must use relative paths: crops/<name>_crop.pngStep B — Save:
python {SKILL_DIR}/scripts/generate_web.py \
--html-file /tmp/website.html \
--title "<paper title>" \
--out-dir "<out_dir>/"A single self-contained HTML file — embedded CSS, minimal vanilla JS only. No external JS frameworks. Google Fonts CDN is fine.
Page layout:
900px, centered, comfortable side paddingTypography:
Visual style:
Section guidelines:
hero:
[📄 Paper] [💻 Code] [🗄️ Dataset] — grey out if no URLabstract:
contributions:
method:
<figure><img><figcaption>) + prose explanationresults:
<table> — use actual numbers from the PDF, best numbers boldedconclusion:
citation:
<pre><code> BibTeX block reconstructed from PDF metadatanavigator.clipboard vanilla JSImages:
<img> use relative paths: crops/<name>_crop.pngloading="lazy" and descriptive alt<figure> with <figcaption>Animations (subtle only):
IntersectionObserver + CSS transitions<pdf_stem>_<timestamp>/outline.json saved with valid WebPlan schemacrops/ (local only)crops/<name>_crop.pnggenerate_web.py called and confirmed successMatch the PDF language. English paper → English website. Chinese paper → Chinese. No mixing.
© zai-org, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in skills/glmv-pdf-to-web of zai-org/GLM-skills.
Open the folder on GitHubat commit 2ecd31c
Glmv PDF To Web next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Glmv PDF To Web this skillzai-org/GLM-skills | 476 | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Split PDFscunning1975/MixtapeTools | 474 | 2 repos | ~2.9k | Automated safety check: Pass | None | |
| Paper Interpretationdigoal/blog | 8.6k | — | ~1.5k | Automated safety check: Pass | GPL-2.0 | |
| Paper2slidesQuZhan51496/paper2anything | 450 | — | ~3.8k | Automated safety check: Notes | Apache-2.0 | |
| Paper LensYSQ-boop/paper-lens | 101 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Geng Academic Fraud Detectorwooly99/geng-academic-fraud-detector | 278 | — | ~970 | Automated safety check: Pass | None |
scunning1975/MixtapeTools
Download, split, and deeply read academic PDFs. An agent skill from scunning1975/MixtapeTools.
digoal/blog
从论文 PDF 文件或论文 PDF URL 生成通俗易懂、图文并茂、带批判性评估的中文 Markdown 解读,并保存到当前项目的 markdown 目录。Use when the user asks to interpret,精读,解读,summarize,explain,analyze, or write an article from an academic paper PDF…
QuZhan51496/paper2anything
Turn an academic paper PDF into a presentation deck (.pptx) end-to-end.
YSQ-boop/paper-lens
Read and critically analyze one academic paper from an arXiv URL/ID or a local PDF, producing a source-grounded Markdown report that can grow from a quick read into a reviewer-level deep review.
wooly99/geng-academic-fraud-detector
学术论文打假检测器,致敬耿同学。分析学术论文 PDF,检测数据造假、图片复用/拼接、Western blot 操纵、统计异常等学术不端行为。当用户提供论文 PDF 要求"查重"、"打假"、"检测造假"、"论文分析"、"学术打假"时使用。
QuZhan51496/paper2anything
Convert academic papers (PDF) into conference posters (HTML/PNG).
zai-org/GLM-skills
Extract text from images using GLM-OCR API. An agent skill from zai-org/GLM-skills.
zai-org/GLM-skills
Official skill for generating high-quality images from text prompts using ZhiPu GLM-Image API.
zai-org/GLM-skills
Official skill for recognizing and extracting mathematical formulas from images and PDFs into LaTeX format using ZhiPu GLM-OCR API.
zai-org/GLM-skills
Official skill for recognizing handwritten text from images using ZhiPu GLM-OCR API.
zai-org/GLM-skills
Official skill for recognizing and extracting tables from images and PDFs into Markdown format using ZhiPu GLM-OCR API.
zai-org/GLM-skills
Generate captions (descriptions) for images, videos, and documents using ZhiPu GLM-V multimodal model series.
Categories
Convert a PDF (research paper, technical report, or project document) into a beautiful single-page academic/project website with a structured outline JSON. Glmv PDF To Web is an agent skill from zai-org/GLM-skills. Convert a PDF (research paper, technical report, or project document) into a beautiful single-page academic/project website with a structured outline JSON.
Glmv PDF To Web fits situations like: this skill when the user wants to make a paper page; project homepage; academic website from a PDF — in Chinese.
Run `npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a claude-code`. Or copy the skill folder (skills/glmv-pdf-to-web in zai-org/GLM-skills) into .claude/skills/glmv-pdf-to-web in your project. Claude Code loads it when a task matches its description.
Run `npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a codex`. Or copy the skill folder (skills/glmv-pdf-to-web in zai-org/GLM-skills) into .agents/skills/glmv-pdf-to-web in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add zai-org/GLM-skills --skill glmv-pdf-to-web -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/glmv-pdf-to-web, .gemini/skills/glmv-pdf-to-web, .github/skills/glmv-pdf-to-web and .opencode/skills/glmv-pdf-to-web in your project.
Going by SKILL.md and its folder, Glmv PDF To Web needs Python for the scripts in its folder and the command-line tools its instructions call (python, pip, curl and python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use pip and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Glmv PDF To Web is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Glmv PDF To Web: Split PDF (scunning1975/MixtapeTools, 474 stars), Paper Interpretation (digoal/blog, 8.6k stars), Paper2slides (QuZhan51496/paper2anything, 450 stars) and Paper Lens (YSQ-boop/paper-lens, 101 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
zai-org (a GitHub organization) maintains it in zai-org/GLM-skills, which has 476 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on April 15, 2026.
Source: zai-org/GLM-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.