Model or dataset
QuZhan51496/paper2anything avatar
QuZhan51496/paper2anything

paper2anything: five skills, one required token, and five empty example blocks

An agent skills pack that turns an academic paper PDF into slides, a poster, a webpage, a Xiaohongshu post, or a WeChat article (paper2slides/poster/html/xhs/wechat)

450 stars11 forksPythonApache-2.0

At a glance

What is it?
QuZhan51496/paper2anything is a pack of five independent Claude Code skills that turn one paper PDF into a deck, a poster, a landing page, a Xiaohongshu post or a WeChat article. The README promises dozens of finished examples and shows none of them, and the whole pack hangs on a single required MinerU token plus an install that symlinks five directories into your home directory.
Who is it for?
Use it if you already run Claude Code, already have a conda environment and a MinerU token, and publish to Chinese platforms, since that is where three of the five skills aim. Do not adopt it expecting turnkey samples: every example block in the README is empty, and the only proof of output quality is the artifact you generate yourself.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 86 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 10, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Every example section counts its artifacts and renders an empty div

The middle of the README is five example subsections, and each one names a number before showing nothing. paper2slides claims eight decks across fields from HCI and VR to ML theory, paper2poster claims nine posters across nine fields, paper2html claims eight project homepages, paper2xhs claims ten Xiaohongshu posts, and paper2wechat claims twelve WeChat articles. Forty-seven finished artifacts in total. Every one of those five subsections is followed by a bare div with align set to center and nothing inside it, and the header block above the language switcher has the same empty div. So the count is the only evidence on the page, and the rendered README shows five empty boxes where the samples should be. A reader cannot judge deck layout, poster legibility or the tone of a rednote post from that.

One .env at the package root carries the credentials for all five skills

Credential handling is centralized rather than per skill. A single .env at the package root holds everything, created by copying the example:

bash
cp .env.example .env          # first time: copy, then fill in your keys

Only one key is required. MINERU_API_TOKEN is marked mandatory in the example file and is used for paper extraction, which means the parsing step for every skill depends on a cloud API at mineru.net rather than on a local library. The install script checks for it, and after the script finishes it prompts for two follow-up steps: fill in that token, and install the system dependencies it points at. Keys for skills you do not use can be left blank. Optionally, the export line can be added to a shell startup file so new shells pick up the values, either through the --shell-init flag during install or by hand.

MINERU_API_BASE must stay a host root because each skill appends its own path

The example file documents a mistake in advance. MINERU_API_BASE holds the API endpoint root, each skill appends /api/v4 itself, and the comment tells you to fill in the host root only, never a value ending in that suffix. Getting it wrong does not fail loudly at the endpoint level, it produces a doubled path at request time, and the comment exists because users do it anyway.

The other credentials are optional and each has a stated fallback. OPENAI_API_KEY and OPENAI_BASE_URL exist for cover image generation in paper2xhs and paper2wechat, with a comment that a blank key falls back to local compositing, and OPENAI_IMAGE_MODEL can override the image model, whose default is gpt-image-2. The example file also notes that an already exported environment variable takes precedence over the values in .env, so a stale shell variable can win over an edited file.

The system dependency table covers paper2slides and nothing else

Four system-level dependencies are tabulated, and every row names the same skill: paper2slides. poppler-utils provides pdftoppm for PDF rendering, libreoffice provides soffice for visual QA, Node.js is the JS runtime, and pptxgenjs with react-icons, react, react-dom and sharp does the PPT rendering. Each row carries its own install command, apt on Linux and brew on macOS, with sudo prefixed for the npm line. The other four skills have no entry in this table at all, which means a reader cannot tell from it whether paper2poster, paper2html, paper2xhs or paper2wechat need anything beyond the conda environment and the shared token. The npm install line is global, so a machine that already has pptxgenjs for another project inherits whatever version is there.

Linux Node setup pipes a remote script into a root shell

sharp requires Node 20.9.0 or newer, and the Linux note says the distribution default is too old, so the documented fix is a NodeSource script:

bash
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt install -y nodejs

That line downloads a shell script from a remote host and executes it as root in the same breath, with sudo -E preserving the environment, and then installs nodejs from the repository that script just configured. The same pattern shows up in the table, where the global npm install carries a sudo prefix on Linux and a note to install NodeSource rather than the apt default. Nothing in the pack pins a Node version in a manifest; the constraint lives in a prose note about one npm package, which is the kind of requirement that is easy to satisfy by accident and hard to audit later.

Xiaohongshu publishing downloads a binary the first time it runs

The paper2xhs publish step does not ship a publisher. It goes through the open source project xiaohongshu-mcp, and the example file explains the runtime behaviour: the skill checks for the binary when it reaches the publish step, and if the binary is missing it downloads the build for the current platform into ~/.paper2anything/xhs/. Two optional settings override that: XHS_MCP_BIN for a custom binary path or version, and XHS_MCP_URL for the service address, which defaults to http://localhost:18060. So a machine that publishes to Xiaohongshu needs outbound network access at publish time and ends up with a platform-specific executable under the user's home directory, fetched by the skill rather than by a package manager. Anyone auditing what a workstation fetches should look at that directory as well as at the conda environment.

WeChat publishing degrades to local HTML when the keys are blank

The paper2wechat path has two endings. With WECHAT_APPID and WECHAT_APP_SECRET filled in, it pushes into the Official Account draft box, and the example file lists what that costs: credentials from the WeChat developer platform, the machine's egress IP added to the API IP whitelist, and real-name verification for the draft interface. With the keys left blank, the publish step degrades to generating styled HTML locally for manual pasting, and MD2WECHAT_THEME selects the theme, defaulting to default. The degradation is deliberate and documented rather than an error, which means the output looks finished either way. The output pair named for this skill is a markdown or HTML article plus a cover, so the article itself is generated regardless of whether anything reaches the platform.

Install is five symlinks into ~/.claude/skills, for Claude Code only

The recommended path is one script per platform, and both accept the same two flags:

bash
bash tools/install-linux.sh --create-env --shell-init     # Linux
bash tools/install-macos.sh --create-env --shell-init     # macOS

What runs underneath is visible in the manual equivalent. The skills are symlinked into the Claude skills directory so that client can discover and auto-trigger them:

bash
# From the paper2anything package root; copy the line for whichever skill you want
mkdir -p ~/.claude/skills
ln -sfn "$(pwd)/paper2slides"  ~/.claude/skills/paper2slides
ln -sfn "$(pwd)/paper2poster"  ~/.claude/skills/paper2poster
ln -sfn "$(pwd)/paper2html"    ~/.claude/skills/paper2html
ln -sfn "$(pwd)/paper2xhs"     ~/.claude/skills/paper2xhs
ln -sfn "$(pwd)/paper2wechat"  ~/.claude/skills/paper2wechat

The symlinks point at the checkout, so the skills follow that directory rather than a copy of it. Claude Code is the only client named anywhere in the install path, the header badge links to that product's documentation, and the usage section works the same way: you state an intent in chat and the matching skill triggers, with the last visible example in that list stopping partway through the WeChat phrase. The requirement that README.md and README.zh-CN.md be edited together lives in an HTML comment at the top of the file, where it does not appear on the rendered page.

Editorial conclusion

Use it if you already run Claude Code, already have a conda environment and a MinerU token, and publish to Chinese platforms, since that is where three of the five skills aim. Do not adopt it expecting turnkey samples: every example block in the README is empty, and the only proof of output quality is the artifact you generate yourself. Before installing, read what the script touches, because it symlinks five directories into ~/.claude/skills/, may write to your shell startup file, and downloads a publishing binary on first use for Xiaohongshu. Decide whether pushing to the WeChat draft box is worth the real-name verification and IP whitelist it asks for, or take the local HTML fallback.

Frequently asked questions

What does paper2anything turn a paper PDF into?

Five independent skills, each in its own directory with its own SKILL.md: paper2slides produces a .pptx deck, paper2poster a poster.html plus poster.png, paper2html a single-page index.html, paper2xhs a Xiaohongshu post with cover and figure images, and paper2wechat a WeChat article with a cover. You state the intent in chat and the matching skill auto-triggers.

Which API keys does paper2anything require?

MINERU_API_TOKEN is the one required key, and it is used for paper extraction, so the install script checks for it and tells you to fill it in. OPENAI_API_KEY is optional and only affects AI-generated covers for paper2xhs and paper2wechat, which fall back to local compositing when it is blank.

Does paper2anything work with coding agents other than Claude Code?

The install path targets Claude Code and nothing else: the scripts symlink the five skill directories into ~/.claude/skills/ so that client can discover and auto-trigger them, and the README header badge links to the Claude Code documentation. No other agent or client is named in the installation or usage instructions.

How does paper2anything publish to Xiaohongshu and WeChat?

Xiaohongshu publishing goes through the open source xiaohongshu-mcp, and the skill downloads the platform binary into ~/.paper2anything/xhs/ when it is missing, with a default service address of http://localhost:18060. WeChat publishing pushes into the Official Account draft box and needs an AppID, a secret, real-name verification and the machine egress IP in the API whitelist, otherwise it falls back to styled local HTML for manual pasting.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. Project website
  4. QuZhan51496/paper2anything on GitHub
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/quzhan51496-paper2anything.svg)](https://hysenlabs.com/projects/quzhan51496-paper2anything)