3. Verificar los 3 extras que instalaste (pdf, docx, xlsx)
pip show no lista los “extras”, así que miramos los paquetes que traen cada formato. Con el venv activo:
pip list
Busca en la lista estos nombres (si aparecen, ese formato funciona):
Formato
Paquete que debes ver en pip list
PDF
pdfminer.six / pypdf / pdfplumber
Word (.docx)
python-docx
Excel (.xlsx)
openpyxl
Filtro rápido en Windows
pip list | findstr "docx openpyxl pdf"
Si salen los 3 → tienes PDF + Word + Excel cubiertos. 🎯
Si algún día te falta uno, lo agregas sin reinstalar todo:
pip install "markitdown[pdf,docx,xlsx]"
Límite de tu instalación actual
Como no instalaste [all], formatos como PowerPoint (.pptx), audio o YouTube van a fallar. Es normal, no es un bug. Cuando los necesites, instalas su extra.
# Ver el resultado en pantalla sin guardar archivomarkitdown informe.pdf# Leer desde tubería (pipe)type informe.pdf | markitdown
Rutas con espacios en Windows
Ponlas siempre entre comillas dobles"...", si no, se rompe el comando.
5. Usarlo desde Python (para automatizar)
Crea un archivo, por ejemplo convertir.py, dentro de D:\z\dev\markitdown:
from markitdown import MarkItDownmd = MarkItDown()# Cambia esto por tu archivo realresultado = md.convert("informe.pdf")print(resultado.text_content) # lo muestra en pantalla# Y/o lo guarda a un .mdwith open("informe.md", "w", encoding="utf-8") as f: f.write(resultado.text_content)
Lo corres con el venv activo:
python convertir.py
Convertir varios archivos de una (batch)
from markitdown import MarkItDownimport glob, osmd = MarkItDown()for archivo in glob.glob("entradas/*.pdf"): # carpeta con tus PDFs nombre = os.path.splitext(os.path.basename(archivo))[0] texto = md.convert(archivo).text_content with open(f"salidas/{nombre}.md", "w", encoding="utf-8") as f: f.write(texto) print("listo:", nombre)
Pones tus PDFs en entradas/ y te escupe todos los .md en salidas/. 💪
6. Flujo directo a Obsidian (tu caso de uso real)
El .md que genera MarkItDown ya es compatible con Obsidian, no hay que tocar nada. Flujo express:
Convierte: markitdown "mi-doc.pdf" -o "D:\mi-vault\Inbox\mi-doc.md"
(apunta la salida directo a tu vault, carpeta tipo Inbox).
Abres Obsidian → el archivo ya aparece.
(Opcional) Le agregas al inicio tus tags / frontmatter y a tu MOC.
Idea pro para tu chamba remota
Este flujo = “te paso este PDF/Excel a nota editable en 1 comando”. Es justo el tipo de automatización que puedes ofrecer como freelance (procesar documentos, armar bases de conocimiento, alimentar LLMs). Guárdate esta nota como portafolio. 🚀
7. Errores típicos y su arreglo
Síntoma
Causa
Solución
'markitdown' no se reconoce...
No activaste el venv
cd D:\z\dev\markitdown y .venv\Scripts\activate.bat
ModuleNotFoundError al importar
Estás usando el Python del sistema, no el del venv
Activa el venv antes de correr Python
Falla con .pptx / audio / YouTube
No instalaste ese extra
pip install "markitdown[all]" o el extra puntual
Texto del PDF sale desordenado
El PDF es escaneado (imagen)
Necesita OCR: pip install markitdown-ocr + un llm_client
Caracteres raros / tildes mal
Archivo guardado sin UTF-8
Guarda el .md con encoding="utf-8" (ya está en el script de arriba)
⚡ Receta express de 30 segundos (copia-pega)
cd D:\z\dev\markitdown.venv\Scripts\activate.batpip show markitdownmarkitdown "TU_ARCHIVO.pdf" -o "TU_ARCHIVO.md"
Si pip show te da versión y el .md se genera → todo verde, rey. ✅
Resumen rápido fuera de la nota (para ti, Alex)
Tu instalación está bien. La carpeta .venv de la foto lo confirma.
Verificar: activa el venv y corre pip show markitdown + markitdown --help.
Confirmar los 3 extras:pip list | findstr "docx openpyxl pdf".
Usar:markitdown archivo.pdf -o salida.md (con el venv activado).
En Windows el activate es.venv\Scripts\activate.bat, no el source .../bin/activate de la doc.
Para Obsidian: apunta la salida -o directo a una carpeta de tu vault y ya aparece como nota.
Cuando quieras, te armo el script .bat de doble clic que convierte un archivo sin que tengas que activar el venv a mano cada vez — así lo usas como herramienta del día a día. ¿Te lo preparo? 🙂