286 líneas
20 KiB
Markdown
286 líneas
20 KiB
Markdown
# 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).
|
||
|
||
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.
|