paperdown2md — PDF herunterladen + MinerU in Markdown konvertieren
Lädt eine oder mehrere vom Benutzer genannte Publikationen in ein angegebenes Ausgabeverzeichnis herunter und wandelt sie in eine Standardstruktur um:
<output-dir>/
└── <Papier-Ordnername>/
├── <Papiername>.pdf # gleicher Name wie Ordner oder vom Benutzer festgelegt
├── full.md # vollständiger Markdown-Text via MinerU extract
└── images/ # Abbildungen aus dem Papier
Referenzbeispiel: paperdown2md/example/CIDD: Collaborative Intelligence for Structure-Based Drug Design Empowered by LLMs/ (Der Ordnername kann eine kurze repräsentative Bezeichnung wie CIDD oder der vollständige Titel sein).
Wann auslösen
- Der Benutzer gibt einen Titel, eine arXiv/DOI/URL, einen WeChat/Xiaohongshu-Post-Link oder eine direkte PDF-URL an (auch mehrere möglich)
- Der Benutzer nennt ein Zielverzeichnis (z. B.
paperdown2md/example/,~/papers/) - Benötigt wird PDF + full.md + images; die Konvertierung erfolgt ausschließlich über MinerU
extract(Token), nichtflash-extractbei großen PDFs
Kernablauf (pro Papier)
1. Ausgabeverzeichnis festlegen
- Der Benutzer MUSS
--output-dir/ einen Zielpfad angeben; falls nicht angegeben, nachfragen, nicht raten. - Verzeichnis bei Bedarf anlegen; wenn der Ordner bereits existiert, vorher erklären, ob überschrieben oder übersprungen wird.
2. Ordnernamen und PDF-Dateinamen bestimmen
Der Ordnername (gleichzeitig Basisname für die PDF-Datei, Erweiterung .pdf) wird nach folgender Priorität festgelegt:
| Papiertyp | Namensvorschlag | Beispiel |
|---|---|---|
| Neues Modell/Methode | Abkürzung oder Eigenname | CIDD, TargetDiff |
| Benchmark-Papier | Name des Benchmarks | CrossDocked2020 |
| Datensatz-Papier | Name des Datensatzes | ImageNet |
| Andere | Titel des Papiers (ggf. auf ~120 Zeichen gekürzt) | identisch mit PDF-Originaltitel |
Regeln:
- Dateisystem-unzulässige Zeichen entfernen:
\ / : * ? " < > | - Wenn der Benutzer explizit sagt „Ordner heißt CIDD“, GILT DAS
- Bei Stapelverarbeitung mehrerer Papiere: Jedes Papier bekommt einen eigenen Ordner; nicht in einem Verzeichnis mischen
3. Identifikator auflösen und PDF herunterladen
Bevorzugt das gebündelte Skript (löst arXiv, DOI, direkte PDF-Links, WeChat/Xiaohongshu-Posts, OpenAlex/arXiv-Titelsuche auf).
Python MUSS in der skillsplace-Umgebung ausgeführt werden – verwende scripts/run.sh (erkennt automatisch skillsplace Python), nicht direkt python3:
bash paperdown2md/scripts/run.sh \
-o "<Ausgabeverzeichnis>" \
--name "<Ordnername>" \
"<Identifikator>"
Oder explizit Interpreter angeben (macOS lokal):
/Users/jaycexu/anaconda3/envs/skillsplace/bin/python paperdown2md/scripts/paperdown2md.py \
-o "<Ausgabeverzeichnis>" --name "<Ordnername>" "<Identifikator>"
| Umgebung | skillsplace-Pfad |
|---|---|
| macOS lokal | /Users/jaycexu/anaconda3/envs/skillsplace |
| Windows Notebook | D:\Anaconda\envs\skillsplace |
| jumphost-inner | ~/xsjenv/miniconda3/envs/skillsplace |
<Identifikator> kann sein:
- arXiv:
https://arxiv.org/abs/xxxx.xxxxxoderxxxx.xxxxx - DOI:
10.1038/...oderhttps://doi.org/... - Direktes PDF:
https://....pdf - WeChat-Artikel:
https://mp.weixin.qq.com/s/... - Xiaohongshu-Beitrag:
https://www.xiaohongshu.com/explore/...(Parameter wiexsec_tokenaus dem geteilten Link nach Möglichkeit behalten) - Englischer Titel: Das Skript sucht über OpenAlex nach dem besten Open-Access-PDF
Social-Media-Beiträge (WeChat / Xiaohongshu, v1.1+)
Wenn der Ausgangspunkt ein WeChat- oder Xiaohongshu-Beitrag ist, macht das Skript Folgendes:
- WeChat: Zunächst per HTTP HTML abrufen; Xiaohongshu: Standardmäßig Browser-CDP verwenden (Inhalte meist JS-gerendert)
- Falls HTTP fehlschlägt oder Anti-Bot-Maßnahmen greifen (z. B. „Umgebungsfehler“, Notiz nicht lesbar) → automatisch auf Browser-CDP umschalten (Chrome Proxy von web-access,
localhost:3456) - Aus dem Text einen arXiv/DOI/PDF-Direktlink extrahieren; wenn kein Direktlink vorhanden → mit Beitragstitel und Schlüsselwörtern eine OpenAlex + arXiv-API-Literatursuche durchführen (mit Relevanzfilter)
- Den Beitragstitel als Ordnernamen verwenden (kann mit
--nameüberschrieben werden), dann wie gehabt PDF herunterladen + MinerU
# WeChat
bash paperdown2md/scripts/run.sh -o "<Ausgabeverzeichnis>" \
"https://mp.weixin.qq.com/s/jMW2lbgiHDka8CASFtQ81w"
# Xiaohongshu (vollständige Share-URL verwenden)
bash paperdown2md/scripts/run.sh -o "<Ausgabeverzeichnis>" \
"https://www.xiaohongshu.com/explore/6a1c2d75000000000603739b?xsec_token=..."
Voraussetzung für Browser-Fallback: Chrome muss mit Remote-Debugging laufen (chrome://inspect/#remote-debugging) und der folgende Befehl muss ausführbar sein:
node ~/.cursor/skills/web-access/scripts/check-deps.mjs
Wenn die Suche dennoch keine Ergebnisse liefert, kann der Agent auch lr search, web-access oder eine Websuche verwenden, um das Papier zu finden und den arXiv/DOI-Link an run.sh zu übergeben.
Wenn das Skript nicht weiterkommt, dann:
- Mit
lr search arxiv "<englischer Titel>" --format jsonoderlr search "<Titel>" --format jsondieurlfinden und die arXiv-PDF-URL nehmen - Gemäß web-access die Verlagsseite prüfen (Urheberrecht beachten; bevorzugt OA / arXiv)
- Immer noch keine PDF → dem Benutzer mitteilen, dass er manuell eine PDF in den Ordner legen soll, und dann nur für die vorhandene PDF MinerU ausführen
PDF nach dem Download benennen: --name CIDD → CIDD.pdf; wenn --name nicht angegeben, den aufgelösten Titel verwenden.
4. MinerU extract → full.md + images/
Immer die Token-basierte extract-Methode verwenden (Tabellen/Formeln/große Dateien). Vorher:
export MINERU_TOKEN="$(tr -d '\n' < "$HOME/.cursor/skills/mineru/key")"
mineru-open-api auth --verify
- Token fehlt: Dem Benutzer explizit mitteilen, dass er
~/.cursor/skills/mineru/keyoderMINERU_TOKENkonfigurieren muss; nicht heimlichflash-extractfür große PDFs verwenden. - PDF >10 MB oder viele Seiten:
--model vlm,--timeout 3600(Standard bei wissenschaftlichen Papieren) - Gescannte PDFs:
--ocrhinzufügen
Das run.sh-Skript enthält die extract- und Aufräumschritte bereits. Bei manueller Ausführung:
mineru-open-api extract "<Papier-Verzeichnis>/<Name>.pdf" \
-o "<Papier-Verzeichnis>/_mineru_out" -f md --model vlm --timeout 3600
# _mineru_out/*.md → full.md, _mineru_out/images → images/, _mineru_out löschen
Nach dem Aufräumen prüfen, ob die in full.md referenzierten -Pfade lokal existieren.
5. Stapelverarbeitung mehrerer Papiere
Für jeden Identifikator die Schritte 2–4 wiederholen. Mehrere Quellen können auf einmal übergeben werden (nur wenn nicht alle denselben --name verwenden können, getrennt ausführen):
bash paperdown2md/scripts/run.sh -o "<Ausgabeverzeichnis>" \
"https://arxiv.org/abs/2301.00001" \
"10.1038/s41586-020-00000" \
"Ein weiterer Papiertitel auf Englisch"
Bei Stapelverarbeitung jedes Papier mit eigenem --name: entweder das Skript mehrfach aufrufen oder vorher die Kurznamen anhand des Titels festlegen und dann ausführen.
Abschlusskriterien (dem Benutzer melden)
Für jedes Papier melden:
- Ordnerpfad
- PDF-Dateiname und -Größe
full.mdZeilen/Größe,images/Anzahl der Bilder- Wenn ein Papier fehlschlägt: Grund (kein OA-PDF, kein Token, MinerU-Timeout usw.) und nächster Schritt
Abhängigkeiten und Fehlerbehebung
| Problem | Vorgehen |
|---|---|
no API token found | MinerU-Token konfigurieren, siehe mineru |
mineru-open-api: command not found | MinerU CLI installieren (mineru skill-Installationsskript) |
| OpenAlex liefert kein PDF | arXiv-Link, lr search oder Benutzer um PDF bitten |
| WeChat „Umgebungsfehler“ | Skript versucht automatisch CDP-Browser; immer noch Fehler → Benutzer um Captcha-Lösung oder direkte arXiv/DOI-Übergabe bitten |
| Xiaohongshu-Notiz nicht lesbar | Vollständige, mit der App geteilte URL verwenden (inkl. xsec_token); sonst arXiv/DOI direkt angeben |
| Beitrag enthält keinen Direktlink | Skript sucht via OpenAlex + arXiv mit Titel/Schlüsselwörtern; bei Misserfolg lr search / web-access |
| extract-Timeout | --timeout erhöhen oder Benutzer um Wiederholung bitten |
| Benutzer möchte nur PDF, kein MD | paperdown2md.py --skip-extract |
Beispiele
Einzelnes Papier (CIDD, repräsentativer Ordnername):
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
--name "CIDD" \
"CIDD Collaborative Intelligence Structure-Based Drug Design LLMs"
Ausgehend von einem WeChat-Artikel (automatischer Browser-CDP-Fallback bei HTTP-Fehlern):
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
"https://mp.weixin.qq.com/s/jMW2lbgiHDka8CASFtQ81w"
Ausgehend von einem Xiaohongshu-Beitrag (automatische arXiv/OpenAlex-Suche bei fehlendem Direktlink):
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
"https://www.xiaohongshu.com/explore/6a1c2d75000000000603739b?xsec_token=..."
Oder mit vorhandener PDF nur MinerU ausführen (PDF muss bereits im Ordner sein):
export MINERU_TOKEN="$(tr -d '\n' < "$HOME/.cursor/skills/mineru/key")"
mineru-open-api extract "paperdown2md/example/CIDD.../CIDD....pdf" \
-o "paperdown2md/example/CIDD.../_mineru_out" -f md --model vlm --timeout 3600
# Dann zu full.md + images/ aufräumen
Aufgabenverteilung mit anderen Skills
- mineru: Konvertiert nur vorhandene PDFs/Dateien → siehe mineru skill
- lightread-cli: LightRead-Datenbank, Notizen, Übersichtsarbeiten → keine lokale paperdown2md-Verzeichnisstruktur
- web-access: Websuche, unstrukturierte Downloads
- paperdown2md (dieser Skill): Lokales Verzeichnis + PDF + full.md + images aus einer Hand
- aiforbio-paper-reading (nachgelagert): Nachdem
full.md+images/bereit sind, im selben Papierordner eine{ModelName}record.mdfür biomedizinische Detailanalyse erstellen (Formeln Schritt für Schritt + Beispieldatenfluss). Siehe aiforbio-paper-reading
Integration mit aiforbio-paper-reading (empfohlener Workflow)
Dieser Skill übernimmt Beschaffung und Konvertierung; die Detailanalyse übernimmt aiforbio-paper-reading:
paperdown2md -o <Literaturverzeichnis> "<Identifikator>"
→ <Literaturverzeichnis>/<Papiername>/{pdf, full.md, images/}
aiforbio-paper-reading
→ <Literaturverzeichnis>/<Papiername>/{ModelName}record.md
Nachdem full.md + images/ erzeugt wurden: Wenn der Benutzer „Papier lesen / Record schreiben / Detailanalyse / Formelableitung / Datenflussbeispiele“ möchte, auf aiforbio-paper-reading verweisen, nicht innerhalb dieses Skills eine längere Lesenotiz erstellen.
Skripthinweise
scripts/run.sh: Einzig empfohlener Einstiegspunkt; wählt automatisch Python in der skillsplace-Umgebung.scripts/paperdown2md.py: Nur stdlib; prüft beim Start, ob es in skillspace läuft;resolve→ Download →mineru-open-api extract→full.md/images/.
Agenten führen diesen Skill aus: Zuerst run.sh verwenden, nicht python3 paperdown2md.py.
Installation in Cursor globale Skills:
git clone https://github.com/Iayce/paperdown2md.git ~/.cursor/skills/paperdown2md
Oder lokalen Checkout verlinken: ln -s /path/to/paperdown2md ~/.cursor/skills/paperdown2md