explainer-editor: una toma explicada en un escenario sobre el presentador
El usuario entrega una toma vertical de sí mismo hablando a cámara. Este skill lo coloca en un marco en la parte inferior de un escenario oscuro iluminado como un set, su cabeza sobresaliendo de él, y dibuja lo que explica sobre él, mientras lo dice, con el movimiento y la luz de una edición de After Effects: escenas entre las que viaja una cámara, figuras que vuelan, se elevan y aparecen con desenfoque de movimiento, cada una con su sombra y su brillo, algo nuevo en el escenario cada segundo aproximadamente, un sonido en cada movimiento. Sus palabras corren entre el escenario y ellos, una a la vez. Un par de veces por minuto un flash de cámara los corta a pantalla completa.
El aspecto de un corto está definido: § El lenguaje explicativo (debajo de la tubería). Fue
medido fotograma a fotograma en un corto que el usuario editó para un cliente (108 s, una guía sobre ganchos de texto), luego
revisado en una primera edición (2026-10-05: "no es After Effects en absoluto, no es motion design, hay muy pocas cosas
en pantalla, es aburrido, faltan los whooshes"), luego en la segunda ("mucho mejor; no hay suficientes
sombras pequeñas y brillos detrás de los elementos, el fondo completamente negro no los resalta; aquí hay un
paquete para muchos más sonidos muy ligeros"): cada fila de ambos veredictos ahora es una regla. Comience cada nueva
toma desde ahí (init.sh lo estructura); no lo reabra.
Este skill se ejecuta en el motor del skill short-editor. Su renderizado, mezcla, máscara de persona,
vistas previas, compilación y verificación son los archivos del motor, como se describe en
../short-editor/SKILL.md § Prerrequisitos, § Dónde viven las cosas y
§ 4 a § 6; este archivo dice lo que es diferente. Lo propio de este skill: el diseño (layout.mjs: el
marco del presentador y los respiros a pantalla completa, ejecutado por build.sh y preview.mjs del motor en
lugar de su zoom), el escenario (stage.mjs: la cámara, las escenas, el desenfoque de movimiento, las
figuras, los subtítulos, los sonidos del movimiento), la base (bed.mjs), los fotogramas fijos
(stills.mjs) y las mediciones (measure.mjs). Lea antes del primer corte, cada ejecución:
../../references/pitfalls.md§ Transcripción y subtítulos, § Método de trabajo: las trampas con las que se escribe una edición (sus otras secciones cuando llegue su paso: § Audio antes de un sonido medido a mano, § ffmpeg y § El shell antes de un comando propio; las herramientas del motor siguen el resto)../../references/brand-kit.md, cuando la edición los muestre: los logotipos reales del usuario, capturas de pantalla y números, nunca inventados, y su conjunto de marca una vez enworkspace/brand/(§ Tu marca, configurada una vez)$X/example/: el proyecto de referencia, cada archivo de una edición entregada (stage.theme: "light"para su versión clara);$X/example-2/: el skill ejecutado desde cero en otra toma (dos tomas, una grabación silenciosa, sin respiro), y qué cambió esa ejecución
Lea cuando el paso lo necesite: ../../references/audio-spec.md en los niveles (el estándar de sonoridad, cómo se mide un nivel al ser escuchado). Las figuras del motor: node plugins/video/skills/short-editor/scripts/api.mjs <módulo> [figura], nunca sus fuentes.
No puedo ver el video ni escucharlo. Dónde está la cabeza, dónde comienza una palabra, qué tan fuerte se escucha un whoosh: cada uno es una medición.
verify.mjsse interpone entre "está listo" y un archivo roto;measure.mjsdice si el diseño de sonido se escucha. Nunca los omita.
Todas las rutas a continuación son relativas a la raíz de la carpeta GTM by Pipecorn. $X significa
plugins/video/skills/explainer-editor/scripts (este skill), $E significa
plugins/video/skills/short-editor/scripts (el motor). Ejecute ambos por su ruta absoluta.
Prerrequisitos (prevuelo: verificar antes de cualquier trabajo)
Los del motor: ffmpeg + ffprobe en PATH (brew install ffmpeg) y python3 (Xcode Command
Line Tools) son necesarios y no se pueden instalar desde aquí; deténgase y diga el comando si falta alguno.
Todo lo demás se autoabastece: el bootstrap.mjs del motor (paquetes de node, el venv de voz a texto,
la estantería de música) se ejecuta dentro de init.sh, transcribe.sh y build.sh, y init.sh obtiene
las fuentes: Inter (ExtraBold, Bold, SemiBold, Medium; Licencia de Fuente Abierta SIL, del paquete npm
inter-ui a través de jsDelivr) e Instrument Serif Italic (Google Fonts, OFL) en el proyecto
assets/fonts/. No se instala nada a nivel de sistema. swiftc compila la máscara de persona: sin ella
la cabeza no sobresale del marco (el marco simplemente recorta al presentador) y el escenario se dibuja
en la capa superior; dígalo.
Dónde viven las cosas
Como dice el motor, y solo de esta manera: un directorio de trabajo por edición,
workspace/projects/<slug>/, un slug que ningún otro proyecto tenga; el archivo terminado
workspace/videos/<slug>.mp4; nunca los archivos de otro proyecto, ni siquiera de la misma toma; archivos temporales
en tmp/ del proyecto, nunca en /tmp. Los scripts/ del skill permanecen de solo lectura. Las imágenes
del usuario (capturas de pantalla, logotipos, fotogramas de sus videos) van en assets/ del proyecto.
La tubería
0. Configurar el directorio de trabajo
$X/init.sh workspace/projects/<slug> <source.mp4> workspace/videos/<slug>.mp4 [--theme light]
El andamio del motor (project.json leído del archivo, el paquete SFX en assets/sfx-top5/), luego
plan.mjs y edl.mjs de este skill, las claves del lenguaje explicativo en project.json (style: "explainer", layout: la ruta de $X/layout.mjs, blurBand 0), sfxMasterDb configurado en la
voz de la toma (su sonoridad + 15.3 dB, + 0.13 dB por dB por debajo de −20.5 LUFS: los sonidos de la casa se escuchan
como en los skills base, sea cual sea el nivel de la toma), las fuentes, un maestro de 1080x1920 para una
toma de retrato más pequeña (conservado en una segunda ejecución), y el tema (stage.theme: dark, la referencia, o
light; --theme light lo configura; un proyecto ya configurado conserva el suyo). Ejecute cada comando posterior desde
ese directorio.
0.2. Preguntar primero, en UNA pregunta
El tema (oscuro, la referencia, o claro: el mismo escenario, vidrio blanco, palabras oscuras, sombras más
suaves), la música (la estantería, plugins/video/assets/music/; Convergencia por defecto; diga que
las pistas que no son de Mixkit pueden bloquear la monetización del video), el ritmo (×1 por defecto; una entrega lenta se lee mejor a ×1.1), y las imágenes que el
usuario puede dar: capturas de pantalla de su producto, fotogramas de los videos de los que habla, su logotipo,
los números reales. Lo que el usuario no proporciona se dibuja con sus palabras y los pictogramas de la casa,
nunca con pantallas o números inventados. Ejecute desde la página GTM by Pipecorn, el resumen del
primer mensaje lo responde (el tema a partir de sus notas: "light" allí significa el tema claro):
decida según las reglas a continuación y no pregunte de nuevo.
El genérico de Pipecorn: un BONO de cada estilo, preguntado SIEMPRE, nunca activo por defecto
(plugins/video/references/pipecorn-generic.md): unos 6 s al final, Pipecorn, luego sus
valores reemplazándose entre sí en una ranura, luego Pipecorn nuevamente, sin música. No · Sí, con qué
valores (1 a 4; node $E/generic.mjs --list; por defecto cobertura telefónica, tasa de conexión,
tubería).
Tu voz mejorada: un BONO, preguntado SIEMPRE, nunca activo por defecto
(plugins/video/references/voice-clean.md): el aislador de voz de ElevenLabs elimina el eco de la habitación y el ruido
de la toma. No · Sí, mejora mi voz. Necesita el conector de ElevenLabs: sin una clave, diga
en una línea que existe (Configuración › Conectores › Agregar clave) y continúe. En un sí, antes del paso 1:
node plugins/video/motion/voice.mjs clean <source>, luego en project.json › source es <…>-voice.<ext>
(la misma duración, la imagen intacta).
1. Transcribir, textualmente
$E/transcribe.sh --lang en # el idioma REALMENTE HABLADO; luego project.json "lang"
words.json, sobre el reloj de la toma en bruto. Nunca traducido. Una toma llena de reinicios se ensambla
primero con rough-cut.mjs del motor (short-editor/SKILL.md § 0.7), luego se transcribe de nuevo. Luego node $E/words.mjs (del motor):
words-fixed.json, el inicio de cada palabra movido fuera de un silencio hacia la voz y su final real antes de una pausa,
las dudosas listadas; words.mjs env|end|say para leer una (short-editor/SKILL.md § 1). Nunca un script propio para ello.
2. La máscara y el marco
node $E/matte.mjs # la máscara de persona (necesita swiftc), ~1 min por minuto
node $X/layout.mjs --measure --write # dónde está la cabeza → project.json stage
node $X/layout.mjs --print # el marco, el subtítulo, los respiros
--measure encuentra las tomas del video (sus cortes de origen, como los encuentra verify.mjs) y lee la
cabeza en la máscara en cada una (32 fotogramas por toma): el ancho del marco coloca la cabeza de la toma más larga en
el tamaño de referencia (226 px de ancho; una toma cercana obtiene un marco más estrecho, centrado, para que sus hombros y
pecho entren: 598 px en el ejemplo trabajado, cuya cabeza ocupa el 38 % del ancho de la toma, 782 en la
segunda toma; --keep-frame mantiene la referencia de 942 y advierte que el marco mostrará principalmente la
cara); en cada toma el borde superior del marco pasa 88 px por debajo de la parte superior habitual de la cabeza (la referencia), por lo que
la cabeza sobresale de él; el subtítulo sube tanto como la cabeza suele subir (máximo 90
px) y permanece 20 px por encima de ella; la pantalla completa hace que la cabeza tenga el 45 % del ancho. Una toma de varios cortes obtiene
stage.shots (el recorte, subtítulo y encuadre completo de cada toma; la cámara cambia en el
corte, el marco permanece). Compruébelo en una vista previa (§ 5). En este estilo, un corte de origen ocurre dentro del
marco del presentador, una pequeña parte de la imagen: verify.mjs puede reportarlo "bajo una placa de fotograma completo"
(la segunda toma); verifique que aterrice en su marco por las diferencias del propio marco, no a simple vista.
3. Leer la transcripción, escribir el storyboard
Este es el paso de juicio, y es todo el trabajo. Lea la transcripción de principio a fin y escriba el storyboard como una lista antes de cualquier código: las escenas, y en cada una, qué aparece en qué palabra.
-
Escenas, unidas por movimientos de cámara. Una escena es una idea (la promesa, el producto, un proceso, los pasos, la lista, una comparación): de 4 a 8 segundos, luego la cámara se mueve a la siguiente. El movimiento predeterminado es el barrido (un paneo a la derecha: la escena antigua sale a la izquierda en un desenfoque, un destello cruza, la nueva llega); una elevación cuando la siguiente idea profundiza (la escena antigua sale hacia arriba); un empuje a través de la escena antigua cuando la nueva la responde (un "por qué", una revelación); un corte solo detrás de un respiro. Nunca dos iguales seguidas si se puede evitar.
-
Una escena llega compuesta. Lo que se coloca en el tiempo de la propia escena viaja CON la cámara (ya está allí cuando termina el movimiento: la referencia nunca muestra un escenario vacío después de un movimiento); lo que llega después entra en su palabra. Cuando las cosas de la escena se nombran una tras otra, colóquelas todas en el tiempo de la escena, en la oscuridad o fuera de foco (
dim: 0.6,blur: 10), e ilumine cada una en su palabra (.blurTo(on(i), 0).lit(on(i))y su sonido): el escenario está lleno desde el primer fotograma y aún se mueve en cada palabra (las personas y canales de la segunda toma, 2026-10-05). -
Algo nuevo cada segundo aproximadamente. Cada frase que nombra una cosa, un número, un paso, una afirmación obtiene una figura o un movimiento en su palabra: una figura que entra, una etiqueta revelada, una marca dibujada alrededor de algo, una cosa iluminada, una escena que se mueve. Más de 2 segundos sin nada nuevo en el escenario se lee como aburrido: fue el veredicto en la primera edición (2026-10-05).
-
El título nombra la sección en dos líneas cortas, su palabra clave en serifa (
*Ganchos* de Texto Asesinos), una caja roja en la línea con un conteo o una afirmación (3 Tipos Ganadores De). Cambia con la sección, la anterior se eleva antes de que las nuevas palabras aparezcan. -
Qué figura para qué:
lo que se dice la figura una lista de N cosas, pasos, reglas S.list: barras que vuelan desde la izquierda, etiquetas borrosas hasta que cada una se dice (reveal), la explicada iluminada (focus), su veredicto apareciendo al final (glyph: "check","cross"…);headerconvierte una barra en el encabezado de la secciónun nombre, un término, una definición S.pill(un pictograma en ella:glyph),S.arrowdesde lo que nombra,S.ping(ring: true) alrededor de la cosa,S.mark(un círculo, un marco, un subrayado) dibujado en la palabra que lo enfatizauna cosa hecha de partes, una causa y sus efectos, una cadena S.tree(hijos que caen, cada uno conectado con una chispa),S.wiresentre dos cualesquierauna combinación, una comparación S.equation(+,=), un signoVSconS.shakey el falloun producto, una herramienta, una plataforma el logotipo del usuario ( S.icon, su brillo,ringpara hacer sonar un teléfono), su captura de pantalla enS.cardoS.phone,S.promptescrito cuando se usaejemplos, videos, una serie S.cardsde sus imágenes, o fotogramas de la propia toma (stills.mjs) con tarjetasplayeruna búsqueda, muchas fuentes, una multitud una cuadrícula de S.cardsconglyphs, iluminadas una tras otra (un escaneo)un número S.countque sube hasta él, o palabras de colores ({g:22 Días}verde,{r:Algunas Semanas}rojo)bueno / malo, sí / no S.glyph(checken un mosaico verde,crossen uno rojo), el veredicto de una barrauna llamada a la acción un título ( Comenta "X",Para Obtener El *Skill*),S.filepara lo que envían -
Los respiros (
FULL): un corte duro al presentador a pantalla completa (el flash de cámara al entrar, un whoosh al salir), nada dibujado excepto los subtítulos. En una confesión, un remate, una opinión fuerte; de 2 a 6 s; nunca en los primeros 15 s. Una toma que no es la cabeza parlante (b-roll, un plano general) va a pantalla completa completa:[from, to, { zoom: 1 }]. La escena después de un respiro se abre detrás de él (S.scene(<fin del respiro> - 0.45, "push")), por lo que está allí cuando el respiro termina. -
Solo nombres y números reales (brand-kit.md): una figura que necesitaría una pantalla o un número que el usuario no proporcionó se dibuja con sus palabras y los pictogramas de la casa, o se elimina.
-
Los subtítulos son textuales:
fi…