De Descargas a %LOCALAPPDATA%\Programs\OrganiLAB, con sus datos y su ffmpeg.
Smart App Control encendido, 31 de 33 binarios firmados (los otros dos son
ffmpeg y ffprobe, idénticos a los de winget) y Microsoft Defender sin hallazgos.
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>
- Una instalación nueva no trae carpetas de fábrica: CONFIG_DEFECTO
arrancaba con David Reyes, Danney y Camilo apuntando a Z:, W: y N:.
raices viene vacía; el diccionario de clientes y discos sigue de serie
porque es conocimiento, no estado.
- Al abrir no se entra sola en ninguna carpeta: la primera opción del
desplegable está vacía y la portada enseña «Tus carpetas» con su último
escaneo, para entrar con un clic.
- Un config.json ilegible se aparta en config.json.roto-<fecha> en vez de
sustituirse por los valores de fábrica en silencio.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
El programa no sale a la red al arrancar salvo que alguien encienda el
interruptor en Ajustes. Hasta la 2.6.0 el actualizador escribía
«auto: true» él solo en config.json sin que nadie lo eligiera: al arrancar
se apaga; lo que se encienda desde Ajustes queda marcado como elegido y se
respeta.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sale a la red solo lo que se pide: la tipografía viene con el programa
(static/manrope.woff2) y el comprobador de versiones tiene interruptor en
Ajustes. Nueva prueba funcional (prueba_funcional.py) que levanta una copia
sobre un cliente de ensayo y ejercita las 26 funciones por su API, con una
conversión real: 26 de 26.
Fallos que sacó y quedan arreglados:
- Un renombrado solo de mayúsculas («10- octubre» → «10- Octubre») se
descartaba en Plan.agregar y en mover; deshacer decía «sitio ocupado».
- Las carpetas que crea el plan no entraban en el inventario hasta el
siguiente escaneo (_recontar_carpetas las da de alta y recuenta).
- Una fusión de carpetas cortaba en el primer archivo que tropezaba.
- «Viejo» era distinto en convertidor, stock y respaldo: ahora es_viejo.
- /api/actualizacion informaba versión vacía hasta la primera consulta.
- Filas de sueltos por carpeta de origen; mes del stock el más repetido;
fuera tres rutas sin uso.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
El año y el mes salían de la fecha de cada archivo desde 2.2.0, pero dentro
del mes iba todo junto: en Camilo, 13 días de rodaje y 907 archivos en la
misma carpeta.
- Nueva variable {dia} («15- Viernes», como los meses) en las plantillas de
grabación de los cuatro tipos de trabajo, con migración de las guardadas.
- Plan._dias_de_rodaje() cuenta los días distintos por mes y dia_de()
devuelve "" cuando el mes tuvo un solo rodaje: la carpeta del día solo
aparece donde hace falta. David Reyes la necesita en 1 de 8 meses,
Danney en 36 de 57, Camilo en 12 de 26. 186 grupos, cero colisiones.
- Un archivo de cámara suelto también se archiva por su propia fecha:
plan_archivo hacía «if mes: fm = mes» y se saltaba la regla de 2.2.0.
- «¿Dónde va a parar este archivo?» dice también el día.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Cada carpeta lleva el color de lo que guarda (R.COLOR_CUBETA). Lo que
cuelga de una carpeta con color hereda el suyo; una que mezcla tipos se
queda neutra.
- «¿Dónde va a parar este archivo?»: donde_iria() resuelve cualquier nombre
con el mismo clasificador del escaneo y el árbol enciende el destino.
Debajo, nombres de archivo de verdad de la carpeta conectada.
- Renombrar una carpeta del árbol cambia TODAS las plantillas que pasan por
ella (00_Grabacion arrastra a CELULAR) y, si se pide, las carpetas que ya
existen en el disco; queda en la bitácora y se deshace.
- {anio} y {mes} dejan de encajar con cualquier carpeta: solo con algo que
parezca un año o un mes.
- Colores en el Explorador: .ico generados sin dependencias y asignados con
SHGetSetFolderCustomSettings, la misma API de «Cambiar icono». Escribir el
desktop.ini a mano NO basta, y SHGetFileInfo no sirve para comprobarlo:
no informa de la personalización ni cuando la puso el propio Explorador.
Ruta de icono relativa, así que los colores viajan con el disco. Si el
disco no deja marcar la carpeta, se dice y no se deja nada escrito.
- .organilab no se escanea y los desktop.ini de la app no son basura.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Tres cosas para la reorganización, pedidas juntas.
Proyectos por programa: la plantilla pasa de 01_Proyectos/{nombre} a
01_Proyectos/{app}/{nombre}, con {app} = el programa que abre el archivo
(R.APPS_PROYECTO, R.app_proyecto). Lo que ya viene en su propia carpeta se
queda con el nombre de esa carpeta; lo que se separa es lo suelto. Las
plantillas guardadas se migran solas si nadie las tocó. Entran extensiones
que caían en «otro»: .sesx, .c4d, .blend, .motn, .aepx, .aet, .prel, .idml,
.psdt, .afpub.
Carpetas vacías: carpetas_vacias() las encuentra desde el inventario y las
comprueba en el disco; borrar_vacias() las quita. Es lo único que la app
borra, y solo porque no hay nada dentro: cada una queda en la bitácora como
rmdir y Deshacer las vuelve a crear con su nombre y en el inventario. No
entra en «Hacer las N de una vez». 29 huecos en David Reyes, 40 en N:.
Mapa: pestaña nueva con el árbol que producen las plantillas de verdad
(mapa_estructura, GET /api/estructura). Al tocar una carpeta dice qué guarda
—derivado de ROL_A_CUBETA y ROL_QUE—, cuánto hay hoy, y deja cambiar el
destino ahí mismo. POST /api/plantillas pasa a fusionar cubeta a cubeta:
guardar una sola plantilla borraba las otras diecinueve.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
«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>
- R.fecha_real: la fecha sale de lo más antiguo que sabe el disco. Al copiar en
Windows la creación pasa a ser la de la copia y la modificación se conserva;
al renderizar, las dos son nuevas.
- R.base_derivado y _heredar_fechas: un render hereda la fecha del original, en
la misma carpeta o en otra si el nombre es propio y único. Si hay dos
candidatos iguales no hereda.
- El plan archiva el material en el mes en que se grabó, no en el que dice la
carpeta, y explica lo que hizo en vez de pedir una decisión. Los 727 GB de
las dos carpetas que mentían se resuelven solos.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Había dos caminos para lo mismo. Ahora encima de la lista sale «Hacer las N de
una vez», que ejecuta seguidas las acciones que no necesitan elegir nada, con
el mismo motor que tenía el asistente. Convertir y respaldar se quedan fuera
porque hay que elegir; lo dudoso nunca entra.
- POST /api/acciones/hacer; acciones() trae y el progreso.
- Se quita el punto de entrada «Asistente paso a paso» de la interfaz (el
motor y la entrada por línea de comandos siguen).
- Las acciones de ordenar no cuentan como pendientes sin un plan calculado:
tras ordenarlo todo la lista seguía diciendo que faltaban dos cosas.
Probado de punta a punta: 19 archivos antes y después, ninguno perdido, árbol
completo ordenado en un clic.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
La pantalla «Carpeta» pasa a ser la lista de todo lo que se puede hacer ahora
mismo, en orden, con la cifra real de cada cosa y su botón. Era la
simplificación de fondo de la auditoría: antes había que bajar tres niveles de
navegación para saber qué faltaba en una carpeta.
- acciones() y GET /api/carpeta/acciones: todas las cifras salen de consultas
baratas (0,04-0,23 s en las carpetas reales); el plan solo se usa si ya
estaba calculado.
- Se conecta la detección de repetidos, que funcionaba pero no tenía botón.
- _gb da terabytes; el peso de «por nombrar» deja de contarse dos veces al
anidarse (salían totales mayores que el propio disco).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- analizar(): 8 hilos, se puede detener, informa de los ilegibles. ffprobe es
sobre todo espera de red (0,23 s por clip en el NAS).
- Los formatos pesan de verdad distinto (cq_mas por formato): archivo 14,3 MB,
ligero 8,2 MB, H.264 18,3 MB sobre el mismo clip.
- ProRes sin -qscale: el perfil vuelve a gobernar la tasa.
- motores(): se prueba el croma 4:2:2 de verdad; si la GPU no puede, va por CPU.
- Audio multipista: -c:a copy solo con una pista AAC (nueva columna pistas_audio).
- Raíces anidadas rechazadas al registrarlas.
- Respaldo: incremental contra el archivo de origen, e índice acumulativo.
- Interfaz: las casillas del plan no repintan la lista ni pierden el foco; el
buscador de Ajustes conserva lo editado; la lista de stock no salta.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Plan.marcar_colisiones: dos movimientos que acabarían en el mismo archivo se
detectan antes de aplicar, se dejan sin marcar y se explican.
- agregar(): los grupos de archivos también comprueban si el destino ya tiene
un archivo con ese nombre (40 primeros, para no saturar la red).
- actualizar_inventario: las filas de carpetas se reescriben con su ruta nueva
en vez de borrarse, y se conserva la marca de basura/proxy heredada, para que
aplicar por pasos no deje los siguientes con 0 archivos y sin fecha.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Deshacer vuelve a la interfaz (Historial, Últimos cambios y el aviso al aplicar).
- «Elements» ya no marca como stock lo que tenga dentro: 50,7 GB de material
propio dejaban de respaldarse y salían como desechables.
- El plan contrasta el mes de la carpeta con la fecha de los archivos y avisa
cuando no cuadran (727 GB en el material real iban al mes equivocado en verde).
- aplicar(): un archivo bloqueado ya no corta el resto de su grupo.
- Un escaneo interrumpido no reemplaza el inventario bueno.
- Las uniones de carpeta de Windows no se recorren (colgaban el escaneo).
- Abrir una carpeta pasó de 8,83 s a 0,21 s.
- Plantillas: _Papelera migra a _Para borrar.
- .dat/.idx/.bak dejan de ser basura; Cache deja de ser proxies; abreviaturas
de mes bajan a confianza media.
- Convertidor: varios formatos por clip, originales apartados fuera de
candidatos, sufijo en modo espejo, temporal borrado al fallar, una sola cola.
- Interfaz: accion() no pisa el estado del botón; rutas de Windows bien recortadas.
Co-Authored-By: Claude Opus 5 <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>