paperdown2md — Baixar PDF de Artigos + Converter para Markdown com MinerU
Dado um ou mais identificadores de artigos acadêmicos fornecidos pelo usuário, esta skill baixa os PDFs e os converte para Markdown estruturado em um diretório de saída especificado, organizando os arquivos da seguinte forma:
<diretorio-saida>/
└── <nome-da-pasta-do-artigo>/
├── <nome-do-artigo>.pdf # Mesmo nome da pasta ou nome curto definido pelo usuário
├── full.md # Texto completo em Markdown extraído pelo MinerU
└── images/ # Imagens do artigo
Exemplo de referência: paperdown2md/example/CIDD: Collaborative Intelligence for Structure-Based Drug Design Empowered by LLMs/ (a pasta pode usar um nome curto representativo como CIDD, ou o título completo).
Quando acionar
- O usuário fornece o título do artigo, link arXiv/DOI, link de post no WeChat (微信公众号) / Xiaohongshu (小红书), ou uma URL direta de PDF (podem ser vários)
- O usuário especifica um diretório de destino (ex.:
paperdown2md/example/,~/papers/) - É necessário o trio PDF + full.md + images, e a extração deve usar o MinerU
extract(Token), nãoflash-extractpara artigos grandes
Fluxo principal (para cada artigo)
1. Confirmar diretório de saída
- O usuário deve fornecer
--output-dir/ caminho de destino; se não for especificado, pergunte primeiro, não adivinhe. - Se o caminho não existir, crie-o; se já existir uma pasta com o mesmo nome, informe se deseja sobrescrever ou pular.
2. Definir nome da pasta e nome do arquivo PDF
A escolha do nome da pasta (que também será o nome base do PDF, com extensão .pdf) segue esta prioridade:
| Tipo de artigo | Sugestão de nome | Exemplo |
|---|---|---|
| Propõe novo modelo/método | Abreviação ou nome do modelo/método | CIDD, TargetDiff |
| Artigo de Benchmark | Nome do benchmark | CrossDocked2020 |
| Artigo de Dataset | Nome do dataset | ImageNet |
| Outros | Título do artigo (pode truncar em ~120 caracteres) | Igual ao título original do PDF |
Regras:
- Remova caracteres ilegais para sistemas de arquivos:
\ / : * ? " < > | - Se o usuário disser explicitamente "a pasta chama CIDD", prevalece a vontade do usuário
- Ao processar vários artigos em lote, cada artigo em sua própria pasta; não misture em um único diretório
3. Resolver identificador e baixar o PDF
Use preferencialmente o script bundled (que resolve arXiv, DOI, links diretos de PDF, posts do WeChat/Xiaohongshu, e busca por título via OpenAlex/arXiv).
O Python deve ser executado no ambiente skillsplace — use scripts/run.sh (que localiza automaticamente o Python do skillsplace), não python3 diretamente:
bash paperdown2md/scripts/run.sh \
-o "<diretorio-saida>" \
--name "<nome-da-pasta>" \
"<identificador>"
Ou especificando o interpretador explicitamente (macOS local):
/Users/jaycexu/anaconda3/envs/skillsplace/bin/python paperdown2md/scripts/paperdown2md.py \
-o "<diretorio-saida>" --name "<nome-da-pasta>" "<identificador>"
| Ambiente | Caminho do skillsplace |
|---|---|
| macOS local | /Users/jaycexu/anaconda3/envs/skillsplace |
| Windows notebook | D:\Anaconda\envs\skillsplace |
| jumphost-inner | ~/xsjenv/miniconda3/envs/skillsplace |
O identificador pode ser:
- arXiv:
https://arxiv.org/abs/xxxx.xxxxxouxxxx.xxxxx - DOI:
10.1038/...ouhttps://doi.org/... - PDF direto:
https://....pdf - Post do WeChat (微信公众号):
https://mp.weixin.qq.com/s/... - Post do Xiaohongshu (小红书):
https://www.xiaohongshu.com/explore/...(recomenda-se manter parâmetros comoxsec_tokendo link compartilhado) - Título em inglês: o script pesquisa no OpenAlex e obtém o melhor PDF de acesso aberto disponível
Posts de redes sociais (WeChat / Xiaohongshu, v1.1+)
Quando a origem é um post do WeChat ou Xiaohongshu, o script:
- WeChat: primeiro tenta baixar o HTML via HTTP; Xiaohongshu: usa navegador CDP por padrão (conteúdo é majoritariamente renderizado por JS)
- Se HTTP falhar ou for bloqueado (ex.: "ambiente anormal", nota não pode ser visualizada) → muda automaticamente para navegador CDP (proxy Chrome do web-access, em
localhost:3456) - Extrai do corpo do post links arXiv / DOI / PDF direto; se não houver link direto → usa o título e palavras-chave do post para buscar no OpenAlex + arXiv API (com filtro de relevância)
- Usa o título do post como nome da pasta (pode ser sobrescrito com
--name), depois baixa o PDF e executa o MinerU normalmente
# WeChat
bash paperdown2md/scripts/run.sh -o "<diretorio-saida>" \
"https://mp.weixin.qq.com/s/jMW2lbgiHDka8CASFtQ81w"
# Xiaohongshu (mantenha a URL de compartilhamento completa)
bash paperdown2md/scripts/run.sh -o "<diretorio-saida>" \
"https://www.xiaohongshu.com/explore/6a1c2d75000000000603739b?xsec_token=..."
Pré-requisito para fallback via navegador: Chrome com depuração remota ativada (chrome://inspect/#remote-debugging) e capaz de executar:
node ~/.cursor/skills/web-access/scripts/check-deps.mjs
Se a busca ainda não encontrar resultados, o Agente pode usar lr search, web-access ou WebSearch para localizar o artigo e passar o link arXiv/DOI para run.sh.
Se o script não conseguir resolver, então:
- Use
lr search arxiv "<titulo em ingles>" --format jsonoulr search "<titulo>" --format jsonpara encontrar aurle obter o PDF do arXiv - Consulte a página da editora conforme web-access (atenção aos direitos autorais; prefira OA / arXiv)
- Se ainda assim não houver PDF → informe o usuário que é necessário colocar o PDF manualmente na pasta, e então execute apenas o MinerU no PDF existente
Após o download, o PDF é nomeado: --name CIDD → CIDD.pdf; se --name não for especificado, usa o título resolvido.
4. MinerU extract → full.md + images/
Sempre use a versão Token extract (para tabelas/fórmulas/arquivos grandes). Antes de executar:
export MINERU_TOKEN="$(tr -d '\n' < "$HOME/.cursor/skills/mineru/key")"
mineru-open-api auth --verify
- Token ausente: informe claramente ao usuário que é necessário configurar
~/.cursor/skills/mineru/keyou a variávelMINERU_TOKEN, e não useflash-extractpara enganar com PDFs grandes. - PDF >10MB ou com muitas páginas:
--model vlm,--timeout 3600(padrão para artigos acadêmicos) - Documentos digitalizados (scans): adicione
--ocr
O script já inclui as etapas de extração e organização; para execução manual:
mineru-open-api extract "<pasta-do-artigo>/<nome>.pdf" \
-o "<pasta-do-artigo>/_mineru_out" -f md --model vlm --timeout 3600
# Mover _mineru_out/*.md → full.md, _mineru_out/images → images/, deletar _mineru_out
Após a organização, verifique se os caminhos em full.md no formato  existem localmente.
5. Processamento em lote (múltiplos artigos)
Repita os passos 2–4 para cada identificador. É possível passar várias fontes de uma vez (apenas quando não fizer sentido usar o mesmo --name para todos, execute separadamente):
bash paperdown2md/scripts/run.sh -o "<diretorio-saida>" \
"https://arxiv.org/abs/2301.00001" \
"10.1038/s41586-020-00000" \
"Another Paper Title In English"
No processamento em lote, cada artigo tem seu próprio --name: chame o script várias vezes, ou primeiro você decide os nomes curtos com base nos títulos e depois executa.
Critérios de conclusão (relatório ao usuário)
Para cada artigo, reporte:
- Caminho da pasta
- Nome do arquivo PDF e tamanho
- Número de linhas/tamanho do
full.md, quantidade de imagens emimages/ - Se algum artigo falhou: motivo (sem PDF OA, sem Token, timeout do MinerU, etc.) e sugestão de próximo passo
Dependências e solução de problemas
| Problema | Ação |
|---|---|
no API token found | Configure o Token do MinerU, veja mineru |
mineru-open-api: command not found | Instale a CLI do MinerU (script de instalação da skill mineru) |
| OpenAlex sem PDF | Tente link arXiv, lr search, ou peça ao usuário para fornecer o PDF |
| WeChat "ambiente anormal" | O script tentará automaticamente o CDP do navegador; se ainda falhar, peça ao usuário para concluir a verificação ou enviar diretamente arXiv/DOI |
| Nota do Xiaohongshu não pode ser visualizada | Use a URL completa de compartilhamento do App (com xsec_token); ou envie diretamente arXiv/DOI |
| Post sem link direto para artigo | O script usará título/palavras-chave para pesquisar no OpenAlex + arXiv; se ainda falhar, use lr search / web-access |
| extract com timeout | Aumente --timeout ou informe ao usuário para tentar novamente |
| Usuário só quer o PDF, sem Markdown | paperdown2md.py --skip-extract |
Exemplos
Artigo único (CIDD, nome de pasta representativo):
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"
Começando a partir de um post do WeChat (fallback automático para navegador CDP se HTTP falhar):
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
"https://mp.weixin.qq.com/s/jMW2lbgiHDka8CASFtQ81w"
Começando a partir de um post do Xiaohongshu (busca automática em arXiv/OpenAlex se não houver link direto):
bash paperdown2md/scripts/run.sh \
-o "paperdown2md/example" \
"https://www.xiaohongshu.com/explore/6a1c2d75000000000603739b?xsec_token=..."
Ou, usando um PDF já existente apenas para o MinerU (o PDF já deve estar na pasta):
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
# Em seguida, organize em full.md + images/
Divisão de trabalho com outras skills
- mineru: apenas converte PDF/arquivos existentes → consulte a skill mineru
- lightread-cli: base de conhecimento LightRead, anotações, resenhas → não é a estrutura de diretórios local do paperdown2md
- web-access: busca em páginas web, downloads não estruturados
- paperdown2md (esta skill): pipeline completo: diretório local + PDF + full.md + images
- aiforbio-paper-reading (a jusante): após
full.md+images/estarem prontos, escreve{ModelName}record.mdno mesmo diretório do artigo para leitura aprofundada biomédica (dedução de fórmulas elemento por elemento + fluxo de dados de amostra). Veja aiforbio-paper-reading
Integração com aiforbio-paper-reading (pipeline recomendado)
Esta skill é responsável por obter e converter; a leitura aprofundada fica a cargo do aiforbio-paper-reading:
paperdown2md -o <diretorio-artigos> "<identificador>"
→ <diretorio-artigos>/<nome-artigo>/{pdf, full.md, images/}
aiforbio-paper-reading
→ <diretorio-artigos>/<nome-artigo>/{ModelName}record.md
Após a geração de full.md + images/, se o usuário quiser "ler o artigo / escrever record / leitura aprofundada / dedução de fórmulas / exemplos de fluxo de dados", lembre e conecte ao aiforbio-paper-reading, não escreva longas notas de leitura dentro desta skill.
Notas sobre os scripts
scripts/run.sh: a única entrada recomendada; seleciona automaticamente o Python do skillsplace.scripts/paperdown2md.py: apenas stdlib; verifica se está no skillsplace na inicialização;resolve→ download →mineru-open-api extract→full.md/images/.
Quando o Agente executar esta skill: use run.sh primeiro, não python3 paperdown2md.py.
Instalação nos skills globais do Cursor:
git clone https://github.com/Iayce/paperdown2md.git ~/.cursor/skills/paperdown2md
Ou symlink de um checkout local: ln -s /caminho/para/paperdown2md ~/.cursor/skills/paperdown2md