vvai-pixel-mv · MV de personajes pixelados con golpe de ritmo
El orden es fijo: historia → storyboard (el usuario lo ve, lo modifica, puede iterar) → confirmación del usuario → renderizado. Sin confirmación del usuario, no se renderiza el storyboard.
Hay ejemplos completos en assets/examples/: la historia de una canción y su story.json, con 7 segmentos, 3 personajes y vista de ventana de escritorio.
Preparación
PY: Python 3.10 o superior con librosa, faster-whisper, numpy y Pillow instalados. Ver INSTALL.md. Si el CLAUDE.md o la memoria del usuario especifican una ruta de Python, usar esa; si no, verificar quepythonpueda importar esos paquetes; si no, preguntar al usuario.MV:PY -X utf8 <ruta_del_skill>/scripts/pixel_mv.py.- Requiere ffmpeg y Node. Por defecto se renderiza con
npx --yes [email protected]; para cambiar el CLI, establecer la variable de entornoHF_CLI, separando los argumentos con|.
Flujo
- Recopilar material. Debe haber audio, letra sincronizada (SRT o LRC) y nombre de la canción.
- Opcional: segundos de inicio/fin, perfil de color (base / neon / classic / retro), intensidad (dj / standard / soft), imágenes de personajes.
- Preguntar también por la historia: ¿el usuario ya tiene una trama en mente? Si no, proponer una en el paso 3.
- Si no hay archivo de letra, pedírselo al usuario; no usar transcripción para adivinarla. Si hay partes que la transcripción no puede convertir en voz, preguntar primero al usuario, no tratarlas como intro. En el episodio 1 se confundió el verso con la intro.
- Crear proyecto:
MV new <directorio_del_proyecto> --audio <audio> --lyrics <srt/lrc> --title <nombre_canción> [--start segundos --end segundos] [--look base] [--character imagen].- Este paso corta el audio, mide el ritmo y los puntos culminantes de energía, y alinea la letra palabra por palabra.
- También genera un borrador inicial
story.jsonque solo cambia de escena por palabras clave, y una plantillahistoria.md. - El proyecto se crea en el directorio especificado por el usuario; si el usuario tiene un directorio fijo para la serie (escrito en CLAUDE.md o en la memoria), se coloca allí.
- Escribir la historia. Completar
historia.mdsiguiendo el método de contar historias: historia en una frase, personajes, motivo, actos, frase por frase. Mostrarlo al usuario para que lo confirme. - Escribir story.json. Traducir la historia a story.json.
- Campos en formato; acciones, modos de letra y transiciones disponibles en directorio de interacciones.
- Lo más rápido es seguir el ejemplo de
assets/examples/bad-girl.story.json. - Al terminar, ejecutar
MV check <proyecto>hasta que no haya errores.
- Generar storyboard para el usuario.
- Ejecutar
MV board <proyecto> --frames: captura 1–3 imágenes por segmento y generastoryboard.md, que incluye resumen, personajes por segmento, acciones dramáticas, frase de la letra y su aparición, transiciones, cámara y puntos de golpe. - Enviar al usuario
storyboard.mdy las hojas de contacto destoryboard/imágenes/usando SendUserFile. - Indicar al usuario qué partes se pueden modificar.
- Ejecutar
- Iterar hasta que esté satisfecho. El usuario propone cambios, se modifica story.json y se vuelve a ejecutar
board.- La versión se incrementa automáticamente; la anterior se guarda en
storyboard/historial/. - Se puede iterar varias veces, enviando cada nueva versión del storyboard al usuario.
- La versión se incrementa automáticamente; la anterior se guarda en
- Renderizar tras confirmación.
- Solo cuando el usuario diga explícitamente "puedes renderizar", ejecutar
MV approve <proyecto>y luegoMV render <proyecto> --sample 12. - Respuestas ambiguas ("vale", "como quieras") no cuentan como confirmación.
renderverifica la huella de story.json; si se ha modificado después de la confirmación, se niega a renderizar.- Si el archivo supera los 30 MB, se genera una copia comprimida
_preview.mp4para móvil.
- Solo cuando el usuario diga explícitamente "puedes renderizar", ejecutar
- Entrega. Revisar visualmente con un mosaico de 1 fotograma/segundo: la historia se entiende, la escena, la letra, las transiciones y el título están presentes, la duración coincide con el audio original y hay pista de audio.
- Si el usuario quiere cambios después de la entrega, volver al paso 6: modificar story.json → nuevo storyboard → nueva confirmación → nuevo renderizado.
Reglas clave
- La historia antes que los efectos. Cada frase debe tener al menos una acción dramática o una interacción con la letra; las acciones dramáticas deben ocurrir en el tiempo de la palabra clave; las transiciones deben tener una razón argumental. Ver método de contar historias.
- Cambio de escena: sin requisitos de historia, por defecto "escritorio principal + inserción de imágenes", ver reglas de storyboard. Con historia, seguir los actos; para segmentos de reflexión o recapitulación, usar la vista de ventana de escritorio.
- Personajes:
- Por defecto, el muñeco Claude representa "yo".
- Otros personajes se declaran con
cast(girl, rival, friend, ghost). - Si el usuario proporciona una imagen, ejecutar
MV character <proyecto> <imagen>para convertirla en un personaje de 16×16 píxeles.
- Golpe de ritmo:
- El personaje aterriza exactamente en cada golpe, aplastándose al caer y generando ondas de agua bajo sus pies.
- Cada golpe tiene un impacto de cámara y destello de color; en los golpes fuertes, separación RGB.
- Los destellos de pantalla completa solo se colocan en transiciones y drops, como máximo 3 veces por segundo.
- Paquete de reacción de sobresalto: como máximo 2 veces en todo el video, solo en verdaderos giros argumentales.
- Texto de la letra:
- Solo aparece en la imagen renderizada y en los archivos del proyecto; en las respuestas del chat y en el storyboard solo se escriben los números de frase.
- Los derechos de autor de la canción son responsabilidad del usuario; recordárselo antes de publicar.
Resumen de comandos
| Comando | Función |
|---|---|
new | Crear proyecto: analyze + align + draft + story |
story | Generar plantilla historia.md (--force para reconstruir) |
check | Verificar que los nombres, tiempos y ventanas de story.json sean reconocidos por el motor |
board [--frames] | Generar storyboard (versión N), guardar en historial |
approve | Registrar la versión confirmada por el usuario; luego render la autoriza |
render [--sample 12] [--name nombre_archivo] | Renderizar; --force salta la confirmación, solo usar si el usuario lo dice explícitamente |
sync | Solo sincronizar story.json → assets/story.js (para depuración; board y render sincronizan automáticamente) |
upgrade | Actualizar proyecto antiguo al motor de plantillas actual, dejando copia de seguridad .before-upgrade |
character | Convertir imagen de personaje → personaje pixelado |
analyze / align / draft | Pasos individuales de new; ejecutar por separado para repetir |
Personalización más allá de la plantilla
El motor de plantillas v2 ya cubre lo siguiente, ver directorio de interacciones:
- 27 escenarios, 16 acciones básicas;
- 23 acciones dramáticas;
- 7 modos de letra, 6 entradas, 9 salidas;
- 7 transiciones;
- Ventana de escritorio.
Si aún falta, agregar en el archivo assets/engine.js del proyecto, sin modificar la plantilla de este skill. Consultar técnicas del episodio 1. Para incorporar una nueva secuencia a la plantilla, primero confirmar con el usuario. Al hacerlo, modificar estos sitios:
- La plantilla
engine.js; - Las listas
BEAT_NAMESy demás enpixel_mv.py, así como los nombres en chinoZH_*para el storyboard; interactions.md.
Biblioteca de escenarios
- Los datos están en
assets/scene-library/scenes.json. - Para añadir un escenario, modificar dos lugares: registrar la palabra clave y las interacciones en
scenes.json, y escribir el método de dibujo enSCENESde la plantillaengine.js.