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:
Labstream
2026-10-14 06:11:34 -05:00
padre 91618474a0
commit 93b8f4843d
Se han modificado 6 ficheros con 131 adiciones y 67 borrados

Ver fichero

@@ -122,8 +122,12 @@ FIRMAS = [
("SONY", r"^c\d{4}(m01)?\.(mp4|mov|xml)$", "Sony"),
("OSMO", r"^dji_\d{14}_\d{4}_d\.(mp4|mov|lrf)$", "DJI Osmo Pocket"),
("DJI", r"^dji_\d{4}\.(mp4|mov|jpg|dng|lrf|srt)$", "DJI dron / Osmo"),
("DJI_MIC", r"^dji_\d{2}_\d{8}_\d{6}\.wav$", "DJI Mic"),
("TASCAM", r"^tascam_\d{4}\.wav$", "Tascam"),
# las grabadoras de audio: el DJI Mic nombra «DJI_01_20251113_143000.WAV» (01 o 02 es el transmisor;
# los cortes de más de 4 GB llevan _1, _2…), la Tascam «TASCAM_0389.wav» y las Zoom «ZOOM0012.WAV»
# (la H6, con pista: «ZOOM0012_Tr1.WAV»). Cada una va a su propia carpeta del día de rodaje.
("DJI_MIC", r"^dji_(mic_?)?\d{2}_\d{8}_\d{6}(_\d+)?\.(wav|mp3)$", "DJI Mic"),
("TASCAM", r"^tascam_\d{4}(_\d+)?\.(wav|mp3)$", "Tascam"),
("ZOOM", r"^zoom\d{4}(_tr\d+|_lr|_\d+)?\.(wav|mp3)$", "Zoom (grabadora)"),
("ATOMOS", r"^ninjav_", "Atomos Ninja V"),
("CELULAR", r"^img_\d{4}( \(\d+\))?( \d)?(_[a-z0-9]+)?\.(mov|mp4|heic|jpg|jpeg|png)$", "iPhone"),
("CELULAR", r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.(mov|heic|jpg|jpeg|mp4|png)$", "iPhone (AirDrop)"),
@@ -142,7 +146,7 @@ FIRMAS_RE = [(k, re.compile(p, re.I), d) for k, p, d in FIRMAS]
FUENTE_CARPETA = { # nombre de subcarpeta al separar una sesión de grabación por fuente
"URSA_BRAW": "URSA_BRAW", "BM_PROXY": "BLACKMAGIC_MP4", "SONY": "SONY", "OSMO": "OSMO",
"DJI": "DJI", "DJI_MIC": "AUDIO", "TASCAM": "AUDIO", "ATOMOS": "ATOMOS",
"DJI": "DJI", "DJI_MIC": "DJI_MIC", "TASCAM": "TASCAM", "ZOOM": "ZOOM", "ATOMOS": "ATOMOS",
"CELULAR": "CELULAR", "WHATSAPP": "CELULAR", "PANASONIC": "FOTOS", "SONY_FOTO": "FOTOS",
}
@@ -292,7 +296,7 @@ def rol_archivo(nombre: str, ext: str, firma: str | None) -> str:
return "celular_video"
if firma in ("CELULAR", "WHATSAPP") and e in EXT["imagen"]:
return "celular_foto"
if firma in ("DJI_MIC", "TASCAM"):
if firma in ("DJI_MIC", "TASCAM", "ZOOM"):
return "audio_grabado"
if firma in ("PANASONIC", "SONY_FOTO") or e in EXT["foto_raw"]:
return "foto_camara"
@@ -571,7 +575,7 @@ def cubeta_carpeta(nombre: str, diccionario: dict):
# palabras que solo dicen "de qué cámara": no aportan etiqueta a una sesión de grabación
FUENTE_PALABRAS = {"grabacion", "grabaciones", "grabado", "grabados", "ursa", "sony", "osmo", "dji", "blackmagic",
"braw", "tascam", "audio", "otro", "otros", "a", "c", "camara", "material", "video", "videos",
"braw", "tascam", "zoom", "mic", "audio", "otro", "otros", "a", "c", "camara", "material", "video", "videos",
"mp4", "mov", "de", "la", "el", "pocket", "drone", "dron", "mic", "celular",
"fotos", "foto", "atomos", "tarjeta", "tarjetas", "card", "sd"}