AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

Paper2html

skill-quzhan51496-paper2anything-paper2html · by QuZhan51496

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 pa…

No reviews yet
0 installs
27 views
0.0% view→install

Install

$ agentstack add skill-quzhan51496-paper2anything-paper2html

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-quzhan51496-paper2anything-paper2html)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Paper2html? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

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.

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]
 → QA validation          (validate.py: missing figures/broken links/content fidelity, gate 2) → fix per report, loop
 → single-page project homepage index.html (+ images/, deployable as-is)

How you run this skill

  1. Step by step: run scripts for the mechanical steps via Bash (absolute paths, no cd needed); do the design and authoring yourself with Read/Write.
  2. Compute WORKDIR inline at the top of each Bash block (each Bash call is a separate shell and does not share variables):

``bash WORKDIR="$(dirname "$pdf_path")/.paper2anything/html/$(basename "${pdf_path%.*}")" ` $pdfpath is the paper PDF the user gave (reset it in each block). The scripts live in ${SKILLDIR}/scriptsSKILLDIR is **this skill's directory** (see "Base directory for this skill: …" injected at the top of this skill); each Bash block is a separate shell, so in the blocks that use it export SKILLDIR= once at the top (set it inline each time, like WORKDIR`).

  1. Pause at decision points with AskUserQuestion: after understanding the paper, confirm the design direction (design language / primary color / emphasis); after the draft is done, you may confirm again.
  2. Faithful to the manifest, you fill the gaps: use only the real material in manifest.json, don't fabricate numbers/authors/links; fields the manifest left empty

(authors/abstract/links etc.) you complete from the full text of clean.md — you are the lead author, deterministic extraction is only scaffolding.


Step 0: Environment and credentials

> Unified environment: all python commands run in paper2anything's unified conda environment (top-level environment.yml), > prefixed with conda run -n paper2anything --no-capture-output.

Credentials are centralized in the package-root .env (copied from .env.example, already gitignored); export it once per new shell:

set -a; source /.env; set +a

This skill only needs MINERU_API_TOKEN (to parse the PDF). Page design and authoring are done by you, calling no LLM API, so no OPENAI/LLM key is needed.

Dependency self-check:

conda run -n paper2anything --no-capture-output python -c "import requests, rich, dotenv, playwright, PIL" 2>&1
# render_check.py (Step 4 render self-check) needs the chromium engine; install it once before the first run:
#   conda run -n paper2anything --no-capture-output python -m playwright install chromium

Step 1: Parse + deterministic extraction (script, gate 1)

pdf_path="/path/to/paper.pdf"          # ← the user's paper PDF
WORKDIR="$(dirname "$pdf_path")/.paper2anything/html/$(basename "${pdf_path%.*}")"
conda run -n paper2anything --no-capture-output \
  python "${SKILL_DIR}/scripts/parse_pdf.py" "$pdf_path" --workdir "$WORKDIR"

Outputs (under $WORKDIR):

  • clean.md — normalized full-text markdown (for you to read through)
  • manifest.json — deterministically extracted facts: title/authors/affiliations/abstract/links/claims/figures/tables/

method_components/bibtex (appendix filtered; fields that couldn't be extracted are left empty for you to fill)

  • images/ — the figure files the page references (figures + result-table screenshots), referenced by you as images/
  • parsed/ (MinerU raw parse, includes full.md for reuse on re-run), logs/

Optional: when you know the paper's canonical link, add --paper-url (no arxiv assumption; if omitted, links.paper stays empty); --code-url likewise.

After parsing, Read manifest.json and clean.md to read the full text.


Step 2: Understand the paper + set the design direction (you do this) [confirm]

  1. Read manifest.json (verified material) + clean.md (full text); Read the key figures under images/ and judge with your own eyes which

one works as the hero, which suit inlining, and which are result-table screenshots.

  1. Read references/design-languages.md and establish a design concept for this paper (pick one design language or blend: magazine/product page/

terminal/poster/minimal/dashboard; set the primary color, structure, what element leads). Different papers should look different — don't reuse the previous one's style.

  1. Use AskUserQuestion to confirm the design direction with the user (design language / primary color / what to emphasize). Author the page with the confirmation in hand.

Fill the gaps: if the manifest's authors/abstract/links are empty, complete them yourself from the full text of clean.md (this is your backstop).


Step 3: Hand-author index.html (you do this) [optional confirm]

Per the confirmed design direction, author $WORKDIR/index.html yourself with Write — a self-contained, deployable single-page website. First read references/html-authoring.md (hard constraints and pitfalls). Key points:

  • Self-contained: reference images with the relative path images/ (from the manifest's figures[].file / tables[].image, which parse_pdf already copied into

images/); inline CSS or use a CDN; every ` has a non-empty alt; leave no href="#"`.

  • Light first screen (title/authors/affiliations/resource buttons), the main figure as a one-time large teaser, then abstract → claims → method → results →

supporting figures → BibTeX (adjust to the paper's character, not mandatory).

  • For result tables, prefer screenshots (tables[].image).
  • figure CSS: don't let the border frame whitespace, and never stretch the image to fill whitespace (details in references/html-authoring.md).
  • Faithful to the manifest, no fabrication; fill gaps from the full text.

After writing, you may use AskUserQuestion to show the user the design and structure (optional), and edit index.html directly per their feedback.


Step 4: QA validation and revision (script, gate 2)

pdf_path="/path/to/paper.pdf"
WORKDIR="$(dirname "$pdf_path")/.paper2anything/html/$(basename "${pdf_path%.*}")"
conda run -n paper2anything --no-capture-output \
  python "${SKILL_DIR}/scripts/validate.py" --workdir "$WORKDIR"

Validates the index.html you wrote → validation.json + qa_report.md. Read qa_report.md:

  • Errors must be cleared to zero (missing doctype/`, a referenced images/ missing, empty href="#"`).
  • Fix warnings as needed (title/figure/table not present on the page, claims0.02),

broken_images, h_overflow_px, clipped_content (wide tables/blocks clipped inside an overflow:hidden box and unscrollable), mathjax.fail (leftover unrendered $…$/$$…$$), upscaled_images_warn. The hard metrics at both widths must be zero (upscaling is a soft warning, judge it yourself); if it doesn't pass, edit index.html and re-run.


Step 5: Collect the deliverable next to the PDF

By default the deliverable is buried under .paper2anything/html// and hard to find. Once final, copy it to a _html/ directory next to the PDF (keep the copy inside .paper2anything untouched), so the user can open it right beside the paper:

pdf_path="/path/to/paper.pdf"
WORKDIR="$(dirname "$pdf_path")/.paper2anything/html/$(basename "${pdf_path%.*}")"
DEST="${pdf_path%.*}_html"            # same dir as the PDF, same name + _html suffix
i=2; while [ -e "$DEST" ]; do DEST="${pdf_path%.*}_html_v$i"; i=$((i+1)); done   # on name clash, append _v2, _v3
mkdir -p "$DEST"
cp "$WORKDIR/index.html" "$DEST/"
cp -r "$WORKDIR/images" "$DEST/"      # index.html references images/ relatively, so it must come along

index.html is a single-page site referencing images/, so put the whole bundle into the _html/ subdirectory and the references stay intact; open _html/index.html for the final homepage.


Deliverable locations

Intermediate artifacts land next to the paper at /.paper2anything/html// (multiple papers in one directory are split by `, never overwriting), and **the final deliverable is additionally copied to _html/` next to the PDF** (Step 5):

| Path | Contents | Who writes it | |---|---|---| | .paper2anything/html//clean.md | normalized full-text markdown | parsepdf | | .paper2anything/html//manifest.json | deterministically extracted facts (gate 1) | parsepdf | | .paper2anything/html//images/ | figures + result-table screenshots the page references | parsepdf | | .paper2anything/html//index.html | self-contained single-page project homepage | you | | .paper2anything/html//validation.json qa_report.md | QA results (gate 2) | validate | | .paper2anything/html//parsed/ logs/ | MinerU raw parse / per-step *result.json | scripts | | /_html/ | collected deliverable: index.html + images/, next to the PDF, opens directly | you (Step 5) |

Re-running overwrites the workspace .paper2anything/html// (intermediate artifacts); the collect step saves to _v2, _v3 on a _html/ name clash, never overwriting an old deliverable. A Step 1 re-run reuses parsed/full.md by default and skips the MinerU cloud parse.


Troubleshooting

  • MinerU parse fails: check MINERU_API_TOKEN; PDF ≤200MB / ≤200 pages; can reach mineru.net. Re-run Step 1 (overwrites).
  • manifest fields empty (authors/abstract/links): a limit of deterministic extraction (e.g. the paper has no ## Abstract heading, or a non-arxiv paper has no link) —

normal, complete them yourself from the full text of clean.md; not a bug.

  • QA reports missing figures: only reference files that really exist under images/, copy the filename from the manifest, don't mistype the hash name.
  • Design/authoring needs no API key: those two steps are done by you, calling no LLM API.

references/

  • design-languages.md — six design languages + concept-before-layout + real academic-homepage exemplars.
  • html-authoring.md — authoring hard constraints, figure CSS pitfalls, self-contained/deployable, table strategy.
  • qa-checklist.md — what each QA check means and how to fix it.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.