BlueProject
Published on

Media Ingest - automatizar la extraccion de fotos del iPhone a Windows

Authors
  • avatar
    Name
    Mateo Londoño Toro
    Twitter

Sacar fotos y videos del iPhone a un PC Windows suena simple hasta que lo haces en serio: cables, confianza del dispositivo, carpetas DCIM, duplicados, y cero historial de lo que ya copiaste. Ese fue el punto de partida de Media Ingest, el proyecto que vengo construyendo en Automatizar extraccion archivos iphone.

Este post documenta el desarrollo: el problema, las decisiones de producto y algunas lecciones que solo aparecen cuando la herramienta se usa con datos reales.

El problema

El flujo tipico en Windows es:

  1. Conectar el iPhone por USB
  2. Confiar en el equipo
  3. Abrir el Explorador o una herramienta generica
  4. Copiar carpetas a mano
  5. Esperar no haber duplicado ni perdido nada

Eso escala mal cuando hay miles de medios, varios destinos, o quieres poder deshacer una sesion. Queria una app propia, clara, y orientada a un flujo repetible.

Que es Media Ingest

Media Ingest es un sincronizador de fotos y videos para Windows con UI Fluent (PySide6 + QFluentWidgets). Habla con el iPhone via Shell/MTP, analiza antes de copiar, deja historial de sesiones y permite revertir.

Pantalla de inicio de Media Ingest

Stack actual:

  • Python 3.11+
  • PySide6 + Fluent Widgets
  • Arquitectura MVVM por capas (presentation, application, domain, sources, platform)
  • Catalogo en SQLite
  • Empaquetado con Nuitka

Arranque local:

pip install -r requirements.txt
python main.py

Decision clave: sincronizar no es organizar

Una de las decisiones que mas limpio dejo el producto fue separar dos intenciones.

Modulo Sincronizar

Sincronizar responde a: hay medios en el iPhone (o en una carpeta QA) que quiero en este PC, sin duplicar lo ya catalogado.

Organizar responde a: estos archivos ya estan en Windows; quiero otra estructura o nombres. No depende del dispositivo.

Modulo Organizar

Mezclar ingreso y reorganizacion en un solo asistente obliga a decidir demasiadas cosas a la vez. Separarlos deja un modelo mental claro:

iPhone / QA --> Sincronizar --> Carpeta en disco --> Organizar --> Estructura final

Acceso al iPhone desde Windows

En Windows el iPhone no aparece como un disco normal. Media Ingest usa descubrimiento Shell/portable (WPD/MTP) para detectar dispositivos Apple, con cuidado de no colgar el arranque si hay otros telefonos conectados.

La leccion practica: el probe profundo de medios al startup es caro. Mejor enumerar nombres ligeros primero y enlazar el dispositivo solo cuando hace falta.

Historial y rollback

Cada sincronizacion u organizacion deja sesion en Historial. Revertir no es "borrar y listo": los archivos se mueven a una papelera interna de la app para poder recuperarlos.

Historial de sesiones y rollback

Eso suena seguro... hasta que no lo es.

Incidente real: Organizar, revertir y vaciar

El 2026-07-31, una cadena Organizar → Revertir → Vaciar papelera borro de forma permanente ~313 GB en menos de un minuto. No fue un fallo de sync con el iPhone: fue falta de friccion temporal y de red de seguridad al vaciar.

Aprendizajes que bajaron a producto:

  • Vaciar papelera necesita confirmacion fuerte y cuota/limites
  • Revertir a papelera interna no equivale a Papelera de Windows
  • Los controles de seguridad importan incluso en herramientas personales

El post-mortem completo vive en la documentacion del repo (docs/explanation/incidente-2026-07-31-sesion-11-papelera.md).

Documentacion como parte del producto

Los manuales siguen Diataxis (tutoriales, how-to, reference, explanation) y se leen dentro de la app, en la pestana Manuales. Las capturas de UI se regeneran con tests (pytest tests/test_docs_screenshots.py), asi la doc no se pudre aparte del codigo.

Eso cambio la forma de desarrollar: cada vista nueva tiende a salir con spec + captura + texto de usuario.

Detalle de empaquetado en Windows

Compilar con Nuitka dentro de una carpeta con acentos (extraccion) disparaba LNK1104. La salida se mueve a una ruta ASCII (C:\MediaIngestBuild\...). Otro recordatorio de que el entorno Windows sigue siendo parte del diseno.

Estado actual

Hoy Media Ingest ya cubre:

  • Sync desde iPhone o carpeta QA
  • Organizar en disco
  • Historial con revertir
  • Limpieza / auditoria de disco
  • Manuales embebidos
  • Suite de tests

Siguiente frente natural: endurecer mas los controles de borrado, pulir el flujo de campo (prototipo caja iPhone → SSD), y seguir documentando decisiones en este blog.

Descarga y verificacion

Build sin firma Authenticode por ahora. Windows SmartScreen puede avisar; eso no prueba malware ni seguridad. Verifica el hash antes de ejecutar.

Get-FileHash .\MediaIngest-1.0.0-win64.zip -Algorithm SHA256

Si el hash no coincide con el publicado, no ejecutes el archivo. Firma de codigo: proximamente.

Cierre

Este proyecto empezo como "automatizar la extraccion de archivos del iPhone" y termino siendo un gestor de ingreso y organizacion de medios, con historial, rollback y docs como ciudadanos de primera clase.

Si estas resolviendo el mismo dolor en Windows, la pregunta util no es solo "como copio mas rapido", sino:

Como dejo un rastro reversible de lo que hice?

Eso es lo que Media Ingest intenta responder.