AI short drama (minissérie IA)
História entra, episódio sai. Você escreve a história em um project.json (personagens,
locais, planos). O scripts/drama.mjs cuida de tudo que custa dinheiro
ou é fácil de errar:
project.json ─ estimativa ─ elenco ─ (voz) ─ planos ─ montagem ─▶ episode.mp4 + .srt
gratuita imagem de narração Seedance ffmpeg: normaliza,
valida referência modo only renderiza mixa a narração,
+ preços por person. cada plano junta, legendas
e local
Como os personagens permanecem os mesmos: cada personagem recebe uma ficha de referência (retrato + vistas frontal/lateral/traseira). Cada plano passa as fichas dos personagens presentes para o Seedance 2.0 como imagens de referência, e o prompt diz qual imagem é quem.
Regras
- Sempre execute
scripts/drama.mjs. Não chame a API com curl ou fetch. O script armazena cada ID de tarefa no momento em que ela existe, então uma falha ou um timeout retoma a mesma tarefa em vez de pagar por ela novamente. Chamadas manuais perdem isso. - Leia
references/project-schema.mdereferences/shot-writing.mdantes de escreverproject.json. O guia de escrita de planos decide se o episódio parece um filme ou doze clipes desconexos. - Execute
estimateprimeiro e mostre ao usuário o resultado: lista de planos, duração total, modelos e a tabela de preços. Aguarde uma confirmação antes decast/shots. O script recusa qualquer etapa acima de $1 sem--yes. Só passe--yesdepois que o usuário concordou com esse valor. - Mostre ao usuário as fichas de personagens antes de renderizar os planos. As fichas custam
cerca de $0,02 cada; os planos custam 10–100× mais. Se um rosto, uma roupa ou o estilo
estiver errado, corrija a aparência (
look) e executecast --redo <id>agora. Cada plano herdará isso. - Para um novo projeto, renderize um plano primeiro (
shots --only s1). Veja-o com o usuário, depois renderize o restante. Pule isso apenas para projetos muito curtos (três planos ou menos) ou quando o usuário disser. - Nunca invente um nome de modelo. Use apenas os modelos na tabela abaixo. Se o usuário pedir outro, diga que esta skill não oferece suporte a ele.
- Tarefas com falha nunca são cobradas. Diga isso claramente quando uma falhar, explique o porquê (o script imprime o motivo e o próximo passo), e ofereça a repetição.
- Não mencione provedores upstream ou roteamento. Fale sobre os nomes dos modelos neste arquivo e nada por trás deles.
- Nada de pessoas reais identificáveis sem seu consentimento, e nada sexual, odioso ou difamatório sobre alguém real. Recuse esses pedidos.
Fluxo de trabalho
S=/caminho/absoluto/para/esta/skill/scripts/drama.mjs # você sabe seu diretório base; use-o
node $S check # chave, saldo, ffmpeg
mkdir -p dramas/meu-episodio # uma pasta por episódio, no workspace do usuário
# escreva dramas/meu-episodio/project.json (veja references/project-schema.md)
node $S estimate dramas/meu-episodio/project.json --prompts
node $S cast dramas/meu-episodio/project.json # depois MOSTRE as imagens em cast/
node $S voice dramas/meu-episodio/project.json # modo narração apenas
node $S shots dramas/meu-episodio/project.json --only s1 # verifique um, depois:
node $S shots dramas/meu-episodio/project.json
node $S assemble dramas/meu-episodio/project.json --burn-subs
node $S status dramas/meu-episodio/project.json # a qualquer momento: progresso, gasto, o que falta
- Renderizações são lentas. Um plano geralmente leva de 2 a 8 minutos, e os planos rodam 3
de cada vez. Antes de
shots, informe ao usuário aproximadamente quanto tempo levará. Não o deixe olhando para um terminal silencioso. - Qualquer comando pode ser reexecutado com segurança. O trabalho concluído é ignorado. As tarefas
em andamento são retomadas de onde pararam. Planos com falha são repetidos apenas com
--retry-failed. - Editar um plano após sua renderização não o re-renderiza.
statusmarca como "inputs alterados". Re-renderize-o propositalmente comshots --redo <id>; isso é pago novamente. - Mostre o resultado: o caminho final do MP4, sua duração, e o
.srt. Depois diga o que foi gasto:statusimprime o valor exato cobrado, lido de volta da API. - Tudo é baixado para a pasta do projeto. Os URLs de resultado da API expiram após 30 dias, então a pasta é a cópia que dura.
Diálogo ou narração
Escolha antes de escrever os planos:
"mode": "dialogue" | "mode": "narration" | |
|---|---|---|
| Quem fala | Personagens na tela, com sincronia labial. O Seedance gera as vozes junto com o vídeo. | Um narrador em voice-over (texto para fala), mixado sobre o som ambiente de cada plano. |
| Bom para | Cenas movidas por conversa; minisséries estilo live-action. | 漫剧 / dramas de IA em quadrinhos, adaptações de romances, vídeos de recapitulação e narrativa. |
| Consistência de voz | A voz de um personagem pode variar um pouco de plano para plano. | Uma voz idêntica para todo o episódio. |
| Duração do plano | Você define duration (4–15 s). Mantenha cada fala curta o suficiente para caber. | Definida automaticamente para caber cada linha de narração, até 15 s. |
| Limites | Cerca de 1–2 falas curtas por plano de 5 s. Sem controle exato sobre quem fala quando. | Personagens não falam na tela. |
Se o usuário não disser, use narração para qualquer coisa descrita como 漫剧, um quadrinho, um romance ou uma recapitulação de história. Use diálogo para cenas construídas em conversa.
Modelos e custos
O script escolhe um video_model padrão baseado no estilo. Looks estilizados (anime,
quadrinhos, 国漫, cartoon, aquarela) recebem dreamina-seedance-2-0-mini. Todo o resto
recebe seedance-2.0-mini. Substitua em project.json quando o usuário quiser algo diferente.
| O usuário quer | video_model | Resoluções | Por segundo de vídeo |
|---|---|---|---|
| Episódio estilizado (anime, quadrinhos, 国漫); rascunhos | dreamina-seedance-2-0-mini | 480p / 720p | $0,0225 / $0,048 |
| Estilizado, um passo acima do mini | dreamina-seedance-2-0-fast | 480p / 720p | $0,0644 / $0,1372 |
| Estilizado, qualidade final até 1080p | dreamina-seedance-2-0 | 480p / 720p / 1080p | $0,10 / $0,22 / $0,55 |
| Pessoas fotorrealistas | seedance-2.0-mini | 480p / 720p | $0,044 / $0,095 |
| Fotorrealista, um passo acima do mini | seedance-2.0-fast | 480p / 720p | $0,071 / $0,153 |
| Fotorrealista, qualidade final até 1080p | seedance-2.0 | 480p / 720p / 1080p | $0,092 / $0,197 / $0,492 |
Outros custos:
- Fichas de personagem e local:
nano-banana-2-1, $0,022 cada em 1K. - Narração:
minimax-speech-2.8-turbo, $0,04 por 1.000 caracteres. Um clipe curto é cobrado no mínimo $0,004.
Um episódio de um minuto (12 planos × 5 s, 5 fichas) custa cerca de:
- $1,46 em
dreamina-seedance-2-0-mini480p - $2,99 em
dreamina-seedance-2-0-mini720p - $2,75 em
seedance-2.0-mini480p - $29,63 em
seedance-2.01080p
Sugira 480p para a primeira passagem. Uma segunda passagem em 720p apenas re-renderiza os planos
("resolution": "720p", depois shots --redo <ids>). As fichas permanecem.
Por que as linhas fotorrealistas existem: os modelos dreamina-* recusam imagens de referência
que pareçam uma pessoa real, e uma ficha de personagem fotorrealista pode acionar isso.
O script reconhece essa recusa e diz para você trocar para
seedance-2.0-mini. A tarefa recusada não é cobrada.
Os preços são preços de tabela, verificados em 30/09/2026. status mostra o que foi realmente
cobrado.
A chave da API
Execute node $S check primeiro. A chave vem de APIMODELS_API_KEY, ou de
~/.apimodels/credentials, ou de ~/.apimodels/credentials.json. O último é escrito
por npx apimodels-mcp login, então um usuário que já fez login em qualquer ferramenta apimodels
já está configurado.
Se não houver chave, execute node $S login você mesmo e dê ao usuário o link que ela
imprime. Eles fazem login em apimodels.app e clicam em Autorizar. Uma nova chave é
escrita em ~/.apimodels/credentials e nunca aparece nesta conversa.
Depois execute check novamente e prossiga.
Se login não funcionar (sem navegador na máquina), não peça a chave no
chat. Dê ao usuário um comando para colar em uma nova janela de terminal,
com o caminho absoluto do script preenchido:
read -s KEY && printf %s "$KEY" | node /CAMINHO/ABSOLUTO/scripts/drama.mjs save-key && unset KEY
As chaves são criadas em https://apimodels.app/console/api-keys.
Manipulação da chave:
- Nunca a ecoe de volta.
- Nunca a passe como argumento de comando.
- Nunca a escreva na pasta do projeto.
- Se uma chave aparecer na conversa, diga ao usuário para rotacioná-la.
Erros
O script imprime o motivo e o próximo passo. Em palavras simples:
| Você vê | Significado | Faça |
|---|---|---|
401 | Chave ruim ou ausente | Execute login novamente |
402 | Saldo insuficiente | Recarregue em https://apimodels.app/console/credits. Os planos finalizados são mantidos. |
| "looks like a real person" | dreamina-* recusou uma imagem de referência | Troque video_model para seedance-2.0-mini, depois shots --retry-failed |
| Recusa de revisão de conteúdo | O prompt ou uma linha foi recusado | Reformule esse plano. Repetir o mesmo texto não adiantará. |
| Ocupado / timeout | Carga upstream | Execute shots --retry-failed um pouco mais tarde |
| "still running" | Mais de 25 minutos | Execute shots novamente mais tarde; ele retoma a tarefa, sem pagamento |
| código de saída 3 | Etapa custa mais de $1 | Confirme o valor com o usuário, depois adicione --yes |
O sucesso não é 100%: um plano ocasional falha, e uma repetição geralmente funciona.
O que esta skill não faz
Diga diretamente, em vez de improvisar:
- Não garante consistência perfeita. Rostos podem variar em planos abertos e com três ou mais personagens no mesmo quadro. Mantenha 1–2 personagens por plano (veja shot-writing).
- Nenhum plano tem mais de 15 s. Momentos mais longos são divididos em vários planos.
- Não sincroniza lábios com uma faixa de voz gravada pelo usuário.
- Não controla o primeiro quadro exato de um plano. Os planos são orientados por imagens de referência e pelo prompt.
- Os tempos das legendas são aproximados. Eles são distribuídos uniformemente dentro de cada
plano. Edite o
.srtse o tempo exato for importante. - Não publica em lugar nenhum. A saída é um MP4 local mais um SRT.