Communitygithub.com

stripe-youtube

Edición de videos largos para YouTube (16:9, 5–15 minutos, explicaciones, charlas y tutoriales) con la marca de una empresa — Stripe por defecto. Convierte una toma de cámara (más grabaciones de pantalla o un proyecto de Cap) en un video terminado.

¿Qué es stripe-youtube?

Stripe-youtube es una habilidad especializada para agentes de IA (como Claude Code, Cursor o Codex) que permite la edición de videos largos de YouTube (formato 16:9, duración de 5 a 15 minutos) completamente en la marca de una empresa. Por defecto utiliza la marca de Stripe, pero puede adaptarse a cualquier otra empresa mediante un archivo de marca único (`brand/stripe.json`). La habilidad implementa el sistema de diseño adnaan-reel v7 sobre un tablero cuadriculado con viñeta, tarjeta redondeada fija para el presentador, subtítulos cinéticos, mapas de discos, tarjetas blancas, páginas reales con resaltador, datos en un solo color, grabaciones de pantalla en una tarjeta con ventana y zooms planificados por clics, insertos de antes/después con su propio sonido, efectos de sonido estructurales escasos y una pista musical de ElevenLabs con ducking (~5 dB por debajo de la voz). El proceso corta pausas, retomas y miradas hacia abajo; construye solo los momentos diseñados como escenas HyperFrames en paralelo, compone el resto con ffmpeg, verifica la sincronización de labios y entrega el video final (`final.mp4`), subtítulos (`captions.srt`), capítulos (`chapters.txt`), una descripción y miniaturas. Se invoca con comandos como `/stripe-youtube`, "edita este video de YouTube en nuestra marca", o para intercambiar el archivo de marca de otra empresa. Requiere dos aprobaciones (esquema de capítulos, luego tabla de beats) y está diseñado para reutilizar los helpers de la habilidad hermana `adnaan-reel`.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/adukhan98/stripe-video-skill/tree/HEAD/skills/stripe-youtube

Preguntar en tu IA favorita

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

Documentación

¿Qué hace stripe-youtube?

La edición de Stripe de la habilidad de formato largo de Adnaan (adnaan-youtube): el mismo pipeline y el sistema de diseño v7 sobre el tablero 16:9, con cada color tomado de un archivo de marca. La marca predeterminada es Stripe (brand/stripe.json, escrita a partir de la página pública de marca de Stripe: blurple #533AFD como acento, pizarra #061B31 para discos y tinta, papel frío #EEF1F6, tarjetas blancas, fresa solo para datos). Otra empresa = otro archivo de marca ($Y/brand.py init --edit-dir edit --brand acme.json); nada más cambia. Antes de cualquier cosa, mira assets/style/stripe_youtube_sheet.jpg (fotogramas reales del primer video hecho con esto) y hojea examples/stripe-v1/ (su tabla de beats y escenas) y examples/yt-01-v7/. La dirección de arte es vinculante y vive en references/style.md; los capítulos, ventanas y cadencia están en references/planning.md; la descripción está en references/description.md. (El aspecto anterior de Greg Light/Dark marker se mantiene solo si se solicita).

Cómo entra la marca: edit/brand/brand.json → $Y/brand.py escribe brand.css (reapunta los tokens del runtime) → board.py lo enlaza después de v7yt.css en cada escena que prepara, y talkcaps.py hace lo mismo para las superposiciones de subtítulos; el runtime hace tweens (V.mintTo / V.charcoalTo) leyendo los tokens, y las placas de compose siguen el archivo. Las escenas nunca escriben un color hexadecimal. Los logotipos que nombra el archivo de marca se obtienen del kit oficial a edit/logos/ (nunca se redibujan).

Esta habilidad es la hermana de formato largo de adnaan-reel y reutiliza sus helpers (transcripción, corte, verificación, capturas de páginas, descargadores de logotipos/fotos/iconos, el pipeline de renderizado/loudness, el kit de SFX, postura de cabeza). Debe estar instalada en ~/.claude/skills/adnaan-reel. Ejecuta cada helper con el entorno de ese proyecto: uv run --project ~/.claude/skills/adnaan-reel python <helper> … — R=~/.claude/skills/adnaan-reel/helpers, Y=~/.claude/skills/stripe-youtube/helpers en adelante.

Cómo se construye el formato largo (por qué difiere de los reels)

Un reel convierte cada beat en una escena HyperFrames completa. Un video largo no puede (horas de renderizado y cansado de ver). Aquí:

  1. El corte ($R/render.py --base-only) → base.mp4: su cámara, cortado, 1920x1080, con la voz (construido en una pasada de precisión de muestra — ver Anti-patrones, desviación de sincronía de labios), luego $Y/lookdowns.py mantiene un fotograma sobre las miradas hacia abajo.
  2. Momentos diseñados son escenas HyperFrames ($Y/board.py): lienzo, mapa, tablero, prueba (opaco, 3–10 s) y superposiciones de llamadas — típicamente 25–45 por video, construidas en paralelo por agentes. Los subtítulos de charla son superposiciones generadas ($Y/talkcaps.py), una por ventana de charla a pantalla completa.
  3. Todo lo demás se compone ($Y/compose.py): charla = base a pantalla completa + subtítulos; pantalla = placa de tablero + su grabación de pantalla (cortada con los mismos rangos, ampliada por $Y/zoomplan.py) + la tarjeta del presentador; ventanas de escena = el render + la tarjeta; superposiciones encima; SFX + la pista musical nivelada; −14 LUFS. ~40 s de composición por minuto de video.

Principios

  1. El tablero es la base, él está en la tarjeta. ~70–85 % del tiempo de ejecución es un diseño de tablero con su cámara simple en la tarjeta (lugar fijo, se mueve solo en un corte, anillo de acento); charla a pantalla completa es la puntuación (introducción, opiniones, historias, CTA). Sin mate por defecto — le gusta la tarjeta simple.
  2. Un aspecto, un archivo de marca. Papel + cuadrícula + viñeta fuerte, el color primario de la marca como el ÚNICO acento (blurple de Stripe), su color profundo para discos con glifos Phosphor blancos y tinta (pizarra de Stripe), tarjetas blancas planas, trazos vectoriales limpios, Inter Tight / Inter (el tipo de letra propio de Stripe no es público). El color de datos (fresa #E8435A) solo para números. Sin marcador, sin Caveat, sin tonos pastel, sin hexadecimal escrito en una escena.
  3. La charla tiene subtítulos, cada palabra. Las ventanas de charla a pantalla completa llevan subtítulos cinéticos de cobertura completa (blanco, una palabra héroe por frase en el acento claro de la marca, columna izquierda sobre una parte tranquila de su fondo). Las ventanas de tablero llevan las palabras dentro del diseño. El SRT todavía se entrega. Las palabras en pantalla son palabras que él dice.
  4. Muestra lo real. Cada página, papel, publicación, estudio que nombre aparece de verdad (tira legible en una tarjeta blanca, resaltador con tono de marca sobre la frase dicha); cada herramienta/empresa recibe su logotipo oficial; las personas reciben fotos reales. Nunca inventes números, citas, pantallas.
  5. Las pantallas son el tutorial. Su grabación de Cap en una tarjeta con ventana, ampliada en lo que hace clic (sus zooms de Cap ganan, luego los grupos de clics, luego los objetivos manuales), las llamadas se dibujan después de que el zoom aterriza. La espera se corta, nunca se acelera.
  6. Dos aprobaciones, luego construir todo. Esquema de capítulos → tabla de beats → piloto (2–3 escenas + los subtítulos en el aspecto) → construir todos los momentos en paralelo → componer → auto-verificación → entregar. El piloto automático ("solo hazlo") omite las esperas.
  7. Nunca un tablero muerto. Cada momento diseñado tiene un objeto héroe que actúa la frase + 1–3 micro-animaciones; la cámara viaja; el fotograma 0 de cada escena ya muestra su encabezado u objeto principal.
  8. El sonido apoya la voz. Solo SFX estructurales (~1 cada 30–60 s, kit v6 bajo y cálido), una pista musical calmada con ducking ~5 dB por debajo de su voz (no oiría una más silenciosa), voz arriba, −14 LUFS.
  9. Verificar antes de mostrar. Conteos de fotogramas exactos, sincronía de labios verificada en cada corte, cada límite de ventana en una hoja, subtítulos leídos contra el corte, loudness medido. Él nunca debería ser quien encuentre un problema de sincronía o nivel.

Reglas estrictas

  1. Esquema aprobado, luego tabla de beats aprobada, antes de construir cualquier escena (a menos que sea piloto automático).
  2. Las reglas de corte de adnaan-reel se aplican sin cambios: cortes en límites de palabras, cada corte de relleno y cada unión verificada con $R/verify_cuts.py (lee las banderas ⚠ TAIL/HEAD), nunca renderizar un EDL de prueba en edit/, fundidos de 30 ms.
  3. Empieza desde sus recortes de Cap (source/cap.json "trims"). Luego elimina retomas: conserva la ÚLTIMA toma completa de cada línea, nunca coser una línea de dos intentos, descarta cualquier cosa que rechace en voz alta ("no", "otra vez", "borra eso") y las tonterías; verifica el final de la sesión por un gancho regrabado. Encuentra repeticiones transcribiendo cada rango conservado por separado y luego cada unión con sus vecinos — whisper sobre el corte largo fusiona dos tomas de la misma línea en una.
  4. Sin aire muerto: recorta cada rango a su discurso (piso de ruido + 7 dB, 0.07 s antes / 0.09 s después) y divide las pausas internas ≥ 0.22 s ($R/audio_env.py tighten --margin 7 --min-gap 0.22). Él pidió dos veces que se cortaran "todas las pausas" — los 0.3–0.9 s de aire que la primera pasada conservó se leían como pausas.
  5. Las pantallas se cortan con los MISMOS rangos que la cámara (compose.py lo hace desde timeline.json).
  6. Escenas: exactamente su conteo de fotogramas (board.py lo preestablece, board.py check lo verifica); el runtime (board.css/js, v7yt.css/js) está instalado, nunca editado por escena; un cambio de aspecto global se hace UNA VEZ en templates/runtime/ → board.py runtime. Zona de tarjeta clara; fotograma 0 no vacío.
  7. Renderiza solo a través de board.py render (los agentes también, --only <id>): elige ProRes 4444 .mov para superposiciones (un h264 .mov es opaco — las ventanas de charla mostraban papel en lugar de él) y comparte ranuras de renderizado en toda la máquina. Nunca pkill renders — un pkill de un agente mató el render de todos los demás agentes.
  8. Las posiciones de llamadas vienen de compose.py where <out_t> <sx> <sy>, nunca adivinadas.
  9. Un sub-agente por escena (o por familia de escenas que comparten un objeto, ej. la cadena), todos generados en un mensaje; revisa las imágenes estáticas de cada escena a medida que llegan, envía correcciones con SendMessage al mismo agente. Un objeto compartido tiene UN dueño que escribe el módulo compartido + notas; otros agentes copian, nunca bifurcan. Confía en las marcas de tiempo de los archivos, no en los informes.
  10. Descargas a través de $R/fetch.py, capturas a través de $R/capture.py (registradas para credits.md); todas las salidas en <project>/edit/; nunca escribir dentro de un directorio de habilidad durante una edición.
  11. Verificación de espejo en la cámara antes de cortar (acercarse a cualquier impresión en su ropa/fondo en una imagen estática a resolución completa).
  12. En bucles de shell, ffmpeg recibe -nostdin (de lo contrario, se come el stdin del bucle).

Helpers

HelperQué hace
$Y/cap.py find / info <p.cap> / ingest <p.cap> --edit-dir EProyectos de Cap (más reciente primero) → source/cam.mov, source/screen.mp4, source/cap.json (clics, movimientos, recortes, zooms)
$R/transcribe.py source/cam.mov --edit-dir E --vocab "…"Transcripción a nivel de palabra → transcripts/cam.json (en caché)
$R/pack_transcripts.py · $R/audio_env.py · $R/verify_cuts.py · $R/timeline_view.pyLeer la toma, apretar, verificar cada unión (adnaan-reel)
$R/headpose.py source/cam.mov --start 0 --end <s> > E/headpose_report.txtInclinación de cabeza sobre la toma → tramos de mirada hacia abajo
$R/render.py edl.json -o base.mp4 --base-onlyEl corte → base.mp4 + timeline.json (voz de precisión de muestra)
$Y/lookdowns.py --edit-dir EMantiene un fotograma de cámara sobre miradas hacia abajo al inicio/final de líneas; re-ejecutar después de cada render de base
$Y/sync_check.py --edit-dir E [--final final.mp4]Sincronía de labios por segmento (imagen vs voz vs fuente) y final vs base; salir 1 si está desviado
$R/capture.py · $R/fetch.py logo/photo/icon/url/creditsTiras de página legibles, logotipos oficiales, fotos reales, iconos Phosphor, descargas, credits.md
$Y/board.py prepare/runtime/render/check --edit-dir E [--only ids]Proyectos de escena desde animations/scenes.json (runtime v7 + iconos + inicio + assets + TASK.md); renderizado de ranura limitada; verificación de fotograma exacto / alfa
$Y/talkcaps.py --edit-dir E [--dry-run]Subtítulos de charla de cobertura total: una superposición cNN_talk generada por ventana de charla (re-ejecutar después de cualquier cambio de corte/escena)
$Y/compose.py plan / where <t> <sx> <sy> / render -o final.mp4 [--preview] [--only-window N] / sheet <video>Tabla de ventanas; coordenadas de llamadas; la composición (ventanas + tarjeta + superposiciones + SFX + música nivelada + −14 LUFS); hoja de límites
$Y/zoomplan.pyLa cámara de zoom (biblioteca)
$Y/deliver.py srt / chapters / stills <video> t…deliver/captions.srt, deliver/chapters.txt (validado para YouTube), miniaturas
$Y/brand.py init / css / apply --edit-dir E [--brand x.json]El archivo de marca → brand.css → cada escena (board.py y talkcaps.py lo llaman; apply reinstala manualmente)
$Y/review.py --edit-dir E <ids>Hoja de revisión por escena (5 fotogramas, cuadro de tarjeta delineado) → verify/review/<id>.jpg
$Y/inserts.py clip / splice / shift --edit-dir EClips con su propio audio en un tablero de marca → empalmados con precisión de fotograma en la composición → SRT + capítulos desplazados

Inicios (templates/scenes/): canvas, map, board, proof (opaco), callout_overlay, talk_overlay (transparente) y talk_captions (plantilla de talkcaps.py). Cabeceras del runtime (board.js, v7yt.js) enumeran cada primitiva. Escenas de referencia: examples/stripe-v1/ (el video de Stripe: tabla de beats, lista de escenas, módulos de cadena + tarjeta de marca + página) y examples/yt-01-v7/ (mapa de cadena + módulo compartido, barras de datos, página de prueba, flujo de tablero, subtítulos).

Diseño

<project>/
└── edit/
    ├── project.md                 memoria de sesión
    ├── source/ (cam.mov, screen.mp4, cap.json)        transcripts/ (cam.json crudo, CAM.json corregido)
    ├── edl.json, base.mp4 (+ base_unfrozen.mp4), timeline.json, headpose_report.txt, layout.json
    ├── brand/ (brand.json, brand.css)   captures/ logos/ photos/ icons/ downloads/ music/ inserts/
    ├── animations/ (scenes.json, <id>/{hf/, TASK.md, render.mp4|mov, beats.json, qa/}, cNN_talk/ generado)
    ├── compose/ (plates, screen_cut.mp4, windows/)   verify/
    └── final.mp4, deliver/ (captions.srt, chapters.txt, description.txt, thumb_*.png), credits.md

El proceso

  1. Reanudar. Si edit/project.md existe, resume la última sesión en una línea y pregunta si continuar.
  2. Ingesta. Si no da una ruta: $Y/cap.py find y confirmar la grabación. No Cap: enlazar el archivo de cámara como source/cam.mov (grabaciones de pantalla como source/screen.mp4 en un reloj; un cap.json mínimo). Recopilar el guion, enlaces y cualquier cosa que quiera mostrar. Marca: $Y/brand.py init --edit-dir edit (Stripe; --brand x.json para otra empresa), luego obtener los logotipos que nombra el archivo de marca de su kit oficial en edit/logos/. Probar una escena en la marca antes de construir el resto.
  3. Ingerir + leer. ffprobe; una imagen estática a resolución completa para la verificación de espejo; $R/transcribe.py source/cam.mov --edit-dir edit --vocab "<cada nombre del guion/enlaces>"; $R/pack_transcripts.py; $R/headpose.py sobre toda la toma → headpose_report.txt (él …

[truncado para traducción]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados