# Guardar una edición como estilo reutilizable

Las correcciones de captura anidada, subida de recursos, `--dry-run`, carpetas en componentes y `captions prepare --style` requieren **0.42.1**.

Estos comandos requieren **CLI y API 0.42.0 o posterior**. Comprueba la versión disponible en [Versiones y disponibilidad](https://editorbrain.com/docs/versiones) y `editorbrain help` antes de usarlos.

Un estilo guarda el método, los recursos y el código que podrás adaptar a otros videos. Guardarlo no modifica tu marca ni cambia automáticamente el estilo de un proyecto.

## Partir de un video que ya editaste

```sh
editorbrain styles create mi-estilo --from-project mi-video
editorbrain styles check mi-estilo
```

El CLI recorre `videos/<id>/` y `.editorbrain-local/<id>/`, incluidas las carpetas de producción anidadas. Recoge `direction.md` y `review.md` con su ruta de origen, archivos y hashes, recibos reconocidos y beats con tiempos declarados. Los recibos se identifican por su contenido (modelo/proveedor y campos de generación, incluidas colecciones `jobs` o `tasks`), independientemente del nombre del archivo. No inventa intervalos ni convierte un render en una aprobación humana. Si omites `mi-estilo`, el ID será `mi-video-style`.

Revisa los recursos candidatos y completa qué conservar, qué adaptar y cuándo omitir cada técnica. Los prompts recuperados quedan como ejemplos del piloto; conviértelos en una receta con variables antes de aplicarlos a otra marca. Los archivos no reconocidos, ausentes o demasiado grandes aparecen como advertencias.

La captura admite hasta 2.000 entradas y ocho niveles de carpetas. Prioriza la escena elegida y sus dependencias, medios generados, SFX y logos; deduplica por SHA-256 antes del límite de 200 recursos portables. Excluye vendor, QA, frames y copias de escenas salvo dependencias explícitas. El presupuesto portable es de 90 MiB por archivo y 512 MiB en total. Los renders finales se registran por hash como evidencia local, con un presupuesto independiente de 2 GiB y avisos explícitos; no se suben. Si hay varias escenas revisadas, elige `--scene .editorbrain-local/<proyecto>/build/styles/<estilo>/scene.html`. Los prompts solo se capturan cuando su salida está vinculada a medios usados por esa escena; los ambiguos o sin vínculo se omiten. No ejecuta código ni llama a proveedores. Estas mejoras de selección y karaoke requieren CLI 0.43.0 o posterior; no forman parte del tarball inmutable 0.42.1.

## Llevar los archivos a otra computadora

```sh
editorbrain styles push mi-estilo --with-resources --dry-run
editorbrain styles push mi-estilo --with-resources
editorbrain styles pull mi-estilo --dir ./otra-carpeta
```

Los archivos van al almacenamiento privado del workspace y consumen su cuota. El CLI verifica su descarga y SHA-256 antes de guardar los documentos remotos. El manifiesto conserva IDs permanentes; al descargar, los archivos quedan en `production-assets/styles/mi-estilo/`.

Se admiten imágenes, videos, audio, HTML/JS/MJS/JSON y fuentes WOFF/WOFF2/TTF/OTF. Los proyectos nativos de aplicaciones y otros formatos requieren preparación manual. Los archivos de código se sirven como descargas, no como páginas ejecutables.

El push normal de texto avisa si el estilo depende de archivos locales. El push de estilo solo selecciona los documentos de ese estilo; no incluye todos los proyectos de la carpeta. No sobrescribe conflictos. Un guardado de varios documentos puede interrumpirse después de algunas escrituras: consulta los resultados y vuelve a intentar después de reconciliar cambios.

Los miembros restringidos de equipos no modifican estilos compartidos. Solo pueden descargar los recursos de los estilos asociados a sus proyectos editables. Conocer un hash no concede acceso.

## Reutilizar el código de una escena

```sh
editorbrain styles component extract --style mi-estilo --id takeover --scene videos/mi-video/scene.html --bindings bindings.json
editorbrain styles component list --style mi-estilo
editorbrain styles component prepare --style mi-estilo --id takeover --parameters siguiente.json --out videos/otro-video/takeover.html
```

`components.json` es el registro privado de componentes del estilo; no modifica la biblioteca pública. Sin parámetros explícitos, la escena queda **capturada**, pendiente de adaptación. No se presenta como un componente reutilizable o probado en otro video.

El agente debe agrupar los valores editables en un objeto dentro de un bloque script. Ejemplo de `bindings.json`:

```json
[
  {"name":"headline","type":"string","literal":"Título del piloto","occurrences":1,"role":"text"},
  {"name":"anchor","type":"number","literal":1.125,"occurrences":1,"role":"timing"}
]
```

Y `siguiente.json`:

```json
{"headline":"La idea de este video","anchor":3.375}
```

Cada literal debe aparecer exactamente las veces declaradas; no se hacen reemplazos ambiguos en atributos HTML. Los parámetros pueden ser string, number o boolean y representar texto, clip, tiempo o composición. Los nombres de parámetros admiten camelCase; los IDs siguen en minúsculas. `role:"directory"` admite una carpeta relativa al workspace, sin enlaces simbólicos ni rutas privadas (hasta 500 entradas y cuatro niveles). Ajusta la ruta a la ubicación de salida, pero no sube automáticamente la carpeta: declara sus archivos en `resources.json`. Los tiempos fraccionarios se conservan. La preparación conserva el original y se niega a reemplazar el archivo de salida.

Las dependencias literales HTML/CSS declaradas se redirigen a los archivos verificados de la computadora actual. Las rutas construidas en JavaScript, imports dinámicos y dependencias externas necesitan revisión explícita. El agente debe revisar el código antes de ejecutarlo.

## Recetas de imagen y subtítulos

```sh
editorbrain media style create mi-estilo --style mi-estilo --file receta.json
editorbrain styles captions create --style mi-estilo --file subtitulos.json
editorbrain styles techniques create --style mi-estilo --file tecnicas.json
```

Estos comandos crean documentos sin reemplazar uno existente. Para ajustar un borrador ya creado, edítalo y ejecuta `styles check`.

| Documento | Datos que guarda |
| --- | --- |
| `media-style.json` | Modelo, referencias ordenadas por ID, prompt con variables, revisión previa y receta opcional de animación |
| `captions.json` | Fuente, peso, tamaño, color, caja activa, posición, zonas prohibidas y ocultación durante cruces |
| `techniques.json` | Función, condiciones, frase ancla, recursos, componente y pasos para verificar cada técnica |
| `components.json` | Código original identificado por hash y parámetros explícitos |

Ejemplo mínimo de receta:

```json
{
  "schemaVersion":1,"id":"mi-estilo","status":"ready",
  "model":"modelo-elegido","referenceOrder":[],
  "promptTemplate":"{personajes} en {escena}, paleta {paleta}",
  "variables":["personajes","escena","paleta"],
  "reviewBeforeAnimation":["Revisar identidad, geometría y legibilidad"],
  "animation":{"model":"modelo-de-video-elegido","promptTemplate":"Animar {escena} conservando la identidad"}
}
```

`referenceOrder` contiene IDs de `resources.json`, en el orden que requiere el proveedor. La receta también puede orientar imágenes para thumbnails y carruseles. Guardarla no genera imágenes, no autoriza gasto y no sustituye la comprobación de una integración.

Ejemplo de subtítulos:

```json
{
  "schemaVersion":1,"id":"mi-estilo","enabled":true,
  "font":{"family":"Arial","weight":600,"size":48,"color":"#FFFFFF"},
  "activeBox":{"color":"#000000","padding":12},
  "position":{"x":0.5,"y":0.8},
  "forbiddenZones":[{"x":0.2,"y":0.1,"width":0.6,"height":0.3}],
  "hideDuringCrossings":true
}
```

Los colores y posiciones del ejemplo no son valores obligatorios para tus videos. Posiciones y zonas usan coordenadas de 0 a 1; tamaños y padding usan píxeles de salida. `font.resourceId` puede enlazar una fuente propia verificada. `tokenBindings` puede mapear `fontFamily`, `color` y `boxColor` a claves de la marca, como `typography.body`; así se aplican sus valores resueltos. Desactivar subtítulos en la marca o el perfil de salida tiene prioridad.

Para preparar una capa de subtítulos reproducible:

```sh
editorbrain styles captions prepare --project otro-video --file cues.json --out captions.html
```

Añade `--style mi-estilo` para previsualizar un preset diferente sin cambiar el estilo guardado del proyecto. Las restricciones de marca y del perfil de salida conservan su prioridad.

Los cues son un array ordenado, sin intervalos superpuestos: `[{"start":0,"end":1.2,"text":"Tu idea","active":true}]`. `crossing:true` marca los cruces donde debe ocultarse el subtítulo. El renderer captura la capa transparente llamando y esperando `window.renderAt(segundos)`. La fuente enlazada se incluye en el HTML; si no enlazas una, debes tenerla instalada.

La capa oculta el texto si toca una zona prohibida o sale del cuadro. No detecta rostros ni transcribe: el agente debe proporcionar las zonas y tiempos reales. No es un render del video completo.

## Comprobar si encaja en otro guion

```sh
editorbrain styles test mi-estilo --project otro-video
```

El resultado propone tramos de texto para frases ancla de `techniques.json`, con el texto encontrado, contexto, archivo, campo JSON si corresponde y línea del guion decodificado. Los offsets usan unidades UTF-16; no son líneas del archivo JSON. Además, identifica coincidencias ambiguas, componentes pendientes y recursos que faltan. También resuelve las restricciones de la marca de destino. No modifica el proyecto, no renderiza y no consume créditos.

Una técnica puede declararse así:

```json
{
  "schemaVersion":1,"id":"mi-estilo",
  "techniques":[{
    "id":"revelar-producto","purpose":"Mostrar el producto al nombrarlo",
    "when":["El guion presenta un producto"],
    "anchor":{"kind":"phrase","text":"este producto"},
    "resourceIds":[],"componentId":"takeover",
    "omitWhen":["La escena no trata de un producto"],
    "verify":["La entrada coincide con la palabra en el audio final"]
  }]
}
```

Las condiciones semánticas las evalúa el agente; el CLI no simula entender cualquier guion. Los rangos de texto no son timestamps. Un resultado candidato tampoco demuestra calidad visual: revisa el siguiente video antes de declarar la transferencia probada.

## API y MCP

`resolve_project` y el contexto de workflow incluyen `styleProduction` para el estilo seleccionado; sus documentos participan en los hashes de contexto. Los agentes MCP usan las herramientas existentes de lectura/escritura con revisión esperada. La captura de archivos, descarga local, preparación de componentes y capas necesita acceso al CLI en la computadora del usuario.

Consulta también [las bibliotecas](https://editorbrain.com/docs/bibliotecas), [preferencias](https://editorbrain.com/docs/preferencias) y [versiones](https://editorbrain.com/docs/versiones).

## Recursos omitidos y karaoke

`push --with-resources` y su modo `--dry-run` agrupan los tipos no soportados en `skippedResources`. Siguen siendo dependencias locales y aparecen en advertencias; no se declara que el estilo esté completo en la nube. Convierte notas en documentos del estilo y herramientas locales en requisitos. SVG se transporta como descarga binaria privada, al igual que el código.

En `captions.json`, `"mode":"karaoke"` mantiene la frase visible y pone `activeBox` solo detrás de la palabra activa. Omite `mode` o usa `"phrase"` para conservar el comportamiento anterior. Proporciona tiempos reales por palabra, sin estimarlos:

```json
[{"start":0,"end":2,"text":"Hola mundo","words":[{"text":"Hola","start":0,"end":0.8},{"text":"mundo","start":1,"end":2}]}]
```

En pausas entre palabras no se resalta ninguna. `crossing` y las zonas prohibidas siguen ocultando la frase completa. Los tiempos deben estar dentro del cue, ordenados y sin solaparse.

Sin proyecto, `styles captions prepare --style mi-estilo --file cues.json --out preview.html` genera una vista del preset a 1080×1920. Informa que no aplica marca ni preferencias de proyecto; para la edición final usa `--project`.

## Encontrar tus estilos y reutilizar una edición

Disponible desde CLI 0.43.0. Consulta la ayuda instalada antes de usar estos comandos.

`editorbrain styles mine --dir ./mi-estudio` lista los estilos guardados en esa
carpeta. `styles list` sigue mostrando la biblioteca publicada. Un estilo de
edición define el tratamiento del video; `media styles` son recetas visuales
para imágenes. Usa `styles create --help` para ver únicamente las opciones de
creación, sin recorrer toda la ayuda.

Puedes preparar otro gancho o CTA con `variants create comenta --project video-id
--file cambios.json`. El archivo admite `hook`, `cta` e `instructions`. La variante
es una especificación local: comparte los medios originales, conserva las
preferencias de la marca y requiere render y revisión propios. No cambia el
proyecto base ni hereda su aprobación. `variants list --project video-id` avisa si
cambió el contexto base desde que la creaste.

## Estilos adaptativos (0.47.1)

Las reglas opcionales distinguen preferencias y requisitos explícitos. Una técnica
puede adaptarse u omitirse para un video dejando una razón por proyecto; eso no
modifica el estilo compartido ni borra un fallo requerido. `styles rules inspect
--project ID` entrega reglas y hashes. `production verify` comprueba el archivo
final con evidencia limitada: OCR local opcional (`--ocr`), muestras con tiempos y
medición de audio. Ausencia de evidencia es desconocido, no aprobado. Una muestra
privada se puede subir para pedir opinión aunque queden observaciones.

`styles captions preview --style ID --demo-text "Una idea clara" --out preview.html`
crea una demostración local, sin transcribir ni consumir créditos. `--video-out
preview.mp4` renderiza explícitamente con navegador y FFmpeg instalados. Para
subtítulos reales aporta tiempos medidos con `--file`; el timing de demo nunca
sustituye la transcripción. `styles captions export --style ID --file words.json
--format ass --out captions.ass` enumera efectos que no puede conservar. SRT no
guarda el diseño. Los módulos fuente son archivos privados, no programas que se
ejecuten al descargarse.
