Communitygithub.com

SaviourV2/narración-visual

Diseña y construye la capa visual de un vídeo extenso con una sola persona hablando como un mundo persistente por el que se mueve la cámara, en lugar de una secuencia de gráficos separados. Se utiliza cuando se te pide editar un vídeo, añadir gráficos en movimiento, diseñar los elementos visuales para un guion, planificar una edición o corregir una edición considerada confusa, con mucho texto, difícil de seguir o "claramente hecha por una IA". Abarca el mundo persistente, la gramática de la cámara, la regla del foco, los bucles abiertos espaciales, la disciplina de ornamentos y fichas, la sincronización con la transcripción y las compuertas de verificación.

¿Qué es narración-visual?

Esta habilidad para agentes de IA está diseñada para transformar la edición de vídeos extensos con una sola persona hablando, evitando el enfoque tradicional de "nueva escena = nuevo gráfico" que fatiga al espectador. En su lugar, propone construir un **mundo visual persistente** y coherente que nunca se reinicia, por el que la cámara se desplaza suavemente. El método se basa en cuatro principios fundamentales: un mundo único que perdura, una gramática de cámara que guía al espectador (con movimientos en tres altitudes: mundo, región y detalle), la regla del foco (un solo elemento activo a la vez) y bucles abiertos espaciales que se plantean y cierran visualmente. También impone una disciplina estricta en el diseño: solo se dibuja lo que se menciona, un solo elemento narrativo principal por sección, un conjunto global de fichas de diseño (grosores, tamaños de texto, colores) para garantizar coherencia, y reglas precisas para la sincronización con la transcripción. La habilidad es aplicable a cualquier vídeo con guion, como noticias, tutoriales, análisis o comparativas, y es especialmente útil cuando una edición se considera confusa, sobrecargada de texto o "hecha por una IA". El agente que la implemente debe generar código (por ejemplo, scripts en Python) para construir cada sección como un archivo HTML independiente, siguiendo un contrato de construcción que evita defectos comunes como parpadeos, gráficos vacíos o cortes bruscos. Se apoya en documentos de referencia como `docs/STORYTELLING-WORKBOOK.md` y `reference/design-system.md`.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SaviourV2/acevids-editor/tree/HEAD/.claude/skills/video-storytelling

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Narración visual

Cómo construir la capa visual de un vídeo extenso para que el espectador siga orientado en el minuto nueve. Se aplica a cualquier vídeo con una persona hablando y un guion: un análisis de noticias, una inmersión profunda en un solo tema, una comparativa, un tutorial, una lista.

El fallo que esto reemplaza es el pensamiento por escenas. Un nuevo gráfico cada pocos segundos obliga al espectador a reiniciar la comprensión cada pocos segundos, y ningún gráfico individual tiene la culpa, por lo que la crítica llega como el vago "confuso" o "demasiadas cosas" en lugar de un defecto específico.

Para una hoja de ejercicios de práctica neutral, lee docs/STORYTELLING-WORKBOOK.md en la raíz del repositorio. El sistema de diseño reutilizable está en reference/design-system.md de esta habilidad; la geometría de bucle abierto trabajada está en reference/patterns/wall-of-slots/. No se requieren vídeos fuente privados.

Esto no es hyperframes-video-beats. Esa habilidad coloca tarjetas superpuestas sobre una persona hablando. Esta diseña aquello de lo que trata el vídeo.

1 · Los cuatro principios

Un mundo persistente

El vídeo vive en un único espacio y nunca se reinicia. Todo lo que el espectador ya ha visto sigue existiendo donde lo dejó, y el material nuevo se añade a él en lugar de reemplazarlo. Un elemento, una vez dibujado, nunca se redibuja, mueve o vuelve a etiquetar.

Todo lo demás en esta habilidad depende de ello. La cámara no tiene a dónde ir si el espacio sigue cambiando, un foco no significa nada si no hay nada más en pantalla, y un bucle abierto no puede permanecer abierto en un mundo que se reinicia.

El mundo también tiene que merecer la pena quedarse en él, así que decide la gramática espacial antes de construir nada y mantenla durante toda la duración. En la construcción de referencia: de izquierda a derecha es hacia el resultado, arriba es hacia un humano y es lo único cálido en pantalla, abajo es hacia un sistema de registro. Un espectador que aprenda eso en los primeros dos minutos lee el resto del vídeo sin esfuerzo.

Rompe la gramática exactamente una vez, deliberadamente, para dar significado. El único movimiento de derecha a izquierda en diez minutos de la construcción de referencia es un ticket resuelto que retrocede a la cola con las palabras "tasa de reapertura". Aterriza sin una palabra porque la dirección había significado algo durante los tres minutos anteriores.

La cámara es la edición

Cortar a un nuevo gráfico le cuesta al espectador su orientación cada vez. Moverse por un espacio que permanece fijo no les cuesta nada. Un zoom-in entonces se lee como "mira más de cerca la parte de la cosa que ya entiendes", y el zoom-out es donde el trabajo da sus frutos, porque todo lo construido hasta ahora sigue ahí.

Trabaja en tres altitudes y muévete entre las adyacentes:

AltitudMuestraSe utiliza para
Mundotodo el espacioorientar, remates, "aquí es donde estamos"
Regiónel subgrafo en discusiónla mayor parte del tiempo
Detalleun elementoun número, un cambio de estado, una decisión

Saltar de detalle a mundo es desorientador a menos que sea un remate deliberado, en cuyo caso es el mejor movimiento disponible.

Reglas que cuestan una reconstrucción cada una al aprenderlas:

  • Nombra los encuadres como ventanas exactas del mundo, no como factores de escala. Los límites de la ventana deben caer entre etiquetas. Especificar un encuadre como "escala 0.6" corta palabras por la mitad en el borde del fotograma.
  • Reutiliza la misma ventana para el mismo propósito. Si el plano de orientación es una ventana en particular, usa siempre esa ventana exacta. Los encuadres casi idénticos se leen como deriva.
  • Varía la duración con la distancia recorrida, no con un ajuste preestablecido global.
  • Las transiciones de cámara y de pantalla completa se secuencian, nunca se superponen. Concurrentes, guillotinan el contenido. Primero la cámara, luego la transición.
  • Una capa de cubierta se vuelve opaca antes de que la cámara se mueva debajo de ella. Si se invierte, parte del movimiento queda expuesta y se lee como un corte brusco.
  • Ninguna etiqueta a menos de 60px del borde del fotograma. Un elemento puede sobresalir y leerse como "el mundo continúa"; una palabra cortada por la mitad del glifo se lee como un error. Resuélvelo mediante la colocación, no mediante enmascaramiento, ya que un difuminado no puede atrapar una cuchilla que viaja a ~1800 px/s.
  • Dos movimientos secuenciales sobre el mismo sujeto se leen como un fallo. Un reencuadre que termina Y LUEGO una transición que comienza es un zoom, una parada en seco y un segundo movimiento: el cliente lo llama "un fallo y una pausa". Combínalos en UN SOLO gesto: una curva de aceleración simétrica compartida (power2.inOut), aterrizando en el mismo fotograma, de modo que el panel se lea como si empujara el metraje a un lado. Relacionado: las curvas de aceleración con carga frontal (power3/4.out) en un movimiento de metraje visible cargan frontalmente ~90% del recorrido y se arrastran hasta detenerse; resérvalas para las entradas de elementos, donde el arrastre se lee como asentamiento. (Costó una revisión marcada por el cliente en la introducción del ejemplo trabajado).

La atención es un foco

Exactamente un elemento al máximo brillo en cualquier momento. Todo lo demás ya dibujado permanece en calma pero legible. No es opcional. Esta es la regla que permite que un mundo se acumule hasta una docena de elementos sin sentirse nunca recargado, y es lo que hace que el zoom-out sea legible en lugar de abrumador.

La jerarquía proviene de la PROPORCIÓN entre activo y en calma, nunca de oscurecerlo todo. El primer prototipo de la construcción de referencia tenía un píxel más brillante de 101/255 y era ilegible a 960x540; la solución fue tinta más brillante, no más atenuación.

EstadoLuminancia objetivo (Y, 16-235)Opacidad en la referencia
Trazo activo + etiqueta200-2351.0
Contexto, dibujado y aún relevante120-1500.56
Gastado, ya cumplió su función85-1050.33
Cualquier etiqueta, cualquier estadonunca por debajo de 90

La implementación es una función, llamada en cada latido de la narración con los ids que se están mencionando (build_s01.py, lit()):

def lit(t, active, warm=(), dur=0.5, floor=FLOOR):
    active = list(active) + [g + "-l" for g in active if g + "-l" in order]
    for gid in order:
        if gid not in opac:      # nunca dibujado: nada que iluminar
            continue
        tgt = 1.0 if gid in active else (WARM if gid in warm else floor)
        if gid not in active:
            tgt = min(tgt, MUTED.get(gid, 1.0))
        ...

Tres detalles en eso son fundamentales:

  • Una etiqueta siempre hereda el estado de su elemento (la fusión del sufijo -l). Un elemento iluminado con una etiqueta ilegible debajo es exactamente el defecto que se está corrigiendo.
  • Un accesorio que ha terminado se retira a opacidad 0, a través de un límite MUTED, no a 0.3. Silenciar a 0.3 deja confeti inexplicable en pantalla durante el resto de la sección. Regla del generador: emite mute() antes de cualquier lit() que comience más tarde, o el silencio se sobrescribe cuando su interpolación se completa.
  • Los eventos de opacidad deben emitirse en orden temporal o el rastreador ve un estado obsoleto y calcula el objetivo incorrecto. Mantén un guardia seq() que genere una excepción en emisiones fuera de orden.
  • Una autoridad de opacidad por elemento por ventana. Dos interpolaciones simultáneamente activas que conducen la opacidad del mismo elemento a valores diferentes se renderizan suavemente en una sección independiente pero estroboscópicas a ~10Hz en el máster ensamblado, donde la interpolación ganadora alterna por fotograma. La construcción de referencia envió este defecto en cada muelle. Cuando un barrido como lit() se superpone a un aclarado o silencio explícito, la interpolación que comienza más tarde es el único controlador y el barrido omite esos ids (lit(..., skip=(...))). Verifícalo: escanea los renders ensamblados en busca de picos de luminancia de ida y vuelta de un fotograma en cada ventana de transición (qa/v4/flicker/qa-flicker.mjs en la construcción de referencia).

Los bucles abiertos son espaciales

Nunca digas "volveremos a esto". Deja algo visiblemente incompleto en el mundo y vuelve a ello. Una promesa que el espectador puede ver es una promesa que puede sentir pendiente.

El mecanismo es idéntico sea cual sea la forma:

  1. Plántalo en el gancho, en el espacio, en la línea que hace la promesa.
  2. Vuelve a mostrarlo en cada límite. Cualquier traspaso de sección es un límite. La reexposición cuesta unos dos segundos y es el mecanismo de retención; saltárselo es cómo un remate acaba no dando resultado.
  3. Avanzalo visiblemente. El espectador debe ver la incompletitud reducirse.
  4. Cierra en la imagen con la que abriste.

Elige la forma del guion:

Forma del guionEl mundoLo que está incompleto
N elementos paralelosN ranuras en un ejeranuras vacías (ver reference/patterns/wall-of-slots/)
Un proceso, profundotodo el proceso, trazadoun enlace roto o faltante
Niveles o escalonesuna pila que se construye hacia arribala parte superior de la pila es un fantasma
Comparativados columnas en un eje compartidouna columna vacía, o una tarjeta de puntuación sin rellenar
Noticia o anunciouna línea de tiempo, o un mapa del paisajeel lado derecho, el futuro, está en blanco
Tutorial o construcción guiadala arquitectura terminada, fantasmacada nodo aún no construido

Entregar un elemento a su ranura es un movimiento de cámara en vivo, ~1.4s, nunca un corte a una imagen prefabricada del estado lleno. El espectador observa la cosa que acaba de aprender convertirse en la ficha. Si el vídeo tiene un número o contador, hazlo girar dentro de ese mismo movimiento, como un odómetro, con la misma duración y curva de aceleración para ambos dígitos o se fusionan en una banda a mitad del giro.

El contador necesita un nombre, no solo un número. Un número en una esquina le dice al espectador dónde está en la secuencia pero no qué es el elemento actual ; nueve minutos después, "03" no transmite nada. Empareja el número con una etiqueta de 1-2 palabras que nombre elemento actual (SOPORTE, VOZ IA), en la misma química de placa, moviéndose como una sola fijación rígida con el número, intercambiando dentro del mismo giro del odómetro. La revisión del cliente de la construcción de referencia pidió exactamente esto: los visuales eran buenos y el espectador aún perdía el rastro de qué caso de uso estaba en pantalla.

2 · Disciplina

Si no recibe una palabra, no se dibuja

Cada forma es un elemento etiquetado, un conector entre elementos etiquetados, el sujeto viajero o el fondo ambiental. Nada más.

Esto surgió de una revisión de prueba silenciada que obtuvo una puntuación de comprensión de 7/10 y nombró la causa: el diagrama estaba limpio, las decoraciones no. Una docena de formas sin etiquetar dibujadas con el mismo peso y paleta que las significativas, por lo que un espectador novato no puede distinguir la señal de la textura y dedica atención real a decodificar cosas que nunca pretendieron ser decodificadas. Eso es "demasiadas cosas" reubicado de palabras a formas.

Presupuesto: ~20 palabras en pantalla por sección. Sin oraciones. Las etiquetas son de 1-2 palabras, debajo de su elemento. La sección de referencia 1 tiene 21 palabras en 84 segundos.

Corolario: un visual contra-ejemplo nunca se superpone a la recomendación. Lleva el mundo a casi negro primero, o coloca el contraejemplo donde no esté el diagrama bueno.

Dale al espectador una cosa que seguir

Lleva la historia en un solo sujeto viajero cuyo estado cambia visiblemente: un chip con filas de datos y una barra de puntuación, un documento, una solicitud. Las filas se llenan, una barra se mueve, un borde cambia de color. Un espectador debe poder seguir una sección completa observando ese único objeto, y nunca debe teletransportarse; se mueve a lo largo de conectores dibujados a una velocidad constante.

Un conjunto global de fichas

Detalle completo en reference/design-system.md.

FichaValores
Trazo1.5 / 2.5 / 4 / 7, y nada más
Tipo22 / 30 / 42 / 60 / 84
Radio10 / 22 / 40, siempre superelipse(2)

Cinco colores, cinco significados fijos, cero decoración. Cálido significa que un humano está involucrado y nada más es nunca cálido. Nunca blanco puro para el texto; forma halos en fondo oscuro.

El fallo que esto previene, de la revisión técnica de la primera construcción: "cada decisión se tomó local y correctamente; ninguna decisión se tomó globalmente." 18 pesos de trazo y 9 tamaños de texto, la mayoría de ellos con 0.2 de diferencia, individualmente invisibles y colectivamente fatales. El ojo recibe ruido en lugar de jerarquía. Verifícalo con un linter de fichas que falle en la construcción.

Movimiento

Entradas con cubic-bezier(0.16,1,0.3,1), salidas más rápidas que las entradas, duración variable según la masa para que un nodo de 290px y una etiqueta de 40px no desaceleren de manera idéntica, y back.out exactamente una vez por sección, en el latido que lo merece.

Nunca transiciones cruzadas (cross-fade). Las capas a sangre entran y salen mediante recorte (clip) sobre un fondo ya opaco. En cualquier instante, un píxel es o gráfico o metraje.

3 · Contrato de construcción

  • Un generador por sección. scripts/build_<id>.py escribe solo compositions/<id>.html. Edita el generador, nunca el HTML generado. Las raíces de sección index-*.html se mantienen a mano, por lo que los cambios de encuadre van allí.
  • Los módulos compartidos se mantienen compartidos. Cualquier cosa que defina geometría compartida es importada por cada sección. Si las secciones son construidas por agentes paralelos, prohíbeles tocar los módulos compartidos; geometría divergente rompe silenciosamente cada traspaso.
  • Espacio de nombres para las definiciones SVG antes del ensamblaje. Cada sección define sus propios gEdge, shadow, edgeFade. En un DOM ensamblado, url(#id) se resuelve a la primera coincidencia en orden de documento, por lo que una vez que una composición anterior se desmonta, cada gráfico posterior pinta nada. Coste en la construcción de referencia: 35 segundos de pantalla vacía con todas las compuertas en verde. Solo mirar el render ensamblado lo detectó.
  • Sincroniza todo con los inicios de palabra de una transcripción a nivel de palabra, entrando 0.15-0.25s antes de la palabra ancla. Nunca dividas una sección uniformemente en latidos.
  • Audita los espacios vacíos. Cualquier tramo de más de ~1.5s sin que ocurra nada es una pantalla muerta; haz que el generador los imprima.
  • Deja aire en el corte. El recorte agresivo de pausas produce espacios casi nulos en los límites de las oraciones que el cliente escucha como "tartamudeos" y cortes bruscos. Calibra contra la norma del propio hablante: marca los espacios en los límites de las oraciones que sean ~10 veces más ajustados que su mediana (la del hablante de referencia era de 470 ms; las uniones marcadas estaban en 20-40 ms), y repara insertando 4-8 fotogramas de aire, las palabras nunca se tocan. El aire es una rebanada donante del tono de sala real de la pista con fundidos de 10 ms, nunca anullsrc: el silencio digital contra un piso de -50 dBFS es una caída audible. El vídeo mantiene el fotograma; entre oraciones, una cabeza parlante está casi quieta y 4-8 fotogramas de pausa es invisible. Los cambios de solo inserción desplazan la transcripción de manera determinista, por lo que no se necesita una retranscripción. Los bordes de una inserción deben respetar la envolvente del habla: juntar el tono donante con la cola de una palabra en 1 ms am

…

[truncado para la traducción]

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills relacionados