3.6.0: grabaciones siempre por día y por fuente, grabadoras en su carpeta, y «Organizar carpetas»
Las grabaciones van siempre a su día de rodaje y dentro a una carpeta por fuente; el DJI Mic, la Tascam y las Zoom se reconocen por su nombre y van a DJI_MIC, TASCAM y ZOOM en vez de caer juntas en AUDIO. El plan repasa lo ya ordenado sin carpeta de día o con la grabadora en AUDIO. «Mapa» pasa a «Organizar carpetas»: el árbol salía en fila por una regla CSS del ejemplo de tipo de trabajo; ahora va en vertical a toda la altura y a la derecha, fijos, «Qué va en esta carpeta» y «¿Dónde va a parar este archivo?». Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Este commit está contenido en:
@@ -176,9 +176,14 @@
|
||||
.tipo span{display:block;font-size:12px;color:var(--mut);margin-top:1px}
|
||||
.tipo em{display:block;font-size:11.5px;color:var(--mut);font-style:normal;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
.arbol{margin:6px 0 0;padding:10px 12px;background:var(--panel2);border-radius:8px;font-family:ui-monospace,Consolas,monospace;font-size:11.5px;line-height:1.6}
|
||||
.arbol div{display:flex;gap:10px;align-items:baseline;white-space:pre}
|
||||
.arbol b{font-weight:600}
|
||||
.arbol span{font:12px/1.4 Manrope,system-ui,sans-serif;color:var(--mut);white-space:normal}
|
||||
.arbol .ln{display:flex;gap:10px;align-items:baseline;white-space:pre}
|
||||
.arbol .ln b{font-weight:600}
|
||||
.arbol .ln span{font:12px/1.4 Manrope,system-ui,sans-serif;color:var(--mut);white-space:normal}
|
||||
.mapa2{grid-template-columns:minmax(0,1.3fr) minmax(300px,1fr);align-items:start}
|
||||
.mapa2 .lado{position:sticky;top:10px;display:grid;gap:14px}
|
||||
#mapaArbol{max-height:calc(100vh - 200px);overflow:auto;font-size:12.5px}
|
||||
#mapaArbol .nd{padding:4px 8px}
|
||||
@media(max-width:1000px){.mapa2 .lado{position:static}#mapaArbol{max-height:none}}
|
||||
.arbol{font-family:ui-monospace,Consolas,monospace;font-size:12px;line-height:1.55}
|
||||
.arbol .nd{display:flex;gap:10px;align-items:baseline;padding:3px 7px;border-radius:5px;cursor:pointer}
|
||||
.arbol .nd:hover{background:var(--panel2)}
|
||||
@@ -497,7 +502,7 @@
|
||||
<nav id="nav" aria-label="Vistas">
|
||||
<a data-t="carpeta" class="on" tabindex="0">Carpeta</a>
|
||||
<a data-t="revisar" tabindex="0">Revisar y ordenar</a>
|
||||
<a data-t="mapa" tabindex="0" title="Cómo van a quedar las carpetas y qué va en cada una">Mapa</a>
|
||||
<a data-t="mapa" tabindex="0" title="Cómo van a quedar las carpetas y qué va en cada una">Organizar carpetas</a>
|
||||
<a data-t="convertir" tabindex="0">Convertidor</a>
|
||||
<a data-t="respaldar" tabindex="0">Respaldar</a>
|
||||
<a data-t="historial" tabindex="0">Historial</a>
|
||||
@@ -612,7 +617,7 @@
|
||||
|
||||
<!-- ============ MAPA ============ -->
|
||||
<section id="t-mapa">
|
||||
<div class="cab"><div><h2 class="v">Mapa</h2><div class="sub" id="mapaSub">cómo van a quedar las carpetas y qué va en cada una</div></div></div>
|
||||
<div class="cab"><div><h2 class="v">Organizar carpetas</h2><div class="sub" id="mapaSub">cómo van a quedar las carpetas y qué va en cada una</div></div></div>
|
||||
<p class="ayuda">Este árbol sale de las plantillas de verdad, así que es exactamente lo que la app va a hacer al ordenar. <span class="q">?</span><span class="mas">Las carpetas en cursiva cambian según el material (el año, el mes, el nombre de la pieza, el programa del proyecto). Las cifras son el material que tienes hoy en esta carpeta, repartido por lo que es cada archivo. Toca cualquier carpeta del árbol para ver qué guarda y cambiar dónde va.</span></p>
|
||||
<div class="toolbar">
|
||||
<label>tipo de trabajo <select id="mapaTipo"></select></label>
|
||||
@@ -621,16 +626,18 @@
|
||||
<button class="lnk" id="btnDespintar" style="display:none">Quitar los colores</button>
|
||||
<span id="mapaResumen" class="mut"></span>
|
||||
</div>
|
||||
<div class="box plano">
|
||||
<h3>¿Dónde va a parar este archivo?</h3>
|
||||
<p class="mut" style="font-size:12.5px;margin:0 0 8px">Escribe el nombre de cualquier archivo, exista o no, y te digo qué es y en qué carpeta lo dejaría. Lo decide el mismo clasificador que usa el escaneo.</p>
|
||||
<input type="text" id="mapaArchivo" placeholder="A006_12171629_C001.braw" style="width:100%;max-width:460px">
|
||||
<div class="chips" id="mapaEjemplos"></div>
|
||||
<div id="mapaRespuesta"></div>
|
||||
</div>
|
||||
<div class="row" style="grid-template-columns:1.35fr 1fr">
|
||||
<div class="row mapa2">
|
||||
<div class="box"><h3>Cómo van a quedar las carpetas</h3><div id="mapaArbol" class="arbol mut">cargando…</div></div>
|
||||
<div class="box"><h3>Qué va en esta carpeta</h3><div id="mapaDetalle" class="det mut">Toca una carpeta del árbol para ver qué guarda y cambiar dónde va.</div></div>
|
||||
<div class="lado">
|
||||
<div class="box"><h3>Qué va en esta carpeta</h3><div id="mapaDetalle" class="det mut">Toca una carpeta del árbol para ver qué guarda y cambiar dónde va.</div></div>
|
||||
<div class="box plano">
|
||||
<h3>¿Dónde va a parar este archivo?</h3>
|
||||
<p class="mut" style="font-size:12.5px;margin:0 0 8px">Escribe el nombre de cualquier archivo, exista o no, y te digo qué es, de qué cámara o grabadora salió y en qué carpeta lo dejaría. Lo decide el mismo clasificador que usa el escaneo.</p>
|
||||
<input type="text" id="mapaArchivo" placeholder="A006_12171629_C001.braw" style="width:100%">
|
||||
<div class="chips" id="mapaEjemplos"></div>
|
||||
<div id="mapaRespuesta"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box" id="mapaSinSitio" style="display:none"><h3>Sin carpeta asignada</h3><div class="mut" style="font-size:12.5px;margin-bottom:6px">Este material no tiene dónde ir con este tipo de trabajo: se queda donde está. Añádele una carpeta y la app empezará a ordenarlo.</div><div id="mapaSinSitioLista"></div></div>
|
||||
</section>
|
||||
@@ -733,14 +740,15 @@
|
||||
<dt>Qué va a pasar</dt><dd>El plan: qué haría la app en la carpeta, sin mover nada todavía. Lo explica con una carpeta de ejemplo, que se ve pasar de donde está a donde va, y debajo lista lo demás. Son tres pasos (apartar basura y proxies, ordenar por año y mes, ordenar lo demás) y un solo clic aplica todo lo marcado, en orden: no hay que ir uno por uno. Lo que no va solo queda aparte y contado: los cambios cosméticos (solo el nombre, «01 - Celular» → «01- Celular») y los dudosos. Mientras aplica, una barra dice por dónde va, archivo a archivo, y al acabar, qué quedó sin hacer. <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 cambio va como seguro, probable o dudoso, y solo los dos primeros se marcan solos.</i></dd>
|
||||
<dt>Grabaciones</dt><dd>Una carpeta de grabación se reparte por mes, día y cámara, y conserva el nombre de cada sesión («Tomas consultorio»). Un clip ya convertido sigue contando como de su cámara. <i>Cómo: solo se reparte lo que de verdad es una tarjeta volcada; si dentro hay una pieza montada (exportados, portada, proyecto), no se desarma. El año de un clip de Blackmagic, que el nombre no trae, sale del resto de clips de la misma tarjeta y día, y un rodaje que pasa de medianoche cuenta como uno solo.</i></dd>
|
||||
<dt>Cajones</dt><dd>Una carpeta que guarda meses o años dentro («Orden», «Proyectos\Mayo») no se mueve entera: se abre, y cada cosa va a su mes. Si una pieza ya existe en ese mes, se junta con ella en vez de quedar una carpeta gemela al lado.</dd>
|
||||
<dt>Repaso de lo ya ordenado</dt><dd>El plan también mira lo que ya está en <span class="path">00_Grabacion</span>: si un clip lleva en el nombre una fecha que no es la del mes donde está, propone llevarlo al suyo. <i>Cómo: solo con fechas escritas por la cámara; la fecha de modificación no cuenta, salvo para lo que se grabó ese mismo día.</i></dd>
|
||||
<dt>Grabaciones</dt><dd>Lo que sale de las cámaras y las grabadoras va siempre a su mes, dentro a su día de rodaje («13- Jueves») y dentro a una carpeta por fuente: <span class="path">URSA_BRAW</span>, <span class="path">BLACKMAGIC_MP4</span>, <span class="path">SONY</span>, <span class="path">OSMO</span>, <span class="path">DJI</span>, <span class="path">DJI_MIC</span>, <span class="path">TASCAM</span>, <span class="path">ZOOM</span>, <span class="path">CELULAR</span>, <span class="path">FOTOS</span>. <i>Cómo: la fuente se reconoce por el nombre que pone cada aparato (el consecutivo de la cámara, «DJI_01_…» del DJI Mic, «TASCAM_0389»); en «Organizar carpetas › ¿Dónde va a parar este archivo?» se ve de cuál viene cualquier nombre.</i></dd>
|
||||
<dt>Repaso de lo ya ordenado</dt><dd>El plan también mira lo que ya está en <span class="path">00_Grabacion</span>: si un clip lleva en el nombre una fecha que no es la del mes donde está, propone llevarlo al suyo; y lo que está sin carpeta de día, o con la grabadora en «AUDIO», lo lleva a su día y a su carpeta. <i>Cómo: solo con fechas de fiar (escritas por la cámara, o la fecha de un original de cámara); lo demás se queda donde está.</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>. También junta el mismo clip guardado con dos calidades: se queda el de más imagen. <i>Cómo: mismo nombre y mismo peso, y antes de apartar compara el contenido (principio, centro y final); si difiere, no lo toca. Dos clips de cámara que se llaman igual y pesan distinto se leen: si duran lo mismo son el mismo clip, y si no, son dos clips distintos y se dejan. Dos exportados con el mismo nombre no se tocan: son dos entregas de la pieza.</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>
|
||||
<h3>Organizar carpetas</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>
|
||||
@@ -778,7 +786,7 @@
|
||||
<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>
|
||||
<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 «Organizar carpetas».</dd>
|
||||
</dl>
|
||||
|
||||
<h3>La ventana</h3>
|
||||
@@ -2216,9 +2224,9 @@ const probarArchivo = seguro(async () => {
|
||||
const fecha = d.por_fecha === 'mtime'
|
||||
? 'el nombre no trae fecha, así que el mes lo saca de la fecha del archivo'
|
||||
: `el nombre dice que es del ${d.fecha}`;
|
||||
const dia = d.dia ? ` Y si ese mes hubo más de un rodaje, dentro de «${d.dia}».` : '';
|
||||
const dia = d.dia ? ` «${d.dia}» es el día del rodaje.` : '';
|
||||
caja.innerHTML = `<div class="resp"><i class="pt" style="background:${d.color}"></i><div>` +
|
||||
`<div><b>${esc(d.nombre)}</b> — ${esc(d.que)}${d.camara ? ` · cámara ${esc(d.camara)}` : ''}${d.app ? ` · proyecto de ${esc(d.app)}` : ''}</div>` +
|
||||
`<div><b>${esc(d.nombre)}</b> — ${esc(d.que)}${d.camara ? ` · fuente ${esc(d.camara)}` : ''}${d.app ? ` · proyecto de ${esc(d.app)}` : ''}</div>` +
|
||||
`<div class="d" style="margin:4px 0">${esc(raizN + SEP + d.destino)}${SEP}</div>` +
|
||||
`<div class="mut" style="font-size:12px">${esc(fecha)}.${esc(dia)} Si el archivo está dentro de una carpeta que la app reconoce, esa carpeta puede mandar sobre esto.</div>` +
|
||||
'</div></div>';
|
||||
@@ -2304,12 +2312,12 @@ function ejemploTipo(ruta, tipo){
|
||||
for (const seg of dest.split('\\')) { if (!n.hijos.has(seg)) n.hijos.set(seg, {hijos: new Map(), que: ''}); n = n.hijos.get(seg); }
|
||||
n.que = n.que || que;
|
||||
}
|
||||
const lineas = [`<div><b>${esc((ruta || '').replace(/[\\/]+$/, ''))}\\</b></div>`];
|
||||
const lineas = [`<div class="ln"><b>${esc((ruta || '').replace(/[\\/]+$/, ''))}\\</b></div>`];
|
||||
const pinta = (nodo, sangria) => {
|
||||
const hs = [...nodo.hijos.entries()];
|
||||
hs.forEach(([nombre, h], i) => {
|
||||
const ultimo = i === hs.length - 1;
|
||||
lineas.push(`<div><b>${esc(sangria)}${ultimo ? '└─ ' : '├─ '}${esc(nombre)}\\</b>${h.que ? `<span>${esc(h.que)}</span>` : ''}</div>`);
|
||||
lineas.push(`<div class="ln"><b>${esc(sangria)}${ultimo ? '└─ ' : '├─ '}${esc(nombre)}\\</b>${h.que ? `<span>${esc(h.que)}</span>` : ''}</div>`);
|
||||
pinta(h, sangria + (ultimo ? ' ' : '│ '));
|
||||
});
|
||||
};
|
||||
|
||||
Referencia en una nueva incidencia
Block a user