Communitygithub.com

robertomanfroi/videos-opus

Edita una grabación vertical (persona hablando a cámara) en un Reel con aspecto de "editado en el propio celular" — leyenda de una palabra por vez, capturas de pantalla crudas sobre la cabeza, títulos pequeños, cortes secos, sin pausas ni repeticiones, máximo 90 s. Úsalo cuando la skill `editar` delegue al estilo celular, o cuando la alumna pida "estilo celular", "estilo crudo", "parece que lo edité en Instagram". Para el look revista usa estilo-editorial; para noticia/explicación usa estilo-explicativo; para anuncio usa estilo-anuncio.

¿Qué es videos-opus?

Esta skill transforma una grabación vertical (persona hablando a cámara) en un Reel con aspecto deliberadamente amateur, como si la propia creadora lo hubiera editado en el editor de Instagram. Está diseñada para plataformas de edición de video (como Claude Code, Cursor o Codex) y se activa cuando la skill `editar` delega al "estilo celular" o la alumna pide explícitamente un acabado "crudo" o "casero". La skill automatiza todo el flujo: transcripción rápida, recorte de silencios y repeticiones, superposición de capturas de pantalla reales (sin bordes ni sombras), leyendas de una palabra por vez y títulos pequeños alineados a la izquierda. Los elementos aparecen y desaparecen con corte seco, sin transiciones ni animaciones. Incluye reglas estrictas de velocidad para respetar el rendimiento del PC de la alumna, usando transcripciones ligeras durante la selección de cortes y re-transcripciones precisas solo para la versión final. El resultado es un video de máximo 90 segundos que parece editado manualmente en un celular, sin marcas de agencia ni inteligencia artificial.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/robertomanfroi/videos-opus/tree/HEAD/kit/.claude/skills/estilo-celular

Preguntar en tu IA favorita

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

Documentación

Estilo celular

La regla única: quien lo vea debe sentir que la propia creadora lo editó en el celular, en el editor de Instagram. Nunca debe parecer agencia ni IA. En caso de duda: menos, más crudo, más pequeño. Motion graphics bonitos aquí son un error.

Antes de empezar lee ../perfil-criadora.md y carga (o crea) el perfil.json de la raíz.

Visual — innegociable

ElementoRegla
CapturasCapturas reales de la carpeta Mis capturas de la alumna (encabezado de perfil, insights, Me gusta/comentarios/guardados, visualizaciones, DMs, comentarios, publicaciones). Recorte crudo: esquina recta, sin borde, sin sombra, sin marco, sin tarjeta redondeada. Sobre la cabeza.
Texto sobre la cabezaFuente de título (.tit), blanca, pequeña — títulos 48–70 px, etiquetas 40–48 px en 1080 de ancho. Alineado a la izquierda con el borde izquierdo de la captura. Color de acento (.y) solo en una palabra ocasional. Sans (.sans) solo para etiquetas como "Malo / Bueno / Viral".
SombraSolo cuando la pared detrás es clara (.sh). Nunca caja, fondo o vidrio detrás del texto.
MovimientoNinguno. Los elementos entran y salen en corte seco (show()/hide()). Sin fade, slide, zoom, rebote.
EmojisCaracteres reales en la plantilla (✅ ❌ 🔥 ❤️ 👇 🚨 …); montar.mjs los reemplaza por arte Twemoji. Nunca dibujes íconos.
LeyendaUna palabra por vez, 54 px, blanca con sombra suave (nunca contorno). Centrada en el pecho, justo debajo de la barbilla (capTop en reel.json). Corte seco palabra a palabra.
Título persistenteUn título de tema puede permanecer en pantalla durante largos tramos mientras las capturas cambian encima.
ListasChecklists de emoji + palabra (✅ Leyenda / ❌ Título), reveladas ítem por ítem al pronunciarse la palabra.
MockupsEvita. Usa captura real. Solo dibuja un mockup si no existe captura Y la alumna lo pide.

Reglas de corte

  • Sin respiración ni pausa: todo por debajo de −30 dB durante ≥ 0,15 s se elimina (cortar.mjs lo hace solo).
  • Elimina toda repetición, comienzo falso y frase rehecha. Quédate con la última versión, la más limpia.
  • El transcriptor oculta repeticiones y se equivoca en los tiempos. Después de cortar, SIEMPRE retranscribe el clean.mp4 y léelo de principio a fin buscando frase duplicada, palabra cortada y verbo faltante. Recorta hasta que quede limpio.
  • Máximo 90 s, a menos que la alumna pida otra cosa. Di en la entrega lo que quedó fuera.
  • J/L cuts activados por defecto (--jl 6 más suave, --no-jl desactiva).

Reglas de velocidad (el PC de la alumna puede ser lento — aplican por encima de los pasos siguientes)

  • La transcripción del novo-projeto.mjs ya es --rapido (modelo ligero, solo para elegir el corte). La retranscripción del clean.mp4 (la de la leyenda) usa el modelo preciso — ejecútala una vez por versión del corte, no en cada ajuste.
  • Revisa todas las uniones en UNA llamada (una carga de modelo): $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas t1,t2,… (tiempos en la línea de tiempo del clean). Nunca una ventana por vez.
  • No renderices un borrador entero solo para mirar cuadros. Usa $K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots (una vez por cambio de elemento) y mira los PNGs. Renderiza el video UNA vez, cuando los snapshots estén correctos. Renderiza de nuevo solo para cambios solicitados.
  • El codificador del raw.mp4 / clean.mp4 se elige solo (NVIDIA / Intel / AMD / Apple, si no CPU). No lo cambies.
  • Antes de cada etapa lenta, avisa en una línea corta en español qué se está ejecutando y que puede tomar algunos minutos ("Transcribiendo el video — en tu PC puede tomar unos minutos."), para que la espera nunca parezca un congelamiento.

Flujo (todo comando mediante el lanzador $K)

M=.claude/skills/_motor · K = el lanzador de la skill videos-opus: "<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit, donde <VO> es la carpeta de la skill videos-opus (la que tiene el SKILL.md que te envió a leer esta guía). Pone los programas portátiles en la ruta y ejecuta en la carpeta de trabajo del kit ($K pasta muestra cuál es; los proyectos están en <pasta>\video-projects\<slug>). $K --em <subcarpeta> … ejecuta dentro de ella. Nada de npx, Python o node suelto: todo pasa por $K.

  1. Proyecto + transcripción rápida: $K node $M/novo-projeto.mjs "<video>" <slug> .claude/skills/estilo-celular → video-projects/<slug>/ con assets/raw.mp4 (1080×1920, 30 fps), assets/raw.json, assets/palabras.txt, fuentes y src/index.template.html. El slug es corto, en minúsculas, con guiones (promo-engrene).
  2. Encuadre: toma una instantánea de contacto del raw ($K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/4,scale=180:-1,tile=12x1" -frames:v 1 assets/contacto.png) y MIRA: dónde está la parte superior de la cabeza y la barbilla. Los elementos viven entre y≈100 y la parte superior de la cabeza; la leyenda debajo de la barbilla → escribe reel.json en la raíz del proyecto: {"capTop": <px>} (por defecto 1380).
  3. Elección del corte: lee assets/palabras.txt y escribe assets/keeps.json ({"fps":30,"keeps":[{"from":0,"to":9.38,"why":"…"}]}). Cada why explica en español qué se quedó y por qué.
  4. Corte: dentro de assets/: $K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs → clean.mp4 + edit-decisions.json.
  5. Revisión: en la raíz del proyecto: $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<términos del perfil>". Repetición o palabra cortada → vuelve al paso 3. Palabra mal escuchada → assets/caption-fixes.json ({"cloud":"Claude"}). $K --em video-projects/<slug> ffmpeg -i assets/clean.mp4 -af silencedetect=noise=-30dB:d=0.25 -f null - → no puede quedar pausa.
  6. Capturas: lista las imágenes de la carpeta_capturas del perfil (más recientes primero) y VE cada candidata antes de usarla. Recorta con ffmpeg a assets/capturas/ (-vf crop=w:h:x:y), y anota el origen en assets/capturas/ORIGEN.md. Sin captura adecuada → di qué pantalla ayudaría y continúa SIN captura (ella puede pedirla después como ajuste). Nunca inventes una captura.
  7. Composición: edita src/index.template.html — elementos en el bloque ELEMENTOS y tiempos en el bloque TIEMPOS. Los tiempos vienen de $K --em video-projects/<slug> node ../../$M/ancoras.mjs "frase" "otra frase" (raíz del proyecto), en la palabra pronunciada. Solo corte seco.
  8. Montaje + verificación: $K --em video-projects/<slug> node ../../$M/montar.mjs → $K --em video-projects/<slug> hyperframes lint → instantáneas de cada cambio de elemento ($K --em video-projects/<slug> hyperframes snapshot --at …) y MIRA: rostro nunca cubierto, texto legible, captura alineada con el título. Luego render y entrega (mediante el lanzador, en la carpeta de trabajo del kit): $K node $M/renderizar.mjs <slug> — revisa los bloqueos, renderiza en segundo plano, valida y ya copia a listos/. Salida 3 = aún renderizando: ejecuta $K node $M/renderizar.mjs <slug> --esperar hasta que salga LISTO. Nunca ejecutes $K --em video-projects/<slug> hyperframes render directamente ni listos.mjs a mano.
  9. Entrega: Responde en español, breve: dónde está el video, qué se cortó, capturas usadas, qué quedó en duda. Nunca publiques ni envíes nada.

Ajustes después de la entrega

"quita la parte del precio" → edita keeps.json, repite 4–5, recalcula los TIEMPOS de todo lo que viene después del fragmento con ancoras.mjs y repite 8. "leyenda más abajo" → reel.json y repite 8. "cambia la captura" → solo 6–8. Nunca rehagas desde cero lo que la alumna no pidió cambiar.

Individual skills in this repo

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

Skills relacionados