Communitygithub.com

Moh4696/cinematic-film

Crea películas narrativas cinematográficas completamente desde código, sobre cualquier tema. Una cámara continua se desliza sobre un mundo diseñado de fotos, documentos, tarjetas, mapas con rutas y grandes números, con cada sello, resalte y número sincronizado con la palabra del narrador, además de efectos de sonido, una banda sonora opcional y subtítulos incrustados. Ideal para documentales e historia, lanzamientos de productos, historias de marca y fundadores, explicaciones científicas y tecnológicas, biografías y crímenes reales. Abarca el guion, la voz en off desde cualquier TTS dividida en tomas.

¿Qué es cinematic-film?

Esta habilidad permite generar películas cinematográficas narrativas completamente desde código, utilizando Skia en Python. La cámara se mueve de forma continua sobre un único mundo visual compuesto por fotos, documentos, tarjetas, mapas con rutas y grandes números. Cada elemento visual (sellos, resaltes, números) aparece sincronizado con la palabra exacta del narrador, y la película incluye efectos de sonido sintetizados, música opcional y subtítulos incrustados. Es ideal para documentales históricos, lanzamientos de productos, historias de marca, explicaciones científicas, biografías y crímenes reales. Soporta macOS, Linux y Windows, y requiere Python 3.9+, skia-python, ffmpeg y otros scripts incluidos. El flujo de trabajo consta de 11 pasos con cuatro puntos de aprobación del usuario, desde la escritura del guion hasta la entrega final, con herramientas para verificar la configuración, obtener fuentes, generar mapas, sintetizar efectos de sonido y mezclar la banda sonora. Incluye proyectos de ejemplo y una autoevaluación rigurosa para evitar errores comunes.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Moh4696/cinematic-skill/tree/HEAD/skills/cinematic-film

Preguntar en tu IA favorita

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

Documentación

Película cinematográfica

Una película hecha de esta manera es un solo movimiento de cámara sobre un único mundo. Cada foto, tarjeta, recorte, mapa y número vive en un gran tablero, y la cámara viaja entre ellos a través de cuerdas, rutas y flechas a medida que avanza la historia. Cada impacto visual está sincronizado con la palabra que dice el narrador. Todo es código (Skia en Python), por lo que se renderiza igual cada vez, se adapta a cualquier tema, y una nueva voz reajusta la sincronización de toda la película por sí misma.

Construido a partir de un documental de 5:22 sobre Al Capone, luego se abrió a cualquier tema. Las reglas aquí se escribieron a partir de lo que se rompió mientras se hacía.

Herramientas

ArchivoQué hace
scripts/check_setup.pyVerifica Python, skia-python, ffmpeg, fuentes y memoria; indica qué instalar
scripts/get_fonts.pyDescarga fuentes con licencia abierta (Bebas Neue, Homemade Apple) para cualquier rol de texto que falte en esta máquina
scripts/new_project.pyInicia un proyecto desde assets/template/ (un explicador ejecutable), o el ejemplo documental con --example
scripts/make_beats.pyEscribe beats.md, la tabla que apruebas; verifica cronología, longitud de línea, dígitos en texto hablado
scripts/tts_say.pyVoz de prueba gratuita (macOS say, espeak-ng, o cualquier comando TTS) para sincronizar la película antes de la voz final
scripts/split_takes.pyCorta tomas de sección completa en un clip por línea y marca cortes sospechosos
scripts/build_narration.pyUne las líneas en audio/narration.m4a y audio/timing.json, sobre los cuales se construye la película
scripts/fetch_commons.pyBusca en Wikimedia Commons, descarga con licencia y crédito, rechaza archivos no libres, escribe credits.md
scripts/make_map.pyProyecta límites de dominio público (cualquier país o región) para el mapa
scripts/prep_assets.pyClasifica cada imagen en un aspecto uniforme (blanco y negro, sepia o color natural); genera las texturas del tablero
scripts/engine.pyEl motor de la película: cámara, foco, elementos, mapas, aspectos, acabado de película
scripts/render.pyFotogramas fijos, tiras de contacto, la lista de indicaciones y el renderizado MP4 en paralelo
scripts/build_sfx.pySintetiza cada efecto de sonido a partir de la lista de indicaciones (sin muestras, nada que licenciar)
scripts/mix_soundtrack.pyVoz, efectos y música opcional, con ducking y normalización de sonoridad
scripts/burn_captions.pyIncrusta uno de cuatro estilos de subtítulos en la película terminada y escribe un SRT

Necesita Python 3.9+, pip install skia-python numpy pillow (scipy opcional) y ffmpeg. Ejecuta scripts/check_setup.py primero; en Linux o Windows, también ejecuta scripts/get_fonts.py por proyecto. Todos los comandos toman --project <carpeta>.

Elige la película

TipoAspectoImágenesElementos típicos
Historia, crimen real, investigaciónwall, slateFotos de archivo y documentos, clasificados bwImpresiones, recortes rasgados, sellos, cuerda roja, rutas de mapa
Lanzamiento de producto, historia de marca o fundadorstudio, charcoalTus fotos de producto y fotos de equipo, clasificados naturalTarjetas, números grandes, contadores, flechas
Ciencia, ingeniería, cómo funcionablueprint, paperDiagramas, fotos de archivo o AITarjetas, contadores, marcas de bolígrafo, mapas
Tecnología, espacio, avancesnightCapturas de pantalla, renders, imágenes AITipografía grande, contadores, rutas, tarjetas

Mezcla libremente: los aspectos son un tablero y un acabado, y cada elemento funciona en cada aspecto. references/story.md tiene una forma narrativa para cada tipo.

Las reglas

  1. Un héroe por línea. Cada línea de narración tiene exactamente una cosa sobre la que está la cámara. El foco atenúa todo lo demás.
  2. Los impactos caen en la palabra hablada. Un sello golpea en "cargado", no al inicio de la línea. Sincroniza todo con doc.W(línea, "palabra").
  3. Muestra una frase de una sola manera. Escríbela en pantalla o muéstrala en un documento real, nunca ambas. El texto del cuerpo en los documentos son líneas grises, nunca palabras de relleno.
  4. El tiempo solo avanza después de la apertura. Una apertura en frío puede saltar hacia adelante. Después de una línea puente ("Cuatro años antes..."), el tiempo de la historia solo avanza.
  5. Texto que se pueda leer en un teléfono en un segundo. Mayúsculas condensadas grandes. Una etiqueta escrita en pantalla debe tener aproximadamente el 3% o más de la altura del fotograma.
  6. Menos es más. Las cuerdas se desvanecen después de su golpe, y los elementos antiguos se atenúan. El retroceso final debe verse compuesto, no desordenado.
  7. Nada inventado que parezca real. Las fotos y documentos reales reciben créditos. Un documento dibujado en código se etiqueta como recreación y solo cita palabras que realmente fueron escritas. Las imágenes AI son aceptables para ilustración, pero nunca como evidencia de un evento real o una persona real.

Flujo de trabajo

Detente para la aprobación del usuario en las cuatro puertas (marcadas Puerta).

  1. Historia. Investiga, luego escribe script.json: tomas (secciones) de líneas, cada una con text, spoken (números como palabras), hero y typed. Mantén notas de datos junto a la historia. 60 a 90 segundos son aproximadamente 150 a 230 palabras. Los detalles están en references/story.md.
  2. Tabla de ritmos. Ejecuta scripts/make_beats.py y corrige todas las advertencias de lint. Puerta: el usuario aprueba beats.md, incluidos los datos.
  3. Imágenes. Enumera cada imagen en photos.json: su id, tipo y de dónde proviene.
    • Imágenes de archivo: fetch_commons.py search, category y get.
    • Archivos propios del usuario: colócalos en <project>/assets/photos/.
    • Fotogramas AI: genéralos en un solo estilo (la habilidad motion-assets los planifica y cotiza).
    • references/archive.md cubre otros archivos y las reglas de derechos.
  4. Voz de prueba. Ejecuta tts_say.py, luego split_takes.py, luego build_narration.py. Escucha cada línea que split_takes.py marca. Ahora los tiempos son reales.
  5. Activos. Ejecuta make_map.py si la historia viaja, luego prep_assets.py.
  6. Escena. Escribe scene.py: distribuye el tablero en grupos por sección, agrega elementos en tiempos doc.L/doc.W, luego claves de cámara y foco (film.shot). Lee references/film.md. Ambos proyectos incluidos muestran los patrones: assets/template/scene.py (explicador, aspecto studio) y assets/wright-flyer/scene.py (documental, todos los tipos de elementos).
  7. Prueba de aspecto. Ejecuta render.py --probe en un fotograma por línea a 1280x720 y míralos todos, luego --strip en cada movimiento grande de cámara. Puerta: muestra al usuario fotogramas de la apertura y el aspecto.
  8. Borrador. Renderiza los primeros 30 segundos a 1280x720 con la voz de prueba. Puerta: el usuario lo ve.
  9. Voz final. Grábala con cualquier TTS o una persona (references/voice.md). Ejecuta split, build y probes de nuevo; nada en la escena cambia.
  10. Sonido. Ejecuta render.py --cues, luego build_sfx.py, luego mix_soundtrack.py, agregando música si se desea. Lee references/sound.md.
  11. Finalización. Haz el renderizado completo, luego burn_captions.py y el SRT. Lee references/performance.md antes de renderizar a 1440p o 4K. Entrega credits.md junto con la película.

Autoevaluación, cada vez

Mira los fotogramas antes de afirmar que algo funciona. Estos son los errores que aparecieron, todos en un renderizado real:

  • Tinta oscura sobre un tablero oscuro: invisible. Usa tipografía clara en aspectos oscuros, o bar_h=0.92 para un bloque de etiqueta completo detrás de tipografía oscura.
  • La cámara se movió pero el foco se quedó atrás, dejando un fotograma oscuro. Usa film.shot() a menos que deban separarse.
  • Escala del mapa demasiado pequeña: toda una costa más pequeña que una foto. Elige K para que cada lugar con impresiones tenga su propia habitación (references/film.md).
  • Etiquetas del mapa superpuestas. Coloca la etiqueta en el lado opuesto a su vecino.
  • Un grupo que cruza el borde del mapa. Mantén los grupos sobre el mapa o claramente fuera de él.
  • Resaltes a unos pocos píxeles de sus palabras. Usa PaperDoc.phrase_spans, y doc.on(print, fx, fy) con fracciones leídas de una cuadrícula superpuesta de la imagen.

Proyectos incluidos

  • assets/template/: "From Cherry to Cup", un explicador de 25 segundos en el aspecto studio, hecho de tarjetas, flechas y un contador, sin imágenes. new_project.py my-film lo copia. Dale una voz de prueba y se renderiza.
  • assets/wright-flyer/: "Twelve Seconds", un documental de 90 segundos sobre el primer vuelo y el rival de $50,000 que se estrelló dos veces. Usa siete fotos de dominio público, el mapa de EE. UU., dos documentos tipografiados y todos los tipos de elementos.
python3 scripts/new_project.py wright --example
python3 scripts/fetch_commons.py get --project wright
python3 scripts/make_map.py --project wright && python3 scripts/prep_assets.py --project wright
python3 scripts/tts_say.py --project wright && python3 scripts/split_takes.py --project wright && python3 scripts/build_narration.py --project wright
python3 scripts/render.py --project wright --size 1280x720 --out out/draft.mp4 --audio audio/narration.m4a

Habilidades relacionadas

De Open 3D Skills: motion-assets planifica y cotiza imágenes AI cuando una película necesita ilustración, y frame-capture graba páginas web en lugar de películas dibujadas en código.

Skills relacionados