Communitygithub.com

Varnan-Tech/opendirectory

Genera un reel de sizzle o video hype de alta energía (MP4) a partir de activos de marca y mensajes clave. Formato de montaje rápido con cortes dinámicos, superposiciones de texto audaces y música opcional.

¿Qué es opendirectory?

Esta habilidad crea videos de alta energía tipo 'sizzle reel' o 'hype video', ideales para lanzamientos, promociones de eventos, presentaciones para inversores y más. Está construida sobre el pipeline HyperFrames (GSAP + Chromium headless + FFmpeg), sin depender de APIs de pago como Runway o Pika, manteniendo el costo de ejecución en cero más allá de Node.js y FFmpeg. La habilidad soporta cuatro presets de tono (enérgico, cinematográfico, emocional, profesional), duraciones de 30, 60 o 90 segundos, y relaciones de aspecto 9:16 o 16:9. El generador sigue una estructura de cuatro secciones (Cold Open, Build, Peak, Land) y puede sincronizar cortes con el ritmo de la música proporcionada. Es invocada cuando el usuario menciona frases como "sizzle reel", "hype video", "highlight reel", "launch hype", "conference opener", "event promo video", "investor pitch video" o "brand video montage".

Compatible con✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/vid-sizzle-reel

Preguntar en tu IA favorita

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

Documentación

vid-sizzle-reel

Genera un sizzle reel o hype video de alta energía a partir de activos de marca y mensajes clave. Pipeline: Composición HTML de HyperFrames (timelines GSAP) → Chromium headless → FFmpeg H.264 MP4. Sin Runway. Sin Pika. Sin APIs de video IA. Costo de ejecución cero más allá de Node.js + FFmpeg.

Diferenciación con vid-product-launch:

  • vid-product-launch cuenta una historia narrativa — una revelación ganada, cinco secciones, arco de tensión
  • vid-sizzle-reel genera energía y emoción — cortes rápidos, música primero, sin un solo ritmo narrativo

Reglas Críticas (leer antes de cada generación)

  1. Escribe los mensajes clave tú mismo — o pídele al usuario que los escriba. Estas son las frases exactas que aparecen en pantalla. "La IA lo resolverá" produce relleno. 3-5 líneas contundentes son todo el contenido de un sizzle reel.

  2. El nombre de la marca aparece SOLO en la sección Land. Cold Open y Build crean tensión sin nombrar la marca. La sección Land es la recompensa.

  3. Declara el patrón de ritmo en un comentario al inicio del script antes de escribir cualquier HTML. Formato: // RHYTHM: flash-sequence | Cold[0-5s]: stat | Build[5-40s]: msg(1.5s)|flash|... | Peak[40-55s]: ... | Land[55-60s]: logo+CTA. Cada decisión de temporización se verifica contra esto.

  4. Construye primero el diseño del estado final en CSS — aún no GSAP. Posiciona cada elemento en su momento más visible en CSS estático. Luego agrega entradas GSAP con gsap.from() y salidas con gsap.to(). Nunca posiciones en el estado inicial animado.

  5. class="clip" en cada elemento temporizado. Requerido por HyperFrames. Sin esto, el elemento es invisible para el reproductor.

  6. data-start, data-duration, data-track-index en cada clip. Sin excepciones. Los clips del mismo track no pueden superponerse — usa diferentes índices de track.

  7. No Math.random(). HyperFrames requiere composiciones deterministas. Usa PRNG con semilla (mulberry32) para cualquier valor pseudoaleatorio.

  8. Todos los timelines GSAP comienzan { paused: true } y se registran en window.__timelines["comp-id"]. El reproductor de HyperFrames controla la reproducción — nunca llames a tl.play().

  9. Nunca position: absolute en contenedores .scene-content. Usa width:100%; height:100%; padding:Npx; display:flex. Reserva position:absolute solo para elementos decorativos.

  10. Música: elemento <audio> separado con data-track-index. El video debe tener muted playsinline. Nunca pongas audio en un elemento <video>.

  11. Lee references/cut-patterns.md Y references/tone-presets.md antes de generar cualquier HTML.

  12. Nunca vuelques HTML en el chat. Guarda en archivo. Muestra solo el resumen.


Paso 1: Entrada

Requerido:

  • key_messages — 3-5 líneas contundentes para mostrar en pantalla (el usuario debe escribirlas)

Parámetros opcionales y valores por defecto:

ParámetroPor defectoDescripción
brand_assetsningunoURL/ruta del logo, colores de marca (hex), capturas de pantalla clave
toneenergeticenergetic / cinematic / emotional / professional
musicningunoRuta de archivo, o cadena BPM/género (ej. "128bpm electronic")
duration6030 / 60 / 90 segundos
aspect_ratio9:169:16 (1080x1920) / 16:9 (1920x1080)
cut_styleautofast (1-2s) / cinematic (3-5s) — auto deriva del tono
end_cardautoLogo + tagline + URL de CTA para la sección Land

cut_style auto-defaults: energetic → fast; professional → fast (2s); cinematic → cinematic; emotional → mixed

Si faltan key_messages, pregunta exactamente:

"Para generar el sizzle reel, necesito tus mensajes clave — las frases exactas que aparecerán en pantalla. Dame 3-5 líneas contundentes. Esto es lo más importante que estás escribiendo para este video.

Ejemplos: 'Usado por 500+ equipos de crecimiento' / 'De días a minutos' / 'Funciona con Claude, Codex, Gemini'

También útil: tono (energético/cinematográfico/emocional/profesional), duración (30/60/90s), colores de marca o URL del logo."

Si key_messages están presentes → procede al Paso 2 inmediatamente.


Paso 2: Instalar HyperFrames

Instala las habilidades de HyperFrames (solo la primera vez — omite si ya están instaladas):

npx skills add heygen-com/hyperframes

Verifica el entorno:

node --version   # debe ser >= 22
ffmpeg --version  # debe estar presente

Inicializa el proyecto:

npx hyperframes init sizzle-[slug] --example kinetic-type --non-interactive
cd sizzle-[slug]

Slug: kebab-case del nombre de marca end_card o del primer key_message, máximo 25 caracteres.


Paso 3: Arquitectura Interna (nunca se muestra al usuario)

1. Deriva la temporización de cortes de duration + cut_style:

Sección30s60s90s
Cold Open0-5s0-5s0-8s
Build5-25s5-40s8-65s
Peak25-28s40-55s65-80s
Land28-30s55-60s80-90s

Convierte cada límite a milisegundos. Calcula la duración por escena desde cut_style:

  • fast: 1.2s-1.8s por mensaje (usa 1.5s por defecto)
  • cinematic: 3.5s-5.0s por mensaje (usa 4.0s por defecto)
  • mixed: 2.0s-4.0s variando según la energía de la sección

2. Mapea key_messages a escenas:

  • Cold Open (1 escena): una estadística impactante o pregunta — SIN nombre de marca, genera intriga
  • Build: una escena por key_message
  • Peak: repite el mensaje más fuerte a escala doble, o combina 2 mensajes en un flash rápido
  • Land: nombre de marca + tagline + URL de CTA

3. Detecta sincronización de ritmo si se proporciona música:

npx hyperframes tts --analyze-beats [archivo-musica]

Si no está disponible, calcula desde BPM: beat_ms = 60000 / BPM. Alinea los cortes a cada 2do beat.

4. Selecciona preset de tono — lee references/tone-presets.md para tokens CSS.

5. Declara patrón de ritmo — escribe comentario al inicio del script:

// RHYTHM: flash-sequence
// Cold Open [0-5000ms]: stat
// Build [5000-40000ms]: msg-1(1500ms)|flash|msg-2(1500ms)|flash|msg-3(1500ms)|flash|msg-4(1500ms)|flash|build-accum(10000ms)
// Peak [40000-55000ms]: msg-strongest(1200ms)|flash|msg-2nd(1200ms)|flash|HOLD(5600ms)
// Land [55000-60000ms]: logo+tagline+cta

6. Determina dimensiones de píxeles:

  • 9:16 → W=1080, H=1920 (por defecto — Instagram Reels, TikTok, YouTube Shorts)
  • 16:9 → W=1920, H=1080

Paso 4: Composición HTML de HyperFrames

Lee references/cut-patterns.md y la habilidad de HyperFrames (/hyperframes) antes de escribir cualquier código.

Estructura HTML requerida:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
[enlace CDN de fuente desde preset de tono]
<style>
:root {
  [todos los tokens CSS del preset de tono]
}

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
</style>
</head>
<body>
<div
  data-composition-id="sizzle-[slug]"
  data-width="[W]"
  data-height="[H]"
  style="position:relative;width:[W]px;height:[H]px;overflow:hidden;background:var(--bg)"
>

  [si cut-flash: true]
  <div id="cut-flash"
    style="position:absolute;inset:0;background:var(--cut-flash-bg);opacity:0;pointer-events:none;z-index:200"></div>
  [fin si]

  [si film-grain: true]
  <canvas id="grain-overlay"
    width="240" height="135"
    style="position:absolute;inset:0;width:[W]px;height:[H]px;pointer-events:none;opacity:0.022;mix-blend-mode:overlay;z-index:50"></canvas>
  [fin si]

  [si vignette: true]
  <div id="vignette-overlay"
    style="position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 35%,rgba(0,0,0,0.65) 100%);pointer-events:none;z-index:51"></div>
  [fin si]

  <!-- Escenas — un div por escena -->
  <div id="scene-cold"
    class="clip"
    data-start="0"
    data-duration="5"
    data-track-index="0"
    style="position:absolute;inset:0;opacity:0"
  >
    <div class="scene-content" style="width:100%;height:100%;padding:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box">
      [contenido de cold open — una estadística o frase impactante, sin nombre de marca]
    </div>
  </div>

  [un div por escena de Build, data-start incrementa por duración de corte]
  [Escena(s) de Peak]
  [Escena de Land — nombre de marca + tagline + CTA]

  [si se proporciona música]
  <audio id="music"
    class="clip"
    data-start="0"
    data-duration="[duracion_total]"
    data-track-index="10"
    data-volume="0.85"
    src="[ruta_musica]"
  ></audio>
  [fin si]

  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js"></script>
  <script>
  // ── DECLARACIÓN DE RITMO ──────────────────────────────────────────────────────
  // RHYTHM: [flash-sequence | cinematic-hold | beat-sync | mixed]
  // Cold Open [0-Nms]: ...
  // Build [N-Nms]: ...
  // Peak [N-Nms]: ...
  // Land [N-Nms]: ...

  // ── PRNG CON SEMILLA (solo para grano — ningún otro valor aleatorio) ───────────
  function mulberry32(seed) {
    return function() {
      seed |= 0; seed = seed + 0x6D2B79F5 | 0;
      let t = Math.imul(seed ^ seed >>> 15, 1 | seed);
      t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
      return ((t ^ t >>> 14) >>> 0) / 4294967296;
    };
  }

  [si film-grain: true]
  // ── GRANO DE PELÍCULA (solo cinematográfico/emocional) ──────────────────────────
  const grainCanvas = document.getElementById('grain-overlay');
  const grainCtx = grainCanvas ? grainCanvas.getContext('2d') : null;
  // Grano actualizado por el ticker de GSAP (no captura por cuadro — HyperFrames maneja esto)
  [fin si]

  // ── TIMELINE GSAP ───────────────────────────────────────────────────────────
  const tl = gsap.timeline({ paused: true });

  // ── COLD OPEN ───────────────────────────────────────────────────────────────
  [tweens de entrada y salida de cold open — ver cut-patterns.md para el patrón exacto]

  // ── SECCIÓN BUILD ───────────────────────────────────────────────────────────
  [tweens por mensaje — flash-sequence o cinematic-hold de cut-patterns.md]

  // ── SECCIÓN PEAK ─────────────────────────────────────────────────────────────
  [tweens de peak — mismo patrón que build pero con temporización más ajustada]

  // ── SECCIÓN LAND ─────────────────────────────────────────────────────────────
  [entradas de land — logo, tagline, CTA. Sin salida — se mantiene hasta el final]

  // ── REGISTRO DEL TIMELINE ────────────────────────────────────────────────────
  window.__timelines = window.__timelines || {};
  window.__timelines["sizzle-[slug]"] = tl;
  </script>
</div>
</body>
</html>

Reglas de calidad de diseño:

  • Estadística de cold open: tamaño de fuente ≥160px para 16:9, ≥100px para 9:16
  • Mensajes clave: tamaño de fuente ≥80px — legibles de un vistazo
  • Nombre de marca en sección Land: ≥120px para 16:9
  • Todos los colores de variables de token de preset — sin hex libre excepto var(--accent) hex literal dentro de canvas fillStyle
  • scene-content siempre usa padding + flex — nunca position:absolute en el contenedor de contenido
  • class="clip" en cada elemento con data-start

Paso 5: Autocontrol de Calidad (corrige cada fallo antes del Paso 6)

Contenido:

  • key_messages — cada frase aparece exactamente una vez, sin duplicados
  • El nombre de la marca aparece SOLO en la sección Land (no en cold open, build ni peak)
  • Cold open NO contiene nombre de marca NI nombre de producto — solo estadística o frase impactante
  • La sección Land tiene: nombre de marca + tagline + URL de CTA (tres elementos como mínimo)
  • La URL de CTA de end_card está presente en el fotograma final

Contrato HyperFrames:

  • class="clip" en cada elemento con data-start
  • data-start, data-duration, data-track-index en cada clip
  • data-composition-id en el div raíz de composición
  • window.__timelines["sizzle-[slug]"] = tl registrado
  • Todos los timelines comienzan { paused: true }
  • Sin Math.random() — solo PRNG con semilla
  • Sin llamadas a tl.play() o tl.resume()

GSAP / Diseño:

  • gsap.from() para todas las entradas (DESDE fuera de pantalla HASTA posición CSS)
  • gsap.to() para todas las salidas (DESDE posición CSS HASTA fuera de pantalla)
  • Sin position:absolute en contenedores .scene-content
  • Patrón de ritmo declarado en comentario al inicio del script

Temporización de cortes:

  • Tono fast: duración promedio de corte ≤ 2.0s
  • Tono cinematic: duración promedio de corte ≥ 3.0s
  • El flash de corte se dispara en cada límite de corte para el tono energetic (60ms, opacidad 0→1→0)
  • Los clips del mismo track NO se superponen (verifica todas las agrupaciones de data-track-index)

Efectos de sonido:

  • window.__sfxTimeline presente y colocado antes del registro del timeline
  • Evento word-hit por mensaje clave
  • whoosh en la transición Build → Peak
  • cta-chime al inicio de Land
  • Sin efectos de sonido antes de 500ms

Paso 6: Lint, Render, Salida

npx hyperframes lint
npx hyperframes inspect --json

Corrige todos los errores de lint. Corrige todos los errores de inspect (desbordamiento de texto, clips escapando de contenedores). Luego renderiza:

npx hyperframes render --output sizzle/[slug]/sizzle-reel.mp4

Salida:

## Sizzle Reel: [nombre de marca de end_card]
Tono: [tone] | Duración: [N]s | Estilo de corte: [cut_style] | Aspecto: [ratio]
Ritmo: [patrón declarado]

Secciones
  Cold Open [0-Ns]:  [estadística o frase impactante]
  Build     [N-Ns]:  [N mensajes clave listados]
  Peak      [N-Ns]:  [mensaje más fuerte a escala máxima]
  Land      [N-Ns]:  [nombre de marca] + "[tagline]" + [URL de CTA]

Archivos
  Fuente: sizzle/[slug]/index.html
  Salida: sizzle/[slug]/sizzle-reel.mp4

Timeline de Efectos de Sonido (incrustar en cada composición)

El mismo sistema de efectos de sonido sintetizados por FFmpeg que vid-product-launch. Coloca window.__sfxTimeline inmediatamente antes del registro del timeline GSAP.

Referencia de tipos de efectos de sonido para sizzle reel:

TipoSonidoDuraciónColocación
word-hitGolpe sub (50Hz) + clic transitorio (2.2kHz) + ráfaga de ruido180msUno por inicio de escena de key_message
whooshBarrido de ruido de dos bandas (1.1kHz body + 4-8kHz air)700msEn el límite Build → Peak
cta-chimeAcorde mayor A (440+554+659+880Hz) + brillo de campana aecho1.2sExactamente al inicio de Land
window.__sfxTimeline = [
  // un word-hit por key_message (calculado desde los tiempos de inicio de escena)
  { ms: MSG_1_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  { ms: MSG_2_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  { ms: MSG_3_START_MS,           sfx: 'word-hit',   vol: 0.50 },
  // ... repetir para cada mensaje
  { ms: PEAK_START_MS - 700,      sfx: 'whoosh',     vol: 0.55 },
  { ms: LAND_START_MS,            sfx: 'cta-chime',  vol: 0.65 },
];

Calcula todos los valores ms desde las secciones declaradas.

…

[truncado para traducción]

Individual skills in this repo

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

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

Skills relacionados