Communitygithub.com

duytienitptit/edit-hyperframe

Convierte cualquier texto — artículo, notas, tema o resumen — en un video explicativo sin rostro. No se capturan sitios web ni imágenes reales; los elementos visuales se generan por escena (tipografía, gráficos abstractos, diagramas, visualización de datos). Usa esto para explicar temas, desglosar conceptos, hacer tutoriales o listas.

¿Qué es edit-hyperframe?

Este skill de HyperFrames está diseñado para transformar texto en bruto en videos explicativos animados, sin necesidad de capturar contenido web o usar activos reales. Se enfoca en la creación de videos "sin rostro", donde cada escena se inventa durante el proceso usando tipografía, gráficos, diagramas y visualización de datos. El skill es ideal para desarrolladores y creadores de contenido que desean generar explicaciones de temas, tutoriales o videos de listas de forma automatizada. Funciona exclusivamente dentro del ecosistema HyperFrames y requiere que el usuario ejecute pasos secuenciales: desde la configuración inicial y la creación de un brief, hasta la generación de storyboard, audio y renderizado final. El flujo de trabajo está altamente estructurado con puertas de verificación en cada paso, y el skill se encarga de orquestar subagentes para la creación de cada fotograma. Es compatible con modos colaborativos y autónomos, y utiliza herramientas externas como HeyGen para la síntesis de voz y música, pero también ofrece opciones offline como Kokoro. No está diseñado para videos promocionales o de lanzamiento de productos; para esos casos, el skill redirige al usuario al flujo de trabajo adecuado a través del skill `/hyperframes`.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/duytienitptit/edit-hyperframe/tree/HEAD/.claude/skills/faceless-explainer

Preguntar en tu IA favorita

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

Documentación

Instalación del plugin: Antes de ejecutar los comandos de configuración o actualización, sigue las reglas de ejecución del plugin cuando este skill esté dentro de un plugin de HyperFrames. Las instalaciones independientes mantienen las instrucciones de actualización a continuación.

Primero, mantén este skill actualizado — confirma con el usuario antes de ejecutar: npx hyperframes skills update faceless-explainer. Es una operación rápida que no hace nada si todo está actualizado; de lo contrario, actualiza este skill y los skills del dominio central de los que depende antes de que confíes en ellos.

media-use: Antes de buscar audio/imágenes/logos, llama a /media-use para resolver BGM/SFX/imágenes del catálogo de HeyGen y los logotipos de marca de sus fuentes oficiales. Ejecuta --adopt primero para registrar activos existentes. Consulta el skill /media-use. Cuando la aplicación anfitriona proporcione sus propias herramientas de música o efectos de sonido, úsalas para la música y los efectos de sonido.

Explicador sin rostro a HyperFrames

Usa este skill para convertir un cuerpo de texto en un video explicativo: elige un sistema de diseño, planifica una historia didáctica y constrúyela fotograma a fotograma en HyperFrames. Sin rostro significa que cada elemento visual se inventa en el proceso posterior — no hay paso de captura ni inventario de activos reales.

La puerta de entrada es /hyperframes. Tú eres el orquestador. Ejecuta cada paso, verifica su puerta y solo entonces continúa. Este skill es para explicar un tema a partir de texto, sin producto ni sitio web que capturar. Cualquier otra intención, un simple "haz un video" o cualquier incertidumbre → lee /hyperframes primero — la capa de intención es dueña de cada decisión de ruta, y una creación nueva que llegue aquí sin BRIEF.md pasa por ella de todos modos (regla de apertura de Configuración).

Eres el orquestador. Trabaja en videos/<proyecto>/. Ejecuta los pasos en orden y pasa cada puerta antes de continuar. Los pasos con puerta de usuario son el Paso 0, el Paso 3 y el Paso 6. Lee ../hyperframes/references/brief-contract.md antes del Paso 0 — define los tipos de puerta y cómo el flujo/storyboard de BRIEF.md determinan el modo que gobierna las puertas de los Pasos 3/4/6. Haz cada paso tú mismo excepto el Paso 5, donde despachas un subagente por fotograma. No pongas reglas de diseño o movimiento aquí; esas viven en el subagente de trabajo de fotogramas, en las ../hyperframes-animation/rules/ + ../hyperframes-animation/blueprints/ locales de este skill, y en hyperframes-creative.

Flujo de trabajo: Paso 0 configuración → hyperframes.json; Paso 1 brief → capture/extracted/; Paso 2 sistema de diseño → frame.md; Paso 3 storyboard/guion → STORYBOARD.md y SCRIPT.md; Paso 3.1 audio → audio_meta.json; Paso 4 diseño visual → STORYBOARD.md enriquecido; Paso 5 fotogramas → compositions/frames/NN-*.html y index.html; Paso 6 renderizado final → renders/video.mp4.


Paso 0: Configuración

Objetivo: Entrar con un brief confirmado, crear el proyecto HyperFrames y hacer el brief duradero.

El brief es confirmado por la capa de intención, no por preguntas hechas aquí. Regla de apertura, en orden: (1) BRIEF.md existe → léelo y no preguntes nada — el brief está resuelto, y su flujo/storyboard determinan el modo (contrato de brief § 1). (2) No hay BRIEF.md pero el proyecto existe (hyperframes.json / STORYBOARD.md en disco) → reanuda desde el frontmatter del storyboard y las preferencias registradas; nunca vuelvas a interrogar un proyecto a medio construir. (3) Ni lo uno ni lo otro — una solicitud de creación nueva que llegó aquí directamente → lee /hyperframes y ejecuta su capa de intención (references/intent-interview.md): verifica recetas y valores predeterminados recordados, conduce las preguntas de esta ruta (../hyperframes/references/routes/faceless-explainer.md) y devuelve el brief bloqueado. Las solicitudes de edición saltan todo esto — ve a hacer la edición.

Inicializa solo si falta hyperframes.json. Nombra <proyecto> a partir del tema en kebab-case, por ejemplo compound-interest-explained; nunca uses el nombre del espacio de trabajo o una marca de tiempo.

npx hyperframes init "videos/<proyecto>" --non-interactive --example=blank --skill=faceless-explainer — init verifica los skills instalados contra los últimos en GitHub y actualiza el conjunto global si alguno está desactualizado.

Después de init, deja que <PROJECT_ROOT> sea videos/<proyecto> y ejecuta cada comando de ruta relativa con ese directorio como su directorio de trabajo. En los comandos a continuación, . significa <PROJECT_ROOT>; nunca escribas .media, capture o archivos de salida en el directorio de la llamada.

Escribe BRIEF.md inmediatamente después de init (nunca antes — init rechaza un directorio no vacío): el brief bloqueado de la capa de intención, con la forma según ../hyperframes/references/brief-format.md. Resuelve <MEDIA_DIR> como el directorio del skill /media-use instalado. Luego registra cada respuesta respaldada por preferencia con node <MEDIA_DIR>/scripts/prefs.mjs record --hyperframes . (brief-format.md nombra el subconjunto). Si la capa de intención adoptó una receta, ejecuta node <MEDIA_DIR>/scripts/recipe.mjs use --hyperframes . --name <nombre>; copia su frame.md en el proyecto (el Paso 2 se omite entonces) y devuelve los esqueletos a partir de los cuales se redactan los borradores del Paso 3. Una receta llena respuestas, no aprobaciones; las puertas de revisión aún se ejecutan.

Muestra el estado de inicio de sesión antes de proceder más allá de la Configuración — ejecuta npx hyperframes auth status y transmite su salida textualmente. Informa si la voz/BGM usará motores de HeyGen o locales y, cuando no se haya iniciado sesión, cómo hacerlo. Aplica una rama:

  • Colaborativo: espera a que el usuario inicie sesión o elija explícitamente offline / go.
  • Autónomo: indica el estado y continúa a través de los motores locales disponibles.

No omitas silenciosamente una capacidad requerida cuando no exista un proveedor fuera de línea; muestra el bloqueador. No incluyas esta decisión en otra pregunta ni escribas claves en un .env por repositorio. Propiedad de autenticación y alternativas fuera de línea: /media-use references/setup-providers.md § Proveedores.

Puerta: existen hyperframes.json y BRIEF.md; se registraron las respuestas respaldadas por preferencia (contrato de brief § 2); se mostró el estado de inicio de sesión (iniciada sesión, o continuando sin conexión).


Paso 1: Brief (sin captura)

Objetivo: Incorporar el texto del usuario en el proyecto como fuente de información. No hay captura de sitio web ni activos reales — esto es un explicador sin rostro.

Guarda la entrada completa del usuario textualmente, luego crea el paquete de captura sintético manualmente:

  • capture/extracted/visible-text.txt — el artículo / notas / tema / resumen completo, textualmente. Esta es la fuente de información, no una plantilla de historia (el Paso 3 la reforma).
  • capture/extracted/tokens.json — { "title": "", "description": "", "colors": [], "fonts": [] }. Rellena title/description desde el brief. Deja colors/fonts vacíos a menos que el usuario haya dado explícitamente colores o fuentes de marca — entonces agrégalos (el preset de diseño proporciona una paleta completa de todos modos).

Si el usuario pegó un guion o quiere mantener sus palabras, guárdalo textualmente como user_script.txt; VO_MODE (textual o reestructurado) proviene de BRIEF.md — la capa de intención lo pregunta cuando llega un guion. Pregunta una vez aquí solo si el brief carece de ello, y almacena la respuesta para el Paso 3.

No ejecutes npx hyperframes capture (no hay URL). No crees asset-descriptions.md ni llenes capture/assets/ — los elementos visuales sin rostro se inventan en los Pasos 4-5, no se capturan. La única excepción: si el usuario proporcionó una imagen real, colócala en public/<nombrebase> y anótala para el Paso 3.

Puerta: existen capture/extracted/visible-text.txt y capture/extracted/tokens.json; puedes enunciar el tema y la audiencia del explicador en una oración clara.


Paso 2: Sistema de diseño

Objetivo: Elegir un preset de fotograma enviado; un script lo convierte en frame.md + piel de subtítulos de este video.

Cuando BRIEF.md nombre un style_preset — el usuario lo eligió visualmente en las muestras de la capa de intención — úsalo; la decisión es tuya solo cuando el brief está en silencio. Luego tomas la única decisión — qué preset: lee ../hyperframes-creative/references/design-spec.md y explora ../hyperframes-creative/frame-presets/; elige el preset cuyo aspecto mejor se adapte al tema, tono y audiencia. Luego ejecuta:

node <SKILL_DIR>/scripts/build-frame.mjs --preset <nombre> --hyperframes .

El script hace el resto de manera determinista: copia el FRAME.md del preset → frame.md y lo remezcla sobre cualquier token de marca en capture/extracted/tokens.json (los colores de marca mapeados a las claves de color del preset por rol; las fuentes de visualización + cuerpo del preset se cambian por las de la marca), copia la piel de subtítulos del preset en .hyperframes/caption-skin.html, y se autovalida (sale con 1 en un mapeo roto). Procede tan pronto como salga con 0 — sin edición manual de la especificación.

Un explicador sin rostro generalmente no tiene colores/fuentes de marca (tokens.json colors/fonts vacíos) → el script mantiene la propia paleta del preset, un diseño completo y enviable. Solo cuando el usuario nombre colores/fuentes de marca agrégalos a tokens.json antes de ejecutar, y solo ajusta frame.md manualmente después si un mapeo realmente lo necesita.

Puerta: build-frame.mjs salió con 0 — frame.md existe de un preset nombrado, y (cuando el preset envía uno) .hyperframes/caption-skin.html existe como fuente de la piel de subtítulos; el preset elegido se registró como preferencia (--key style_preset --workflow <este flujo de trabajo>, contrato de brief § 2).


Paso 3: Storyboard y guion

Objetivo: Convertir el texto en un plan de enseñanza fotograma por fotograma aprobado.

Lee ../hyperframes-creative/references/story-spine.md (lenguaje de gancho, valor antes que evidencia, storyboard como propuesta, elementos visuales trazables a la fuente), references/story-design.md, ../hyperframes-animation/blueprints-index.md, ../hyperframes/references/storyboard-format.md y ../hyperframes/references/script-format.md. Úsalos para escribir STORYBOARD.md y, cuando se necesite narración, SCRIPT.md. Establece el duration: del frontmatter desde el length del brief — una expectativa aproximada; el ensamblaje informa dónde cae el corte en relación con ella.

Usa story-design.md para la estructura del explicador (concepto / cómo se hace / lista / historia), estrategia de gancho, técnicas de claridad, ritmos emocionales, el mapeo de enumeración de tipos y VO_MODE. La secuencia del video proviene del diseño narrativo, no del orden de los párrafos del texto de entrada — reordena, fusiona, omite, comprime. Como guía suave, consulta el menú de rol→plano en ../hyperframes-animation/blueprints-index.md: para cada ritmo, escribe la voz en off en la forma que implica su plano candidato y etiqueta ese candidato con el id blueprint: cuando encaje. La verdad didáctica aún decide qué ritmos existen — nunca fuerces un ritmo para que encaje en un plano, y nunca inventes un ritmo solo porque una forma probada esté disponible. Los elementos visuales sin rostro se inventan en el proceso posterior, por lo que los fotogramas no llevan un inventario de activos: deja asset_candidates vacío a menos que el usuario haya proporcionado una imagen real public/<nombrebase>. Usa los campos requeridos exactos de las referencias de storyboard y guion.

Después de redactar, ejecuta la pasada de planificación del bucle de revisión — ../hyperframes/references/review-loop.md § 1: presenta el plan como una propuesta y haz las dos preguntas — aprobar o cambiar, y bocetos primero (recomendado) o saltar. La retroalimentación llega como una respuesta de chat; repite hasta que se apruebe. Esta es una puerta de punto de control (contrato de brief § 1): en modo autónomo no hay nada que preguntar — publica el mismo resumen como aviso y procede; los bocetos se integran en la construcción, y la vista previa final con su única pregunta llega en el Paso 6.

Puerta: STORYBOARD.md existe, cada fotograma tiene los campos narrativos requeridos, SCRIPT.md existe cuando se necesita narración, y el usuario aprobó el plan fotograma por fotograma (autónomo: el resumen se publicó como aviso).


Paso 3.1: Audio

Objetivo: Generar narración, tiempos de palabras, música y metadatos de audio a partir del guion aprobado.

Comienza el audio después de la aprobación del Paso 3. Ejecútalo en segundo plano, luego continúa al Paso 4. (El estado de inicio de sesión ya se mostró en el Paso 0; el motor retrocede automáticamente).

Elige la voz de narración según la solicitud del usuario antes de invocar. Si la solicitud nombró una voz, género o tono, elige un id de voz coincidente y pásalo con --voice <id>. El valor predeterminado de la tubería es Marcia (femenino) en HeyGen / am_michael en Kokoro — por lo que una solicitud como "una voz masculina" se ignora silenciosamente a menos que pases la bandera. Los ids de voz son específicos del proveedor; resuélvelos según el proveedor que haya seleccionado el estado de inicio de sesión del Paso 0: HeyGen (iniciada sesión) a través de node <MEDIA_DIR>/audio/scripts/heygen-tts.mjs --list (o GET /v3/voices?engine=starfish); Kokoro (fuera de línea) a través de la tabla de voces en <MEDIA_DIR>/audio/references/tts.md (prefijos am_/bm_ masculino, af_/bf_ femenino). Cuando el usuario no expresó ninguna preferencia, recurre a la voz recordada (contrato de brief § 2) antes del valor predeterminado de la tubería, y di cuál usaste; omite --voice solo cuando ninguno nombre una. Cuando el usuario eligió explícitamente una voz en esta ejecución, regístrala (prefs.mjs record --key voice).

node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json --voice <id-voz> &

El script de audio maneja la narración, los tiempos de palabras, la búsqueda de BGM en la biblioteca de música de HeyGen y los metadatos de sincronización. El estado de ánimo del BGM proviene del campo music: del storyboard. Esto usa la API de Audio de HeyGen para la recuperación, no la generación, y la misma credencial ~/.heygen que TTS. Para obtener detalles del proveedor, lee ../media-use/audio/references/tts.md. Cuando las herramientas propias de la aplicación anfitriona hagan la música o un efecto de sonido, coloca el archivo en assets/ y enuméralo en el archivo audio_meta.json marcado como "source": "host": música como bgm { "path": "assets/…", "source": "host" } con music: none en el storyboard; un sonido como una entrada sfx { "frame": <n>, "file": "assets/…", "offset_s": 0, "duration_s": <su duración>, "source": "host" }. Cada pase de audio mantiene estos, y un fotograma con un sonido del anfitrión no obtiene una señal buscada.

Si no hay narración ni SCRIPT.md, omite la generación de voz. El BGM aún puede ejecutarse si el storyboard tiene un estado de ánimo musical.

El marcador canónico de silencio completo (compartido entre los flujos de trabajo que reutilizan este modelo de audio): music: none en el bloque YAML superior de STORYBOARD.md, sin SCRIPT.md, y sin señales sfx: ni audio del anfitrión. Esa combinación marca el proyecto como silencioso — n

…

[truncado por traducción]

Skills relacionados