Munka no podía reconvertir archivos que antes sí. Auditado sobre la carpeta de Andrea Galeano:
- Los BRAW nunca habían salido: 87 clips (496 GB), tres tandas por el guion de Resolve y ni un
clip convertido. Ahora los lee el decodificador de Blackmagic que instala Resolve (braw.py,
en un proceso aparte), sin abrir Resolve, y ffmpeg los codifica como cualquier otro clip.
Probado con clips del NAS: 15,6 GB → 394 MB con sus 7.004 cuadros, VMAF 96,0 contra el BRAW
revelado sin pérdida. Las conversiones de BRAW que fallaron por Resolve pasan solas al lector.
- Lo que «antes podía» eran reconversiones de lo ya convertido: ahorraban un 5 % con pérdida.
Siguen sin ofrecerse, y lo que ya viene comprimido de cámara solo se ofrece si compensa.
- La tarjeta codifica con «uhq»: entre un 19 y un 55 % menos de peso con la misma calidad
medida, siempre H.265 de 10 bits.
- Una conversión que no aligera (más del 80 % del clip, o reconversión de una conversión) no
reemplaza al original: queda «no compensa» y lo que salió va a _Para borrar\descartados.
De paso: los MP4 guardan las etiquetas de la cámara; un intento que no pasó la verificación se
puede reintentar; un H.264 de más de 4.096 px de lado va por CPU; el motivo de un fallo se lee
entero; el guion de Resolve llega con tildes y borra su ficha.
Pruebas: prueba_orden.py 33 (una con un BRAW de verdad), probar.py 19, prueba_funcional.py 30,
prueba_ventana.py 18 desde el código y 17 con el paquete.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- instalar.py: instalar un paquete lo copia a la carpeta de programas del
usuario (%LOCALAPPDATA%\Programs\OrganiLAB) con sus datos y su ffmpeg, lo da
de alta desde ahí y lo vuelve a abrir desde su sitio. Del origen no se borra
nada: queda instalado-en.txt, que además hace que abrir esa copia abra la
instalada. Un destino ocupado no se pisa, y si ya hay un OrganiLAB instalado
lo dice en vez de poner otro encima.
- static/index.html: vista «Manual», con cada función del programa, qué hace
y cómo lo hace (41 entradas, un apartado por pestaña).
- organizador.py: ServidorLocal pide el puerto en exclusiva. Con «reutilizar
dirección», en Windows dos copias escuchaban a la vez en el mismo puerto y
se contestaban la una por la otra sin que nada fallara a la vista.
- Pruebas: probar.py 19, prueba_funcional.py 26 de 26, prueba_ventana.py 18
desde el código y 17 con el paquete, incluida la instalación entera en un
equipo de ensayo (ORGANILAB_ENSAYO) que no toca el Windows de verdad.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- ventana.py: la ventana es un marco Win32 propio con WebView2 dentro,
manejado por COM con ctypes. Fuera pywebview, pythonnet y clr_loader y
sus binarios sin firmar. Identidad en la barra de tareas, una sola copia
abierta por carpeta de datos, selector de carpetas de Windows, rutas
completas al soltar, avance en la barra de tareas, memoria de posición,
aviso al cerrar con trabajo en marcha, y nada de navegador (menú, F5,
zoom, permisos). Si el motor se cae, se monta de nuevo solo.
- arranque.py y empaquetar.py: el paquete ya no lleva binario propio.
OrganizadorLabstream.exe es pythonw.exe (firmado por la PSF) con otro
nombre y arranca el programa desde sitecustomize; abre con Smart App
Control encendido. Fuera PyInstaller. Al empaquetar se comprueba la firma
de cada binario con Windows y se arranca el motor del paquete.
- instalar.py: accesos directos en Inicio y Escritorio con la identidad de
la ventana, y la línea en Configuración › Aplicaciones. Se ofrece una vez,
la primera que se abre un paquete en un equipo.
- Dos copias sobre los mismos datos ya no se pisan: la segunda trae la
ventana al frente (antes abría el navegador y daba por huérfanas las
conversiones en marcha de la primera). Si el puerto 8765 está ocupado
por otro programa, se toma uno libre.
- Por consola, el paquete ya no consulta si hay versión nueva con las
actualizaciones automáticas apagadas.
- Pruebas: probar.py 17, prueba_funcional.py 26 de 26 y prueba_ventana.py
(nueva), que abre la ventana de verdad: 17 comprobaciones desde el código
y 8 arrancando el paquete por su .exe.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- firma.py: RSA-2048 PKCS#1 v1.5 SHA-256 sin dependencias; empaquetar.py firma
el manifiesto y actualizador.py exige la firma (CLAVE_PUBLICA incrustada).
- Barra de tareas: tiempo restante estimado a partir del avance.
- Corregido: APLICANDO nunca llegaba al total y «Moviendo» quedaba fijo,
bloqueando desconectar la carpeta.
- probar.py: reglas, firma y recorrido completo sobre una copia temporal.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Primer commit del proyecto. Incluye el rediseño 1.6 (riel de pasos en la barra
lateral), el actualizador con reintentos y respaldo, publicar.sh y la nueva
opción de desconectar carpetas (1.6.1).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>