/storytelling
┌──────────────────────┐
│ [4:12] [cover] [comments] │ tres tarjetas, todas a la vez
│ I made this carousel │ título en caja negra, 1-2 líneas
│ in a few minutes │
│ and it's doing well │ pequeño subtítulo blanco
│ (face) │ una toma continua, con un ligero zoom
│ entire carousel │ leyendas TikTok
└──────────────────────┘
Primer uso
La carpeta de este skill es el "Directorio base" que Claude Code muestra al cargarlo.
SKILL_DIR="<directorio base de este skill>" # la ruta que Claude Code imprimió como "Directorio base para este skill"
KIT=$(python3 -c 'import os,sys;print(os.path.realpath(os.path.join(sys.argv[1],"..","..","kit")))' "$SKILL_DIR")
PY="$KIT/.venv/bin/python"; [ -x "$PY" ] || bash "$KIT/setup.sh"
Clips en bengalí. Si la persona habla en bengalí, asegúrate de que REEL_LANGUAGE=bn esté configurado antes de la primera llamada a words (exportándolo o anteponiéndolo al comando) para que Whisper transcriba en bengalí en lugar de traducir. Escribe también todo el texto en pantalla (títulos, etiquetas, elementos) en bengalí, y ancla los tiempos exactamente en las palabras en bengalí tal como las imprime words. El bengalí ocupa más espacio que el inglés al mismo tamaño, por lo que debes mantener los titulares en 2 a 4 palabras y revisar la hoja de contacto para ver si hay desbordamiento. Whisper a menudo escribe mal el bengalí (por ejemplo, "ধাকার মেওর" en lugar de "ঢাকার মেয়র"): antes de escribir la especificación, lee las palabras del tramo que hayas elegido y corrige las grafías incorrectas directamente en <clip>.transcript.json (cambia solo word, mantén start/end), luego ejecuta words nuevamente para que las leyendas y los anclajes usen las palabras corregidas. Si falta un tramo largo de habla en words, elimina el transcript y ejecuta words de nuevo; el transcriptor vuelve a revisar los tramos omitidos. Si el clip no es 9:16 (por ejemplo, un video cuadrado de 1080x1080 de un teléfono), revisa el primer fotograma: un recorte directo puede hacer que el rostro llene la pantalla y cubra los elementos visuales, así que informa al usuario y sugiere una grabación en 9:16.
GROQ_API_KEY debe estar configurada para transcribir. Se necesita ffmpeg y Node.
Pasos
- Clip. Cualquier video 9:16 de una persona hablando.
- Palabras. Ejecuta
"$PY" "$KIT/reel.py" words <video>. Imprime una oración por línea con[ends …](cuando termina su última palabra), así que usa eso comoend. Elige UN tramo continuo de 4 a 8 segundos que cuente una pequeña historia o muestre una prueba. No combines fragmentos, porque los cortes de salto resultan extraños aquí. - Especificación. Escribe
<clip>.storytelling.json(a continuación). Las rutas en una especificación son relativas al archivo de especificación. Las tres tarjetas son la historia en imágenes: el esfuerzo, la cosa y el resultado. - Construcción. Ejecuta
"$PY" "$SKILL_DIR/build.py" <spec.json>. - Revisión. Observa
<out>.sheet.jpg:- Las tarjetas y el título quedan despejados por encima de los 220 px superiores.
- Las leyendas no cubren la boca (ajusta
caption_top, 1385 por defecto). - El título cabe en sus líneas.
- Entrega la ruta del mp4.
Especificación
{
"video": "my-clip.mp4", "start": 42.3, "end": 47.8,
"zoom": 1.3,
"cards": [
{"type": "stat", "label": "TIEMPO INVERTIDO", "value": "4:12", "unit": "minutos"},
{"type": "cover", "image": "my-photo.jpg", "text": "las mejores *herramientas de IA*\npara usar cuando\n *eres joven y sin dinero"},
{"type": "comments", "title": "Comentarios", "rows": [["sarah.creates", "CARRUSEL"], ["mike.builds", "¡¡CARRUSEL!!"]]}
],
"title": ["Hice este carrusel", "en pocos minutos"],
"subtitle": "y le está yendo extremadamente bien"
}
cards toma exactamente 3, cada uno de:
image:{"src": "photo.jpg"}, una foto cuadrada.cover: una portada de carrusel,imagemástext(*palabra*se vuelve amarillo,\nsalta la línea). Se desplaza lentamente.stat:label,value,unity un anillo.- El
valuecuenta hacia arriba si es un número ("250","10.000") o una hora ("4:12"). ring(de 0 a 1) indica cuán lleno está el anillo.
- El
comments: hasta 4 filas de[handle, texto].text:{"big": "3×", "small": "más guardados"}.
Los otros campos:
title: 1 o 2 líneas, cada una de aproximadamente 22 caracteres como máximo.subtitle: una línea corta.zoom: cuánto se acerca la toma. 1.3 por defecto, 1 sin zoom.
Gusto
- Todo aparece a la vez, en el primer tercio de segundo. Nunca uno por uno.
- El título es la historia en un solo aliento. El subtítulo es la recompensa.
- Las tarjetas muestran cosas reales: la propia publicación del usuario, números, capturas de pantalla. Las filas de comentarios y los handles deben ser reales, proporcionados por el usuario. Si no tiene ninguno, usa una tarjeta
textostaten lugar de inventar personas.