Reel Pixel Crew
El ejemplo a copiar es projects/ai-delivery-team (lee
docs/REFERENCE-BREAKDOWN.md para entender por qué funciona). Lee CLAUDE.md para conocer el mapa y las reglas que nos afectaron.
1 · Guion primero (script.json)
Forma que funciona: gancho (≤5 s) → N beats idénticos (~3.5 s cada uno) → remate → CTA con palabra clave.
- Gancho: un número sorprendente + todo el sistema en un solo fotograma ("7 empleados, ninguno humano").
- Cada beat: "El Rol hace a, b y c." — tres sustantivos concretos que puedas animar.
- Remate: el único trabajo del humano (aprobar, decidir, revisar).
- CTA: "Comenta PALABRA y te envío…" (palabra clave en
brand.keyword). - Escribe
linescomo frases de 2 a 4 palabras para los subtítulos; cada línea se convierte en un subtítulo. - Apunta a un total de 30–45 s; la velocidad de voz 1.3–1.4 mantiene a Kokoro cerca de 3.5 palabras/s.
- Pregunta al usuario por el handle de la marca / nombre del aprobador / palabra clave si se desconoce; de lo contrario, mantén los marcadores
@yourhandlee indícalo.
2 · Andamiaje
node scripts/new.mjs reel <nombre>
python3 scripts/voice.py projects/<nombre> # tiempos primero, luego diseño para ellos
3 · Escenas (index.html + style.css + scenes.js)
- Una
<section class="scene">por escena del guion, en el mismo orden (R.cuts()las asigna aTIMING.scenes). - Cada escena de empleado:
.headcon.step[data-step][data-label]+.title(tamaño que quepa en ≤ 980 px), luego una o dos.cards que representen el trabajo. - Dale a cada escena su propio acento (
--accent: var(--rN)) y fondos alternados (is-paper,is-peri,is-lav,is-cobalt). - Anima cada sustantivo hablado:
R.pop(el, R.word(scene, line, "noun")),R.tick,R.type,R.grow,R.slampara sellos. - Usa marcadores
data-icon,data-bot,data-burst,data-face,data-presenter;Sprites.hydrate()los rellena. - Termina con
R.captions(...)yR.register(); mantén la línea inlinewindow.__timelines["main"].
4 · Verificar, luego renderizar
node scripts/build.mjs projects/<nombre> --no-voice --no-render --snap <una vez por escena>
# lee projects/<nombre>/build/snaps/contact-sheet*.jpg, corrige, repite
node scripts/hf.mjs lint projects/<nombre>
node scripts/build.mjs projects/<nombre> --no-voice # → renders/<nombre>.mp4
Verifica el MP4 en sí: ffmpeg -i renders/<nombre>.mp4 -vf fps=1,scale=180:-1,tile=8x5 sheet.jpg
y -af ebur128 (objetivo ≈ −14 LUFS). Busca: primer fotograma en blanco, texto
que toque los bordes, elementos bajo la UI de Instagram, subtítulos desincronizados.
Intercambios
- Voz:
script.json → voice.voice(am_michael,am_puck,am_fenrir,af_heart,bf_emma, …) o graba la tuya propia enbuild/voice.wavy ejecutavoice.py --from-wav. - Música: coloca una pista en
build/music-override.wav. - Presentador: la caricatura del propietario (
kit/brand.js,kit/avatars/) se usa automáticamente mediante[data-presenter]y[data-face]; ajusta el tamaño de los presentadores de imagen por ancho (.is-img), son de medio cuerpo. No dibujes un personaje diferente a menos que se te pida.