¿Qué hace inktofilm?
Trata un prompt natural como punto de partida completo. El usuario no necesita escribir código, ejecutar comandos, entender modelos ni preparar un guion.
Experiencia de usuario
- Comienza desde la idea del usuario. Cuando falte una dirección creativa importante, toma una decisión por defecto sólida u ofrece un concepto conciso para su aprobación; solo pregunta si eso cambiaría materialmente la película.
- Realiza la configuración, planificación, generación, evaluación, reintentos y edición en nombre del usuario. No muestres comandos internos, cargas del proveedor ni detalles de implementación a menos que el usuario los pida.
- Por defecto, produce un cortometraje o tráiler cinematográfico completo de 30 segundos en formato 16:9 cuando no se especifican duración y formato. Para un largometraje o serie, primero crea un prototipo corto aprobado, luego continúa en capítulos o episodios con una biblia compartida de personajes y mundo.
Configuración privada y generación paga
Utiliza un checkout existente de InkToFilm cuando esté disponible. De lo contrario, prepara un checkout local del proyecto desde https://github.com/yingwang/inktofilm y un entorno local; no modifiques la configuración del sistema no relacionada. Verifica FFmpeg, FFprobe y el cliente fal antes de la producción; inktofilm doctor informa lo que falta.
- Busca
FAL_KEYen el entorno del proceso, luego en un.envlocal del proyecto. El CLI solo lee el entorno, así que carga el archivo en el shell que lo ejecuta, por ejemplo conset -a; . ./.env; set +a, y nunca imprimas el valor. - Si está ausente, pregunta al usuario una vez por su clave de API de fal. Cuando haya un navegador con sesión iniciada, ofrece crear y copiar una clave con alcance de API y aprobación explícita en lugar de hacer que el usuario la exponga en el chat.
- Nunca hagas eco, registres, resumas, coloques en un prompt ni confirmes la clave. Almacénala solo en un
.envlocal ignorado con modo0600, y verifica que Git ignore el archivo antes de cualquier commit o push. - Lee los precios actuales del proveedor, estima la cantidad de segundos generados y el margen de reintentos, indica un límite de gasto duro y obtén confirmación inmediatamente antes de la primera solicitud paga. Detente antes de superar el límite aprobado. Fal factura MiniMax H3 Max por segundo generado y nano-banana por imagen fija, por lo que una película de 30 segundos con cinco planos, imágenes fijas y algunos reintentos suele costar unos pocos dólares; consulta las páginas del modelo para las tarifas actuales en lugar de asumir.
Haz la película
Realiza el trabajo creativo y de evaluación con el agente que está ejecutando esta habilidad, y usa fal MiniMax H3 Max como generador de video predeterminado, respetando cualquier modelo que el usuario elija explícitamente.
- En Claude Code, tú eres el planificador y el juez. Escribe el guion, el plan y el conjunto de pruebas tú mismo, y trabaja a través de las etapas a continuación para que cada imagen sea revisada antes de gastar un crédito de video en ella. Para juzgar un plano, muestrea los mismos fotogramas espaciados uniformemente que usa el evaluador con
inktofilm frames, inspecciónalos directamente, escribe el JSON de resultados revisados por caso y reprodúcelo coninktofilm run suite.json --semantic-results. Puntúa solo lo que es visible en los fotogramas muestreados y registra tu propio nombre de modelo en la procedencia del resultado. - En Codex, la integración incorporada del CLI hace el mismo trabajo a través del Codex CLI autenticado:
inktofilm run --semantic-codexpara juzgar, y el planificador y juez predeterminados deinktofilm produce. - Cuando el usuario quiera que la ejecución termine sin supervisión, pasa la evaluación a un CLI en lugar de hacerlo en el bucle:
inktofilm run --semantic-claude, oinktofilm produce --judge-claude, que solo necesita Claude Code y una clave de fal. Prefiere juzgar en el bucle cuando ya estés presente, ya que cuesta un modelo en lugar de dos y puedes notar lo que ninguna aserción preguntó. - Cualquier otro modelo se puede conectar a través de los hooks de stdin/stdout JSON:
--semantic-command,--planner-command,--judge-command, y--video-command. - Cualquiera que sea el juez que se ejecute, solo puntúa las aserciones que escribió el plan. Escribe aserciones para los fallos que realmente ocurren, incluyendo texto inventado en pantalla, letterboxing incrustado en un fotograma, un vestuario que se desvía hacia la cultura equivocada y una expresión que contradice la escena.
El flujo de trabajo por etapas
inktofilm produce es reanudable: los retratos, las imágenes fijas y los intentos de plano que ya existen en el directorio de salida se reutilizan, por lo que el mismo comando se puede ejecutar nuevamente después de una revisión y solo se paga por el trabajo faltante.
- Escribe
script.mdyplan.jsontú mismo, luegoinktofilm produce script.md --plan plan.json --stills-only -o <proyecto>. Esto renderiza un retrato por personaje y una imagen fija por plano y se detiene. Abre cada imagen. Un retrato que no es el personaje, una imagen fija con el encuadre incorrecto, un rostro con la edad equivocada, una persona extra o texto en un accesorio es barato de corregir aquí y costoso de corregir en un clip: elimina el archivo, afina su prompt y ejecuta el mismo comando nuevamente. - Graba con
--no-judgecuando juzgarás en el bucle, o con--judge-claudecuando la ejecución no esté supervisada.--no-judgeejecuta las comprobaciones de medios, selecciona el intento más nuevo de cada plano, escribesuite.jsonpara los clips seleccionados y ensambla unfinal.mp4de corte directo. - Para cada plano,
inktofilm frames shots/<plano>-attempt-1.mp4muestrea los fotogramas que vería un juez. Míralos, escribe el archivo de resultados revisados y reprodúcelo coninktofilm run suite.json --semantic-results reviewed.json -o review. - Regenera solo lo que falló:
--reshoot <id_del_plano>le da a ese plano un intento nuevo, numerado después de los que están en disco, y todo lo demás se reutiliza. Edita el prompt primero cuando el fallo fue culpa del prompt. Juzga la nueva toma contra la anterior en lugar de asumir que es mejor; cuando la toma anterior gana,--select <id_del_plano>=<intento>la convierte nuevamente en el clip del plano, por lo que el manifiesto,suite.jsonyfinal.mp4siguen la elección del revisor. - Ensambla la edición final tú mismo con FFmpeg cuando la película necesite más que un corte directo: superposiciones, puentes de sonido, diálogo y una tarjeta de título tipografiada localmente.
Escribir prompts que sobreviven a la generación
- La biblia de personajes en cada prompt de video cubre solo los personajes que lista el plano, así que enuméralos. Un plano de un solo personaje que describe todo el elenco tiende a sentar a los demás en el fondo.
- Los retratos de referencia se entregan al editor de imágenes fijas en el orden de los
charactersdel plano. Refiérete a ellos por ese orden en el prompt de la imagen fija, por ejemplo "la mujer de la primera imagen de referencia", y vuelve a indicar su cabello, piel y vestimenta de todos modos; la referencia fija la identidad, las palabras fijan el encuadre. - Describe una imagen fija como una fotografía: encuadre, dónde está cada persona, qué está haciendo en el instante en que se abre el plano, la luz, el lente. Di "sin texto" en cualquier cosa que pueda llevarlo, como una paleta, un letrero o una pantalla, y termina cada prompt de imagen fija con "llena todo el encuadre de borde a borde, sin barras negras, sin letterbox": los planos generales amplios de lo contrario regresan con barras de cine incrustadas en la imagen, que luego el video hereda.
- Los retratos se ven mayores y más ordenados de lo escrito. Da una edad dos veces ("25, se lee como veinticinco y no mayor"), describe el cabello por longitud y comportamiento ("cinco centímetros en la parte superior, peinado hacia un lado, no hacia atrás, no un corte al rape"), y nombra la luz y la paleta que usa el resto de la película, o un plano solitario regresa en una temperatura de color diferente de sus vecinos.
- Cuando una imagen fija es rechazada, muévela a una carpeta
rejected/junto a las otras en lugar de eliminarla. La reejecución solo renderiza lo que falta, y la toma anterior permanece disponible si la nueva pierde una composición que era correcta. - Abre un prompt de video con "Comienza exactamente en el fotograma suministrado" cuando el plano tenga una imagen fija, y di quién mantiene la misma cara, cabello y ropa. Nombra la cantidad de accesorios que no deben multiplicarse.
- MiniMax H3 Max genera sonido nativo y habla sincronizada con los labios. Para una línea hablada, cita las palabras exactas en el prompt, nombra al hablante y pide movimiento labial natural y sin subtítulos; coloca las mismas palabras en el campo
dialoguedel plan para que el juez pueda verificarlas. Las duraciones aceptadas son de 5 a 15 segundos por plano a 480P o 768P; dos líneas de diálogo necesitan seis segundos en lugar de cinco. Los fotogramas no pueden confirmar lo que se dijo, así que transcribe el audio nativo (un whisper.cpp local es suficiente) y compáralo con el guion; el modelo también improvisa líneas murmuradas en escenas de multitudes, así que lee toda la transcripción, no solo las líneas que escribiste. - La luz "atrapando" o "reflejada" en los ojos de un personaje se renderiza literalmente como iris brillantes. Di que los ojos mantienen su color natural y prohíbe la luz de color en ellos.
- Dos accesorios sostenidos con las manos tienden a fusionarse en una sola mano en pocos fotogramas, independientemente de lo que muestre la imagen fija. Cuando un accesorio importa, dale un lugar que no sea una mano (boca, bolsillo, mesa) o planifícalo para que sea opcional, y juzga la toma por la puesta en escena en lugar de qué mano sostiene qué.
- Termina un plano con una línea de mirada hacia el sujeto del siguiente plano (una mirada hacia la primera fila antes del corte a ella dándose la vuelta) para que la unión se lea como causa y efecto en lugar de como dos generaciones separadas.
- En el ensamblaje de FFmpeg,
concatemite una base de tiempo de microsegundos que unxfadeposterior rechaza; fija cada cadena de video asettb=1/<fps>antes y después de concat al mezclar fundidos y cortes duros. Recorta cada clip a su duración planificada para que la tarjeta de título mantenga su tiempo completo, y lee las duraciones de los clips de los archivos en lugar de asumirlas. - Escribe el prompt de video como un director de fotografía, no como un director de escena. Abre con el medio y la física antes de cualquier bloqueo: "película de acción real fotorrealista <género>, no animación, no escena de corte de juego", el lente, de dónde viene la luz, qué está haciendo el aire (niebla, escarcha, lluvia), y "tela, cabello y peso físicamente creíbles". Un prompt que es principalmente bloqueo y prohibiciones ("permanece sentado", "nadie se mueve de su lugar", "misma cara que el primer fotograma") devuelve una fotografía que se mueve: el modelo anima lo que se le dice que anime y congela el resto, y la inmovilidad se lee como falsa. Nombra lo que debe mantenerse estable en una cláusula (una espada, ambas caras), no en cinco.
- Dale a cada acción un reloj: "dentro del primer medio segundo", "en el punto medio", "en el último segundo". La acción sin tiempo nunca llega o se gasta en un calentamiento, y un plano sin un tiempo marcado regresa como un lento acercamiento a personas que mantienen una pose.
- Nunca escribas "cámara lenta" o "elegante, sin prisas" en
visual_stylepara una película que tenga una pelea: el estilo se repite en cada plano, por lo que cada intercambio llega flotando y la pelea no tiene ritmo. Di "velocidad en tiempo real" en el estilo, y construye el tempo dentro de los prompts de pelea: cuenta los intercambios ("tres cortes y tres paradas en los primeros dos segundos"), nombra la pausa ("las hojas se bloquean, un tiempo sostenido"), luego la liberación ("ella rompe el bloqueo y la siguiente ráfaga es más rápida"), y deja que un aumento de velocidad exista solo en un impacto. El contraste es lo que se lee como ritmo; la gracia uniforme se lee como lenta. - Una salida hacia abajo se lee como una caída. Una figura que "se baja del alero y se deja caer en la niebla" es vista por un espectador como alguien que salta de un edificio, por ligero que sea el prompt. Termina una escena en el techo (un brindis, una espada envainada, una mirada), o toma el descenso en un plano propio con un aterrizaje visible que tenga peso.
- El diálogo que sobrevive a un espectador es diálogo dramático, no aforismo. Dos epigramas simétricos ("la escarcha es fría, el vino no") suenan escritos; un intercambio sencillo con un giro suena hablado. Cuando el usuario nombre una escena que ama, toma prestada la lógica de intercambio de esa escena (una regla establecida, una laguna reclamada, una orden seca, una negativa descarada) y ponla en boca de tus propios personajes en su propio registro, luego mantén cada línea lo suficientemente corta para ser dicha en los segundos que le diste.
- Elige texto a video para planos amplios, de paisaje, de acción y de escala. El modelo domina el movimiento y el clip se lee como filmado. Reserva imagen a video para planos cuya cara o composición exacta deba coincidir con una imagen fija, y carga la acción también allí. Una imagen fija pulida es un lastre para el movimiento: cuanto más ordenada la fotografía, más se parece el clip a una fotografía que se despierta. Cuando el usuario prefiera un movimiento convincente sobre una cara idéntica, dilo en el plan: deja
still_promptyreference_promptvacíos y lleva la identidad en ladescriptionde cada personaje, que el prompt de producción repite textualmente en cada plano que lista al personaje. - Juzga la codificación por la fuente, no por el tamaño del archivo. Compara la tasa de bits de un clip en bruto del proveedor con la de la película ensamblada: un número final mucho más bajo con la misma configuración de codificador significa que los clips eran estáticos, no que la codificación fue con pérdidas. Ensambla a CRF 16 o inferior con
-preset slow, mantén el tamaño de fotograma del proveedor (sin reescalar un clip de 768P en ninguna dirección), y dilo en la nota de entrega cuando el usuario pregunte si se perdió calidad en la postproducción. - Antes de recortar un plano de diálogo a su duración planificada, lee las marcas de tiempo de las palabras de la transcripción (
whisper-cli -ml 1) y mantén el clip lo suficientemente largo para que la última palabra termine antes de que comience el desvanecimiento de audio de salida; una línea que sobrevive al clip aún puede perder su sílaba final en un fundido. Vuelve a transcribir la ventana de diálogo de la película ensamblada, no solo el clip en bruto. - Una transcripción de un clip sin habla no es prueba de habla. Whisper inventa líneas cortas y créditos de subtítulos sobre ambiente constante; antes de regrabar por una línea "improvisada", confírmalo con marcas de tiempo y un envolvente de volumen (el habla se muestra como picos sobre el suelo de ambiente).
- Una imagen fija editada a partir de un retrato de referencia hereda la cara del retrato pero inventa el clima. Fija el cielo, la precipitación y la estación en cada prompt de imagen fija ("noche despejada, escarcha en las tejas, sin nieve") o un primer plano con coincidencia facial llega en una nevada que el resto de la película no usa.
- La ropa de calle sobrevive a la generación a 768P con un estampado más pequeño de lo que se escribió. Describe los patrones por nombre o por lo que representan ("cuadros escoceses", "flores pequeñas de dos centímetros") en lugar de asumir que una imagen fija los retendrá.