Communitygithub.com

KaranO-Dev/one-take

Crea un video promocional, de lanzamiento, resumen o detrás de escenas completo de una sola vez: pregunta todo al inicio (escenas, referencias, formatos y relaciones de aspecto, duración y límites de plataforma, repositorios y sitios de origen, idiomas, música, voz y subtítulos, marca), luego storyboard, construye, musicaliza, renderiza cada formato y realiza control de calidad de cada archivo sin más preguntas. Partitura original sintetizada con pistas y efectos de sonido sincronizados con la animación, datos extraídos de git, una fuente reorganizada por relación de aspecto y una pasada de QA sobre volumen, fotogramas negros/congelados/silenciosos, tiempo de pantalla final, tamaño de texto en un teléfono y zonas seguras de la plataforma. Úsalo cuando se desee un video completo en múltiples formatos entregado de principio a fin, en lugar de una sesión de co-creación. Construido sobre HyperFrames.

¿Qué es one-take?

El skill **KaranO-Dev/one-take** está diseñado para orquestar la producción completa de un video promocional, de lanzamiento, resumen o detrás de escenas en una sola interacción. Su objetivo es eliminar los ciclos de ida y vuelta: el usuario proporciona toda la información necesaria (escenas, referencias, formatos, duración, plataformas de destino, fuentes de datos, idiomas, música, voz, subtítulos y marca) en una única ronda de preguntas. A partir de ahí, el skill se encarga de todo el flujo de trabajo: detecta automáticamente los datos del repositorio (como el título, las contribuciones y las estadísticas de Git), captura sitios web como referencia, crea un storyboard detallado con tempo y energía, construye la escena en HTML usando HyperFrames, genera una partitura musical original con pistas y efectos de sonido sincronizados con la animación, y finalmente renderiza el video en todos los formatos solicitados (vertical, horizontal, cuadrado, etc.) con diferentes relaciones de aspecto. Cada archivo final pasa por un riguroso control de calidad que verifica el volumen (LUFS), la ausencia de fotogramas negros o congelados, el tiempo de duración de la tarjeta final, el tamaño mínimo del texto para lectura en teléfonos móviles y el cumplimiento de las zonas seguras de cada plataforma. El skill se ejecuta principalmente en la terminal y está diseñado para ser utilizado con HyperFrames, requiriendo Node.js y ffmpeg. Está pensado para desarrolladores y creadores que necesitan un video pulido y listo para publicar en múltiples formatos sin intervención manual adicional.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add KaranO-Dev/one-take-skill

Preguntar en tu IA favorita

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

Documentación

¿Qué hace one-take?

Pregunta todo una vez. Luego haz toda la película, cada formato, revisada, sin más preguntas.

Este skill orquesta; HyperFrames hace el renderizado. Necesita los skills de HyperFrames (hyperframes, hyperframes-core, hyperframes-animation) y es mejor con hyperframes-registry, hyperframes-keyframes, media-use, figma y humanizer. Si falta hyperframes-core, detente y da la línea de instalación: npx skills add heygen-com/hyperframes.

SKILL_DIR a continuación significa la carpeta de este skill. Los scripts son Node plano (≥ 22) más ffmpeg, sin instalaciones.

El contrato

  1. Una única ronda de ingesta. Detecta primero, luego pregunta una vez (Fase 1). Después de las respuestas, no preguntes nada más. La única excepción es un bloqueo duro que no puedas sortear por defecto, como un archivo que no existe o un sitio que se niega a cargar. Entonces haz esa única pregunta exacta y continúa.
  2. La respuesta de ingesta autoriza los renders. No autoriza publicar, subir, publicar, enviar ni descargar nada que el usuario no haya nombrado. Pide eso por separado, después del informe.
  3. Los hechos se calculan, nunca se escriben. Cada número en pantalla proviene de facts.json o de una fuente que el usuario haya proporcionado. Nunca inventes estadísticas, citas, logotipos o testimonios.
  4. La imagen escribe el sonido. Cada movimiento que deba ser escuchado llama a T.cue() en el momento en que ocurre. La partitura se construye a partir de esas señales, por lo que el sonido y la imagen no pueden desincronizarse.
  5. Hecho significa que ha pasado el QA. Un archivo se entrega cuando qa.mjs lo aprueba, o cuando se escribe un fallo en el informe con el motivo por el que no se pudo corregir en dos pasadas.

Fase 0: detectar (silencioso, antes de preguntar)

node SKILL_DIR/scripts/detect.mjs <rutas de fuentes…> --out /tmp/one-take-detect.json
  • Ejecútalo en el repositorio actual y en cualquier ruta o sitio que el usuario haya mencionado.
  • Devuelve, por fuente: título y eslogan del README, período de git y número de commits, logotipos, archivos de fuentes y familias, tokens de color. También devuelve el toolchain: node, ffmpeg, versión de hyperframes en caché, Chrome, CLI de heygen, y si las claves de la API de música están configuradas.
  • Si take.json ya existe en el proyecto de destino, se trata de una reanudación. Lée, omite la ingesta y continúa desde la primera fase cuya salida falte.

Fase 1: la ingesta (un mensaje, una ronda)

Lee references/intake.md. En un mensaje:

  1. Muestra la hoja de ingesta: cada campo pre-rellenado a partir de la detección o un valor por defecto recomendado, cada uno en una línea. El usuario solo cambia lo que está mal.

  2. Llama a AskUserQuestion una vez con las cuatro decisiones que más cambian el trabajo: formatos (selección múltiple), duración, sonido y voz/subtítulos. El texto de la pregunta les indica que añadan cualquier cambio en la hoja como una nota en cualquier respuesta.

    Si AskUserQuestion no está disponible, pon las mismas cuatro como opciones numeradas al final de la hoja y pide una respuesta.

Luego, sin preguntar de nuevo:

  • Escribe take.json (esquema: references/take-json.md). Los códigos de idioma, los identificadores de formato, el slug y output.name deben coincidir con [a-z0-9][a-z0-9._-]{0,63} (cualquier mayúscula/minúscula, sin ..), o la ejecución se detiene. Deja fuera hyperframes a menos que el usuario lo pida: la versión por defecto está fijada en scripts/lib/platforms.mjs (HF_VERSION, 0.8.223).
  • Escribe un BRIEF.md de HyperFrames con workflow: general-video, flow: automation, storyboard: no. Esto significa que una futura llamada a /hyperframes reanudará este proyecto en lugar de volver a entrevistar.
  • Graba las respuestas en el cuerpo de BRIEF.md: formatos, sonido, subtítulos, límites de plataforma.

Fase 2: fuentes

  • Hechos de Git. Ejecuta node SKILL_DIR/scripts/facts.mjs --repo <ruta> [--repo …] [--since …] --out <proyecto>/facts.json. Recoge commits, período, días activos, racha más larga, día más ocupado, líneas por lenguaje, líneas añadidas y eliminadas, y las palabras principales de los commits, además del asunto del primer y último commit. Los nombres y correos de los autores nunca se registran. Usa solo los hechos que el usuario haya permitido.
  • Sitios. Para una URL que mostrar, ejecuta npx hyperframes capture <url> -o <proyecto>/src/assets/cap. Detente si ok:false o BLOCKED.md: eso es un bloqueador.
  • Referencias. Para cada una, escribe una línea en STORYBOARD.md sobre lo que tomas de ella: ritmo, tipo, color, una transición. Para un enlace de Figma, ejecuta /figma primero.
  • Marca. Copia el logotipo SVG y los archivos de fuentes en src/assets/brand y src/assets/fonts, decláralos en take.json fonts, y extrae los tokens de color en el :root de la plantilla.

Fase 3: dirección y storyboard

Lee references/direction.md antes de escribir nada visual. Escribe STORYBOARD.md:

  • Dirección, un párrafo: la idea única, el movimiento característico, la combinación de tipos, la paleta, la referencia de la que proviene cada elección.
  • Tempo primero. Elige el bpm para que la duración objetivo sea un número entero de compases (4/4). Luego da a cada escena una duración en compases, una energía (0–1, que impulsa el arreglo de la partitura), y cómo entra (in).
  • Tabla de escenas: id, compases, energía, qué hay en pantalla, movimiento, señales, texto.
    • La última escena es la tarjeta final, end: true, con suficientes compases para mantenerla completa durante 3 s o más.
    • Marca las escenas que puedan ir en un corte como optional (1–9, el más alto va primero).
  • Texto va en copy/<idioma>.json, una clave por línea de texto. Ejecútalo con /humanizer si está disponible. Mantén los titulares lo suficientemente cortos como para leerlos dos veces durante el tiempo que están en pantalla.

Fase 4: construir

  • Copia SKILL_DIR/templates/index.html a <proyecto>/src/index.html y reescribe sus escenas a partir del storyboard.
  • Lee references/kit.md (la API T.*) y las reglas no negociables de hyperframes-core. Para movimiento, lee las reglas y los planos de hyperframes-animation. Antes de construir manualmente cualquier efecto con nombre, busca en hyperframes-registry.

Reglas que mantienen honestos a todos los formatos y al QA:

  • Las escenas son <section class="clip scene" data-scene="id"> de nivel superior, nunca anidadas, nunca con style en línea.
  • Tamaño en píxeles de diseño a través de --u (1% del lado corto). El texto legible nunca está por debajo de --t-min (3.4u ≈ 37 px a 1080).
  • Mantén el texto legible dentro de .safe, las bandas de la interfaz de usuario de la plataforma para ese formato.
  • Reorganiza por formato con reglas .f-tall, .f-wide, .f-square, .f-portrait, no escalando un solo diseño.
  • Limpia las palabras de una escena antes de que la transición de la siguiente escena las cubra (T.sink/T.leave cerca de s.end). El texto bajo una revelación falla la verificación de diseño.
  • Cada escena se mueve: T.drift la cámara a través de ella. Nada se queda quieto antes de la tarjeta final.
  • T.endCard(t) en el momento en que la tarjeta final está completa. El último fotograma debe seguir mostrándola: sin fundido a negro durante la pausa.
  • Señala todo lo que deba escucharse (references/sound.md enumera las categorías). La mayoría de los helpers del kit señalan por defecto; pasa cue: false para mantener un momento en silencio.
  • Los números provienen de T.facts o del texto. T.count necesita un número finito y lanza un error sin uno, por lo que un hecho faltante detiene la sonda en lugar de poner un número inventado en pantalla.
  • Termina el script con window.__timelines["main"] = T.done();. T.done() registra la línea de tiempo una vez, después de que se haya añadido cada interpolación, y la plantilla la repite en esa línea. Construye todas las interpolaciones primero, no dentro de una fuente lista u otra devolución de llamada asíncrona: la verificación de HyperFrames rechaza un registro temprano.

Fase 5: pasada de borrador

node SKILL_DIR/scripts/run.mjs <proyecto> --draft

Esto ejecuta, por formato × idioma: construir → sondear (señales, tamaños de texto, marca de tarjeta final desde Chrome sin cabeza) → partitura → hyperframes check → renderizado de borrador → codificar → QA → REPORT.md.

HyperFrames se ejecuta en la versión fijada como HF_VERSION en scripts/lib/platforms.mjs (0.8.223), o en hyperframes de take.json. La primera ejecución lo obtiene con npx, y la construcción obtiene GSAP 3.14.2 una vez desde jsDelivr en ~/.cache/one-take/. El archivo GSAP se verifica contra un sha256 fijado después de la descarga y cada vez que se lee desde la caché. Un archivo que no coincide nunca se utiliza: una descarga incorrecta no se almacena en caché, y un archivo en caché incorrecto se elimina y la construcción se detiene. Ejecútalo de nuevo para obtener una copia nueva.

Luego:

  • Abre cada hoja de contactos *.sheet.jpg y mírala.
  • Lee REPORT.md.
  • Corrige los fallos y cualquier cosa que parezca incorrecta: superposiciones, recortes, fotogramas muertos, texto demasiado pequeño, un corte que no encaja.

Hay como máximo dos pasadas de corrección. Cada una reejecuta run.mjs --draft; usa --only <formato>-<idioma> para reejecutar solo lo que cambió.

Fase 6: final

node SKILL_DIR/scripts/run.mjs <proyecto>

Este es el renderizado de calidad completa de cada salida. Los entregables caen en renders/ (o output.dir). Cada salida obtiene:

  • <nombre>.mp4: x264 CRF 12, AAC 320k, faststart
  • .cover.jpg: la tarjeta final
  • .sheet.jpg
  • .qa.json

Las pistas de la partitura y marks.json se guardan en out/<formato>-<idioma>/score/.

Fase 7: informe

Responde con:

  • la tabla de salidas de REPORT.md (archivo, tamaño, duración, veredicto)
  • la hoja de contactos del formato principal
  • una línea sobre el sonido
  • elementos pendientes, si los hay

Ofrece los siguientes pasos sin hacerlos: publicar texto, más idiomas, un corte, publicación. Nada se publica ni se envía a menos que el usuario lo pida.

Modos de sonido

sound.modeQué sucede
score (predeterminado)score.mjs sintetiza cama, banda y batería a partir de las energías de la escena en la cuadrícula de compases: plan de acordes de mood y key, sidechained al bombo, elevadores en cada subida, un impacto en cada llegada. La pista de efectos se construye a partir de las señales, sintonizada con el acorde debajo de cada una y paneada desde donde ocurre en pantalla. Mezclada, limitada, luego loudnorm de dos pasadas a lufs (predeterminado −14) con pico verdadero −1.5. Original, por lo que no hay nada que licenciar.
trackEl archivo del usuario. Obtén bpm y el primer tiempo con score.mjs --analyze <archivo> (o npx hyperframes beats), establece bpm con ese valor y coloca las escenas en sus compases. La pista de efectos se reproduce encima.
library/media-use resolve --type bgm (necesita la CLI de heygen) o sus generadores. El resultado se usa como track, y su licencia se registra en sound.licence.
noneSin elemento de audio en absoluto.

Para una voz en off, colócala en src/assets/audio/vo.wav, desde Kokoro a través de npx hyperframes tts o la grabación del usuario. La partitura talla la música debajo de ella (duckDb, predeterminado −9). Para subtítulos, tempórizalos desde npx hyperframes transcribe vo.wav --model <modelo>. Los subtítulos quemados son texto de escena colocado dentro de .safe en --t-cap o más grande. Para subtítulos sidecar, escribe <nombre>.srt desde la misma transcripción junto a cada salida.

Archivos

  • scripts/detect.mjs, facts.mjs: qué hay, y los números
  • scripts/build.mjs: una fuente → proyectos HyperFrames en out/<formato>-<idioma>/. Rellena tamaños, bandas seguras y tiempos de escena, en línea TAKE (texto, hechos, escenas), agrega el kit y GSAP 3.14.2 (verificado con sha256), elimina escenas para cortes
  • scripts/probe.mjs: pasada de Chrome sin cabeza que lee señales, tamaños y posiciones de texto a lo largo del tiempo, y marcas
  • scripts/score.mjs: partitura sintética, pistas, mezcla, master, marks.json; --analyze para el tempo de una pista
  • scripts/encode.mjs, qa.mjs, report.mjs, run.mjs: entrega, comprobaciones, informe y la ejecución completa
  • scripts/selftest.mjs: comprueba el toolchain, luego prueba que QA falle un archivo construido para fallar
  • scripts/lib/: ayudantes compartidos (git, plataformas con HF_VERSION y la comprobación de nombre, WAV, DSP)
  • kit/take.js: el kit de movimiento (references/kit.md)
  • templates/index.html: el escenario inicial
  • references/: intake.md, take-json.md, direction.md, sound.md, formats.md, qa.md, kit.md

Skills relacionados