Communitygithub.com

eduramza/shorts-factory

Transforma un video largo (transcripción + metadatos) en cortes verticales (Shorts/TikTok/Reels) optimizados para la línea de retención, usando la estructura Hook → Storytelling → Payoff. Selecciona los fragmentos, puntúa, reordena el gancho, define cortes, leyendas, zooms, música y efectos, y devuelve una Edit Decision List (EDL) en JSON.

¿Qué es shorts-factory?

Shorts Factory es una skill de IA diseñada para extraer automáticamente fragmentos virales de videos largos, con el objetivo de maximizar la retención de la audiencia en plataformas de video corto como YouTube Shorts, TikTok e Instagram Reels. Se basa en el principio de que la línea de retención (el porcentaje de espectadores que ven el video completo) es el factor clave para la viralización. La skill implementa una metodología de tres partes obligatorias: Hook (gancho), Storytelling (narrativa) y Payoff (recompensa). El proceso incluye segmentar el video en candidatos autocontenidos, puntuarlos según criterios como potencial de gancho y tensión narrativa, y aplicar una serie de técnicas de edición (Cold Open, zooms, leyendas dinámicas, música, SFX) para mantener el interés. Finalmente, genera una Edit Decision List (EDL) en JSON que detalla todos los cortes, efectos y ajustes necesarios para la edición final. La skill está diseñada para plataformas de agentes de IA como Claude Code, Cursor o Codex, y su documentación incluye pautas precisas para evitar trampas comunes y mantener la integridad del contenido original.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/eduramza/shorts-factory/tree/HEAD/skills/retention-shorts

Preguntar en tu IA favorita

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

Documentación

Habilidad: Retention Shorts (Hook → Storytelling → Payoff)

0. Origen y honestidad metodológica

Base: vídeo "ESSA TÉCNICA VIRALIZOU MEU SHORTS COM 30 MILHÕES DE VISUALIZAÇÕES" (canal O Milionário, ID iPpt_INjn8A). Los elementos marcados [VÍDEO] provienen de lo que enseña el autor. Los elementos marcados [EXT] son extensiones de ingeniería de este sistema: heurísticas razonables, pero no comprobadas por el vídeo. Deben calibrarse con datos reales de retención (ver sección 10).

1. Principio central [VÍDEO]

  • Lo que decide si un vídeo corto se vuelve viral es la línea de retención: cuantas más personas ven hasta el final, más lo distribuye la plataforma.
  • Objetivo: dejar la línea de retención lo más recta posible, sin caídas. Lo que importa es que el espectador llegue al final.
  • Tres partes obligatorias: Hook (gancho), Storytelling (narrativa), Payoff (recompensa).
  • El guion/narrativa es "el motor del coche": una edición bonita sin narrativa no retiene.
  • Duración: los vídeos de hasta ~15 s tienden a explotar más, porque es más fácil verlos enteros. Los vídeos más largos son más difíciles de viralizar, pero construyen un público fiel. Si el nicho exige vídeos más largos, usa las mismas tres etapas.

2. Modos de duración [VÍDEO + EXT]

ModoDuración objetivoCuándo usar
viral12–20 s (máx. 25)Maximizar alcance. Por defecto.
balanced20–40 sContenido con contexto mínimo.
authority40–75 sConstruir público fiel, contenido más profundo.

El usuario elige el modo. Nunca superes el límite del modo, aunque el fragmento sea bueno: acórtalo cortando partes muertas.

3. Pipeline de decisión (sigue en orden)

Paso 1: Segmentar candidatos

  • Entrada: transcripción con timestamp por palabra, cortes de escena, silencios, locutores.
  • Genera ventanas candidatas que comiencen y terminen en límites de frase (nunca en medio de una frase o idea). Genera 3× más candidatos que el número solicitado.
  • Cada candidato debe ser autocontenido: un espectador sin contexto debe entenderlo sin el resto del vídeo. Si depende de contexto anterior, descártalo o prepara una leyenda de contexto (sección 6).

Paso 2: Puntuar cada candidato (0–100)

CriterioPesoQué evaluar
Potencial de gancho25¿Hay una frase o momento que, en los primeros 3 s, sea claro, directo, rápido y prometa recompensa [VÍDEO]?
Tensión/narrativa25¿Hay conflicto, algo que sale mal, obstáculo, pregunta abierta o suspenso [VÍDEO]? ¿Hay solución?
Payoff20¿El final entrega lo que el gancho prometió (resultado, revelación, emoción, conclusión) [VÍDEO]?
Autocontenido15¿Tiene sentido por sí solo? [EXT]
Densidad/ritmo10Poco rodeo, pocas pausas, información cada pocos segundos [EXT]
Emoción/novedad5¿Sorpresa, humor, opinión fuerte, número impactante? [EXT]

Reglas:

  • Hook < 12/25 o Payoff < 8/20 → descartar, cualquiera que sea la nota total.
  • Muestra al usuario la nota por criterio y una justificación de 1 línea para cada uno.
  • Ordena por nota. Evita cortes superpuestos (> 30% de superposición): quédate con el mejor.

Paso 3: Mapear la estructura Hook → Storytelling → Payoff

Para el candidato elegido, marca en la línea de tiempo:

  • HOOK (0–3 s) [VÍDEO]: claro, directo, rápido, con promesa. Sin saludo, sin "hola a todos", sin "entonces", sin presentación.
  • STORYTELLING (medio) [VÍDEO]: secuencia de beats de tensión. Cada beat es de uno de los tipos: conflicto (algo sale mal), solución (lo que se hace), suspense ("pero antes de… algo pasó"). La narrativa debe tener un momento en que la historia "se corta" y crea curiosidad.
  • PAYOFF (últimos 3–5 s) [VÍDEO]: entrega la recompensa prometida por el gancho.

Si el fragmento original no comienza con un gancho fuerte, aplica la técnica Cold Open [EXT]:

  1. Localiza en el propio fragmento la frase más fuerte (la promesa, el resultado o la frase más provocativa).
  2. Coloca esa frase al inicio (0–3 s) como gancho, luego vuelve al orden cronológico.
  3. Solo haz esto si la frase tiene sentido por sí sola y si el payoff sigue siendo claro. No distorsiones el significado: prohibido alterar el sentido de lo que la persona dijo.

Paso 4: Ingeniería del gancho [VÍDEO + EXT]

  • Genera 3 variaciones de texto de gancho en pantalla (título de apertura), con ≤ 8 palabras cada una:
    • Promesa de resultado ("El regalo de $5 que hizo llorar a mi abuela").
    • Curiosidad/laguna ("Solo tenía $5 y…").
    • Contradicción/provocación.
  • El texto debe ser verdadero en relación con el contenido (sin clickbait que el payoff no sustente).
  • Debe leerse en ≤ 2 s.

Paso 5: Limpieza de ritmo [EXT]

  • Elimina silencios > 0,35 s, hesitaciones ("eh", "este", "tipo", "mmm"), repeticiones y falsos comienzos.
  • Mantén micro-pausas de 0,1–0,2 s antes de una revelación (tensión), donde la pausa tiene función.
  • No cortes en medio de una sílaba: usa puntos de corte en cruce por cero de audio y crossfade de 30–60 ms.
  • Si el resultado supera el límite del modo, elimina primero los beats de menor tensión del medio, nunca el hook ni el payoff.

Paso 6: Plan de edición [VÍDEO + EXT]

Elementos que el vídeo recomienda, para que el espectador "no note pasar el tiempo" [VÍDEO]:

  1. Subtítulos dinámicos: palabra por palabra, con resalte de la palabra hablada.
  2. Zooms y cortes rápidos: siempre algo sucediendo.
  3. Cambio de música entre escenas: da sensación de varias cosas a la vez.
  4. Pista de suspenso en el tramo de tensión, para generar ganas de ver el final.

Parámetros operativos sugeridos [EXT], ajustables:

  • Cadencia visual: un cambio visual (zoom, corte, cambio de encuadre, resalte, b-roll) cada 1,5–3,5 s. Nunca más de 4 s sin cambio.
  • Zooms: punch-in 105–115% en palabras de énfasis; zoom lento (100→108%) en tramos de tensión; reinicio en el corte siguiente. Alterna la dirección para no cansar.
  • Subtítulos: 1–3 palabras a la vez, ≤ 2 líneas, palabra activa en color de resalte, posición en el tercio inferior (fuera de la zona de interfaz de la app: mantener margen inferior de ~20% y lateral de ~6%). Emoji solo cuando refuerce la palabra.
  • Música:
    • Beat 1 (hook y comienzo): energía media, entra en 0 s.
    • Beat de tensión: pista de suspenso, volumen sube ligeramente, graves más presentes.
    • Payoff: resuelve (caída de la tensión o swell + silencio de 0,2 s antes de la revelación).
    • Cambio de música: solo en límites de beat/escena, con crossfade de 200–400 ms.
    • Voz siempre sobre la música: ducking de −14 a −18 dB bajo la voz.
  • SFX: whoosh en cortes/zoom, hit en revelaciones, risers antes del payoff. Máx. 1 SFX cada ~2 s.
  • B-roll/imagen de apoyo: cuando haya algo concreto mencionado (objeto, lugar, número), muéstralo por 1–2 s.
  • Barra de progreso discreta (opcional): refuerza la expectativa de llegar al final.

Paso 7: Final del vídeo [EXT]

  • El payoff debe ser el último momento relevante. Corta inmediatamente después de la frase final (≤ 0,3 s de margen).
  • Opcional, modo loop: si el final puede enlazar visual o verbalmente con el gancho, mantén el último frame cercano al primero.
  • Sin "gracias por ver" o llamada a la acción que rompa el final. Si hay CTA, usa texto discreto sobre el payoff.

4. Anti-patrones (rechaza o corrige)

  • Abrir con saludo, contexto largo o "hoy voy a hablar de".
  • Hook que promete algo que el payoff no entrega.
  • Fragmento que termina en medio de una idea.
  • Más de 4 s sin cambio visual.
  • Música alta que compite con la voz.
  • Subtítulo fuera del área segura o ilegible.
  • Cortes que cambian el sentido de lo dicho.
  • Vídeo demasiado largo para el modo elegido.
  • Efectos que no sirven a la retención (decoración).

5. Formato de salida: Edit Decision List (EDL) en JSON

La salida debe ser solo JSON válido, según el esquema a continuación.

{
  "clip_id": "string",
  "mode": "viral|balanced|authority",
  "source": { "start": 0.0, "end": 0.0 },
  "scores": {
    "total": 0,
    "hook": 0, "tension": 0, "payoff": 0,
    "self_contained": 0, "density": 0, "emotion": 0,
    "rationale": { "hook": "", "tension": "", "payoff": "" }
  },
  "structure": {
    "hook":    { "start": 0.0, "end": 3.0, "technique": "native|cold_open", "text_overlay_options": ["", "", ""], "chosen_overlay": 0 },
    "beats":   [ { "start": 0.0, "end": 0.0, "type": "conflict|solution|suspense", "note": "" } ],
    "payoff":  { "start": 0.0, "end": 0.0, "note": "" }
  },
  "segments": [
    { "id": "s1", "src_start": 0.0, "src_end": 0.0, "out_start": 0.0, "role": "hook|body|payoff", "speed": 1.0 }
  ],
  "cuts_removed": [ { "src_start": 0.0, "src_end": 0.0, "reason": "silence|filler|repeat|low_tension" } ],
  "reframe": { "mode": "auto_face|split|center|manual", "keyframes": [ { "t": 0.0, "cx": 0.5, "cy": 0.4, "scale": 1.0 } ] },
  "captions": { "style": "string", "words": [ { "t0": 0.0, "t1": 0.0, "text": "", "emphasis": false } ] },
  "effects": [
    { "type": "zoom_punch|zoom_slow|shake|flash|overlay_text|broll|sticker|freeze", "t0": 0.0, "t1": 0.0, "params": {}, "reason": "" }
  ],
  "audio": {
    "voice": { "normalize_lufs": -14, "denoise": true },
    "music": [ { "track_id": "", "t0": 0.0, "t1": 0.0, "mood": "energetic|suspense|resolve", "gain_db": -16, "ducking": true, "fade_in": 0.2, "fade_out": 0.3 } ],
    "sfx": [ { "id": "", "t": 0.0, "gain_db": -10 } ]
  },
  "retention_forecast": { "curve": [ { "t": 0.0, "pct": 100 } ], "risk_points": [ { "t": 0.0, "why": "" } ] },
  "qa": { "passed": true, "violations": [] },
  "duration_out": 0.0
}

Reglas del JSON:

  • Todos los tiempos en segundos, relativos al vídeo original (src_*) o al vídeo final (out_*, t0, t1, t).
  • segments describe el montaje final en orden de visualización (incluye el cold open, si se usa).
  • Todo effect necesita reason vinculado a la retención (ej.: "evita 4 s sin cambio en 12–16 s").
  • retention_forecast es una estimación heurística, no una medición. Etiquétalo como tal en la interfaz.

6. Contexto ausente

Si el fragmento requiere contexto que él mismo no explica, agrega un overlay_text corto (≤ 8 palabras) en los primeros 3 s, o descarta el candidato.

7. Checklist de QA (ejecutar antes de devolver)

  1. ¿Los primeros 3 s tienen gancho claro y promesa?
  2. ¿Existe al menos 1 beat de tensión y una resolución?
  3. ¿El payoff entrega la promesa del hook?
  4. ¿Duración dentro del modo?
  5. ¿Ningún fragmento > 4 s sin cambio visual?
  6. ¿Ningún corte en medio de palabra/idea?
  7. ¿Subtítulos en área segura, ≤ 3 palabras a la vez?
  8. ¿Música con ducking bajo la voz y cambio solo en límites de escena?
  9. ¿Significado original preservado?
  10. ¿El final corta justo después del payoff?

Si algún elemento falla, corrígelo y reevalúa (hasta 2 iteraciones). Si sigue fallando, devuelve qa.passed=false con las violaciones.

8. Reglas de seguridad e integridad

  • Nunca inventes frases o hechos que no estén en la transcripción.
  • Nunca alteres el sentido de una frase al reordenarla.
  • El gancho en texto debe ser verdadero en relación con el contenido.
  • No generes cortes de contenido que el usuario no haya declarado poseer o tener licencia para usar.

9. Variaciones A/B [EXT]

Cuando se solicite, genera hasta 3 variaciones del mismo corte, cambiando una variable a la vez (gancho en texto, orden del cold open o estilo de subtítulo). Registra qué variable se cambió.

10. Calibración con datos reales [EXT]

Los pesos y parámetros de esta habilidad son puntos de partida. El sistema debe:

  • Registrar, para cada corte publicado, la curva de retención real (cuando el usuario importe desde YouTube Studio/TikTok).
  • Comparar la curva real con retention_forecast, y la nota con el resultado.
  • Sugerir ajustes de pesos cuando haya ≥ 30 cortes con datos.

Individual skills in this repo

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

Skills relacionados