agentleFS
jeronimo114jeronimo114/claude-skills/skills/edicion-parches-de-ia/SKILL.md

edicion-parches-de-ia

Skill0 starsChanged 56 days agoMITView on GitHub

Pipeline para editar los videos de PARCHES DE IA (comunidad de encuentros presenciales de inteligencia artificial en Medellín, fundada por Jacobo Villada y Jerónimo Martínez) en reels verticales 1080x1920 montados en Remotion, con la identidad real de la marca: lima #a8e028 sobre negro, Archivo Black, metraje desaturado, subtítulos quemados, franjas lima para los datos duros, contenedor de línea fina con chips numerados y el arco del isotipo. Úsalo SIEMPRE que se edite un video de Parches de IA o de su talento, incluso si no dicen "Remotion": ponerle captions, cortar retomas y silencios, sincronizar subtítulos, hacer zoom o punch-ins, meter música y efectos, o armar un reel de bienvenida o de convocatoria a un parche. Dispara con "edita este video de Parches", "ponle los colores de Parches", "el reel de la comunidad", "estilo parches.", "hazlo con la marca del arco". No es para MELØ (eso es edicion-videos-melo) ni para la marca personal de Jero (eso es edicion-videos-marca-personal).

  • Reads credentials

The file

Files
SKILL.md

Edición de video · Parches de IA

Convierte metraje crudo de cabeza parlante en reels verticales (1080x1920) con la identidad de Parches de IA. Todo se monta en Remotion, sin editor de línea de tiempo. La marca se ve cara porque sigue una receta estricta, no porque cada pieza sea difícil.

Parches de IA es marca aparte de MELØ. El naranja #f39200 de MELØ NUNCA entra a una pieza de Parches. MELØ aparece como organizador y patrocinador, no como dueño.

⚠️ La regla que costó dos rondas de corrección

NUNCA cortes ni sincronices con los tiempos de palabra de Whisper. En material real se equivoca hasta medio segundo: estira una palabra por encima de un silencio o arranca otra antes de que se oiga. Si cortas con esos tiempos:

  • el corte cae dentro de una palabra y el usuario lo oye como tartamudeo;
  • queda sin cortar el aire muerto que creías haber quitado;
  • el caption se prende en lima mientras todavía hay silencio.

scripts/build_pdi_reel.py ya resuelve esto: detecta los silencios midiendo el RMS de la onda y pega cada palabra a la voz medida (snap). Un corte solo puede caer dentro de un silencio real. Úsalo siempre con --audio.

Verificación obligatoria antes de renderizar (debe dar ~0 palabras fuera de voz y cero huecos > 0.4s):

python3 - <<'PY'
import json, wave, numpy as np
w=wave.open('/tmp/pdi/fast.wav'); sr=w.getframerate()
a=np.frombuffer(w.readframes(w.getnframes()),dtype=np.int16).astype(np.float32)/32768
hop=0.02; n=int(sr*hop)
db=np.array([20*np.log10(np.sqrt((a[i:i+n]**2).mean())+1e-9) for i in range(0,len(a)-n,n)])
v=db>=-45
d=json.load(open('src/pdi/captions.json'))
ws=[x for c in d['captions'] for x in c['words']]
bad=[x for x in ws if not v[int((x['s']+0.02)/hop)]]
print(f"palabras {len(ws)} | fuera de voz {len(bad)}", [x['t'] for x in bad])
PY

Antes de nada: la marca

Fuente de verdad: ~/Downloads/marca-parches-de-ia/manual-marca.html y tokens.css (copia en references/tokens.css). Lo esencial para video:

  • Color: negro #080808, lima #a8e028, lima brillante #c2f050, oliva #4d6614 / #7aa31e (rampa del arco), hueso #f0f0e0 (no blanco puro: el blanco puro sobre negro vibra), glow cálido #262312.
  • La proporción manda sobre el hex: negros 54%, limas 31%, hueso 10%, medios 5%. El lima nunca pasa de un tercio de la pieza. Ese es el límite entre sobrio y fluorescente, y en video se rompe rapidísimo.
  • Tipografía: Archivo Black en titulares (MAYÚSCULA, tracking -.02em, interlínea .9), Archivo en cuerpo, Space Mono en etiquetas (MAYÚSCULA, .24em siempre: sin ese letterspacing se lee como código), Instrument Serif itálica para la voz y para el "IA" del titular.
  • Fotografía: blanco y negro o desaturada, con el lima como único color de la pieza. Nunca metraje a color compitiendo con el lima.
  • La tipografía nunca va suelta sobre la foto: siempre velo (degradado negro 0→80% en el tercio superior y en el inferior) o el contenedor de línea fina encima.
  • Nunca emojis. Nunca guiones como puntuación (ni raya ni guion suelto en ningún copy: se parte con punto, coma o dos puntos). Español colombiano natural: parche, no meetup.
  • Logo en video: parches. (la palabra en minúscula con punto lima), no el lockup completo. El arco del isotipo va como recurso de fondo a gran escala y puede salirse del encuadre por abajo.
  • Datos duros que sí se pueden decir: la entrada nunca se cobra, los encuentros son presenciales en Medellín. Cualquier otro dato (fecha, sede, cupos, número de edición) confírmalo con el usuario, no lo inventes.

Flujo

  1. Sondea: ffprobe (ojo con rotation en side_data: el celular graba 1920x1080 con rotación 90 y en realidad es vertical) y extrae frames para ver el encuadre.
  2. Denoise: ~/.claude/skills/edicion-videos-melo/scripts/denoise_elevenlabs.sh crudo.MP4 clean.wav (ElevenLabs Audio Isolation, key en ~/.config/melo/secrets.env).
  3. Transcribe con dos modelos y contrasta: mlx large-v3 + large-v3-turbo, --condition-on-previous-text False. Serializa, no los corras en paralelo.
  4. Corta retomas a mano con trim+concat de ffmpeg, montando el video contra el audio LIMPIO. Regla de oro: agrupa las tomas por idea y quédate con la última toma buena (no la última a secas). Verifica cada hueco con rms_envelope.py: dead-air se corta, retoma se conserva. → video_cut.mp4
  5. Jump-cuts + speed + captions: scripts/build_pdi_reel.py tx_cut.json --audio cut16k.wav --out-dir src/pdi. Escribe cut_filter.txt, captions.json y beats.json (beats + cues). Aplícalo:
    ffmpeg -i video_cut.mp4 -i video_cut.mp4 -filter_complex_script cut_filter.txt \
      -map '[outv]' -map '[outa]' -r 30 -c:v libx264 -crf 16 -c:a aac public/video/talento.mp4
  6. Verifica con el snippet de arriba. Si hay palabras fuera de voz, no sigas.
  7. Monta con assets/ParchesReel.tsx + assets/kit.tsx + assets/brand.ts.
  8. QA por frame (npx remotion still ... --frame=N) antes de renderizar.
  9. Render + normaliza el audio (obligatorio, el denoise deja la voz bajita):
    npx remotion render src/index.tsx ParchesReel out/reel.mp4 --codec=h264 --crf=17
    ffmpeg -i out/reel.mp4 -c:v copy -af "loudnorm=I=-14:TP=-1.5:LRA=11" \
      -c:a aac -b:a 256k -ar 48000 out/reel-final.mp4

Los cinco recursos propios, animados

Están todos en assets/kit.tsx, listos:

RecursoComponentePara qué
01 Arco con líneasArcBgfondo a gran escala, se sale por abajo
02 Franja lima planaStriplos datos duros: etiqueta mono + valor Archivo Black, negro sobre lima
03 Contenedor línea finaLineBoxagrupa listas, borde lima 1px, radio 14
04 Chip numerado + IA itálicoNumChip / IAItalicordena la lista, firma el titular
05 Glow cálidoWarmGlowel 12% que hace que el negro respire, siempre detrás

Más Grade/gradeAt (desaturación), Scrim (velo de legibilidad), Wordmark, MonoLabel, Sfx, Music y usePop/useExit.

Decisiones que hicieron que el reel funcionara

  • El metraje arranca monocromo y vuelve a color a los ~3s, cuando sale el sting de marca. La apertura es la marca; el resto es la persona. Que no compitan.
  • Reparto de trabajo entre caption y gráfico: en el subtítulo van en lima SOLO las palabras de marca (parches, IA, comunidad). Los datos duros (WhatsApp, Instagram, Medellín) NO se pintan en el caption porque cada uno ya entra en su franja lima; pintarlos dos veces dispara el lima por encima de un tercio y se ve barato.
  • Palabra activa del karaoke: negro sobre lima, que es el recurso 02 aplicado a la palabra. No naranja, no blanco, no borde.
  • Los gráficos se enganchan a los cues de beats.json, nunca a números escritos a mano. Si hay que volver a cortar el metraje, todo se resincroniza solo.
  • Nada tapa la cara: el sting va en el tercio superior, los paneles y franjas en top 1046-1150 (pecho), los captions en bottom: 268.
  • Cierre: negro con glow, arco saliéndose por abajo, parches. grande y una etiqueta mono de CTA. Sobrio, sin franja encima del wordmark.

Audio

  • SFX y música son del cliente, no sintetizados. Pídelos si no los tienes.
  • Alinea el drop de la canción con la tarjeta de cierre: mide en qué segundo entra el drop (envelope RMS) y arranca la música en VIDEO_DUR - DROP para que caiga exacto. Un riser resolviendo ahí encima remata.
  • Un riser solo se usa si resuelve en algo (un reveal, un cambio de color, el drop). Riser sin payoff suena a que falta algo.
  • Volúmenes medidos, no a ojo: cama musical ~14 dB debajo de la voz (bed 0.055), SFX de acento ~10 dB debajo del pico de voz (0.22), y el cierre puede ir 6-7 dB arriba del resto porque ahí ya no hay nadie hablando. Compruébalo midiendo el mix por tramos antes de dar el render por bueno.

Entregar

  • El render bueno va a 1080x1920 con el audio normalizado a −14 LUFS.
  • Para mandar por Gmail desde el navegador el tope de subida es 10 MB: saca una copia en dos pasadas (-b:v 2000k) y dile al usuario que esa es solo para revisar desde el celular, que la buena está en disco.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.