paperdown2md — Téléchargement de PDF d'articles + Conversion en Markdown avec MinerU
Transforme les identifiants d'un ou plusieurs articles donnés par l'utilisateur en une structure standard dans un répertoire de sortie spécifié :
<output-dir>/
└── <nom-dossier-article>/
├── <nom-article>.pdf # Même nom que le dossier ou nom court spécifié par l'utilisateur
├── full.md # Markdown complet de l'extraction MinerU
└── images/ # Ressources d'images du texte
Exemple de référence : paperdown2md/example/CIDD: Collaborative Intelligence for Structure-Based Drug Design Empowered by LLMs/ (le dossier peut utiliser un nom court représentatif comme CIDD, ou le titre complet).
Quand déclencher
- L'utilisateur fournit le titre d'un article, un lien arXiv/DOI, un lien vers un article WeChat / post Xiaohongshu, ou une URL directe de PDF (plusieurs possibles)
- L'utilisateur spécifie un répertoire cible (ex:
paperdown2md/example/,~/papers/) - L'utilisateur a besoin du triplet PDF + full.md + images, et l'analyse doit utiliser MinerU
extract(Token), pasflash-extractpour les gros articles
Flux principal (pour chaque article)
1. Confirmer le répertoire de sortie
- L'utilisateur doit fournir
--output-dir/ le chemin cible ; s'il n'est pas spécifié, demander d'abord, ne pas deviner. - Créer le chemin s'il n'existe pas ; si un dossier du même nom existe déjà, expliquer s'il faut écraser ou ignorer.
2. Déterminer le nom du dossier et du fichier PDF
Par ordre de priorité pour le nom du dossier (qui sert également de nom de base par défaut pour le PDF, avec l'extension .pdf) :
| Type d'article | Suggestion de nom | Exemple |
|---|---|---|
| Propose un nouveau modèle/méthode | Abréviation ou nom propre du modèle/méthode | CIDD, TargetDiff |
| Article Benchmark | Nom du benchmark | CrossDocked2020 |
| Article Dataset | Nom du dataset | ImageNet |
| Autre | Titre de l'article (tronqué à ~120 caractères) | Identique au titre original du PDF |
Règles :
- Supprimer les caractères illégaux pour le système de fichiers :
\ / : * ? " < > | - Si l'utilisateur dit explicitement « appelle le dossier CIDD », c'est l'utilisateur qui prime
- Pour le traitement par lots de plusieurs articles, un dossier séparé par article ; ne pas mélanger dans un seul répertoire
3. Analyser l'identifiant et télécharger le PDF
Utiliser en priorité le script bundled (analyse arXiv, DOI, PDF direct, articles WeChat / posts Xiaohongshu, recherche par titre OpenAlex/arXiv).
Python doit être exécuté dans l'environnement skillsplace — utiliser scripts/run.sh (localise automatiquement le Python de skillsplace), ne pas utiliser python3 directement :
bash paperdown2md/scripts/run.sh \
-o "<répertoire-sortie>" \
--name "<nom-dossier>" \
"<identifiant>"
Ou spécifier explicitement l'interpréteur (macOS local) :
/Users/jaycexu/anaconda3/envs/skillsplace/bin/python paperdown2md/scripts/paperdown2md.py \
-o "<répertoire-sortie>" --name "<nom-dossier>" "<identifiant>"
| Environnement | Chemin skillsplace |
|---|---|
| macOS local | /Users/jaycexu/anaconda3/envs/skillsplace |
| Windows portable | D:\Anaconda\envs\skillsplace |
| jumphost-inner | ~/xsjenv/miniconda3/envs/skillsplace |
<identifiant> peut être :
- arXiv :
https://arxiv.org/abs/xxxx.xxxxxouxxxx.xxxxx - DOI :
10.1038/...ouhttps://doi.org/... - PDF direct :
https://....pdf - Article WeChat :
https://mp.weixin.qq.com/s/... - Post Xiaohongshu :
https://www.xiaohongshu.com/explore/...(conserver les paramètres commexsec_tokendu lien de partage) - Titre en anglais : le script recherche via OpenAlex et prend le meilleur PDF en libre accès
Posts sur les réseaux sociaux (WeChat / Xiaohongshu, v1.1+)
Lorsque le point de départ est un article WeChat ou un post Xiaohongshu, le script :
- WeChat : récupère d'abord le HTML par HTTP ; Xiaohongshu : utilise par défaut le CDP du navigateur (le contenu est souvent rendu par JS)
- Si HTTP échoue ou est bloqué par un anti-scraping (ex: « anomalie d'environnement », note impossible à visualiser) → bascule automatiquement vers le CDP du navigateur (web-access avec Chrome Proxy,
localhost:3456) - Extrait les liens arXiv / DOI / PDF direct du texte ; si aucun lien direct → utilise le titre du post et les mots-clés du texte pour une recherche bibliographique OpenAlex + arXiv API (avec filtrage de pertinence)
- Utilise le titre du post comme nom de dossier (peut être écrasé avec
--name), puis suit le flux existant pour télécharger le PDF + MinerU
# WeChat
bash paperdown2md/scripts/run.sh -o "<répertoire-sortie>" \
"https://mp.weixin.qq.com/s/jMW2lbgiHDka8CASFtQ81w"
# Xiaohongshu (conserver l'URL de partage complète)
bash paperdown2md/scripts/run.sh -o "<répertoire-sortie>" \
"https://www.xiaohongshu.com/explore/6a1c2d75000000000603739b?xsec_token=..."
Prérequis pour le basculement navigateur : Chrome doit être en débogage à distance (chrome://inspect/#remote-debugging), et exécutable :
node ~/.cursor/skills/web-access/scripts/check-deps.mjs
Si la recherche reste sans résultat, l'Agent peut utiliser lr search, web-access ou une WebSearch pour localiser l'article et passer le lien arXiv/DOI à run.sh.
Si le script n'y arrive pas, d'abord :
- Utiliser
lr search arxiv "<titre anglais>" --format jsonoulr search "<titre>" --format jsonpour trouver l'url, récupérer le PDF arXiv - Consulter la page de l'éditeur selon web-access (attention aux droits d'auteur ; privilégier OA / arXiv)
- Toujours pas de PDF → informer l'utilisateur qu'il doit placer manuellement le fichier dans le dossier, puis exécuter MinerU uniquement sur le PDF existant
Nommage du PDF après téléchargement : --name CIDD → CIDD.pdf ; si --name n'est pas spécifié, utiliser le titre analysé.
4. MinerU extract → full.md + images/
Toujours utiliser la version Token extract (tableaux/équations/gros fichiers). Avant l'opération :
export MINERU_TOKEN="$(tr -d '\n' < "$HOME/.cursor/skills/mineru/key")"
mineru-open-api auth --verify
- Token manquant : informer clairement l'utilisateur de configurer
~/.cursor/skills/mineru/keyouMINERU_TOKEN, ne pas utiliserflash-extractpour bâcler un gros PDF. - PDF >10MB ou avec beaucoup de pages :
--model vlm,--timeout 3600(par défaut pour les articles académiques) - Scans : ajouter
--ocr
Le script inclut déjà les étapes d'extraction et d'organisation ; pour une exécution manuelle :
mineru-open-api extract "<dossier-article>/<nom>.pdf" \
-o "<dossier-article>/_mineru_out" -f md --model vlm --timeout 3600
# Copier _mineru_out/*.md → full.md, _mineru_out/images → images/, supprimer _mineru_out
Après organisation, vérifier : les chemins  dans full.md existent localement.
5. Traitement par lots de plusieurs articles
Répéter les étapes 2 à 4 pour chaque identifiant. On peut passer plusieurs sources en une seule commande (seulement si l'utilisation d'un --name commun n'est pas appropriée, sinon exécuter séparément) :
bash paperdown2md/scripts/run.sh -o "<répertoire-sortie>" \
"https://arxiv.org/abs/2301.00001" \
"10.1038/s41586-020-00000" \
"Un autre titre d'article en anglais"
Pour un traitement par lots, utiliser un --name distinct par article : soit appeler le script plusieurs fois, soit décider d'abord des noms courts en fonction des titres avant d'exécuter.
Critères de complétion (rapport à l'utilisateur)
Pour chaque article, rapporter :
- Le chemin du dossier
- Le nom du fichier PDF et sa taille
- Le nombre de lignes / la taille de
full.md, le nombre d'images dansimages/ - Si un article a échoué : la raison (pas de PDF OA, pas de Token, timeout MinerU, etc.) et la prochaine étape suggérée
Dépendances et dépannage
| Problème | Traitement |
|---|---|
no API token found | Configurer le Token MinerU, voir mineru |
mineru-open-api: command not found | Installer le CLI MinerU (script d'installation du skill mineru) |
| OpenAlex sans PDF | Essayer un lien arXiv, lr search, ou demander à l'utilisateur de fournir le PDF |
| WeChat « anomalie d'environnement » | Le script essaiera automatiquement le CDP du navigateur ; si cela échoue encore, demander à l'utilisateur de compléter la vérification ou de fournir directement arXiv/DOI |
| Note Xiaohongshu impossible à visualiser | Utiliser l'URL de partage complète de l'App (avec xsec_token) ; ou fournir directement arXiv/DOI |
| Post sans lien direct vers un article | Le script recherchera OpenAlex + arXiv avec le titre et les mots-clés ; si échec, utiliser lr search / web-access |
| extract timeout | Augmenter --timeout ou expliquer à l'utilisateur de réessayer |
| L'utilisateur veut seulement le PDF, pas le Markdown | paperdown2md.py --skip-extract |
Exemples
Article unique (CIDD, nom de dossier représentatif) :
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
--name "CIDD: Collaborative Intelligence for Structure-Based Drug Design Empowered by LLMs" \
"CIDD Collaborative Intelligence Structure-Based Drug Design LLMs"
À partir d'un article WeChat (bascule automatique vers le CDP navigateur en cas d'échec HTTP) :
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
"https://mp.weixin.qq.com/s/jMW2lbgiHDka8CASFtQ81w"
À partir d'un post Xiaohongshu (recherche automatique arXiv/OpenAlex si pas de lien direct) :
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
"https://www.xiaohongshu.com/explore/6a1c2d75000000000603739b?xsec_token=..."
Ou utiliser un PDF existant uniquement avec MinerU (le PDF doit déjà être dans le dossier) :
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
# Puis organiser en full.md + images/
Répartition des rôles avec les autres skills
- mineru : ne fait que convertir des PDF/fichiers existants → lire le skill mineru
- lightread-cli : base de données LightRead, notes, synthèses → ce n'est pas la structure de répertoire locale de paperdown2md
- web-access : recherche web, téléchargement non structuré
- paperdown2md (ce skill) : tout-en-un : répertoire local + PDF + full.md + images
- aiforbio-paper-reading (en aval) : une fois
full.md+images/prêts, écrit dans le même dossier d'article un{ModelName}record.mdpour une lecture biomédicale approfondie (déduction formule par formule + flux de données d'échantillon). Voir aiforbio-paper-reading
Liaison avec aiforbio-paper-reading (pipeline recommandé)
Ce skill est responsable de l'acquisition et de la conversion ; la lecture approfondie est confiée à aiforbio-paper-reading :
paperdown2md -o "<répertoire-biblio>" "<identifiant>"
→ <répertoire-biblio>/<nom-article>/{pdf, full.md, images/}
aiforbio-paper-reading
→ <répertoire-biblio>/<nom-article>/{ModelName}record.md
Une fois full.md + images/ générés, si l'utilisateur demande à « lire l'article / écrire un record / faire une lecture approfondie / déduire des formules / montrer des flux de données », rappeler et enchaîner avec aiforbio-paper-reading, ne pas écrire de longues notes de lecture dans ce skill.
Détails des scripts
scripts/run.sh: point d'entrée unique recommandé ; utilise automatiquement le Python de skillsplace.scripts/paperdown2md.py: uniquement la bibliothèque standard ; vérifie au lancement qu'il tourne dans skillsplace ;resolve→ téléchargement →mineru-open-api extract→full.md/images/.
Quand l'Agent exécute ce skill : utiliser d'abord run.sh, pas python3 paperdown2md.py.
Installation dans les skills globales de Cursor :
git clone https://github.com/Iayce/paperdown2md.git ~/.cursor/skills/paperdown2md
Ou lien symbolique vers un checkout local : ln -s /path/to/paperdown2md ~/.cursor/skills/paperdown2md