Communitygithub.com

jtepe/slopclub

Herramienta para leer, buscar y extraer contenido de archivos PDF mediante scripts de Python.

¿Qué es slopclub?

Este skill proporciona el script `pdfread.py`, diseñado para que agentes de IA (como Claude Code, Cursor o Codex) puedan interactuar con archivos PDF de manera eficiente. Permite obtener metadatos e índice (info), buscar texto con BM25 y sintaxis FTS5 (search), extraer texto en markdown por rangos de páginas (text), y extraer imágenes o renderizar páginas completas como PNG (image y render). Es especialmente útil para agentes que necesitan consultar documentos grandes sin saturar el contexto principal: primero se puede buscar términos clave, luego leer solo las páginas relevantes, y finalmente extraer figuras si son necesarias. Funciona con Python 3.10+ o con uv 0.11+ (recomendado) y requiere la dependencia pymupdf4llm. No incluye OCR, por lo que las páginas escaneadas aparecen como marcadores de imagen. El script es determinista, lo que permite compartir identificadores de imágenes entre subagentes y la conversación principal.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add jtepe/slopclub

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Usa la herramienta pdfread.py junto a este archivo para leer PDFs. Ejecútala de cualquiera de estas dos formas:

  • Con uv 0.11+ (recomendado): invoca pdfread.py directamente — el shebang lo ejecuta mediante uv run, y la primera invocación descarga las dependencias y puede tardar un minuto.
  • Sin uv: python3 pdfread.py … funciona en cualquier Python 3.10+ que tenga instalado pymupdf4llm>=0.0.17 (pip install pymupdf4llm).

El comando search necesita SQLite con FTS5; las versiones de Python administradas por uv y casi todos los sistemas modernos lo incluyen, y el script muestra un error claro si no es así.

Ejecuta pdfread.py --help para ver el uso completo. En resumen:

  • pdfread.py info FILE — número de páginas, metadatos, esquema/TOC. Empieza aquí.
  • pdfread.py search FILE "términos" — páginas que mencionan las palabras clave, ordenadas por BM25 con un fragmento por coincidencia. La primera búsqueda construye un índice en caché (segundos); las búsquedas posteriores son instantáneas. Los términos se combinan con AND, término* coincide con prefijos, --raw habilita la sintaxis completa de FTS5 ("frase exacta", OR, NEAR). Solo capa de texto — las páginas escaneadas son invisibles para la búsqueda.
  • pdfread.py text FILE --pages 10-25 — texto en markdown para un rango de páginas basado en 1. Las figuras aparecen como marcadores [image: p12-img2 640x480px].
  • pdfread.py image FILE p12-img2 — escribe esa figura como PNG e imprime su ruta; visualízala con tu herramienta de lectura de archivos.
  • pdfread.py images FILE --pages 12 — lista los identificadores de figuras en las páginas.
  • pdfread.py render FILE 7 — renderiza una página completa (o --rect x0,y0,x1,y1 para recortar) como PNG; es la alternativa para páginas escaneadas y cualquier cosa que la capa de texto no capture.

Preservando el contexto en PDFs grandes

Para preguntas concretas ("¿dónde menciona el contrato las tarifas de cancelación?"), ejecuta primero search y lee solo las páginas de resultados con text --pages — no es necesario distribuir entre subagentes. El caché del índice es compartido, por lo que los subagentes también pueden usar search sin reconstruirlo.

Para síntesis amplias, no vuelques todo un documento en la conversación principal. En su lugar:

  1. Ejecuta info para obtener el número de páginas y el esquema, y divide el documento en rangos sensatos (por capítulo, o ~15–25 páginas).
  2. Lanza un subagente por rango con instrucciones como: "Ejecuta <ruta>/pdfread.py text <archivo> --pages 10-25 y responde a / resume en como máximo N palabras. Si un marcador [image: ...] parece relevante, extráelo con el comando image y revísalo."
  3. Conserva solo los resúmenes/respuestas en la conversación principal y sintetiza a partir de ellos. Revisa páginas específicas tú mismo solo cuando un resumen indique que la respuesta se encuentra allí.

Notas

  • No hay OCR: una página sin capa de texto devuelve solo su marcador [image: ...] de página completa (o una nota de "sin texto extraíble") — extráela o usa render y lee la imagen visualmente.
  • La extracción es determinista: los identificadores de imagen son estables entre ejecuciones, por lo que un subagente puede reportar un ID que luego se pueda extraer desde la conversación principal.

Skills relacionados