Communitygithub.com

Cortometraje IA (AI Short Drama)

Convierte una idea, guion o capítulo de novela en un episodio de cortometraje terminado, con personajes consistentes, diálogos o narración, subtítulos y un MP4 final. Usa apimodels.app (Seedance 2.0 video, Nano Banana imagen, MiniMax voz) con una sola clave API.

¿Qué es Cortometraje IA (AI Short Drama)?

La habilidad 'Cortometraje IA' transforma ideas narrativas en episodios completos de cortometraje con personajes recurrentes que mantienen su apariencia a lo largo de todas las tomas. El usuario escribe una historia en un archivo `project.json` que define personajes, localizaciones y tomas. Luego, el script `scripts/drama.mjs` se encarga de todo el proceso: validar y presupuestar el proyecto, generar hojas de referencia de personajes y localizaciones, producir voz en off (si se elige modo narración), renderizar cada toma con Seedance 2.0, y ensamblar el video final con subtítulos. Es ideal para creadores de contenido que quieran producir mini series, dramas cortos estilo cómic (漫剧, 短剧, AI 动态漫) o adaptar guiones a video vertical con personajes consistentes. La habilidad funciona en cualquier plataforma que ejecute Node.js (incluyendo Cursor, Codex, Claude Code) y requiere una clave API de apimodels.app. Su flujo de trabajo está diseñado para ser eficiente y económico, permitiendo previsualizar costos antes de cada paso, reanudar tareas en caso de fallo, y evitar cobros duplicados.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/stimQQ/ai-short-drama/tree/HEAD

Preguntar en tu IA favorita

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

Documentación

Cortometraje IA

Historia dentro, episodio fuera. Escribes la historia en un project.json (personajes, localizaciones, tomas). scripts/drama.mjs se encarga de todo lo que cuesta dinero o es fácil de hacer mal:

project.json ─ estimar ─ reparto ─ (voz) ─ tomas ─ ensamblar ─▶ episode.mp4 + .srt
               gratis       imagen de   narración  Seedance   ffmpeg: normalizar,
               validar      referencia  solo       renderiza  mezclar voz en off,
               + precios    por personaje           cada toma  unir, subtítulos
                             y localización

Cómo se mantienen los personajes iguales: cada personaje recibe una hoja de referencia (retrato + vistas frontal/lateral/trasera). Cada toma pasa las hojas de los personajes que aparecen en ella a Seedance 2.0 como imágenes de referencia, y el prompt dice qué imagen es quién.

Reglas

  1. Ejecuta siempre scripts/drama.mjs. No llames a la API con curl o fetch. El script almacena cada ID de tarea en el momento en que existe, así que un fallo o un tiempo de espera reanuda la misma tarea en lugar de pagar por ella de nuevo. Las llamadas hechas a mano pierden eso.
  2. Lee references/project-schema.md y references/shot-writing.md antes de escribir project.json. La guía de escritura de tomas determina si el episodio parece una sola película o doce clips sin relación.
  3. Ejecuta estimate primero y muestra al usuario el resultado: lista de tomas, duración total, modelos y la tabla de precios. Espera un sí antes de cast / shots. El script rechaza cualquier paso de más de $1 sin --yes. Solo pasa --yes después de que el usuario haya aceptado esa cantidad.
  4. Muestra al usuario las hojas de personaje antes de renderizar las tomas. Las hojas cuestan alrededor de $0.02 cada una; las tomas cuestan 10–100× más. Si una cara, una vestimenta o el estilo son incorrectos, corrige el look y ejecuta cast --redo <id> ahora. Cada toma lo heredará.
  5. Para un proyecto nuevo, renderiza primero una toma (shots --only s1). Mírala junto al usuario, luego renderiza el resto. Omite esto solo para proyectos muy cortos (tres tomas o menos) o cuando el usuario lo indique.
  6. Nunca inventes un nombre de modelo. Usa solo los modelos de la tabla siguiente. Si el usuario pide otro, di que esta habilidad no lo soporta.
  7. Las tareas fallidas nunca se cobran. Dilo claramente cuando una falle, explica por qué (el script imprime el motivo y el siguiente paso), y ofrece reintentar.
  8. No menciones proveedores upstream ni enrutamiento. Habla de los nombres de modelo en este archivo y nada detrás de ellos.
  9. Nada de personas reales e identificables sin su consentimiento, y nada sexual, odioso o difamatorio sobre nadie real. Rechaza esas solicitudes.

Flujo de trabajo

S=/ruta/absoluta/hasta/esta/habilidad/scripts/drama.mjs     # sabes tu directorio base; úsalo
node $S check                                         # clave, saldo, ffmpeg
mkdir -p dramas/mi-episodio                            # una carpeta por episodio, en el espacio de trabajo del usuario
# escribir dramas/mi-episodio/project.json               (consulta references/project-schema.md)
node $S estimate dramas/mi-episodio/project.json --prompts
node $S cast     dramas/mi-episodio/project.json      # luego MUESTRA las imágenes en cast/
node $S voice    dramas/mi-episodio/project.json      # solo modo narración
node $S shots    dramas/mi-episodio/project.json --only s1   # comprueba una, luego:
node $S shots    dramas/mi-episodio/project.json
node $S assemble dramas/mi-episodio/project.json --burn-subs
node $S status   dramas/mi-episodio/project.json      # en cualquier momento: progreso, gasto, lo que queda
  • Los renders son lentos. Una toma suele tardar 2–8 minutos, y las tomas se ejecutan 3 a la vez. Antes de shots, dile al usuario aproximadamente cuánto tiempo tomará. No los dejes mirando una terminal en silencio.
  • Cualquier comando se puede re-ejecutar de forma segura. El trabajo terminado se omite. Las tareas en curso se retoman donde se quedaron. Las tomas fallidas solo se reintentan con --retry-failed.
  • Editar una toma después de renderizada no la vuelve a renderizar. status la marca como "inputs changed". Vuélvela a renderizar a propósito con shots --redo <id>; eso se paga de nuevo.
  • Muestra el resultado: la ruta del MP4 final, su duración y el .srt. Luego di lo que se gastó: status imprime la cantidad exacta facturada, leída de la API.
  • Todo se descarga en la carpeta del proyecto. Las URL de resultados de la API caducan después de 30 días, así que la carpeta es la copia que perdura.

Diálogo o narración

Elige antes de escribir las tomas:

"mode": "dialogue""mode": "narration"
Quién hablaPersonajes en pantalla, con sincronía de labios. Seedance genera las voces con el video.Un narrador en off (texto a voz), mezclado sobre el sonido ambiente de cada toma.
Bueno paraEscenas impulsadas por conversación; mini dramas al estilo de acción real.漫剧 / dramas cómicos IA, adaptaciones de novelas, videos de resumen y narración de historias.
Consistencia de vozLa voz de un personaje puede variar un poco de una toma a otra.Una voz idéntica para todo el episodio.
Duración de tomaTú estableces duration (4–15 s). Mantén cada línea lo suficientemente corta para que quepa.Se establece automáticamente para que quepa cada línea de narración, hasta 15 s.
LímitesAproximadamente 1–2 líneas cortas por toma de 5 s. Sin control exacto sobre quién habla cuándo.Los personajes no hablan en pantalla.

Si el usuario no lo dice, usa narración para cualquier cosa descrita como 漫剧, un cómic, una novela o un resumen de historia. Usa diálogo para escenas basadas en conversación.

Modelos y costo

El script elige un video_model predeterminado según el estilo. Los looks estilizados (anime, cómic, 国漫, caricatura, acuarela) usan dreamina-seedance-2-0-mini. Todo lo demás usa seedance-2.0-mini. Sobrescríbelo en project.json cuando el usuario quiera algo diferente.

El usuario quierevideo_modelResolucionesPor segundo de video
Episodio estilizado (anime, cómic, 国漫); borradoresdreamina-seedance-2-0-mini480p / 720p$0.0225 / $0.048
Estilizado, un paso mejor que minidreamina-seedance-2-0-fast480p / 720p$0.0644 / $0.1372
Estilizado, calidad final hasta 1080pdreamina-seedance-2-0480p / 720p / 1080p$0.10 / $0.22 / $0.55
Personas fotorrealistasseedance-2.0-mini480p / 720p$0.044 / $0.095
Fotorrealista, un paso mejor que miniseedance-2.0-fast480p / 720p$0.071 / $0.153
Fotorrealista, calidad final hasta 1080pseedance-2.0480p / 720p / 1080p$0.092 / $0.197 / $0.492

Otros costos:

  • Hojas de personaje y localización: nano-banana-2-1, $0.022 cada una a 1K.
  • Narración: minimax-speech-2.8-turbo, $0.04 por cada 1,000 caracteres. Un clip corto se factura al menos $0.004.

Un episodio de un minuto (12 tomas × 5 s, 5 hojas) cuesta aproximadamente:

  • $1.46 con dreamina-seedance-2-0-mini 480p
  • $2.99 con dreamina-seedance-2-0-mini 720p
  • $2.75 con seedance-2.0-mini 480p
  • $29.63 con seedance-2.0 1080p

Sugiere 480p para la primera pasada. Una segunda pasada a 720p solo vuelve a renderizar las tomas ("resolution": "720p", luego shots --redo <ids>). Las hojas se mantienen.

Por qué existen las filas fotorrealistas: los modelos dreamina-* rechazan imágenes de referencia que parezcan una persona real, y una hoja de personaje fotorrealista puede activar eso. El script reconoce este rechazo y te indica que cambies a seedance-2.0-mini. La tarea rechazada no se cobra.

Los precios son precios de lista, verificados el 2026-09-30. status muestra lo que realmente se facturó.

La clave API

Ejecuta node $S check primero. La clave proviene de APIMODELS_API_KEY, o de ~/.apimodels/credentials, o de ~/.apimodels/credentials.json. El último es escrito por npx apimodels-mcp login, así que un usuario que haya iniciado sesión en cualquier herramienta de apimodels ya está configurado.

Si no hay clave, ejecuta node $S login tú mismo y dale al usuario el enlace que imprime. Ellos inician sesión en apimodels.app y hacen clic en Autorizar. Se escribe una nueva clave en ~/.apimodels/credentials y nunca aparece en esta conversación. Luego vuelve a ejecutar check y continúa.

Si login no puede funcionar (sin navegador en la máquina), no pidas la clave en el chat. Dale al usuario un comando para pegar en una nueva ventana de terminal, con la ruta del script absoluta completada:

read -s KEY && printf %s "$KEY" | node /RUTA/ABSOLUTA/scripts/drama.mjs save-key && unset KEY

Las claves se crean en https://apimodels.app/console/api-keys.

Manejo de la clave:

  • Nunca la repitas.
  • Nunca la pases como argumento de comando.
  • Nunca la escribas en la carpeta del proyecto.
  • Si alguna vez aparece una clave en la conversación, dile al usuario que la rote.

Errores

El script imprime el motivo y el siguiente paso. En palabras sencillas:

VesSignificadoHaz
401Clave incorrecta o faltanteVuelve a ejecutar login
402Saldo insuficienteRecarga en https://apimodels.app/console/credits. Las tomas terminadas se conservan.
"parece una persona real"dreamina-* rechazó una imagen de referenciaCambia video_model a seedance-2.0-mini, luego shots --retry-failed
Rechazo por revisión de contenidoEl prompt o una línea fue rechazadaReformula esa toma. Reintentar el mismo texto no ayudará.
Ocupado / tiempo de esperaCarga upstreamEjecuta shots --retry-failed un poco más tarde
"aún ejecutándose"Más de 25 minutosVuelve a ejecutar shots más tarde; retoma la tarea, sin cobro
código de salida 3El paso cuesta más de $1Confirma la cantidad con el usuario, luego añade --yes

El éxito no es 100%: una toma ocasional falla, y un reintento suele funcionar.

Lo que esta habilidad no hace

Dilo directamente en lugar de improvisar:

  • No garantiza una consistencia perfecta. Las caras pueden variar en tomas amplias, y con tres o más personajes en un mismo encuadre. Mantén 1–2 personajes por toma (consulta shot-writing).
  • Ninguna toma dura más de 15 s. Los momentos más largos se dividen en varias tomas.
  • No sincroniza labios con una pista de voz grabada por el usuario.
  • No controla el primer fotograma exacto de una toma. Las tomas se guían por imágenes de referencia y el prompt.
  • Los tiempos de los subtítulos son aproximados. Se distribuyen uniformemente dentro de cada toma. Edita el .srt si la sincronización exacta importa.
  • No publica en ninguna parte. El resultado es un MP4 local más un SRT.

Skills relacionados