Communitygithub.com

Iayce/paperdown2md

Compétence Agent : télécharger des articles académiques (arXiv/DOI/titre) et les convertir en Markdown via l'extraction MinerU.

Qu'est-ce que paperdown2md ?

Cette compétence d'agent permet de télécharger un ou plusieurs articles académiques (via arXiv, DOI, titre, liens vers des articles WeChat, posts Xiaohongshu, ou URL PDF directe) et de les convertir en Markdown structuré à l'aide de l'API MinerU `extract` (version Token). Chaque article est organisé dans un dossier dédié contenant le PDF original (`<nom>.pdf`), le texte intégral au format Markdown (`full.md`), et un dossier `images/` comprenant les figures extraites. Elle s'appuie sur des scripts Python exécutés dans un environnement `skillsplace` spécifique via `run.sh`, avec un mécanisme de repli vers un navigateur Chrome (CDP) pour les cas où les pages de médias sociaux ou les sites sont protégés contre le scraping. La compétence est conçue pour être utilisée avec Cursor ou Codex, et se coordonne avec `mineru` pour l'extraction et `aiforbio-paper-reading` pour des lectures approfondies en biomédecine.

Compatible avec✓Claude Code~Codex CLI✓Cursor
npx skills add Iayce/paperdown2md

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Aperçu

Depuis le README du skill

paperdown2md preview

Documentation

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), pas flash-extract pour 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'articleSuggestion de nomExemple
Propose un nouveau modèle/méthodeAbréviation ou nom propre du modèle/méthodeCIDD, TargetDiff
Article BenchmarkNom du benchmarkCrossDocked2020
Article DatasetNom du datasetImageNet
AutreTitre 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>"
EnvironnementChemin skillsplace
macOS local/Users/jaycexu/anaconda3/envs/skillsplace
Windows portableD:\Anaconda\envs\skillsplace
jumphost-inner~/xsjenv/miniconda3/envs/skillsplace

<identifiant> peut être :

  • arXiv : https://arxiv.org/abs/xxxx.xxxxx ou xxxx.xxxxx
  • DOI : 10.1038/... ou https://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 comme xsec_token du 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 :

  1. 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)
  2. 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)
  3. 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)
  4. 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 :

  1. Utiliser lr search arxiv "<titre anglais>" --format json ou lr search "<titre>" --format json pour trouver l'url, récupérer le PDF arXiv
  2. Consulter la page de l'éditeur selon web-access (attention aux droits d'auteur ; privilégier OA / arXiv)
  3. 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/key ou MINERU_TOKEN, ne pas utiliser flash-extract pour 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 ![](images/...) 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 dans images/
  • 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èmeTraitement
no API token foundConfigurer le Token MinerU, voir mineru
mineru-open-api: command not foundInstaller le CLI MinerU (script d'installation du skill mineru)
OpenAlex sans PDFEssayer 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 à visualiserUtiliser l'URL de partage complète de l'App (avec xsec_token) ; ou fournir directement arXiv/DOI
Post sans lien direct vers un articleLe script recherchera OpenAlex + arXiv avec le titre et les mots-clés ; si échec, utiliser lr search / web-access
extract timeoutAugmenter --timeout ou expliquer à l'utilisateur de réessayer
L'utilisateur veut seulement le PDF, pas le Markdownpaperdown2md.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.md pour 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

Skills associés