<!-- This README has English and Chinese versions; keep them in sync: when changing content, edit both README.md (English, default) and README.zh-CN.md (Chinese). -->
<div align="center">

<img src="assets/logo.png" alt="paper2anything logo" width="140" />

# paper2anything

[![Project Page](https://img.shields.io/badge/Project_Page-Live-2ea44f?logo=githubpages&logoColor=white)](https://quzhan51496.github.io/paper2anything/) [![Claude Code Skill](https://img.shields.io/badge/Claude_Code-Skill-blue?logo=anthropic&logoColor=white)](https://docs.anthropic.com/en/docs/claude-code) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)

**English** | [简体中文](README.zh-CN.md)

[Showcase](#showcase) · [Installation](#installation) · [Usage](#usage) · [Output locations](#output-locations) · [Directory structure](#directory-structure) · [Contributors](#contributors) · [Acknowledgements](#acknowledgements)

</div>

<div align="center">
<img src="assets/marquee.webp" alt="A marquee of real artifacts produced by paper2anything — slide decks, posters, project homepages, Xiaohongshu and WeChat covers" width="100%" />
</div>

A skills pack that turns an academic paper PDF into any of several promotional artifacts, covering the main forms of paper dissemination:

| Skill | Turns the paper into | Output | Trigger phrases (examples) |
| --- | --- | --- | --- |
| **paper2slides** | a presentation deck | `.pptx` | "make slides from this paper", "generate a deck from this PDF", "deck this paper" |
| **paper2poster** | a conference poster | `poster.html` + `poster.png` | "make a poster from this paper", "turn this paper into a poster" |
| **paper2html** | a single-page project homepage | `index.html` | "turn this paper into a webpage", "generate a project page / landing page" |
| **paper2xhs** | a Xiaohongshu (rednote) multi-image post | `xhs_post.json/md` + cover + figure images | "post this paper to Xiaohongshu", "turn this paper into a rednote post" |
| **paper2wechat** | a WeChat Official Account article | `wechat_article.md/html` + cover | "write this paper as a WeChat article", "turn this paper into a WeChat post" |

Each subdirectory is an independent, auto-triggerable skill (each has its own `SKILL.md`).

---

## Showcase

### paper2slides

A sample of **paper2slides** output — eight decks across diverse research fields (HCI / VR, computer vision, drug discovery, security & provenance, multimodal agents, quantum computing, optimization, and ML theory):

<div align="center">
<img src="assets/showcase/paper2slides/SHOWCASE_decks.png" alt="Eight slide decks generated by paper2slides from paper PDFs, across diverse research fields" width="100%" />
</div>

### paper2poster

A sample of **paper2poster** output — nine posters, spanning nine research fields (drug design, graphics, HCI, materials science, X-ray inspection, NLP / LLM safety, optics & photonics, statistical ML, and computer vision):

<div align="center">
<img src="assets/showcase/paper2poster/SHOWCASE_3x3.png" alt="Nine conference posters generated by paper2poster from paper PDFs, across nine research fields" width="100%" />
</div>

### paper2html

A sample of **paper2html** output — eight project homepages across diverse research fields (HCI / VR, drug discovery, machine writing, robotics, security, software engineering, agent skills, and financial trading):

<div align="center">
<img src="assets/showcase/paper2html/SHOWCASE_pages.png" alt="Eight project homepages generated by paper2html from paper PDFs, across diverse research fields" width="100%" />
</div>

### paper2xhs

A sample of **paper2xhs** output — ten Xiaohongshu (rednote) posts across diverse research fields (world models, LLM agent societies, AI supply-chain security, LLM evaluation, robotic manipulation, CS education, machine translation, climate simulation, medical diagnosis, and causal inference):

<div align="center">
<img src="assets/showcase/paper2xhs/SHOWCASE_tenpapers.png" alt="Ten Xiaohongshu posts generated by paper2xhs from paper PDFs, across diverse research fields" width="100%" />
</div>

### paper2wechat

A sample of **paper2wechat** output — twelve WeChat Official Account articles across diverse research fields (world models, LLM agent societies, AI supply-chain security, LLM evaluation, robotic manipulation, CS education, machine translation, climate simulation, medical diagnosis, causal inference, efficient inference, and NLP):

<div align="center">
<img src="assets/showcase/paper2wechat/SHOWCASE_cover.jpg" alt="Twelve WeChat Official Account covers generated by paper2wechat from paper PDFs, across diverse research fields" width="100%" />
</div>

---

## Installation

**One-command install with Claude Code (recommended)**:

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

The install script will: ① symlink the 5 skills into `~/.claude/skills/`; ② bootstrap a `.env` from `.env.example` if you don't have one; ③ check the conda environment, system dependencies, and `MINERU_API_TOKEN` (used for paper extraction). What the two flags do (omit them if you don't need them):

- `--create-env`: `conda env create` (updates per `environment.yml` if it already exists) + installs playwright chromium + runs a pip self-check;
- `--shell-init`: (optional) writes the `.env` auto-export into your shell startup file, so a new shell loads the credentials automatically.

After it runs, follow the script's prompts for two more steps:

1. **Fill in `MINERU_API_TOKEN` in `.env`** (required);
2. **Install the missing system-level dependencies it points out** (the script detects each one and gives the install command).

If you need to install manually (e.g. you only use one specific skill), here is the equivalent breakdown.

<details>
<summary><b>Manual install</b></summary>

### Register a skill

Symlink the skills you want into `~/.claude/skills/` so Claude Code 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
```

### conda environment

All 5 skills share one conda environment, `paper2anything`.

```bash
# From the paper2anything package root
conda env create -f environment.yml
conda activate paper2anything
```

### System-level dependencies

| Tool | Purpose | Which skill | Install command |
| --- | --- | --- | --- |
| poppler-utils (`pdftoppm`) | PDF rendering | paper2slides | `sudo apt install poppler-utils` (Linux) / `brew install poppler` (macOS) |
| libreoffice (`soffice`) | visual QA | paper2slides | `sudo apt install libreoffice` (Linux) / `brew install --cask libreoffice` (macOS) |
| Node.js | JS runtime | paper2slides | on Linux use NodeSource (the apt default is too old, see the note below) / `brew install node` (macOS) |
| pptxgenjs + react-icons/react/react-dom/sharp | PPT rendering | paper2slides | `npm install -g pptxgenjs react-icons react react-dom sharp` (prefix `sudo` on Linux) |

**Node.js (Linux)**: sharp requires Node ≥20.9.0; install it via NodeSource:

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

### Credentials

All skills' credentials live in **a single `.env` at the package root** (copy from `.env.example` and fill it in). After copying, just fill in your keys:

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

Optional: write the `.env` export into your shell startup file. Pass `--shell-init` during install to do this automatically (see Installation), or add this line manually:

```bash
set -a; source <paper2anything package root>/.env; set +a
```

</details>

---

## Usage

Just state your intent and the matching skill auto-triggers, e.g.:

- "make `path/to/paper.pdf` into slides" → **paper2slides**
- "make a conference poster from this paper" → **paper2poster**
- "turn this PDF into a project homepage" → **paper2html**
- "post this paper to Xiaohongshu for me" → **paper2xhs**
- "write this paper as a WeChat article" → **paper2wechat**

Or call them explicitly with a slash command, followed by the PDF path:

```
/paper2slides path/to/paper.pdf
/paper2poster path/to/paper.pdf
/paper2html   path/to/paper.pdf
/paper2xhs    path/to/paper.pdf
/paper2wechat path/to/paper.pdf
```

---

## Output locations

Each skill's final deliverable lands in the same directory as the paper; all intermediate artifacts are kept under `.paper2anything/<skill>/<paper-name>/` in that same directory:

| Skill | Final deliverable | Intermediate artifacts |
| --- | --- | --- |
| paper2slides | `<paper-name>_slides/` (`<paper-name>.pptx`) | `.paper2anything/slides/<paper-name>/` |
| paper2poster | `<paper-name>_poster/` (`poster.png` + `poster.html` + `images/`) | `.paper2anything/poster/<paper-name>/` |
| paper2html | `<paper-name>_html/` (`index.html` + `images/`) | `.paper2anything/html/<paper-name>/` |
| paper2xhs | `<paper-name>_xhs/` (`xhs_post.md` + `.json` + `cover.png` + `post_images/`) | `.paper2anything/xhs/<paper-name>/` |
| paper2wechat | `<paper-name>_wechat/` (`wechat_article.md` + `.json` + `cover.jpg` + `figures/`) | `.paper2anything/wechat/<paper-name>/` |

---

## Directory structure

```
paper2anything/
├── environment.yml          # python environment
├── .env.example             # credentials template (copy to .env and fill in)
├── .gitignore               # ignores .env / __pycache__ etc.
├── LICENSE                  # Apache-2.0
├── README.md                # this file (English, default)
├── README.zh-CN.md          # Chinese version
├── tools/                   # install scripts
├── assets/                  # static files
│   └── showcase/            # per-skill output samples (assets/showcase/<skill>/)
├── paper2slides/            # paper → slides
│   ├── SKILL.md
│   ├── references/          # design style, outline heuristics, pipeline, schema, pptxgenjs
│   └── scripts/             # parse_pdf / render_pptx / page_screenshot / workdir + lib/
├── paper2poster/            # paper → poster HTML/PNG
│   ├── SKILL.md
│   ├── references/          # poster examples, color palettes, layout guide
│   └── scripts/             # parse_pdf / auto_outline / geom_check / collect_figures / screenshot / check_env
├── paper2html/              # paper → single-page project homepage
│   ├── SKILL.md
│   ├── references/          # design languages, HTML authoring spec, QA checklist
│   └── scripts/             # parse_pdf / validate / render_check etc. + lib/ (parse/extract/QA, no renderer)
├── paper2xhs/               # paper → Xiaohongshu
│   ├── SKILL.md
│   ├── references/          # publish guide
│   └── scripts/             # parse_pdf / cover / post_images / publish / xhs_login + utils
└── paper2wechat/            # paper → WeChat
    ├── SKILL.md
    └── scripts/             # parse_pdf / cover / publish + utils
```

---

## Contributors

Skill design leads at the **[AI4GC Lab](https://ai4gc.org/)**:

<table>
  <tr>
    <td align="center">
      <a href="https://github.com/melonthrower">
        <img src="https://github.com/melonthrower.png" width="80" alt="Honghui Sheng"/><br/>
        <sub><b>Honghui Sheng</b></sub>
      </a><br/>
      <sub>paper2poster</sub>
    </td>
    <td align="center">
      <a href="https://github.com/YuanDaoze">
        <img src="https://github.com/YuanDaoze.png" width="80" alt="Tao Xiong"/><br/>
        <sub><b>Tao Xiong</b></sub>
      </a><br/>
      <sub>paper2html</sub>
    </td>
    <td align="center">
      <a href="https://github.com/b7277">
        <img src="https://github.com/b7277.png" width="80" alt="Xinchen Xu"/><br/>
        <sub><b>Xinchen Xu</b></sub>
      </a><br/>
      <sub>paper2xhs &amp; paper2wechat</sub>
    </td>
  </tr>
</table>

---

## Acknowledgements

paper2anything is developed by the **[AI4GC Lab](https://ai4gc.org/)** at Zhejiang University.

- Paper PDF parsing is powered by **[MinerU](https://github.com/opendatalab/MinerU)**.
- Xiaohongshu publishing is powered by **[xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)**.
- WeChat publishing and formatting are powered by **[md2wechat](https://pypi.org/project/md2wechat/)**.
