3.1.0: se instala solo en su sitio, manual dentro y el puerto para una sola copia
- 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>
Este commit está contenido en:
@@ -68,6 +68,15 @@
|
||||
nav a{padding:13px 11px;color:var(--mut);text-decoration:none;border-bottom:2px solid transparent;cursor:pointer;font-weight:600}
|
||||
nav a.on{color:var(--tx);border-color:var(--tx)}
|
||||
nav a.eng{margin-left:auto;font-size:12.5px;font-weight:500}
|
||||
nav a.eng2{font-size:12.5px;font-weight:500}
|
||||
/* ── manual ── */
|
||||
.manual{max-width:1120px}
|
||||
.manual h3{margin:24px 0 8px;font-size:14px;padding-bottom:6px;border-bottom:1px solid var(--line)}
|
||||
.manual dl{display:grid;grid-template-columns:230px 1fr;gap:10px 22px;margin:0}
|
||||
.manual dt{font-weight:600}
|
||||
.manual dd{margin:0}
|
||||
.manual dd i{font-style:normal;color:var(--mut)}
|
||||
@media (max-width:900px){.manual dl{grid-template-columns:1fr;gap:2px 0}.manual dd{margin-bottom:10px}}
|
||||
main{padding:22px 28px 40px;max-width:1720px;overflow-x:hidden}
|
||||
section{display:none}section.on{display:block}
|
||||
h2.v{margin:0 0 2px;font-size:18px;font-weight:700;letter-spacing:-.01em}
|
||||
@@ -347,6 +356,7 @@
|
||||
<a data-t="respaldar" tabindex="0">Respaldar</a>
|
||||
<a data-t="historial" tabindex="0">Historial</a>
|
||||
<a data-t="ajustes" class="eng" tabindex="0" title="Clientes, sus carpetas y plantillas">⚙ Ajustes</a>
|
||||
<a data-t="manual" class="eng2" tabindex="0" title="Qué hace cada cosa y cómo lo hace">Manual</a>
|
||||
</nav>
|
||||
<main>
|
||||
|
||||
@@ -537,6 +547,104 @@
|
||||
<div id="historial"></div>
|
||||
</section>
|
||||
|
||||
<!-- ============ MANUAL ============ -->
|
||||
<section id="t-manual">
|
||||
<div class="cab"><h2 class="v">Manual</h2></div>
|
||||
<p class="ayuda">Cada función del programa: qué hace y, en gris, cómo lo hace. El orden es el de las pestañas de arriba.</p>
|
||||
<div class="manual">
|
||||
|
||||
<h3>Para empezar</h3>
|
||||
<dl>
|
||||
<dt>Instalarlo</dt><dd>La primera vez que se abre pregunta si lo instala en el equipo: queda en el menú Inicio, en el Escritorio y en Configuración › Aplicaciones. <i>Cómo: se copia con sus datos a tu carpeta de programas y se da de alta desde ahí; no pide permisos de administrador y de la carpeta original no borra nada.</i></dd>
|
||||
<dt>Añadir la carpeta de un cliente</dt><dd>Suéltala en la ventana, pulsa «Elegir carpeta…» o pega su ruta. Pregunta el nombre del cliente y qué clase de trabajo le haces, y te enseña cómo va a quedar ordenada. <i>Cómo: al confirmar solo la lee; no mueve nada hasta que tú lo apliques.</i></dd>
|
||||
<dt>Clase de trabajo</dt><dd>Piezas mes a mes, anuncios y campañas, un trabajo puntual o material de Labstream. <i>Cómo: cada clase tiene su plantilla de carpetas, y es lo único que decide dónde se guarda cada cosa.</i></dd>
|
||||
<dt>Tus carpetas</dt><dd>Al abrir no se entra en ninguna: la portada lista las que ya conoce, cada una con su último escaneo, para entrar con un clic.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>Carpeta</h3>
|
||||
<dl>
|
||||
<dt>Escanear</dt><dd>Lee nombres, tamaños y fechas de todo lo que hay dentro. <i>Cómo: recorre la carpeta sin abrir los archivos, guarda un inventario y clasifica cada cosa por su extensión, su nombre y la carpeta donde está: cámara, proyecto, exportado, stock, proxy, basura…</i></dd>
|
||||
<dt>Lista de acciones</dt><dd>Todo lo que se puede hacer ahora en esa carpeta, en orden, cada cosa con su cifra y su botón; lo ya hecho sale tachado. <i>Cómo: son consultas al inventario, por eso es instantánea.</i></dd>
|
||||
<dt>Hacer las N de una vez</dt><dd>Ejecuta seguidas las acciones que no necesitan que elijas nada: apartar basura y proxies, ordenar por fecha, ordenar lo demás, apartar stock viejo y juntar repetidos. <i>Cómo: lo dudoso no entra nunca; convertir, respaldar y borrar carpetas vacías tienen su propio botón.</i></dd>
|
||||
<dt>Quitar de la lista</dt><dd>La carpeta deja de aparecer en el programa y, si quieres, se olvida su inventario. En el disco no se toca nada.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>Revisar y ordenar</h3>
|
||||
<dl>
|
||||
<dt>Qué hay</dt><dd>Qué pesa y de qué clase es, por cámara, por mes y por tipo de archivo, con avisos de lo raro: material suelto, meses mal escritos, dos sistemas de orden a la vez.</dd>
|
||||
<dt>Por nombrar</dt><dd>Las carpetas cuyo nombre no reconoce. Propone qué son y tú lo confirmas. <i>Cómo: mira qué tienen dentro; lo confirmado se guarda en un diccionario y vale para todas las carpetas y discos.</i></dd>
|
||||
<dt>Qué va a pasar</dt><dd>El plan: a dónde iría cada cosa, sin mover nada. Va en tres pasos que se aplican por separado: apartar basura y proxies, ordenar por año y mes (y por día de rodaje si ese mes hubo más de uno), y ordenar lo demás (proyectos por programa, exportados, música…). <i>Cómo: usa la plantilla de la clase de trabajo y la fecha de cada archivo, la más antigua entre creación y modificación; un render hereda la fecha de su original. Cada fila va marcada como segura, por revisar o dudosa.</i></dd>
|
||||
<dt>Aplicar</dt><dd>Hace los movimientos marcados, siempre dentro de la carpeta del cliente. <i>Cómo: no pisa nada; si en el destino ya hay un archivo con ese nombre, lo deja donde está y lo avisa. Cada movimiento queda apuntado para poder deshacerlo.</i></dd>
|
||||
<dt>Stock viejo</dt><dd>Aparta a <span class="path">_Para borrar\stock</span> las tomas de Envato de piezas de más de 1, 2, 3, 6 o 12 meses, que se vuelven a descargar con la suscripción. <i>Cómo: las reconoce por el nombre (terminan en «-utc») o por estar en una carpeta «Elements».</i></dd>
|
||||
<dt>Repetidos</dt><dd>Cuando el mismo archivo está en varios sitios, deja uno y junta los demás en una subcarpeta <span class="path">Duplicados</span>. <i>Cómo: mismo nombre y mismo peso, y antes de apartar compara el contenido (principio, centro y final); si difiere, no lo toca.</i></dd>
|
||||
<dt>Carpetas vacías</dt><dd>Lista los huecos que deja ordenar y los borra. Es lo único que el programa borra, porque dentro no hay nada. <i>Cómo: cada una se comprueba en el disco justo antes; se puede deshacer, y no entra en «hacer de una vez».</i></dd>
|
||||
</dl>
|
||||
|
||||
<h3>Mapa</h3>
|
||||
<dl>
|
||||
<dt>El árbol</dt><dd>Cómo quedan las carpetas con cada clase de trabajo y qué va en cada una, con el color de lo que guarda. <i>Cómo: se dibuja con las plantillas de verdad, así que enseña exactamente lo que el programa va a hacer.</i></dd>
|
||||
<dt>Tocar una carpeta</dt><dd>Dice qué guarda y cuánto material de eso hay hoy, y deja cambiar ahí mismo a dónde va. «Sin carpeta asignada» lista lo que todavía no tiene sitio.</dd>
|
||||
<dt>Cambiar un nombre</dt><dd>Renombra una carpeta en todas las plantillas que pasan por ella y, si quieres, también las que ya existen en el disco. <i>Cómo: es un movimiento normal, queda en el historial y se deshace.</i></dd>
|
||||
<dt>¿Dónde va a parar este archivo?</dt><dd>Escribes el nombre de un archivo, exista o no, y dice qué es, de qué cámara o programa viene y en qué carpeta lo dejaría. <i>Cómo: con el mismo clasificador que usa el escaneo.</i></dd>
|
||||
<dt>Colores en Windows</dt><dd>Pinta las carpetas en el Explorador con el color de lo que guardan, y los quita con un clic. <i>Cómo: Windows no tiene color de carpeta, así que les pone un icono de color; hay discos que no lo permiten, y entonces lo dice y no deja nada escrito.</i></dd>
|
||||
</dl>
|
||||
|
||||
<h3>Convertidor</h3>
|
||||
<dl>
|
||||
<dt>Buscar clips</dt><dd>Encuentra los clips de cámara viejos y pesados (de fábrica, de más de 3 meses y 300 MB) y calcula cuánto pesarían convertidos. <i>Cómo: lee códec, duración y resolución con ffprobe; se salta lo que ya es ligero y los exportados.</i></dd>
|
||||
<dt>Formato y calidad</dt><dd>H.265 10 bits (el recomendado, unas diez veces más ligero), H.265 ligero, H.264 o ProRes proxy, LT y HQ; calidad de ahorro, equilibrada o máxima. «Motores» te dice qué acelera tu tarjeta gráfica.</dd>
|
||||
<dt>Convertir</dt><dd>Mete los clips en una cola que va uno tras otro en segundo plano. Se puede detener, reanudar, reintentar y vaciar. <i>Cómo: con ffmpeg, por tarjeta gráfica si la hay y si no por procesador; los BRAW pasan por DaVinci Resolve Studio, que tiene que estar abierto en un proyecto.</i></dd>
|
||||
<dt>Verificar</dt><dd>Cada clip se comprueba solo al terminar: duración, códec y los 10 bits. Lo que no cuadra no se da por bueno.</dd>
|
||||
<dt>Reemplazar</dt><dd>El convertido ocupa el sitio del original, con su misma fecha, y el original se aparta a <span class="path">_Para borrar\originales</span>.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>Respaldar</h3>
|
||||
<dl>
|
||||
<dt>Calcular</dt><dd>Dice cuánto ocuparía la copia, por tipo de medio, y qué originales de cámara quedarían fuera por no estar convertidos.</dd>
|
||||
<dt>Copiar</dt><dd>Copia a otro disco una versión ligera: misma estructura, los clips en su versión convertida, sin stock, proxies ni basura. Todo, o solo lo de más de 3, 6 o 12 meses. <i>Cómo: es incremental; lo que ya está igual se salta, así que se puede detener y retomar. Deja <span class="path">INDICE.csv</span> y <span class="path">_MAPA.md</span> para encontrar cosas sin montar el disco.</i></dd>
|
||||
</dl>
|
||||
|
||||
<h3>Historial</h3>
|
||||
<dl>
|
||||
<dt>Deshacer</dt><dd>Cada vez que el programa mueve algo queda aquí como un lote, y «Deshacer» devuelve cada archivo a donde estaba. <i>Cómo: en orden inverso; si alguien movió un archivo después, ese se salta y se avisa.</i></dd>
|
||||
<dt>_Para borrar</dt><dd>Enseña lo que hay apartado. El programa no lo borra nunca: lo revisa y lo borra una persona desde el Explorador.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>Ajustes</h3>
|
||||
<dl>
|
||||
<dt>Clientes</dt><dd>Nombre, clase de trabajo, sus carpetas y los otros nombres con que aparece en los discos.</dd>
|
||||
<dt>Actualizaciones</dt><dd>«Buscar actualizaciones» mira si hay versión nueva; el interruptor de «consultar al arrancar» viene apagado. <i>Cómo: descarga el paquete de Labstream OS, comprueba su firma y su huella, se cierra, se sustituye sin tocar tus datos y vuelve a abrirse.</i></dd>
|
||||
<dt>Plantillas</dt><dd>En «Avanzado»: la ruta exacta de cada tipo de material en cada clase de trabajo. Es lo mismo que se cambia desde el Mapa.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>La ventana</h3>
|
||||
<dl>
|
||||
<dt>En curso</dt><dd>La barra de abajo enseña el avance de lo que esté corriendo (escaneo, lectura de clips, conversión, copia) con su botón de detener; el mismo avance sale en el botón de la barra de tareas de Windows, que parpadea al terminar algo largo.</dd>
|
||||
<dt>Cerrar con trabajo en marcha</dt><dd>Avisa de lo que está haciendo; si cierras, sigue hasta terminar y se cierra solo. Abrirlo otra vez devuelve la misma ventana.</dd>
|
||||
<dt>Una sola copia</dt><dd>Abrirlo dos veces trae al frente la ventana que ya había. <i>Cómo: dos copias sobre los mismos datos se pisarían el inventario.</i></dd>
|
||||
</dl>
|
||||
|
||||
<h3>Sin abrir el programa</h3>
|
||||
<dl>
|
||||
<dt>Arrastrar una carpeta</dt><dd>Sobre el .exe o sobre «Organizar carpeta (arrastra aqui).bat»: la escanea, da el diagnóstico y pregunta paso a paso en una consola.</dd>
|
||||
<dt>Por comando</dt><dd><span class="path">OrganizadorLabstream.exe ayuda</span> lista los comandos: asistente, organizar, escanear, stock, respaldo, duplicados, deshacer, actualizar, instalar y desinstalar.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>Lo que nunca hace</h3>
|
||||
<dl>
|
||||
<dt>Borrar archivos</dt><dd>Lo que sobra va a <span class="path">_Para borrar</span>, dentro de la misma carpeta del cliente, y lo repetido a <span class="path">Duplicados</span>.</dd>
|
||||
<dt>Pisar o sacar de su carpeta</dt><dd>No sobrescribe nada y no mueve nada fuera de la carpeta del cliente.</dd>
|
||||
<dt>Salir a la red</dt><dd>Todo ocurre en este equipo. Solo se conecta cuando le pides buscar una versión nueva.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>Dónde guarda lo suyo</h3>
|
||||
<dl>
|
||||
<dt>La carpeta datos</dt><dd>Dentro de la carpeta del programa: el inventario, el historial, los ajustes y lo que ha aprendido. Si cambias de equipo, llévate esa carpeta.</dd>
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ============ AJUSTES ============ -->
|
||||
<section id="t-ajustes">
|
||||
<div class="cab"><h2 class="v">Clientes</h2><div class="der"><input type="text" id="filtroCli" placeholder="buscar cliente…" style="min-width:200px"><button id="btnAddCliente">+ Añadir cliente</button></div></div>
|
||||
@@ -628,7 +736,7 @@ $$('#tabsRev a').forEach(a => a.onclick = () => subRev(a.dataset.s));
|
||||
const cargarVista = seguro(async t => {
|
||||
t = t || vistaActual();
|
||||
const r = cfgRaiz();
|
||||
if (t !== 'carpeta' && t !== 'ajustes' && r) { try { CARPETA = await api('/api/carpeta/estado?raiz=' + encodeURIComponent(raizActual())); pintarIndice(); } catch (e) { console.warn(e); } }
|
||||
if (t !== 'carpeta' && t !== 'ajustes' && t !== 'manual' && r) { try { CARPETA = await api('/api/carpeta/estado?raiz=' + encodeURIComponent(raizActual())); pintarIndice(); } catch (e) { console.warn(e); } }
|
||||
if (t === 'carpeta') await cargarCarpeta();
|
||||
if (t === 'revisar') { await cargarMapa(); await cargarVoc(); if (PLAN) pintarPlan(); if (STOCK.length && STOCK[0].raiz !== raizActual()) { STOCK = []; $('#stockCaja').style.display = 'none'; } if (VACIAS && VACIAS.raiz !== raizActual()) { VACIAS = null; pintarVacias(); } }
|
||||
if (t === 'mapa') await cargarMapaEst();
|
||||
|
||||
Referencia en una nueva incidencia
Block a user