Not in the top 1,000 by GitHub stars

QuZhan51496/paper2anything

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)

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

paper2html/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

72bf82dfe7bc → 72bf82dfe7bc

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 72bf82dfe7bc

No earlier version was observed for comparison.

Compare on GitHub

paper2poster/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

72bf82dfe7bc → 72bf82dfe7bc

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 72bf82dfe7bc

No earlier version was observed for comparison.

Compare on GitHub

paper2slides/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

72bf82dfe7bc → 72bf82dfe7bc

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 72bf82dfe7bc

No earlier version was observed for comparison.

Compare on GitHub

paper2wechat/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

72bf82dfe7bc → 72bf82dfe7bc

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 72bf82dfe7bc

No earlier version was observed for comparison.

Compare on GitHub

paper2xhs/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

72bf82dfe7bc → 72bf82dfe7bc

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 72bf82dfe7bc

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 72bf82dfe7bc8c170d64ed30086e178ddad50210

479GitHub stars
0stars in 7 days
5skills in this repository
0commits in 30 days

Heat

1.9
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 6, 2026483

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

paper2html

When your agent uses it

Convert an academic paper PDF into a publish-ready, self-contained single-page **project homepage** (a self-contained index.html) — the kind of paper landing page researchers host on GitHub Pages. Triggers when the user says "turn a paper into a project page/webpage", "paper2html", "generate a paper landing page / project page", "turn this PDF into an HTML page", "paper to webpage", or "make a paper homepage". A you-led, coordinated skill: the mechanical steps (MinerU parsing + deterministic fact extraction at gate 1 + post-authoring QA at gate 2) call scripts, while **you hand-author index.html yourself** (calling no LLM API), choosing from several design languages.

What it loads into context

Frontmatter

212 tokens

Always available to the agent

SKILL.md

3,276 tokens

When the skill is activated

Reference documents

2,327 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. How you run this skill
  2. Step 0: Environment and credentials
  3. Step 1: Parse + deterministic extraction (script, gate 1)
  4. Step 2: Understand the paper + set the design direction (you do this) [confirm]
  5. Step 3: Hand-author index.html (you do this) [optional confirm]
  6. Step 4: QA validation and revision (script, gate 2)
  7. Step 5: Collect the deliverable next to the PDF
  8. Deliverable locations
  9. Troubleshooting
  10. references/

Scripts executed separately

  • scripts/_env.py
  • scripts/lib/__init__.py
  • scripts/lib/config.py
  • scripts/lib/core.py
  • scripts/lib/mineru_client.py
  • scripts/parse_pdf.py
  • scripts/render_check.py
  • scripts/utils.py
  • scripts/validate.py

Files

  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • SKILL.mdcore13,159 bytes
  • references/design-languages.mddoc2,438 bytes
  • references/html-authoring.mddoc4,405 bytes
  • references/qa-checklist.mddoc3,134 bytes
  • scripts/_env.pyruns543 bytes
  • scripts/lib/__init__.pyruns297 bytes
  • scripts/lib/config.pyruns1,255 bytes
  • scripts/lib/core.pyruns45,474 bytes
  • scripts/lib/mineru_client.pyruns8,653 bytes
  • scripts/parse_pdf.pyruns6,369 bytes
  • scripts/render_check.pyruns7,545 bytes
  • scripts/utils.pyruns3,722 bytes
  • scripts/validate.pyruns3,338 bytes
Read SKILL.md

# paper2html — Paper to single-page project homepage (you-led, coordinated)

Turn a paper PDF into a **self-contained, publish-ready single-page project website** — the kind of paper
homepage researchers commonly build on GitHub Pages.
**You are the lead author**: this file is the recipe, not a fully automated script — there is no `main.py`,
no renderer. The mechanical steps (parse / extract / QA) call the small tools under `scripts/`; **understanding
the paper, designing the page, and writing `index.html` are done by you** (read the material and figures with
Read, write `index.html` with Write), confirming with the user at key points via `AskUserQuestion`.

```text
PDF
 → parse + extract        (parse_pdf.py: MinerU → clean.md + manifest.json + images/, gate 1)
 → you understand it + set the design   (read manifest + clean.md + look at figures) → pick a design language   [confirm design direction]
 → you hand-author the page   (per the references/ design-language and authoring rules) → index.html            [optional confirm]
View the complete source on GitHub

Skills included

  • paper2html
  • paper2poster
  • paper2slides
  • paper2wechat
  • paper2xhs

Repository facts

License
Apache-2.0
Created
Jun 15, 2026
Last pushed
Jul 16, 2026
Forks
12
Open issues
0
Project activity
Slowing

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 65 notes
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2html/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper2poster/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 207 signals by file

paper2html/SKILL.md

paper2html/scripts/_env.py

  • Executable scriptline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]

paper2html/scripts/lib/__init__.py

  • Executable scriptline 1
    Executable file

paper2html/scripts/lib/config.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 6
    [Credential-related source omitted]
  • Access to secretsline 7
    [Credential-related source omitted]
  • Access to secretsline 9
    [Credential-related source omitted]
  • Network accessline 13
    [Credential-related source omitted]
  • Access to secretsline 13
    [Credential-related source omitted]
  • Access to secretsline 14
    [Credential-related source omitted]

paper2html/scripts/lib/core.py

  • Executable scriptline 1
    Executable file
  • Network accessline 153
    text = markdown.replace("\r\n", "\n").replace("\r", "\n")     text = re.sub(r"https://github\.com/\s+", "https://github.com/", text)
  • Network accessline 154
    text = re.sub(r"https://github\.com/\s+", "https://github.com/", text)

paper2html/scripts/lib/mineru_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 20
    _session = requests.Session()

paper2html/scripts/parse_pdf.py

  • Executable scriptline 1
    #!/usr/bin/env python
  • Access to secretsline 23
    [Credential-related source omitted]

paper2html/scripts/render_check.py

  • Executable scriptline 1
    #!/usr/bin/env python3

paper2html/scripts/utils.py

  • Executable scriptline 1
    Executable file

paper2html/scripts/validate.py

  • Executable scriptline 1
    #!/usr/bin/env python
  • Access to secretsline 25
    [Credential-related source omitted]

paper2poster/SKILL.md

  • Broad permissionsline 1
    Bash
  • Access to secretsline 74
    [Credential-related source omitted]
  • Network accessline 496
    - **MinerU 401**: token missing — set `MINERU_API_TOKEN` from `https://mineru.net/apiManage/token`. - **MinerU OSS download stalls**: requests through MinerU's presigned OSS URLs must bypass the system proxy — `parse_pdf.py` already does th

paper2poster/scripts/_env.py

  • Executable scriptline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 4
    [Credential-related source omitted]
  • Access to secretsline 11
    [Credential-related source omitted]

paper2poster/scripts/auto_outline.py

  • Executable scriptline 1
    Executable file

paper2poster/scripts/check_env.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 6
    [Credential-related source omitted]
  • Access to secretsline 22
    [Credential-related source omitted]
  • Network accessline 32
    [Credential-related source omitted]
  • Network accessline 33
    [Credential-related source omitted]
  • Network accessline 34
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]

paper2poster/scripts/collect_figures.py

  • Executable scriptline 1
    #!/usr/bin/env python3

paper2poster/scripts/geom_check.py

  • Executable scriptline 1
    #!/usr/bin/env python3

paper2poster/scripts/parse_pdf.py

  • Executable scriptline 1
    Executable file
  • Network accessline 8
    Environment variables:     MINERU_API_TOKEN  — Bearer token from https://mineru.net/apiManage/token
  • Network accessline 9
    MINERU_API_TOKEN  — Bearer token from https://mineru.net/apiManage/token
  • Access to secretsline 21
    [Credential-related source omitted]
  • Network accessline 28
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Network accessline 46
    session = requests.Session()
  • Access to secretsline 50
    [Credential-related source omitted]
  • Network accessline 51
    [Credential-related source omitted]
  • Network accessline 52
    [Credential-related source omitted]
  • Network accessline 53
    "MinerU API token not set. Get one at https://mineru.net/apiManage/token\n"
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 414
    [Credential-related source omitted]

paper2poster/scripts/screenshot.py

  • Executable scriptline 1
    Executable file

paper2slides/SKILL.md

  • Broad permissionsline 1
    Bash, Read, Write, Glob, Grep, Agent, AskUserQuestion
  • Access to secretsline 93
    [Credential-related source omitted]

paper2slides/scripts/__init__.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 4
    [Credential-related source omitted]
  • Access to secretsline 6
    [Credential-related source omitted]
  • Access to secretsline 14
    [Credential-related source omitted]

paper2slides/scripts/lib/__init__.py

  • Executable scriptline 1
    Executable file

paper2slides/scripts/lib/mineru_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 18
    - The token is passed in explicitly via a parameter (the caller reads the MINERU_API_TOKEN     env); this module only reads the optional MINERU_API_BASE (endpoint root, default     https://mineru.net), it does not read the token
  • Network accessline 20
    https://mineru.net), it does not read the token
  • Network accessline 40
    [Credential-related source omitted]
  • Access to secretsline 40
    [Credential-related source omitted]
  • Network accessline 48
    _SESSION = requests.Session()
  • Network accessline 188
    s = requests.Session()
  • Access to secretsline 228
    [Credential-related source omitted]

paper2slides/scripts/lib/mineru_parser.py

  • Executable scriptline 1
    Executable file

paper2slides/scripts/lib/sectionize.py

  • Executable scriptline 1
    Executable file

paper2slides/scripts/page_screenshot.py

  • Executable scriptline 1
    Executable file

paper2slides/scripts/parse_pdf.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 145
    [Credential-related source omitted]
  • Network accessline 147
    raise SystemExit(             "MINERU_API_TOKEN env var is required (MinerU cloud parsing). "             "Get one at https://mineru.net/apiManage/token")
  • Network accessline 149
    "Get one at https://mineru.net/apiManage/token")

paper2slides/scripts/render_pptx.py

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 236
    "`sudo npm install -g pptxgenjs react-icons react react-dom sharp` "
  • Access to secretsline 247
    [Credential-related source omitted]
  • Access to secretsline 323
    [Credential-related source omitted]

paper2slides/scripts/workdir.py

  • Executable scriptline 1
    Executable file

paper2wechat/SKILL.md

  • Broad permissionsline 1
    Bash, Read, Write, Glob, Grep, AskUserQuestion, SendUserFile
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 150
    [Credential-related source omitted]
  • Network accessline 225
    - **MinerU 解析失败**:核对 `MINERU_API_TOKEN`;PDF ≤200MB / ≤200 页;能访问 `mineru.net`。重跑 Step 1(覆盖)。 - **封面没生成(`skipped`)**:通常是既没配可用 `OPENAI_API_KEY`、又没有可复用的论文原图。配上 key 走 AI 生图,或确保 `understanding.important_figures` 有 `suitable_for_cover:true` 且 `ima
  • Network accessline 226
    [Credential-related source omitted]
  • Access to secretsline 226
    [Credential-related source omitted]
  • Network accessline 227
    - **发布到草稿箱报错**:需 `WECHAT_APPID`/`WECHAT_APP_SECRET`(从微信开发者平台 developers.weixin.qq.com 获取;AppSecret 重置后旧的失效)+ **本机出口 IP 加到「API IP白名单」** + **认证公众号**(未认证号无 `draft/add` 权限,报 404)。按 errcode 排查:`40164` IP 不在白名单、`40001` AppSecret 错、`40013` AppID 错

paper2wechat/scripts/_env.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]

paper2wechat/scripts/cover.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 132
    [Credential-related source omitted]
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 134
    [Credential-related source omitted]
  • Access to secretsline 135
    [Credential-related source omitted]
  • Access to secretsline 136
    [Credential-related source omitted]
  • Access to secretsline 236
    [Credential-related source omitted]
  • Possible obfuscationline 245
    tmp_path.write_bytes(base64.b64decode(image_data))
  • Network accessline 251
    import urllib.request             tmp_path = output_path.with_suffix(".tmp.png")             urllib.request.urlretrieve(image_url, tmp_path)
  • Network accessline 252
    tmp_path = output_path.with_suffix(".tmp.png")             urllib.request.urlretrieve(image_url, tmp_path)             _resize_to_wechat_cover(tmp_path, output_path)
  • Network accessline 253
    urllib.request.urlretrieve(image_url, tmp_path)
  • Access to secretsline 279
    [Credential-related source omitted]
  • Access to secretsline 312
    [Credential-related source omitted]
  • Access to secretsline 322
    [Credential-related source omitted]

paper2wechat/scripts/parse_pdf.py

  • Network accessline 1
    """ parse_pdf — MinerU 解析(云端 API 版) 通过 https://mineru.net/api/v4 调用 MinerU SaaS:
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    parse_pdf — MinerU 解析(云端 API 版) 通过 https://mineru.net/api/v4 调用 MinerU SaaS:   1. POST /file-urls/batch → 拿到 PUT 上传 URL + batch_id
  • Network accessline 3
    通过 https://mineru.net/api/v4 调用 MinerU SaaS:
  • Access to secretsline 23
    [Credential-related source omitted]
  • Network accessline 39
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]
  • Network accessline 46
    _MINERU = requests.Session()
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]

paper2wechat/scripts/publish.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 23
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 190
    [Credential-related source omitted]

paper2wechat/scripts/utils.py

  • Executable scriptline 1
    Executable file

paper2xhs/SKILL.md

  • Broad permissionsline 1
    Bash, Read, Write, Glob, Grep, AskUserQuestion, SendUserFile
  • Network accessline 51
    - `MINERU_API_TOKEN` — 解析 PDF(必填) - `OPENAI_API_KEY`(+ `OPENAI_BASE_URL`) — 封面默认走它生图(gpt-image-2);无 key 或 key 不可用时回退本地合成(复用论文原图) - `XHS_MCP_BIN` — 可选:自定义 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 二进制位置;**不设则发布时 skill 自
  • Access to secretsline 52
    [Credential-related source omitted]
  • Network accessline 53
    - `XHS_MCP_BIN` — 可选:自定义 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp) 二进制位置;**不设则发布时 skill 自动按平台下载**到 `~/.paper2anything/xhs/`。另可选 `XHS_MCP_URL`(自定义服务地址/端口,默认 `http://localhost:18060`)。
  • Access to secretsline 104
    [Credential-related source omitted]
  • Access to secretsline 153
    [Credential-related source omitted]
  • Network accessline 173
    发布走开源的 **[xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)**(自带无头 Chromium 的单二进制 + REST API)。**登录一次后 cookies 持久、之后免登录**。二进制由 ① 自动备好(`XHS_MCP_BIN` 仅自定义位置时配,见 Step 0)。**首次配置/登录的分环境完整步骤见 `references/publish-guide.md`**——先 `Read` 
  • Access to secretsline 178
    [Credential-related source omitted]
  • Access to secretsline 184
    [Credential-related source omitted]
  • Network accessline 187
    if [ -n "$ASSET" ] && [ ! -x "$BIN" ]; then     echo "未找到 mcp 二进制,自动下载 $ASSET …"     curl -fL -o "$XHS_MCP_DIR/$ASSET.tar.gz" "https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/$ASSET.tar.gz" \
  • Network accessline 188
    echo "未找到 mcp 二进制,自动下载 $ASSET …"     curl -fL -o "$XHS_MCP_DIR/$ASSET.tar.gz" "https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/$ASSET.tar.gz" \       && tar xzf "$XHS_MCP_DIR/$ASSET.tar.gz" -C "$XHS_MCP_DIR" && chmod +
  • Network accessline 189
    curl -fL -o "$XHS_MCP_DIR/$ASSET.tar.gz" "https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/$ASSET.tar.gz" \
  • Network accessline 192
    fi # 起服务(已在跑就跳过;BIN 不可用则报错、不硬起) if ! curl -sf http://localhost:18060/api/v1/login/status >/dev/null 2>&1; then
  • Network accessline 193
    # 起服务(已在跑就跳过;BIN 不可用则报错、不硬起) if ! curl -sf http://localhost:18060/api/v1/login/status >/dev/null 2>&1; then   if [ ! -x "$BIN" ]; then
  • Network accessline 194
    if ! curl -sf http://localhost:18060/api/v1/login/status >/dev/null 2>&1; then
  • Network accessline 197
    else     ( cd "$XHS_MCP_DIR" && nohup "$BIN" -port=:18060 > mcp.log 2>&1 & )     for i in $(seq 1 30); do curl -sf http://localhost:18060/api/v1/login/status >/dev/null 2>&1 && break; sleep 2; done
  • Network accessline 198
    ( cd "$XHS_MCP_DIR" && nohup "$BIN" -port=:18060 > mcp.log 2>&1 & )     for i in $(seq 1 30); do curl -sf http://localhost:18060/api/v1/login/status >/dev/null 2>&1 && break; sleep 2; done   fi
  • Network accessline 199
    for i in $(seq 1 30); do curl -sf http://localhost:18060/api/v1/login/status >/dev/null 2>&1 && break; sleep 2; done
  • Network accessline 275
    [Credential-related source omitted]
  • Access to secretsline 275
    [Credential-related source omitted]
  • Access to secretsline 276
    [Credential-related source omitted]

paper2xhs/references/publish-guide.md

  • Network accessline 3
    发布能力由开源项目 [xiaohongshu-mcp](https://github.com/xpzouying/xiaohongshu-mcp)(作者 xpzouying)提供——一个自带无头 Chromium、暴露 REST API 的单二进制。本指引讲怎么按你的系统/有无显示器完成「登录一次 → 之后免登录发布」。
  • Network accessline 17
    mkdir -p ~/.paper2anything/xhs && cd ~/.paper2anything/xhs # Linux x86_64(macOS Apple Silicon 换 darwin-arm64、Intel 换 darwin-amd64): curl -fL -O https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd6
  • Network accessline 18
    # Linux x86_64(macOS Apple Silicon 换 darwin-arm64、Intel 换 darwin-amd64): curl -fL -O https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd64.tar.gz tar xzf xiaohongshu-mcp-*.tar.gz && chmod +x xiaoh
  • Network accessline 19
    curl -fL -O https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd64.tar.gz
  • Access to secretsline 21
    [Credential-related source omitted]
  • Network accessline 31
    BIN="${XHS_MCP_BIN:-$PWD/xiaohongshu-mcp-linux-amd64}"   # 其它平台换 darwin-arm64 / darwin-amd64 "$BIN" -port=:18060                                      # 默认无头;启动即加载已有 cookies.json curl -s http://localhost:18060/api/v1/login/status       # dat
  • Network accessline 33
    curl -s http://localhost:18060/api/v1/login/status       # data.is_logged_in:true → 已登录,直接发布
  • Network accessline 58
    2. **看浏览器界面**(二选一):    - 端口转发:本地执行 `ssh -L 9273:localhost:9273 你@服务器`,再用本地浏览器开 `http://localhost:9273/`,点开页面即可看到登录浏览器的实时画面;    - 或截图存文件读:`http://localhost:9273/` 列出页面 id,`curl -s http://localhost:9273/screenshot/<页面id> -o login.png` 存成 PNG 
  • Network accessline 59
    - 端口转发:本地执行 `ssh -L 9273:localhost:9273 你@服务器`,再用本地浏览器开 `http://localhost:9273/`,点开页面即可看到登录浏览器的实时画面;    - 或截图存文件读:`http://localhost:9273/` 列出页面 id,`curl -s http://localhost:9273/screenshot/<页面id> -o login.png` 存成 PNG 再看。 3. **扫码登录**:界面里的登录二
  • Network accessline 60
    - 或截图存文件读:`http://localhost:9273/` 列出页面 id,`curl -s http://localhost:9273/screenshot/<页面id> -o login.png` 存成 PNG 再看。
  • Network accessline 61
    3. **扫码登录**:界面里的登录二维码与 `curl /api/v1/login/qrcode` 取到的一致。**首次登录会先出现「新设备验证」二维码,先扫它、确认,再扫登录码。**

paper2xhs/scripts/_env.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]

paper2xhs/scripts/cover.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 13
    [Credential-related source omitted]
  • Access to secretsline 132
    [Credential-related source omitted]
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 134
    [Credential-related source omitted]
  • Access to secretsline 135
    [Credential-related source omitted]
  • Access to secretsline 136
    [Credential-related source omitted]
  • Access to secretsline 220
    [Credential-related source omitted]
  • Possible obfuscationline 230
    img_bytes = base64.b64decode(image_data)
  • Network accessline 236
    if image_url:             import urllib.request             urllib.request.urlretrieve(image_url, output_path)
  • Network accessline 237
    import urllib.request             urllib.request.urlretrieve(image_url, output_path)             return True
  • Network accessline 238
    urllib.request.urlretrieve(image_url, output_path)
  • Access to secretsline 267
    [Credential-related source omitted]
  • Access to secretsline 299
    [Credential-related source omitted]
  • Access to secretsline 310
    [Credential-related source omitted]

paper2xhs/scripts/parse_pdf.py

  • Network accessline 1
    """ parse_pdf — MinerU 解析(云端 API 版) 通过 https://mineru.net/api/v4 调用 MinerU SaaS:
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    parse_pdf — MinerU 解析(云端 API 版) 通过 https://mineru.net/api/v4 调用 MinerU SaaS:   1. POST /file-urls/batch → 拿到 PUT 上传 URL + batch_id
  • Network accessline 3
    通过 https://mineru.net/api/v4 调用 MinerU SaaS:
  • Access to secretsline 23
    [Credential-related source omitted]
  • Network accessline 39
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]
  • Network accessline 46
    _MINERU = requests.Session()
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]

paper2xhs/scripts/post_images.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 16
    [Credential-related source omitted]

paper2xhs/scripts/publish.py

  • Executable scriptline 1
    Executable file
  • Network accessline 8
    发布能力由开源项目 xiaohongshu-mcp(作者 xpzouying)提供;用户自行从其官方 release 下载二进制并启动服务(默认 http://localhost:18060,可经 XHS_MCP_URL 覆盖)。
  • Network accessline 9
    release 下载二进制并启动服务(默认 http://localhost:18060,可经 XHS_MCP_URL 覆盖)。
  • Network accessline 32
    DEFAULT_MCP_URL = "http://localhost:18060"
  • Access to secretsline 36
    [Credential-related source omitted]
  • Network accessline 41
    resp = requests.get(f"{mcp_url}/api/v1/login/status", timeout=60)
  • Network accessline 129
    try:         resp = requests.post(f"{mcp_url}/api/v1/publish", json=payload, timeout=180)
  • Network accessline 130
    resp = requests.post(f"{mcp_url}/api/v1/publish", json=payload, timeout=180)
  • Network accessline 169
    "--mcp-url",         default=None,         help="mcp 地址(默认 env XHS_MCP_URL 或 http://localhost:18060)",
  • Network accessline 170
    default=None,         help="mcp 地址(默认 env XHS_MCP_URL 或 http://localhost:18060)",     )
  • Network accessline 171
    help="mcp 地址(默认 env XHS_MCP_URL 或 http://localhost:18060)",

paper2xhs/scripts/utils.py

  • Executable scriptline 1
    Executable file

paper2xhs/scripts/xhs_login.py

  • Executable scriptline 1
    Executable file
  • Network accessline 22
    DEFAULT_MCP_URL = "http://localhost:18060"
  • Access to secretsline 26
    [Credential-related source omitted]
  • Network accessline 31
    resp = requests.get(f"{mcp_url}/api/v1/login/qrcode", timeout=120)
  • Possible obfuscationline 42
    out.write_bytes(base64.b64decode(b64))
  • Network accessline 61
    parser.add_argument(         "--mcp-url", default=None,         help="mcp 地址(默认 env XHS_MCP_URL 或 http://localhost:18060)",
  • Network accessline 62
    "--mcp-url", default=None,         help="mcp 地址(默认 env XHS_MCP_URL 或 http://localhost:18060)",     )
  • Network accessline 63
    help="mcp 地址(默认 env XHS_MCP_URL 或 http://localhost:18060)",

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 207 facts

and 157 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeFrontmatter field disable-model-invocation in paper2html/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md paper2html/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md paper2html/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md paper2html/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md paper2html/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md paper2html/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.