Talking-Head Short — editor maestro
Escribe respuestas concisas. No repitas transcripciones ni registros largos. Arregla los problemas editando spec.json con la herramienta Edit, nunca reescribiéndolo. Cada script imprime un informe compacto; léelo, actúa y continúa.
S=<directorio de esta skill>/scripts, WD=<directorio de trabajo junto al archivo raw>/ths_<nombre>.
0. Configuración (una vez por máquina/sandbox)
bash $S/setup.sh → usa el PY= impreso. Instala todo desde PyPI, incluyendo un ffmpeg estático si no existe.
Cada descarga tiene una alternativa automática. Los sandboxes (ejecución de código en claude.ai, gratuito o de pago) suelen bloquear HuggingFace, Mixkit y la API de Google Fonts, pero permiten GitHub:
- modelo de transcripción: HuggingFace → mirror en GitHub (whisper-base, luego whisper-tiny)
- música/SFX: Mixkit → mirror en GitHub con paquete CC0 (ids como
pack:lofi_chill) - fuentes: repositorio de Google Fonts → jsDelivr → mirror en GitHub con paquete OFL (32 familias) → fuente del sistema
- B-roll: Mixkit → ninguna (usa tarjetas, o pide al usuario que suba clips)
Si el setup imprime "no network" / pip falla: el sandbox tiene el acceso a red DESACTIVADO. Indica al usuario exactamente (un mensaje):
"claude.ai → Settings → Capabilities → Code execution → Network access: All domains (o añade: pypi.org, files.pythonhosted.org, github.com, objects.githubusercontent.com, release-assets.githubusercontent.com, api.github.com, raw.githubusercontent.com, cdn.jsdelivr.net, huggingface.co, mixkit.co, assets.mixkit.co), luego inicia un nuevo chat y ejecuta /talking-head-short de nuevo." No intentes la edición sin numpy/ffmpeg.
Solo si todas las fuentes fallan: pide una transcripción pegada →
$PY $S/align_text.py $WD transcript.txt. Los assets se almacenan en caché en~/.ths_assets.
1. Analizar
$PY $S/analyze.py RAW $WD
Imprime la resolución, punto de los ojos, duración limpia, muletillas/tartamudeos/reinicios eliminados automáticamente, CHECK (muletillas suaves, palabras de baja confianza, pausas largas) y TEXT con marcas de tiempo cada 8 palabras.
- Evalúa tú mismo las tomas malas. Elimina falsos inicios, frases incompletas, "tú sabes como yeah", "tipo de". Mantén repeticiones retóricas. Vuelve a ejecutar con
--remove '[[s,e],...]'(segundos de origen). La transcripción se almacena en caché. - Revisa
$WD/frames.jpgsolo si el punto de los ojos o el encuadro están en duda.
2. Brief (en tu cabeza, luego 4 líneas al usuario)
Escribe: tema · mensaje central · arco emocional (gancho → ... → remate) · fila de nicho (de NICHES) · tono (tranquilo/equilibrado/enérgico) · encuadre raw (abierto o cerrado).
Luego ejecuta $PY $S/style.py RAW "<nicho>" --out $WD/style.json. Devuelve la paleta adaptada con razones, fuentes, dirección de MG/B-roll/música/SFX y notas importantes.
Lee references/craft.md una vez (las reglas) y references/spec.md (el formato de spec).
3. Preguntar antes de construir (nunca renderizar primero)
Usa AskUserQuestion si está disponible; si no, un mensaje numerado compacto. Recomienda la opción 1 cada vez.
- Estilo: nicho detectado + tono (ej. "Autoayuda · tranquilo-reflexivo") frente a 1–2 alternativas.
- Fuentes: el par de la fila frente a 2 alternativas con un claro contraste de estilo (sans líder + serif/itálica clave, o sans bold clave + serif itálica acento).
- Paleta: paleta de la fila adaptada al metraje frente a paleta derivada del metraje frente a un color de marca que el usuario proporcione.
- Densidad visual: Mínimo (subtítulos + 2–3 tarjetas) · Equilibrado (subtítulos + 4–6 tarjetas / B-roll) · Rico (más MG + B-roll).
- Música: 3 candidatos con licencia de
$PY $S/assets.py music "<estado de ánimo>"(id · título · etiquetas), o ninguno. - B-roll: sí (material de archivo con licencia que coincida con líneas literales) / no. Omite cualquier pregunta que el usuario ya haya respondido. Espera las respuestas.
4. Reunir assets
- Fuentes:
$PY $S/assets.py font "Familia" ... - Música, SFX, video: ejecuta
assets.py music|sfx|video "<consulta>"para listar, luegoassets.py get <tipo> <id> $WD.- SFX según tono: tranquilo → "air woosh", "chime"; equilibrado → "whoosh", "pop"; enérgico → "swoosh", "impact" (usados una vez).
- Las fuentes bloqueadas recurren automáticamente (ids de paquetes).
assets.py packlista todo el paquete CC0 offline.
5. Escribir spec.json, planificar, styleframes
- Escribe
$WD/spec.json(ver references/spec.md): subtítulos en orden de habla, tarjetas sobre las cláusulas correctas, audio. $PY $S/engine.py $WD --plan→ corrige cada ISSUE editando el spec (acorta o fusiona beats, mueve o elimina subtítulos debajo de tarjetas), luego replanifica hasta que no reporte ninguno o solo los aceptables.$PY $S/engine.py $WD --frames t1,...con 10–15 momentos: el punto medio de cada tarjeta y final−0.3 s, y cada subtítulo al final−0.1 s. Revisa$WD/styleframes.jpgy corrige cualquier cosa cortada, abarrotada, desalineada o fuera de paleta.- Muestra al usuario los styleframes con una línea ("¿ok para renderizar?"). Itera solo sobre lo que ellos señalen.
6. Renderizar, mezclar, QA
bash $S/render.sh $PY $WDrenderiza partes en paralelo y las concatena (≈5 min por minuto de video en un portátil). En un sandbox con límite de tiempo por comando, ejecuta$PY $S/engine.py $WD --render --part i/Nuna vez por parte, luego--concat N.$PY $S/mix.py $WD→final.mp4(limpieza de voz, música con atenuación y alineación del remate, SFX, -14 LUFS).$PY $S/qa.py $WD→ revisaqa_endframes.jpg. Cada beat y final de tarjeta debe mostrar texto y animación completos. Los fotogramas flash deben ser cero.- Entrega la ruta del archivo, más 3 líneas sobre lo que elegiste y por qué. Menciona cualquier asset que no hayas podido descargar.
No negociables (por qué: cada uno fue señalado como amateur)
- Los subtítulos nunca se cortan. El lead es ≤ ancho de la clave y está cerca. Dos estilos de fuente contrastantes en proporción áurea. Nunca subtitules palabras de relleno solas.
- Los gráficos animados muestran el significado, terminan antes de que cambie la escena y se mantienen en un sistema visual. Sin figuras de palitos ni clip art.
- Suave: un zoom con easing que sigue los ojos entre cortes; sin fotogramas flash; transiciones variadas.
- Solo corrección de color. Solo assets con licencia (Mixkit / Google Fonts OFL), con LICENSES.txt guardado en $WD.