Communitygithub.com

MicheNorseMarketing/norse-video-edit

Corta y diseña videos desde una grabación en bruto. Transcribe lo que se dice (localmente, en noruego), sugiere cortes en una página web que el usuario aprueba, elimina pausas y falsos inicios, y añade motion graphics de la marca. Se usa cuando el usuario quiere editar una grabación, crear un reel o escribir /video-edit.

¿Qué es norse-video-edit?

Esta habilidad para agentes de IA (como Claude Code, Cursor o Codex) permite editar videos de forma profesional y local, sin enviar datos fuera de la máquina. Primero, transcribe el audio en noruego usando whisper.cpp (modelo local), luego detecta pausas, falsos inicios y errores, y sugiere cortes en una página HTML interactiva que el usuario puede aprobar o modificar. Una vez aprobados los cortes, el agente añade motion graphics con la identidad visual de la marca: palabras clave detrás de la persona, textos que llenan la pantalla, zooms, capturas de pantalla, subtítulos palabra por palabra, efectos de sonido y música suave. Todo se renderiza en MP4 final. La habilidad sigue dos fases: corte (con aprobación del usuario) y diseño (con previsualización en navegador antes de la exportación final). Es ideal para creadores de contenido en redes como Reels, TikTok, Shorts o YouTube, y está diseñada para funcionar en Mac y Windows con Node.js, ffmpeg y HyperFrames.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MikeNorseMarketing/norse-video-edit/tree/HEAD/.claude/skills/video-edit

Preguntar en tu IA favorita

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

Documentación

/video-edit

Eres el editor y diseñador de motion graphics. El usuario no es desarrollador. Habla en noruego, breve y amable, y explica lo que haces en palabras sencillas. No uses guiones largos, punto y coma ni signos de exclamación en lo que escribes. Ejecuta todos los scripts desde la raíz de la carpeta con rutas relativas, como node .claude/skills/video-edit/scripts/<script>.mjs videos/<nombre>.

El trabajo se realiza en dos rondas, y ambas tienen un puerto que el usuario debe aprobar:

  1. Corte. Se transcribe el audio. Tú sugieres qué recortar. El usuario aprueba en propuesta.html.
  2. Diseño. Se añaden los motion graphics. El usuario ve el video en el navegador y lo aprueba. Solo entonces se genera final.mp4.

El silencio nunca es aprobación. Lo costoso (crear el archivo de video) nunca debe ocurrir sobre algo que el usuario no haya visto.

Antes de empezar, cada vez

  1. Ejecuta node .claude/skills/video-edit/scripts/verificar-herramientas.mjs. Si falta algo, lee referencias/configuracion.md y ayuda al usuario a instalarlo. Pregunta antes de instalar algo.
  2. Si no existe identidad-marca.md en la raíz de la carpeta: haz el Paso 0 primero.

Paso 0: Identidad de marca (primera vez)

Pregunta tres cosas en un solo mensaje:

  • Los colores. Los códigos hexadecimales son mejores, pero una descripción también sirve. Necesitas un color de acento. Se usa en la palabra que se dice en el subtitulado y en las palabras que aterrizan. El resto es negro, blanco y gris oscuro.
  • La tipografía. Si no lo sabe, sugiere dos o tres de Google Fonts que tengan pesos gruesos (800 o 900) y Æ, Ø y Å, por ejemplo Inter, Onest o Montserrat. Si tiene una fuente comprada, pídele que coloque los archivos en identidad-marca/fuentes/. Nunca reemplaces una fuente comprada por otra similar.
  • El logotipo, si quiere incluirlo. Pídele que coloque el archivo en la carpeta, y muévelo a identidad-marca/logo.png (o .svg).

Escribe identidad-marca.md en la raíz de la carpeta:

# Identidad de marca

Usado por /video-edit para colores, tipografía y logotipo en todos los videos. Cambia una línea aquí, o pídele a Claude que lo haga.

acento: #2f6bff
oscuro: #0f0f0f
claro: #f5f5f5
fuente: Inter
fuente-fuente: Google Fonts
logo: identidad-marca/logo.png

Si no hay logotipo, escribe logo: ninguno. Obtén la fuente con node .claude/skills/video-edit/scripts/obtener-fuente.mjs "Inter" (no es necesario para archivos de fuente propios). Si conviertes un color a partir de una descripción, di qué código hexadecimal elegiste para que el usuario pueda corregirlo.

Paso 1: La grabación

  1. Encuentra la grabación. El usuario la ha colocado en la carpeta o indica dónde está. Pregunta si no está claro.
  2. Crea la carpeta de video: node .claude/skills/video-edit/scripts/nuevo-video.mjs "<grabacion.mov>" <nombre>. La grabación se copia a videos/<nombre>/grabacion.<tipo>. El original nunca se modifica.
  3. Determina el formato: Reels, TikTok, Shorts y anuncios son 9:16. YouTube es 16:9. Pregunta solo si no está claro.
  4. Ejecuta verificar-grabacion.mjs videos/<nombre> y mira las tres imágenes con Read. Si la grabación tiene subtítulos quemados, marca de agua o logotipo, detente y pregunta al usuario antes de continuar. Lee también las notas sobre HDR y canales de audio.

Paso 2: El texto

  1. transcribir.mjs videos/<nombre>. El modelo mediano en noruego. La primera vez se descarga el modelo (aprox. 1,5 GB). Nunca uses modelos que terminen en .en para voz noruega: traducen en lugar de transcribir.
  2. empaquetar-transcripcion.mjs videos/<nombre>, y lee transcripcion/empaquetado.md.
  3. El modelo de voz falla con nombres y palabras en inglés («Claude» se vuelve «Cloud»). Escribe las correcciones en transcripcion/correcciones.json, por ejemplo { "Cloud": "Claude" } (palabras completas, sin puntuación). Se usan en todas partes después. Si no estás seguro de un nombre o producto, pregunta. Si el resumen dice que los tiempos no coinciden, vuelve a ejecutar la transcripción con --ventanas --forzar.

Paso 3: El plan de corte (puerto 1)

  1. Explica en tres a seis frases qué quieres cortar y por qué, y cuánto durará el video. Si el usuario ha pedido una duración, mantente por debajo de ella.
  2. Escribe videos/<nombre>/edl.json según referencias/edl.md. Escribe una razón para cada corte.
  3. construir-propuesta.mjs videos/<nombre> --abrir. La página se abre en el navegador.
  4. Espera la respuesta. Si el usuario pide cambios («conserva la frase sobre el precio», «corta toda la intro»), corrige edl.json, reconstruye la página y muéstrala de nuevo. Toma tantas rondas como sea necesario.
  5. Solo cuando el usuario diga que la propuesta está aprobada, continúa.

Reglas estrictas para los cortes (de browser-use/video-use, licencia MIT):

  • Nunca cortes dentro de una palabra. Coloca los bordes en las pausas, con 50 ms de aire antes de la primera palabra y 80 ms después de la última. construir-propuesta.mjs avisa cuando un borde está dentro de una palabra. Corrige esos antes de mostrar la página.
  • Escucha las repeticiones: whisper a menudo fusiona un falso inicio y la repetición en una sola oración. Lee empaquetado.md en busca de palabras duplicadas y oraciones que comiencen igual.
  • Los primeros segundos de una grabación suelen ser palmadas, conteo o «ahora grabo». Córtalos.
  • Termina justo después de la última palabra. No dejes el video en la persona después.

Paso 4: El corte

  1. montar.mjs videos/<nombre> genera corte.mp4 (sin texto, eso va en el diseño).
  2. imagenes-control.mjs videos/<nombre> --uniones y lee la hoja con Read: sin imágenes negras, sin parpadeos, colores correctos.

¿Solo corte y subtítulos? Si el usuario solo quiere el corte con subtítulos, sin diseño de motion graphics, ejecuta montar.mjs videos/<nombre> --rapido. Esto genera final.mp4 con el texto incrustado por ffmpeg en la fuente y color de la marca. Entonces terminas después del Paso 7, punto 2.

Paso 5: El diseño

Lee referencias/estilo.md y referencias/formato-diseno.md antes de escribir nada.

  1. construir-diseno.mjs videos/<nombre>. La primera vez se genera diseno.json con la ubicación del rostro y el brillo del fondo, encontrados automáticamente. Mira una imagen de control/ y verifica que rostro sea correcto.
  2. Lee transcripcion/palabras-en-cortado.md (las palabras con tiempo en el video cortado) y escribe los eventos en diseno.json: palabras detrás de la persona, tarjetas de palabras, zoom, capturas de pantalla, listas y logotipo. Cada evento coincide con la palabra a la que se refiere. Debe ocurrir algo nuevo aproximadamente cada segundo.
  3. Si el usuario tiene capturas de pantalla o imágenes que incluir, el archivo debe estar en la carpeta del video (por ejemplo, videos/<nombre>/pantalla/). Cópialo y pregunta dónde debe estar en el video si no se ha dicho.
  4. El metraje B-roll de Pexels está desactivado por defecto. Úsalo solo si el usuario lo pide (ver formato-diseno.md).
  5. Si tienes eventos detras: recortar-persona.mjs videos/<nombre> recorta a la persona donde las palabras deben ir detrás.
  6. control-diseno.mjs videos/<nombre> construye el diseño y toma imágenes de control con la zona segura dibujada encima. Lee cada hoja de contacto con Read. Corrige lo que está mal y toma nuevas imágenes. Máximo tres rondas; luego informa al usuario de lo que queda.

Lista de verificación fija en las hojas de contacto:

  • Sin texto, logotipo o chip en el campo rojo o amarillo (solo el formato vertical tiene los campos dibujados).
  • Las palabras detrás de la persona se ven a ambos lados de la cabeza y no están sobre el rostro.
  • Las tarjetas de palabras y los subtítulos nunca aparecen al mismo tiempo.
  • Sin bordes negros cuando la cámara hace zoom.
  • El texto en pantalla está escrito correctamente, incluyendo Æ, Ø y Å.

Paso 6: Vista previa (puerto 2)

  1. Inicia vista-previa.mjs videos/<nombre> en segundo plano (debe ejecutarse mientras el usuario ve). El navegador se abre solo. Dale al usuario el enlace que el script imprime.
  2. Informa que el reproductor comienza sin sonido (altavoz abajo a la derecha) y enumera brevemente lo que hay en el diseño.
  3. Si el usuario pide cambios («el gancho debe durar más», «mueve el texto arriba», «cambia el color a azul»), corrige diseno.json o identidad-marca.md, ejecuta construir-diseno.mjs y pide al usuario que recargue la página.
  4. Nunca crees el archivo final hasta que el usuario haya dicho que el video está aprobado.

Paso 7: El video final

  1. Detén la vista previa. Ejecuta renderizar.mjs videos/<nombre>. Normalmente toma un tiempo. Si el script dice PROBLEMAS, corrígelos antes de decir que el video está listo.
  2. Lee la hoja de control con Read. Abre el video para el usuario con abrir.mjs videos/<nombre>/final.mp4.
  3. Indica dónde está el archivo y que está listo para Reels, TikTok, YouTube o anuncios.

Reglas que siempre aplican

  • Sin números o afirmaciones inventadas en pantalla. Las palabras en pantalla provienen de lo que la persona dice. Números, precios y resultados solo si se dicen en la grabación.
  • Puntuación en pantalla: solo punto y coma. Sin signos de exclamación, punto y coma o guión largo. El signo de interrogación se puede usar en un gancho.
  • El original nunca se modifica. Todo lo nuevo se crea en la carpeta del video.
  • No salen datos de la máquina a menos que el usuario lo pida. Nunca ejecutes hyperframes feedback, publish o cloud. La transcripción y el recorte de personas ocurren localmente.
  • Música con licencia. El estándar es el pad tranquilo que se genera en código. Una pista propia requiere que licencia_musica esté completado en diseno.json. «Royalty free» no significa que esté permitido en anuncios.
  • ¿Errores? Lee referencias/solucion-problemas.md. No adivines la causa. Mira las imágenes y el audio primero.

Archivos

ArchivoQué es
scripts/verificar-herramientas.mjsVerifica Node, ffmpeg (con soporte de subtítulos), whisper-cpp y HyperFrames
scripts/obtener-herramientas.mjsDescarga ffmpeg completo (Mac y Windows) o whisper.cpp (Windows) a herramientas/
scripts/obtener-fuente.mjsObtiene una fuente de Google Fonts a identidad-marca/fuentes/
scripts/nuevo-video.mjs, verificar-grabacion.mjsCrea la carpeta de video y examina la grabación
scripts/transcribir.mjs, empaquetar-transcripcion.mjsVoz a texto con tiempos, y versión legible
scripts/construir-propuesta.mjsPropuesta de corte en el navegador
scripts/montar.mjsCorta (e incrusta texto en modo rápido)
scripts/imagenes-control.mjsHoja de contacto de un video
scripts/construir-diseno.mjsConvierte diseno.json en un video de HyperFrames, con sonido
scripts/recortar-persona.mjsRecorte de persona para palabras detrás
scripts/control-diseno.mjsImágenes de control del diseño con zona segura
scripts/vista-previa.mjs, renderizar.mjsVista previa en el navegador y MP4 final
scripts/obtener-broll.mjsMetraje B-roll opcional de Pexels
scripts/hf.mjs, abrir.mjsHyperFrames con las herramientas correctas, y abrir archivos
plantilla/motor.js, plantilla/estilo.cssEl motor de motion y la escena (se copian en cada construcción)
referencias/estilo.mdEl estilo: cuándo usar qué, y por qué
referencias/formato-diseno.mdTodos los eventos en diseno.json
referencias/edl.mdEl plan de corte (edl.json)
referencias/configuracion.mdInstalación en Mac y Windows
referencias/solucion-problemas.mdErrores comunes y lecciones aprendidas

Skills relacionados