Caso 01SaaS com IA generativa
Film Factory
Uma plataforma que leva uma ideia até o filme exportado. São 17 etapas de pré-produção em que a IA escreve e desenha, e cada etapa aprovada vira contexto da seguinte.
Abrir o Film Factory- Meu papel
- Produto, engenharia e prompts. Projeto solo, com agentes de código.
- Período
- Junho a outubro de 2026, 732 commits
- Situação
- No ar, com conta grátis e planos pagos
- Stack
- Next.js, NestJS, PostgreSQL, pg-boss, Cloudflare R2 e SwiftUI
Em 30 segundos
Ferramentas de vídeo com IA geram um plano bonito e esquecem o personagem no plano seguinte. Construí o Film Factory para resolver isso antes da câmera: a história passa por documentos encadeados, do brainstorming ao roteiro técnico, e só depois vira imagem e vídeo.
Escrevi a especificação, tomei as decisões de produto e de arquitetura e revisei o que os agentes produziram. Este caso mostra como o contexto chega ao modelo, o que eu tirei das mãos dele e quanto custa.
- 17
- etapas de pré-produção encadeadas, para curta, longa e série
- US$ 5,96
- para pré-produzir um curta de 63 s, somando texto e imagens
- 3 mil
- testes automatizados, entre API, web e app de iPhone
- 28
- decisões de arquitetura registradas em ADRs
O que sai dele
Três filmes de projetos que passaram pelo Film Factory. Nenhum quadro foi filmado.
São de julho de 2026, anteriores às correções de prompt que aparecem mais abaixo. Deixo aqui porque são o que o produto entregava naquele momento, com os defeitos junto. Os dois horizontais são a exportação direta do produto. Cada trecho toca sem som, e o botão abre o filme inteiro.








Como o contexto chega ao modelo
Até o Roteiro Final, cada documento aprovado entra no contexto do seguinte. Depois dele eu fecho a lista, e cada etapa recebe só o que precisa.
Escolha uma etapa para ver o que entra no prompt dela. As barras mostram quantos documentos cada uma recebe.
Etapa 13 de 17
Roteiro Final
O roteiro em master scene, a fonte narrativa de tudo o que vem depois.
- Quem faz
- Modelo de texto
- Recebe 12 documentos
- Configuração
- Brainstorming
- Logline
- Sinopse e argumento
- Tom e Visual
- Universo da Obra
- Ficha de Personagens
- Mapa de Locações
- Escaleta
- One-liner
- Rascunhos
- Mapa de Continuidade
É o ponto de maior contexto do pipeline: doze documentos. Daqui em diante a lista fecha, para o material exploratório não competir com o roteiro.

Mandar tudo parece o caminho seguro, mas piorava o resultado. Com Roteiro Final, Script Breakdown e Roteiro Técnico juntos, o Storyboard precisava conciliar três níveis de descrição do mesmo plano. Com a lista fechada, cada assunto tem uma fonte de verdade. A lista usada em cada geração fica gravada no job, para a tela mostrar exatamente o que foi enviado, mesmo que o projeto mude enquanto ele roda.
Verificar sem alarme falso
A verificação de coesão cruza os documentos aprovados e aponta contradições. Para ela não gritar à toa, escrevi as regras do que conta: omissão não é contradição, o brainstorming fica de fora por ser exploração, e as notas do autor valem como fato. Cada contradição volta em JSON com a origem, o alvo e a correção sugerida, e o autor aprova ou não.
O que tirei das mãos do modelo
Numa auditoria de ponta a ponta, as falhas se concentraram em número, identificador, classificação e ordem. Passei tudo isso para o código.
O exemplo mais claro é a duração de cada plano. O modelo não informa mais esse número: ele estima só o tempo de ação que não acontece junto com a fala, e o sistema conta as palavras de cada fala, aplica o ritmo do roteiro e calcula o total. O resultado é um número que dá para auditar.
O modelo decide
- O texto das cenas e das falas.
- A técnica de cada plano: enquadramento, altura, lente e movimento.
- O tempo de ação que não acontece durante a fala.
- As descrições visuais e os prompts de imagem e de vídeo.
O código decide
- Quantas cenas existem e em que ordem. Todo documento recebe esse contrato.
- IDs, numeração de planos e a duração total de cada um.
- A grade do storyboard, composta por código a partir dos quadros, sem custo.
- O que entra no contexto, e o preço congelado antes de cada geração.
Essa divisão também deixa a falha pequena. Na geração do storyboard, cada painel é salvo assim que a imagem chega, e a grade da cena só é composta quando todos existem. Se a geração cai no segundo painel, a retomada reaproveita o primeiro e pede só o que falta. Há um teste automatizado que interrompe a geração nesse ponto e confere.
Prompt se conserta na causa
A regra do projeto: antes de acrescentar uma proibição, achar a causa no payload que foi enviado, simplificar, gerar de novo e comparar.
Um curta meu em produção saiu com texto de máquina: ponto e vírgula demais, rótulos de planejamento no meio da cena, falas que começavam pelo nome de quem fala. Em vez de escrever “não faça isso” no fim do prompt, li os requests guardados no banco e rodei três versões da mesma cadeia.
Antes, em produção
INT. SALA DE DECODIFICAÇÃO - NOITE
Em close nos dedos sobre símbolos, a leitura avança. As telas revelam uma sequência cifrada que parece conter uma advertência: não atravessar a fronteira. O obstáculo é a interpretação de símbolos ambíguos; a tática é cruzar dados com mapas estelares para confirmar autenticidade.
DANTE
Dante Não atravessar a fronteira.
Depois, com a cadeia corrigida
INT. SALA DE DECODIFICAÇÃO - NOITE
Símbolos decifram-se diante dele; dados reverberam em padrões frios. A voz do futuro atravessa os sistemas. O aviso fica claro: não atravesse.
EU DO FUTURO
Não atravesse.
O defeito nasce em cima e desce pela cadeia
Na tabela abaixo, a coluna do meio é a descoberta. Trocar só o prompt dos Rascunhos quase não muda nada, porque o modelo copia a Escaleta suja que recebe no contexto: os rótulos vão de 23 para 22. Quando a Escaleta corrigida entra na cadeia, eles vão para zero.
| Medida no texto | Em produção | Só o prompt novo | Cadeia nova |
|---|---|---|---|
| Escaleta | |||
| Ponto e vírgula | 30 | 7 | origem |
| Caudas no gerúndio | 25 | 3 | origem |
| Rótulos de planejamento | 23 | 0 | origem |
| Tom e Visual | |||
| Ponto e vírgula | 31 | 38 | 23 |
| Travessões | 14 | 27 | 4 |
| Caudas no gerúndio | 18 | 8 | 5 |
| Rascunhos | |||
| Ponto e vírgula | 15 | 13 | 5 |
| Caudas no gerúndio | 9 | 9 | 3 |
| Rótulos de planejamento | 23 | 22 | 0 |
| Roteiro Final | |||
| Ponto e vírgula | 14 | 12 | 7 |
| Caudas no gerúndio | 7 | 6 | 2 |
| Rótulos de planejamento | 8 | 14 | 0 |
| Falas que começam pelo nome | 12 de 12 | 0 | 0 |
Geração real com gpt-5-nano, nove chamadas. Uma amostra por célula: os números mostram direção e ordem de grandeza, não uma taxa. Na cadeia nova, a Escaleta corrigida é a origem do contexto, por isso não tem contagem própria.
Quando a primeira correção piora
No Tom e Visual, a primeira rodada dobrou os travessões, de 14 para 27. A causa estava no meu prompt: o formato pedido trazia um travessão entre título e orientação, em 21 itens, e o modelo copiou as linhas inteiras. Separei título e orientação, e o documento caiu para 4. Sem medir, eu teria achado que a regra nova estava funcionando.
A palavra que virou enredo
Um elemento do motor de cena se chamava “mudança de veredito”. A história de teste tinha um laudo de seguradora, e o modelo levou o termo para a trama: “o veredito da seguradora”. Pedir para ele “nomear” os elementos de cada cena teve efeito parecido, e os rótulos apareceram dentro do texto. Os cinco elementos viraram critério de conferência em silêncio, com outro nome. A rodada inteira custou 8 centavos de dólar, o que deixa esse jeito de testar barato o bastante para virar hábito.
Quanto custa um filme
Medi cada chamada de um curta completo, da logline aos prompts finais. Deu US$ 5,96, antes do vídeo.
O teste foi Andar Errado, uma comédia de 63 segundos, com 10 cenas e 28 planos. O total inclui as regenerações descartadas e as rodadas de ajuste, porque elas também são cobradas. Foram US$ 4,42 em 145 chamadas de texto com gpt-5.6-luna e US$ 1,54 em imagens.
| Etapa | Custo de texto | US$ | Chamadas |
|---|---|---|---|
| Roteiro Técnico | 1,41 | 28 | |
| Escaleta | 0,82 | 26 | |
| Preparação dos prompts de vídeo | 0,47 | 8 | |
| StoryboardDepois desta medição, a estrutura passou para o código. | 0,37 | 11 | |
| Mapa de Continuidade | 0,31 | 7 | |
| Ficha de Personagens | 0,20 | 19 | |
| Script Breakdown | 0,17 | 7 | |
| Tom e Visual | 0,16 | 8 | |
| Roteiro Final | 0,15 | 5 | |
| Rascunhos | 0,15 | 6 | |
| One-liner | 0,09 | 4 | |
| Universo da Obra | 0,03 | 1 | |
| Mapa de Locações | 0,03 | 3 | |
| Sinopse | 0,03 | 3 | |
| Logline | 0,02 | 4 |
A medição virou produto. Cada geração mostra o preço antes de confirmar, numa cotação congelada que o job respeita, incluindo modelo, contexto e tamanho. Vídeo fica de fora dos créditos: cada conta usa a própria chave no provedor escolhido, vê o prompt de cada plano e paga direto. Hoje o texto das contas comuns roda em gpt-5-nano, e só a preparação dos prompts de vídeo usa o gpt-5.6-luna.
Decisões de arquitetura
A fila mora no Postgres
Gerar é reservar créditos e enfileirar um job. Com pg-boss no mesmo banco, as duas coisas cabem numa transação, sem Redis para operar e sem crédito preso a um job que nunca entrou na fila.
ADR-003
Imagens ganharam fila própria
Um estouro de memória em 22/08 limitou a fila geral a quatro execuções por processo, e as imagens passaram a disputar vaga com texto e vídeo. Agora têm consumidores próprios, e quem espera fica no banco, sem ocupar memória.
ADR-022
Vídeo roda com a chave do usuário
Vídeo é caro, e o custo precisa ficar à vista. A plataforma cobra a preparação do prompt, nunca o vídeo, e a cotação registra zero crédito. Com isso a margem do produto não depende do preço de um provedor.
ADR-024
Uma trava antes de gastar storage
O R2 não tem limite rígido de gasto. Todo upload passa por um decorator que lê um registro próprio de uso e recusa o arquivo com 10% de folga antes do fim da franquia gratuita.
ADR-019
Série é uma árvore, não um formato
Cada projeto congela o tipo de produto e a versão da definição. Curta e longa têm um escopo só. Série vira série, temporada e episódio, cada nível com o próprio pipeline.
ADR-015
O código executa só o contrato atual
Aliases e parsers antigos faziam o comportamento depender da data em que o projeto nasceu. Toda mudança incompatível agora é uma transformação versionada e idempotente, no padrão expand, transform, contract.
ADR-012
Como dividi o trabalho com a IA
O repositório tem 348 mil linhas. Não escrevi a maior parte delas à mão, e é por isso que cuido tanto do que está em volta.
Ficou com a IA
- Escrever a maior parte do código, dos testes e das capturas de tela, a partir da especificação.
- Rodar as verificações com geração real, contar os defeitos e comparar as saídas.
- Propor alternativas de arquitetura e de provedor, com custo e risco de cada uma.
Ficou comigo
- Definir o produto, as regras e o escopo, e decidir o que fica de fora do lançamento.
- Escolher entre as alternativas. Cada escolha virou um ADR.
- Ler o que o modelo escreveu e dizer quando estava ruim. A auditoria de escrita começou com um curta meu.
- Aprovar tela por tela pelo histórico visual, antes de considerar uma entrega pronta.
O que ainda falta
- Ainda não tenho números de uso para mostrar. Este caso mede engenharia, não tração.
- As rodadas de antes e depois são disparadas à mão e têm uma amostra por célula. Falta virar uma avaliação automática a cada mudança de prompt.
- O app de iPhone roda no simulador e no meu aparelho. Ainda não foi para a App Store.
- Kit de redes sociais, photoshoot, teaser e videoclipe existem, mas seguem internos.
- Os filmes do início do caso são de julho. Falta gerar um filme novo com toda a cadeia corrigida.



