Files
labstream-organizador/README.md
Labstream 2930320690 2.2.1: el diálogo de añadir carpeta se explica solo
«Cliente» y «Tipo» no decían para qué servían ni qué iba a pasar al confirmar,
y el tipo se describía por a quién se le hace en vez de por cómo queda ordenado.

- Cada campo es una pregunta con una línea debajo que dice qué hace.
- Debajo se ven, armadas con la plantilla de verdad (ESTADO.plantillas), las
  cuatro carpetas donde va a guardar el material; cambian al cambiar el tipo.
- Si el nombre es un cliente que ya existe, se preselecciona SU tipo. Antes
  salía siempre «contenido», así que una segunda carpeta de un cliente de
  pauta o de proyecto se podía registrar con la plantilla equivocada.
- El diálogo dice que al confirmar solo lee y arma una lista, sin mover nada.
- TIPOS_CLIENTE se reescribe en términos de cómo queda ordenado.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 22:12:40 -05:00

33 KiB
Original Blame Histórico

Organizador Labstream

App local (Python, sin dependencias) para inventariar, mapear, ordenar y optimizar el material de los clientes de Labstream repartido por los discos del estudio.

Iniciar.bat            ← doble clic. Abre http://127.0.0.1:8765 en el navegador
organizador.py         ← servidor + inventario + plan + cola de conversión
reglas.py              ← cómo reconoce cámaras, carpetas, basura y las plantillas de estructura
resolve_bridge.py      ← convierte BRAW a H.265 10 bits usando DaVinci Resolve Studio
static/index.html      ← la interfaz (Carpeta · Revisar y ordenar · Convertir · Respaldar · Historial · Ajustes)
datos/                 ← inventario.sqlite, config.json, diccionario.json (lo aprendido), bitacora.jsonl

Nunca borra nada. Todo lo que sobra va a _Para borrar dentro de la misma raíz y cada movimiento queda en la bitácora para poder deshacerlo.


1. Diagnóstico (9 sep 2026)

Raíz Archivos Peso BRAW Stock Envato Proxies Basura Duplicados
Z:\Dermatologas\David Reyes 4 667 1,36 TB 723 GB (53 %) 464 GB 4,5 GB 301 archivos 91 GB
W:\Danney 24 967 3,14 TB 1,18 TB (40 %) — — 12 000 autoguardados de AE —
N:\ (Camilo Ortega) 24 016 3,10 TB — — 150 GB 1 031 archivos —

Lo que se repite en todas:

  • El mismo cliente vive en hasta 12 sitios. Camilo Ortega aparece en N:, K:, L:, M:, Q: y Z:. David Reyes en Z:, K:, Q: y V:. Danney en W:, K: y Q:. Cada sitio con un nombre distinto (David Reyes, DR. DAVID REYES).
  • Dos sistemas de orden a la vez. Danney tiene 2026/MM- Mes/NN- Pieza y, al lado, Nuevo Orden/ por cámara y año con 1,8 TB. El mismo tipo de material está en los dos.
  • Los meses no se llaman igual: 08-Agosto, 09- Septiembre, 10- octubre, 02-marzo (que es marzo pero numerado 02), 04 -Mayo, 05- MAYO.
  • Material suelto en la raíz: PSD de 2 GB, archivos «Recuperado», capturas de pantalla, un MP4 final.
  • Intermedios enormes que ya no hacen falta: ProRes HQ vertical de 8 GB, prerenders QuickTime Animation de 10 GB, proxies de Resolve/Premiere al lado del original.
  • Stock de Envato copiado dentro de cada pieza (Visual/Elements): 464 GB en David Reyes, con 91 GB duplicados exactos.
  • Basura de sistema por todas partes: .DS_Store, Thumbs.db, .tmp de Photoshop (uno de 1,2 GB), ~lock~, carpetas de autoguardado de After Effects.

2. Cómo organizarlo

Cuatro tipos de cliente, cuatro plantillas

Tipo Quiénes Estructura
contenido (mensual) dermatólogas, marca personal AAAA / MM- Mes / NN- Pieza + 00_Grabacion por mes
pauta (anuncios) Camilo Ortega, Jonathan, Malpraxis Campañas / AAAA_Campaña + Material / Grabaciones, Celular, IA
proyecto (puntual) Brigard, PepsiCo, Kingspan, Filarmónica… 00_Brief 01_Material 02_Grabacion 03_Proyecto 04_Exportados
interno recursos de Labstream Musica Sonidos Stock LUTs Transiciones compartidos

La carpeta canónica de un cliente de contenido

David Reyes/
├── 00_Marca/                 logos, manual, fuentes, fondos, transiciones, intros
├── 01_Proyectos/             .drp .prproj .aep .psd de trabajo (Diseño/, Edicion/)
├── 2026/
│   ├── 03- Marzo/
│   │   ├── 00_Grabacion/     originales de cámara del mes, separados por fuente
│   │   │   ├── URSA_BRAW/    ├── SONY/   ├── OSMO/   ├── CELULAR/   └── AUDIO/
│   │   ├── 01- La isotretinoina/     ← una pieza: Guion, Visual, Audio, Portada, Export
│   │   ├── 02- El poder del ácido hialurónico/
│   │   ├── _Exportados/      masters del mes
│   │   └── _Portadas/
│   └── 08- Agosto/
├── Campañas/2026_Garnier/    trabajos de marca (Dove, Loreal, Isdin…)
├── _Apoyos/                  tomas de apoyo reutilizables por tema
├── _Recursos/Musica Stock    (mejor aún: en la biblioteca compartida del estudio)
├── _Documentos/              propuestas, referentes, brief
├── _Revisar/                 lo que la app no supo ubicar
└── _Para borrar/                basura, proxies y originales ya convertidos (la app no borra; lo revisa y lo borra una persona)

Reglas que hacen que funcione:

  1. Un cliente, una carpeta, un disco. Las únicas otras dos casas legítimas son Entregas_LAB (K:) y Exportados (Q:), que ya gestiona Labstream OS.
  2. Los archivos no se renombran nunca; solo se mueven carpetas. Resolve y Premiere re-enlazan por nombre.
  3. Dentro de una pieza no se toca. El orden es de la raíz hasta el nivel de pieza.
  4. El mes es el de publicación, no el de rodaje. Una Grabación de diciembre que alimenta piezas de marzo vive en 03- Marzo/00_Grabacion. Cuando no hay mes, la app usa la fecha del nombre del archivo (Sony, DJI, Higgsfield, Envato y el MMDD de los clips Blackmagic) y solo al final la de modificación.
  5. Stock y música van a la biblioteca compartida, no dentro de cada pieza.
  6. Los proxies se regeneran: a _Para borrar/proxies. La basura de sistema, a _Para borrar/basura.
  7. Política de frío. El BRAW de piezas ya publicadas y con más de 3 meses se convierte a H.265 10 bits; el original va a _Para borrar/originales; una persona lo borra cuando comprueba que nadie lo echó de menos.

3. Cómo la app aprende

  • Diccionario. La pestaña lista cada nombre de carpeta que aparece en la raíz («Grabado», «Render», «Julio music», «Nuevo Orden»…) con su peso. Le dices qué es (grabación, exportados, portadas, marca…) y desde entonces esa palabra se reconoce en cualquier disco. Viene sembrado con ~200 palabras vistas en las carpetas actuales, incluidos los errores de tecleo (Elemnts, Visula, Calular pero de).
  • Reglas exactas. Si en el plan corriges el destino de una carpeta, se guarda como regla para ese cliente.
  • Alias de clientes. DR. DAVID REYES = David Reyes = Davids. Con ellos la pestaña Mapa cruza todos los discos y dice dónde vive cada cliente.
  • Todo está en datos/diccionario.json y datos/config.json: texto plano, se puede editar a mano o versionar.

4. Optimizar material viejo (MP4 H.265 10 bits)

Origen Motor Resultado medido
Sony XAVC-I 4K 60p 4:2:2 10 bits, 228 Mb/s ffmpeg + NVENC (RTX 5080) 671 MB → 24,6 MB (8,4 Mb/s) en 30 s, HEVC Main10
Sony XAVC-I 4K 30p, 286 Mb/s ffmpeg + NVENC 286 → 9,6 Mb/s, 1,5× tiempo real
BRAW URSA 4.6K 30p, 567 Mb/s DaVinci Resolve Studio (H.265 NVIDIA, Main10) ≈ 31 Mb/s → unas 18 veces menos
  • Perfiles: ahorro / equilibrado / máxima. El bitrate objetivo sale del tamaño del cuadro y los fps (≈ 0,085 bits por píxel y cuadro en «equilibrado»: 4K30 → 21 Mb/s, 4.6K30 → 31 Mb/s).
  • Croma: 4:2:0 10 bits (Main10, se reproduce en todo) o 4:2:2 10 bits (Rext; la RTX 5080 lo codifica y Resolve lo lee, pero muchos reproductores no).
  • BRAW: pasa por Resolve porque ffmpeg no lo decodifica. El puente abre (o crea) el proyecto «Labstream Archivo» con gestión de color a Rec.709 Gamma 2.4, importa los clips, monta una línea de tiempo por resolución y renderiza «clips individuales». Si Resolve no deja cambiar de proyecto, trabaja en un bin dentro del proyecto abierto y aplica la LUT Gen 5 Film → Video a cada clip. Resolve debe estar abierto con un proyecto, no en el Gestor de proyectos, y sin diálogos abiertos.
  • Flujo: Analizar (ffprobe) → Ver candidatos → Encolar → Verificar (duración, códec, 10 bits) → Reemplazar (el original y su .XML de Sony van a _Para borrar/originales). La salida conserva la fecha de modificación del original y se llama nombre_10bit.mp4 junto al original.
  • Se excluyen solos: lo que ya está en HEVC/AV1 eficiente (los iPhone en HDR, por ejemplo), lo que tiene canal alfa, los exportados/masters (salvo que se marque «incluir exportados») y lo más reciente que N meses.

Estimación con los inventarios actuales: los 1,9 TB de BRAW de Danney y David Reyes quedarían en unos 110 GB; los intermedios ProRes/XAVC de más de 1 GB (≈ 1 TB entre los dos) en menos de 100 GB.

Stock de Envato en proyectos viejos

Las tomas de Envato se vuelven a descargar con la suscripción: en piezas ya publicadas sobran. En la pestaña Optimizar, «Buscar stock viejo» lista, agrupado por carpeta, todo lo que la app reconoce como Envato (nombre …-2026-01-22-22-34-00-utc o carpeta Elements) en piezas de más de N meses. Se elige video, música o imágenes. Va a _Para borrar/stock (reversible desde Bitácora); la app no lo borra nunca, eso lo hace una persona desde el Explorador. En David Reyes son 464 GB.

Respaldo compacto (pestaña Respaldo)

Copia a otro disco una versión ligera de cada cliente para tenerla a mano:

  • misma estructura de carpetas (AAAA / MM- Mes / NN- Pieza), y donde una carpeta mezcla tipos de medio se separa en Video, Audio, Imagenes, Diseño, Proyectos, Documentos, Fuentes;
  • los clips de cámara van en su versión MP4 H.265 10 bits (verificada) en lugar del original; el BRAW/RAW que aún no se convirtió no se copia, y la pestaña lo lista para que se convierta antes;
  • sin stock de Envato, sin proxies, sin basura, sin _Para borrar;
  • deja INDICE.csv (ruta en el respaldo, ruta original, tipo, bytes, fecha), _MAPA.md (resumen por carpeta y tipo) y manifest.json en la raíz del respaldo;
  • es incremental: lo que ya está igual (tamaño y fecha) se salta, así se puede detener y retomar.

Orden recomendado por cliente: Ordenar → Optimizar (convertir BRAW e intermedios, verificar, reemplazar) → Buscar stock viejo → Respaldo → cuando el respaldo esté comprobado, una persona borra _Para borrar a mano.

5. Los discos

15 recursos compartidos en tres cajas (NAS Labstream 192.168.0.22, LabTem 192.168.0.40 y el Blackmagic Cloud Store Mini 192.168.0.3). La pestaña Mapa los lista con su uso y marca en azul las carpetas que reconoce como clientes. Propuesta de niveles:

Nivel Dónde Qué
caliente Cloud Store Mini (10G) el mes en edición
trabajo NAS Labstream (labstream, Camilo Ortega, Medicina1…) el año en curso, una carpeta por cliente
entregas Entregas_LAB y Exportados lo maneja Labstream OS
frío temple, Datos, Nubes años anteriores ya optimizados a H.265 10 bits
recursos Recursos Audiovisuales, Sonidos música, stock, LUTs, transiciones compartidos

Consolidar un cliente entre discos es una copia grande; conviene hacerla en el propio NAS (rsync por SSH) y no desde el PC. La app ordena dentro de cada raíz; el cruce entre discos lo muestra en el mapa para decidirlo.

6. Uso (interfaz 1.6)

  1. Iniciar.bat (o py -3.12 organizador.py). Requiere Python 3.10+, ffmpeg/ffprobe en el PATH y, para BRAW, DaVinci Resolve Studio abierto con scripting externo en Local.
  2. Suelta la carpeta del cliente en la barra lateral (o pega la ruta). Se registra y se escanea sola.
  3. La vista Carpeta es el recorrido: cinco pasos con estado (hecho, en curso, listo, pendiente, bloqueado) y un bloque «Siguiente» que dice qué toca y ofrece un solo botón principal. El Asistente paso a paso sigue disponible desde ahí.
    • 1 Escanear: solo lee nombres y tamaños.
    • 2 Revisar: diagnóstico y carpetas que la app no reconoce (se nombran en un panel, al lado del plan).
    • 3 Ordenar: «Calcular» enseña qué va a pasar, agrupado por tipo (basura, grabación, piezas…), con seguridad seguro / revisar / dudoso. «Aplicar» mueve dentro de la misma carpeta. Se deshace desde Historial.
    • 4 Convertir a 10 bits: tres bloques en orden: elegir clips, conversión en curso, verificar y reemplazar. Abajo, el stock de Envato viejo.
    • 5 Respaldar: destino → Calcular → Copiar. Avisa si hay BRAW sin convertir.
  4. Historial: cada cambio en palabras («Ordenó carpetas», «Apartó stock viejo») con su Deshacer, y lo que hay en _Para borrar.
  5. Ajustes (engranaje): carpetas registradas, clientes con alias, plantillas.

Las tareas largas (escaneo, lectura de clips, conversión, asistente, copia) se ven en la barra inferior desde cualquier vista, con progreso y Detener; al terminar aparece un aviso. Un botón deshabilitado siempre dice al lado por qué. Los errores del programa se muestran como aviso, no rompen la pantalla.

Cambios de seguridad de 1.5.0: el servidor local rechaza peticiones que no vengan de la propia página (cabeceras Host/Origin y Content-Type), /api/config solo acepta ajustes de conversión y respaldo, ningún destino puede salir de la carpeta del cliente, la carpeta _Para borrar ya no se vuelve a planificar como basura, y no se encola una conversión cuya salida ya exista o esté reclamada por otro clip (MP4 y MOV del mismo nombre). El plan se invalida al re-escanear.

Movimientos (1.5.0): si en el destino ya existe un archivo con el mismo nombre, no se renombra con «(2)»: se deja donde está y sale en los errores del lote (Resolve y Premiere enlazan por nombre, y el XML de Sony va emparejado con su clip). Solo dentro de _Para borrar y Duplicados se numera. Si un archivo está bloqueado (abierto en un editor) o la copia entre discos queda incompleta, el original no se toca. El sidecar Sony C0001M01.XML se reconoce como cámara.

Actualización automática (1.5.0): sigue funcionando igual para el usuario (aviso en la vista Carpeta → «Actualizar ahora»), pero antes de instalar se exige que el manifiesto traiga versión con forma 1.2.3, nombre de zip simple, sha256 obligatorio y descarga en el mismo servidor https que el manifiesto. No se actualiza con un escaneo, lectura, conversión, asistente o copia en marcha. El .bat espera a que se cierren todas las ventanas de OrganiLAB, guarda copia de la versión actual en actualizacion\previa, instala y, si la copia falla, restaura la anterior. datos\ y ffmpeg\ nunca se tocan.

1.5.1: los hilos de lectura de clips y de la cola de conversión ya no dejan la app «ocupada» si fallan; cada «Reemplazar» es un lote propio (optimizar-fecha) que se deshace solo, y antes de mover el original comprueba que el MP4 verificado siga ahí; «Deshacer» dice qué archivos no pudo devolver y por qué; una carpeta llamada solo «3» bajo un año se propone como marzo con confianza media, no alta; el puente con Resolve, cuando no puede abrir «Labstream Archivo» y usa el proyecto del editor, no toca sus ajustes ni su cola de render ni lo guarda, y nunca pisa un MP4 que ya exista; las raíces de unidad (N:\) ya se consultan bien (mapa y respaldo).

Publicar una versión

py -3.12 empaquetar.py        # construye dist\, los dos zips y manifiesto.json (NOTAS="..." para las notas)
bash publicar.sh              # sube los zips al NAS, deja el manifiesto en GitHub y despliega el OS

Cuando el OS sirve el manifiesto nuevo, cada copia instalada lo ve al abrirse (o al pulsar «Actualizar ahora»), descarga el zip «app» (15 MB), comprueba el sha256 y se sustituye sola sin tocar datos\ ni ffmpeg\.

1.5.2: «Juntar repetidos» comprueba el contenido (primer MB, centro y último) antes de apartar una copia «idéntica»; si difiere, la deja y lo dice. El plan avisa cuando el destino ya tiene un archivo con ese nombre (baja a «dudoso» y no se marca). El actualizador reintenta solo durante unos minutos si el OS responde 502/503 (pasa mientras se redespliega) en vez de fallar a la primera.

1.5.3: el recorrido de cinco pasos va fijo arriba en todas las vistas (con el paso de la vista actual resaltado, «Volver a escanear» y el asistente siempre a mano; el paso 1 también re-escanea al hacer clic); la página aprovecha pantallas anchas (hasta 1720 px); _Para borrar, _Papelera y Duplicados se muestran como «apartado por la app», no como carpetas sin reconocer.

1.5.4: «Convertir a 10 bits» queda en tres pasos limpios: Buscar clips (lee y lista en un solo botón; los criterios y la calidad están plegados en «Cambiar criterios»), Convertir (lista compacta con estado, sin tabla de diez columnas) y Reemplazar. Cada clip se verifica solo al terminar, así que el paso «Verificar» desaparece. El stock de Envato pasa a «Revisar y ordenar». Ajustes es una sola lista por cliente: tipo, sus carpetas y otros nombres con que aparece; las plantillas quedan en «Avanzado». Confirmado que ffprobe sí lee los BRAW (resolución, fps, duración), así que la vía Resolve es alcanzable desde la interfaz.

1.5.5: botón «Buscar actualizaciones» en la barra lateral (junto a la versión y la hora de la última comprobación). Por comando, en PowerShell hay que dar la ruta completa del .exe con & (no está en el PATH):

& "C:\Users\Munka\Downloads\OrganizadorLabstream-portatil-1.4.1\OrganizadorLabstream\OrganizadorLabstream.exe" actualizar --si

(--si instala sin preguntar; el nombre de la carpeta portátil no cambia al actualizar, solo su contenido).

1.6.0, rediseño: el recorrido de cinco pasos vive en la barra lateral, colgando de la carpeta seleccionada (punto de estado, dato corto, clic para ir al paso; el paso 1 re-escanea). Cada vista cabe en una pantalla: «Revisar y ordenar» tiene pestañas internas (Qué hay · Qué va a pasar · Por nombrar con su número · Stock viejo); «Convertir» es un solo panel con tres botones (Buscar clips, Convertir N, Reemplazar N) y una lista única con el estado de cada clip; «Historial» es una línea de tiempo por día con lo apartado en _Para borrar resumido arriba; «Ajustes» son tarjetas de cliente plegadas que se abren para editar. La ayuda queda en una línea y un «?» despliega el resto. Texto 13,5 px, un solo botón lleno por pantalla, y la carpeta que está trabajando parpadea en la barra lateral.

1.6.1: se puede desconectar una carpeta escaneada. Aparece una ✕ al pasar el ratón por la carpeta en la barra lateral y un enlace «Desconectar» en la cabecera de «Carpeta». Solo la quita de la lista: no borra ni mueve nada del disco. Una casilla opcional olvida también el inventario escaneado (si no se marca, al volver a soltar la carpeta el escaneo anterior sigue ahí). No deja desconectar mientras esa carpeta se escanea, se analiza, se le aplica el plan o tiene conversiones pendientes. Endpoint POST /api/raiz/quitar {raiz, datos}; queda anotado en la bitácora como raiz_quitada.

1.6.2: el manifiesto de actualización va firmado. firma.py (RSA-2048 sin dependencias) firma versión+archivo+sha256+tamaño al empaquetar con la clave privada de %USERPROFILE%\.labstream\organizador-firma.json (haz copia de seguridad: sin ella no se pueden publicar versiones nuevas); la pública está incrustada en actualizador.py y el .exe no instala nada que no cuadre con ella, aunque alguien cambiara el archivo en el servidor. Los .exe anteriores (≤ 1.6.1) ignoran la firma y siguen actualizándose. La barra de tareas muestra el tiempo restante estimado (≈ 4 min) a partir del avance. Corregido: tras aplicar el plan, «Moviendo» se quedaba en la barra de tareas para siempre y bloqueaba desconectar la carpeta. Pruebas automáticas en probar.py (reglas, firma, y un recorrido completo escanear → plan → aplicar → deshacer → desconectar sobre una copia temporal): py -3.12 probar.py. Rendimiento medido sobre el inventario real (54 mil archivos): las consultas con LIKE tardan menos de 10 ms; no hacía falta optimizar.

1.6.3: botón «Elegir carpeta…» (barra lateral, pantalla vacía y diálogo de añadir) que abre el selector de carpetas de Windows, sin depender de soltar la carpeta ni de pegar la ruta. POST /api/elegir-carpeta lanza el diálogo en un PowerShell aparte para no bloquear el servidor y devuelve la ruta (o nulo si se cancela).

1.7.0, recorrido paso a paso y convertidor:

  • Arrastrar una carpeta a la ventana ya trae su ruta real: el puente WebView2 (v.dom.document.events.drop) guarda lo soltado y la interfaz lo pide en /api/soltado; la búsqueda por nombre queda solo de reserva (navegador externo).
  • «Qué va a pasar» son ahora tres pasos en frases, cada uno con su botón Aplicar: 1 apartar basura y proxies, 2 ordenar por año y mes, 3 ordenar lo demás. Cada fila dice «X pasa a Y» y por qué en lenguaje llano; lo dudoso queda sin marcar. Al aplicar un paso el plan se recalcula solo. Cada fila del plan trae paso.
  • «Por nombrar» propone qué es cada carpeta mirando su contenido (clips de cámara, proyectos, música, fotos, documentos, videos) y el parecido del nombre con el diccionario; botón «Sí, es …» por carpeta y «Aceptar las sugerencias seguras» para todas las de confianza alta (≥ 90 % de un mismo tipo y ≥ 3 archivos).
  • «Stock viejo» agrupa por antigüedad (más de 12, 6-12, 3-6, 1-3, menos de 1 mes) con casilla por tramo y atajos 1/2/3/6/12 meses.
  • «Deshacer» sale de la interfaz (confundía). Sigue existiendo por API/CLI para emergencias.
  • «Desconectar» pasa a llamarse «Quitar de la lista» con explicación clara.
  • «Convertidor» (antes «Convertir a 10 bits»): formatos MP4 H.265 10 bits, H.265 ligero, H.264, ProRes Proxy / LT / HQ (FORMATOS), detección real de GPU NVIDIA (NVENC) y CPU en /api/optimizar/motores (se prueba codificando 3 cuadros), cola tipo Media Encoder («Convirtiendo 2 de 3 · 47 %») y el mismo clip se puede convertir a varios formatos. ProRes nunca reemplaza el original (es de edición). Columna formato en trabajos.
  • Respaldar por lotes: «solo lo de más de 3 / 6 / 12 meses» (meses en /api/respaldo/plan).
  • Barra de tareas revisada: la conversión en curso llegaba como un id y la interfaz esperaba un objeto (salía 0 % sin nombre); ahora estado.cola trae actual (ruta, pct, raíz), hechos y total.

1.8.0, auditoría y red de seguridad. Tras revisar el código con cuatro pasadas y medir sobre el material real (7,73 TB, 53.964 archivos):

  • Deshacer vuelve a la interfaz. Al rediseñar el Historial en la 1.6.0 se quitaron los botones pero la app seguía prometiendo en cuatro pantallas que «se deshace desde Historial». Ahora está en el Historial, en «Últimos cambios» y en el aviso que sale al aplicar («Deshacer esto»).
  • «Elements» ya no convierte en stock lo que tenga dentro. La marca solo la hereda una carpeta con nombre completo de paquete de Envato; lo descargado se reconoce por el nombre del archivo. Medido: marcaba 1.713 archivos y 50,7 GB de material propio como desechable, que el respaldo excluye por defecto.
  • El plan contrasta el mes de la carpeta con la fecha de los archivos (_discrepa_mes, Plan.mes_real). Si no cuadran, baja a «probable», no se marca y sale un aviso arriba con los dos meses. 5 de las 10 carpetas de mes con material fechable no contenían el mes que decían: son 727 GB. Los nombres Blackmagic no traen año, así que en esos solo se compara el mes.
  • Un archivo bloqueado ya no corta el resto de su grupo en aplicar(): cada archivo va por su cuenta y el resumen dice cuántos fallaron de verdad (antes uno abierto en Resolve dejaba sin mover los 117 restantes).
  • Un escaneo interrumpido no reemplaza el inventario: si hubo fallos de lectura y el recuento cae más de un 10 % frente al anterior, se conserva el que había y se explica por qué.
  • Las uniones de carpeta de Windows no se recorren (_es_enlace, _id_carpeta). Una circular dejaba el escaneo dando vueltas sin fin: comprobado, un árbol de un archivo no terminaba en dos minutos.
  • Abrir una carpeta pasó de 8,83 s a 0,21 s: _resumen_carpetas calcula de una sola pasada lo que antes era una consulta por carpeta que recorría la tabla entera.
  • La papelera se llama igual en el disco que en pantalla. Las plantillas guardadas con el nombre viejo (_Papelera) se migran a _Para borrar al arrancar.
  • Falsos positivos quitados: .dat, .idx y .bak ya no son basura de sistema, y una carpeta llamada Cache a secas ya no son proxies. Las abreviaturas de mes («Mar», «May») bajan a confianza media.
  • Convertidor: un clip ya convertido a un formato puede convertirse a otro (el filtro «en cola» miraba todos los trabajos); los originales ya apartados no vuelven a salir como candidatos; en modo espejo cada formato tiene su propio archivo; el temporal se borra si falla; y la cola no puede arrancar dos veces.
  • Interfaz: los botones ya no vuelven a su etiqueta vieja pisando lo que la acción acaba de calcular, y las rutas de Windows se recortan bien (soltar un archivo registraba el archivo como carpeta de cliente).

1.8.1, fase 2 de la auditoría:

  • Dos movimientos que acabarían en el mismo archivo se detectan antes de aplicar (Plan.marcar_colisiones). Caso real: dos carpetas de grabación genéricas del mismo mes van las dos a 00_Grabacion/SONY y las dos traen un C0001.MP4. Ahora salen sin marcar, en rojo, con un aviso que nombra las dos carpetas y el archivo que choca. También se comprueba si el destino ya tiene un archivo con ese nombre en el disco (antes solo se miraba en las filas de carpeta, no en los grupos de archivos); se revisan los 40 primeros de cada grupo para no llenar la red de consultas.
  • Aplicar por pasos ya no degrada el inventario. actualizar_inventario reescribe las filas de carpetas con su ruta nueva en vez de borrarlas, y conserva la marca de basura/proxy heredada. Antes, como la interfaz recalcula el plan sin volver a escanear, los pasos siguientes salían con «0 archivos · 0 B» y sin fecha. Comprobado: tras aplicar el paso de fechas, la fila del paso 3 conserva sus 3 archivos y su peso.

1.9.0, convertidor y respaldo:

  • El análisis de clips va en paralelo (HILOS_ANALISIS = 8), se puede detener y dice cuántos no se pudieron leer. Cada lectura con ffprobe es sobre todo espera de red: 0,23 s por clip medidos en el NAS, así que los 15.423 clips pendientes pasaban de la hora solo para poder empezar a convertir.
  • Los formatos ahora pesan de verdad distinto. «Ligero para compartir» usaba el mismo perfil de calidad que el de archivo y solo bajaba un techo de tasa que casi nunca se toca. Medido sobre el mismo clip: archivo 14,3 MB, ligero 8,2 MB, H.264 18,3 MB.
  • ProRes ya no lleva cuantizador fijo: con -qscale se saltaba la tasa del perfil y un «máster HQ» no salía a tasa de HQ, que es justo lo que promete.
  • El croma 4:2:2 se prueba de verdad al arrancar (motores()["chroma422"]). NVENC no lo admite antes de Blackwell; si la tarjeta no puede, el trabajo va por CPU en vez de fallar, y la interfaz lo dice.
  • El audio multipista ya no rompe la conversión: -c:a copy solo cuando hay una sola pista AAC. Con dos pistas (cámaras de audio multipista) ffmpeg abortaba. Se guarda pistas_audio al analizar.
  • Raíces anidadas rechazadas: registrar N:\ y N:\Camilo dejaba a la interna sin inventario y su respaldo copiaba cero archivos diciendo que había ido bien.
  • Respaldo incremental corregido: compara con el archivo de origen tal como está ahora, no con lo que decía el último escaneo. Antes, algo editado después de escanear no se volvía a copiar nunca.
  • El índice del respaldo se acumula en vez de reescribirse con la última tanda, que es lo que hacía inservible el respaldo por lotes.
  • Interfaz: marcar una casilla del plan actualiza solo las cifras (antes repintaba la lista entera y se perdía el foco); el buscador de Ajustes ya no borra lo que estabas editando; la lista de stock no salta al principio en cada clic.

2.0.0, una sola lista por carpeta. La pantalla «Carpeta» deja de ser un resumen y pasa a ser la lista de todo lo que se puede hacer ahora mismo, en orden, cada cosa con su cifra real y su botón: apartar basura y proxies, decir qué son las carpetas que no reconoce, ordenar por fecha, ordenar lo demás, apartar stock viejo, juntar repetidos, aligerar los clips y respaldar. Lo que ya está hecho aparece tachado con un visto. Era la simplificación de fondo que salió de la auditoría: antes había que bajar tres niveles de navegación (pestaña, sub-pestaña, paso) para saber qué faltaba en una carpeta.

Endpoint nuevo GET /api/carpeta/acciones (acciones()): todas las cifras salen de consultas baratas sobre el inventario, así que tarda entre 0,04 y 0,23 s en las carpetas reales; el plan de orden solo se consulta si ya estaba calculado, y si no el botón dice «Calcular». De paso se conecta a la interfaz la detección de material repetido, que funcionaba por dentro pero no tenía dónde pulsarse, y _gb pasa a dar terabytes.

2.1.0, el asistente se fusiona con la lista. Había dos formas de hacer lo mismo: la lista de acciones y un «Asistente paso a paso» que recorría lo mismo preguntando. Ahora hay una sola: encima de la lista sale «Hacer las N de una vez», que ejecuta seguidas las acciones que no necesitan que elijas nada (apartar basura y proxies, ordenar por fecha, ordenar lo demás, apartar stock viejo, juntar repetidos) usando el mismo motor que tenía el asistente. Se quedan fuera convertir y respaldar, que tienen su propio botón porque hay que elegir. Lo dudoso nunca entra: se queda como está para que alguien lo mire.

Probado de punta a punta sobre un árbol de ensayo: 19 archivos antes y después, ninguno perdido, y en un solo clic el material de cámara quedó repartido por mes y fuente, las piezas en su mes, la música en _Recursos y la basura, los proxies y el stock viejo en _Para borrar. Endpoint POST /api/acciones/hacer; la lista de acciones trae automatico (las que se pueden hacer solas) y el progreso del motor. De paso, las acciones de ordenar dejan de contar como pendientes mientras no haya un plan calculado: después de ordenarlo todo la lista seguía diciendo que faltaban dos cosas que en realidad ya no tenían nada.

2.2.0, la fecha de verdad manda y ya no hay que decidir nada a mano:

  • La fecha sale de lo más antiguo que sabe el disco (R.fecha_real): al copiar en Windows la fecha de creación pasa a ser la de la copia y la de modificación se conserva; al renderizar, las dos son nuevas. Quedarse con la más antigua de las dos da siempre la mejor estimación de cuándo se grabó.
  • Un render hereda la fecha del original (R.base_derivado, _heredar_fechas). «C0001_10bit.mp4» se archiva en el mes en que se grabó «C0001.MP4», no en el mes en que se convirtió. Reconoce los sufijos habituales (_10bit, _ligero, _h264, _proxy, _LT, _HQ, _render, _export, _master, _final) y busca el original en la misma carpeta o, si el nombre es bastante propio y único, en toda la carpeta del cliente. Si hay dos candidatos con el mismo nombre no hereda nada. Las conversiones que hace la propia app ya conservaban la fecha del original, tanto por ffmpeg como por Resolve.
  • Cuando la carpeta y los archivos no coinciden, manda el archivo. El nombre del clip lo pone la cámara y la fecha la pone el disco; el nombre de la carpeta lo escribió una persona con prisa. Así el material se archiva en el mes en que se grabó sin preguntarle nada a nadie, y el aviso ya no pide una decisión: dice lo que la app hizo y por qué. En el material real, los 727 GB de las dos carpetas que mentían se resuelven solos: lo de «02-marzo» va a diciembre de 2025 y lo de «08-Agosto» a abril de 2026.

2.2.1, el diálogo de añadir carpeta se explica solo. Al soltar una carpeta salían dos campos, «Cliente» y «Tipo», sin decir para qué servían ni qué iba a pasar al confirmar, y el tipo se describía por a quién se le hace («Contenido mensual (dermatólogas, marca personal): año / mes / pieza») en vez de por cómo queda ordenado. Ahora cada campo es una pregunta en español con una línea debajo que dice qué hace, y el diálogo enseña, con la plantilla de verdad del tipo elegido, las cuatro carpetas donde va a guardar el material:

V:\Galeano\2026\09- Septiembre\00_Grabacion\        lo que sale de la cámara
V:\Galeano\2026\09- Septiembre\Nombre de la pieza\  cada pieza, con su edición
V:\Galeano\2026\09- Septiembre\_Exportados\         lo que ya se entregó
V:\Galeano\_Recursos\Musica\                         música y sonidos de siempre

El ejemplo se arma con ESTADO.plantillas, o sea que enseña exactamente lo que la app va a hacer y cambia al cambiar el tipo. Además cierra un fallo: si el nombre que se escribe es un cliente que ya existe, se preselecciona el tipo que ese cliente ya tiene; antes salía siempre «contenido», así que una segunda carpeta de un cliente de pauta o de proyecto se podía registrar con la plantilla equivocada. Y el diálogo dice al final que al confirmar solo lee y arma una lista: no mueve ni un archivo.

Probado el 9 sep 2026 sobre una copia de ensayo: plan → aplicar → deshacer → volver a aplicar deja el árbol exacto; conversión ffmpeg verificada y reemplazo con original a _Para borrar. El puente de Resolve conectó con Resolve Studio 21.1 pero no pudo abrir proyecto porque Resolve estaba en el Gestor de proyectos: queda por probar con un proyecto abierto.