Vídeo com IA: Claude Code, Codex e ElevenLabs · Capítulo 14 de 25 · 25 min
Pôr Claude Code e Codex em revisão cruzada sem loop
Divida o trabalho entre Claude Code e Codex por tipo de arquivo e limite a revisão cruzada a duas rodadas com veredito em schema antes de chamar uma pessoa.
Este capítulo faz parte do curso gratuito Vídeo com IA: Claude Code, Codex e ElevenLabs.
Dois agentes no mesmo repositório viram problema quando um desfaz o trabalho do outro. O Claude Code ajusta a legenda, o Codex revisa e reescreve a composição inteira, o Claude corrige de volta, e a cota de cinco horas some sem que o vídeo avance. A solução não é um prompt mais longo: é papel fixo, troca por arquivo, critério escrito e um contador que para na segunda rodada.
Não existe comparação oficial nem benchmark da OpenAI ou da Anthropic sobre Codex e Claude Code em vídeo, e nenhum dos dois gera vídeo com modelo próprio. O que funciona é a divisão que você monta aqui: o Claude Code como diretor (Opus 5.5 por padrão nos planos pagos, com Sonnet 5.5 e Haiku 5.5 como subagentes) e o Codex como segundo executor e revisor (GPT-6.1 Sol por padrão, GPT-6 Astra só quando o Sol falha duas vezes). Revisão cruzada é quando um agente produz e o outro avalia com critério escrito, como o revisor de revista que devolve a lista do que corrigir sem reescrever o artigo.
Nesta aula você define quem produz e quem revisa cada arquivo, escreve um arquivo de regras que os dois leem, fecha o veredito num schema, monta o orquestrador com teto de duas rodadas e mede quanto a revisão custa por vídeo.
O vídeo abaixo mostra um ciclo inteiro: o Claude Code escreve o script de render, o Codex revisa e devolve a lista de problemas, e o Claude corrige só o que foi apontado. Observe que nenhum dos dois conversa com o outro; tudo passa por arquivo.
Carregando a vídeo-aula: Claude Code e Codex em revisão cruzada
Dividir os papéis por tipo de arquivo
A regra de ouro é simples: quem revisa nunca edita. O Codex revisa com codex exec em read-only, o modo padrão, e por isso não consegue alterar o que leu; essa é a propriedade mais útil de um revisor. Do lado do Claude, o revisor é um subagente com só Read e Bash, montado como na aula 10. A divisão segue o tipo de arquivo, não a preferência do dia.
Código e JSON são revisados pelo Codex; imagem e frame de render, pelo Claude, com a rubrica de QA visual da aula 11. Quando um arquivo não tem dono na tabela, ele ainda não deveria existir. Para entender por que separar quem faz de quem avalia reduz erro em qualquer sistema de agentes, veja a aula sobre testes e avaliação de agentes.
Quem produz e quem revisa cada arquivo
| Arquivo | Quem produz | Quem revisa |
|---|---|---|
| storyboard/cenas.json | Codex (plano com schema) | Claude Code |
| Composição HyperFrames ou Remotion | Claude Code | Codex em read-only |
| Scripts de corte e render com FFmpeg | Codex | Claude Code |
| qa/revisao/<vídeo>.rodada-N.json (veredito) | Codex | Você, se houver segunda reprovação |
| Quadros e frames de render | Render local | Claude Code com visão |
O revisor recebe o arquivo e o critério; nunca recebe permissão de escrita.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Fechar as regras e o veredito em arquivos
Os dois agentes precisam ler as mesmas regras. Em vez de manter um CLAUDE.md e um AGENTS.md que divergem na primeira edição, escreva um config/REGRAS-PRODUCAO.md e faça os dois arquivos apontarem para ele. O formato do CLAUDE.md está na aula 7 e o do AGENTS.md na aula 12; aqui cada um ganha só a linha de papel.
<!-- config/REGRAS-PRODUCAO.md: lido pelos dois agentes -->
# Regras de produção da Cozinha da Rafa
- Formatos: longo 1920x1080 e cortes 1080x1920, 30 fps, H.264 yuv420p, AAC 192k, +faststart.
- Texto na tela e legendas em português do Brasil com acentuação completa.
- Ids de modelo só no .env: MODEL_DIRECTOR, MODEL_EXECUTOR, MODEL_REVIEWER, MODEL_IMAGE, MODEL_VIDEO, MODEL_TTS.
- Proibido: /v1/videos, sora-2, sora-2-pro e ids veo-3.1-*-preview.
- Nenhuma API paga sem custo estimado e confirmação humana.
- Papéis: Claude Code dirige e escreve composição; Codex executa scripts e revisa código; quem revisa nunca edita.
- Revisão cruzada: no máximo 2 rodadas automáticas; depois, uma pessoa decide.
- Mídia (mp4, mov, wav) fora do git; só manifesto e código versionados.
<!-- CLAUDE.md (acrescente no topo) -->
Leia config/REGRAS-PRODUCAO.md antes de qualquer tarefa. Você é o diretor: escreve a composição e revisa quadros.
<!-- AGENTS.md (acrescente no topo) -->
Leia config/REGRAS-PRODUCAO.md antes de qualquer tarefa. Você executa scripts e revisa código do Claude Code.
Ao revisar, responda SÓ no schema pedido e não altere arquivos.
<!-- .claude/agents/revisor-de-render.md -->
---
name: revisor-de-render
description: Revisa frames e composição contra config/REGRAS-PRODUCAO.md. Use antes de qualquer render final.
tools: Read, Bash
model: haiku
---
Você revisa e não altera arquivos. Devolva uma tabela: arquivo | problema | gravidade.O veredito do Codex sai num schema fechado: veredito só pode ser aprovado ou reprovado, e cada problema traz arquivo, descrição, gravidade e correção sugerida. Com additionalProperties: false, o modelo não inventa um campo comentarios que vira parágrafo de opinião, e o codex exec --output-schema falha em vez de entregar texto solto. Esse JSON é a única coisa que o corretor recebe.
{
"type": "object",
"properties": {
"veredito": { "type": "string", "enum": ["aprovado", "reprovado"] },
"problemas": {
"type": "array",
"items": {
"type": "object",
"properties": {
"arquivo": { "type": "string" },
"descricao": { "type": "string" },
"gravidade": { "type": "string", "enum": ["alta", "media", "baixa"] },
"correcao_sugerida": { "type": "string" }
},
"required": ["arquivo", "descricao", "gravidade", "correcao_sugerida"],
"additionalProperties": false
}
}
},
"required": ["veredito", "problemas"],
"additionalProperties": false
}Limitar a revisão cruzada a duas rodadas
O ciclo tem quatro tempos. O Claude produz a composição (rodada 0). O Codex revisa em read-only e grava qa/revisao/<vídeo>.rodada-1.json. Se reprovar, o Claude corrige lendo só esse JSON, e o Codex revisa de novo. Se a segunda rodada também reprovar, o script para com código 3 e chama você. Terceira rodada automática não existe.
Duas escolhas impedem o loop. O revisor recebe o critério, não a opinião: uma lista fechada de checagens com número (duração a até 0,5 s do áudio, 1080x1920 a 30 fps, legenda dentro da área segura de 10%, nenhum id de modelo no código, nenhuma chamada a /v1/videos). E o corretor recebe só a lista de problemas, nunca a conversa do revisor, para não argumentar e reescrever tudo. O teto protege contra o loop, mas o Astra erra também para o outro lado: o guia da OpenAI de 11 a 12/09/2026 avisa que ele pode devolver a tarefa antes de terminar, e a rodada se perde. Diga a cada um o que é pronto: o revisor aprova só se as seis checagens passarem e, se reprovar, lista todas as falhas de uma vez; o corretor corrige todos os itens, roda lint e check e para. As etapas pulam o que já tem marcador em estado/, a mesma lógica do pipeline idempotente da aula 23. Se quiser disparar a revisão sozinha ao fim da sessão, um hook Stop do Claude Code pode chamar o script; hooks estão na aula 7.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
#!/usr/bin/env bash
# scripts/revisao_cruzada.sh - uso, na raiz video-ia: bash scripts/revisao_cruzada.sh receita-cartola
set -euo pipefail
VIDEO="$1"; MAX_RODADAS=2
mkdir -p estado qa/revisao
source .env # MODEL_DIRECTOR, MODEL_REVIEWER etc.; nenhum id escrito aqui
CRITERIO="Revise a composição do vídeo $VIDEO contra config/REGRAS-PRODUCAO.md. Cheque: \
(1) duração declarada igual à de audio/narracao.mp3 com tolerância de 0,5 s (use ffprobe); \
(2) 1080x1920 a 30 fps; (3) texto em pt-BR com acentuação; (4) legendas dentro da área segura de 10%; \
(5) nenhum id de modelo no código; (6) nenhuma chamada a /v1/videos. Não edite nada. \
Pronto = as seis checagens avaliadas até o fim; se reprovar, liste de uma vez todas as que falharam."
# Rodada 0: produção pelo Claude; pula se o marcador já existe
if [ ! -f "estado/$VIDEO.producao.ok" ]; then
claude -p "Monte a composição HyperFrames do vídeo $VIDEO a partir de storyboard/cenas.json e audio/narracao.mp3. Rode lint e check. Não renderize." \
--model "${MODEL_DIRECTOR:-sonnet}" --output-format json \
--allowedTools "Bash(npx hyperframes *)" "Bash(ffprobe *)" Read Write Edit > "qa/revisao/$VIDEO.producao.json"
touch "estado/$VIDEO.producao.ok"
fi
for R in $(seq 1 "$MAX_RODADAS"); do
SAIDA="qa/revisao/$VIDEO.rodada-$R.json"
# Revisão pelo Codex: read-only é o padrão do exec, então o revisor não consegue editar
codex exec -m "${MODEL_REVIEWER:-gpt-6.1-sol}" --ephemeral "$CRITERIO" \
--output-schema ./config/schemas/revisao.json -o "$SAIDA"
VEREDITO=$(jq -r .veredito "$SAIDA")
echo "rodada $R: $VEREDITO"
if [ "$VEREDITO" = "aprovado" ]; then
touch "estado/$VIDEO.revisao.ok"; exit 0
fi
if [ "$R" -eq "$MAX_RODADAS" ]; then
echo "Reprovado em $MAX_RODADAS rodadas. Revisão humana necessária: veja $SAIDA"; exit 3
fi
# Correção pelo Claude: recebe SÓ a lista de problemas, não a conversa do revisor
claude -p "Corrija apenas os itens listados em $SAIDA na composição do vídeo $VIDEO. Não altere o que não foi apontado. Pronto = todos os itens corrigidos, lint e check passando; então pare." \
--model "${MODEL_DIRECTOR:-sonnet}" --output-format json \
--allowedTools "Bash(npx hyperframes *)" "Bash(ffprobe *)" Read Write Edit > "qa/revisao/$VIDEO.correcao-$R.json"
doneTrês sinais de que virou loop
Se um destes sinais aparece no log, pare o ciclo e corrija a regra antes de rodar de novo.
- O mesmo problema reaparece nas duas rodadas: o critério está ambíguo
- O diff da rodada 2 desfaz o da rodada 1: os agentes leram regras diferentes
- O custo da tarefa passa do teto que você definiu para o vídeo
O teste: Reescreva o item do critério com número: pixels, segundos ou fps.
alexandrecaramaschi.com/educacao/frontends-com-vibecoding
Reforços da revisão cruzada em outubro de 2026
network Dar um worktree a cada agente e revisar com codex review
Desde a 0.154.0, de 09/09/2026, o Codex abre a sessão num worktree, um segundo checkout do mesmo repositório numa pasta própria, com codex --worktree ou /worktree; a 0.162.0, de 08/10/2026, trouxe as ferramentas de worktree gerenciado. Dê um checkout a cada agente: o Claude escreve no principal e o Codex revisa no dele, a partir do commit do Claude. Assim o diff não muda debaixo do revisor no meio da leitura. Se o git status do worktree do revisor mostrar arquivo alterado, alguém escreveu onde não devia: remova o worktree e recrie a partir do commit.
Para revisar código, o codex review é o caminho curto: --uncommitted lê o que não foi commitado, --base master compara com o ramo principal e --commit <SHA> olha um commit só. Ele roda em leitura e devolve achados por prioridade; review_model no config.toml escolhe um modelo só para revisar. Quando o orquestrador precisa do veredito em JSON, fique no codex exec com schema. As seis checagens também cabem numa seção ## Code Review Rules do AGENTS.md, lida pela revisão automática do GitHub, que publica só achados P0 e P1 e gasta uma cota de revisão separada; entre 29/09 e 10/10/2026 houve recusas por limite com cota sobrando, e a revisão local não depende dela.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
#!/usr/bin/env bash
# scripts/revisar_em_worktree.sh - roda na raiz video-ia, depois do commit do Claude
set -euo pipefail
git worktree add ../video-ia-revisor HEAD # checkout do revisor, no mesmo histórico
cd ../video-ia-revisor
codex review --base master # achados por prioridade, sem tocar na árvore
test -z "$(git status --short)" && echo "revisor não escreveu nada"
cd - > /dev/null && git worktree remove ../video-ia-revisor
# No ~/.codex/config.toml, um modelo só para revisar:
# review_model = "gpt-6.1-sol"target Trocar a palavra por uma probabilidade com a Decisions API
Desde 06/10/2026, a Decisions API, em beta, transforma texto e imagens em respostas tipadas: predicate devolve uma probabilidade de 0 a 1, choice escolhe uma opção de uma lista com a confiança e score dá nota por rubrica. Ela roda só com o gpt-6-luna, cerca de dez vezes mais rápida que a Responses API, por US$ 0,10 por milhão de tokens de entrada e sem cobrança de saída. Pergunte em predicate se a composição cumpre as seis checagens e decida o limiar: comece em 0,85 e grave no log o número, não só a palavra. Depois de dez vídeos, compare as probabilidades dos aprovados com as dos que você reprovaria e ajuste. A probabilidade diz se está bom, não o que corrigir; por isso o codex exec com schema continua entregando a lista ao corretor. Imagens entram só em base64 na própria chamada, e perguntas que dependem uma da outra pedem chamadas separadas.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
edit Revisar como diretor: notas com tempo, sinal e ajuste
O veredito dos agentes não substitui a sua revisão; ele a deixa curta. O método de revisão do curso Vibe Viral, do Vibehub Academy, consultado em 12/10/2026, cabe em quatro gestos, aqui em palavras próprias. Assista ao vídeo inteiro uma vez sem parar. Na segunda passada, anote cada ajuste com o tempo em que aparece, uma nota por linha. Entregue todas juntas: uma lista gera um render só, enquanto nota a nota gera cinco renders e cinco rodadas de cota. E diga o que quer ver, não como fazer: o agente escolhe o caminho, você confere o resultado.
A mesma forma serve ao critério do Codex. Cada defeito vira um par de sinal e ajuste: o sinal é o que se procura no quadro (legenda encostada na borda, rosto cortado na troca de plano) e o ajuste é o que muda no prompt ou na composição. Nota que não cabe nesse par ainda é opinião; reescreva antes de mandar. Está pronto quando cada linha de qa/notas/<vídeo>.md tem tempo, sinal e ajuste.
Nota vaga x nota boa na revisão do corte 9:16
| Nota vaga | Nota boa: tempo, sinal e o que quero ver |
|---|---|
| "A legenda está estranha" | 00:12 a 00:15: legenda a 4% da borda inferior; quero a legenda dentro da área segura de 10% |
| "Ficou lento no meio" | 00:24 a 00:31: plano parado por 7 s; quero uma troca de plano a cada 2 a 3 s nesse trecho |
| "A Rafa parece outra" | 00:38: cabelo diferente da folha de personagem; quero o quadro 4 com a Rafa da folha |
| "Melhora o final" | 00:56 a 01:00: o prato sai do quadro antes do fim da narração; quero o prato no centro até 01:00 |
Uma nota por linha, todas no mesmo arquivo, entregues de uma vez: um render só para todas.
Monte a revisão cruzada em sete passos
Rode na raiz do projeto, com o Codex configurado como na aula 12 e o Claude Code como na aula 7.
Passo 1: Crie o arquivo de regras compartilhado
Escreva `config/REGRAS-PRODUCAO.md` e aponte o CLAUDE.md e o AGENTS.md para ele.
Deu certo quando: `claude -p "resuma as regras"` e `codex exec "resuma as regras"` devolvem o mesmo conteúdo.
Erro comum: Manter regras duplicadas que divergem depois de uma edição.
Passo 2: Fixe o revisor sem escrita
Subagente `revisor-de-render` com `tools: Read, Bash` e o `codex exec` de revisão em read-only.
Deu certo quando: Depois da revisão, `git status` continua limpo.
Erro comum: Dar `Write` ao revisor para ele já corrigir.
Passo 3: Escreva o schema do veredito
`config/schemas/revisao.json` com `additionalProperties: false`.
Deu certo quando: Uma resposta fora do molde faz o `codex exec` falhar.
Erro comum: Deixar um campo `comentarios` livre, que vira opinião.
Passo 4: Monte o orquestrador com teto
`scripts/revisao_cruzada.sh` com `MAX_RODADAS=2` e marcadores em `estado/`.
Deu certo quando: Na segunda reprovação o script imprime "Revisão humana necessária" e sai com código 3.
Erro comum: Um `while` sem teto.
Passo 5: Escreva o critério com números
Seis checagens fechadas, cada uma com valor medível.
Deu certo quando: Duas rodadas no mesmo vídeo apontam problemas diferentes ou aprovam.
Erro comum: Critério como "ficou bom?", que gera opinião e loop.
Passo 6: Rode um ciclo num vídeo real
`bash scripts/revisao_cruzada.sh receita-cartola`.
Deu certo quando: Existe `qa/revisao/receita-cartola.rodada-1.json` aprovado ou `rodada-2.json` seguido da parada.
Erro comum: Passar ao corretor a conversa do revisor em vez do JSON.
Passo 7: Meça custo e cota
Some o `total_cost_usd` da saída JSON do Claude e os tokens do Codex (`--json`).
Deu certo quando: Uma linha por vídeo no `custos/orquestracao.csv` com a orquestração abaixo de US$ 0,10.
Erro comum: Contar só tokens e esquecer as mensagens por 5 horas do plano.
No fim você tem: Um ciclo de revisão que aprova ou para em duas rodadas, com veredito em arquivo e custo registrado por vídeo.
Medir custo e cota por vídeo
Uma rodada de revisão no GPT-6.1 Sol lê cerca de 6 mil tokens de composição e mil de critério e escreve uns 800 de veredito: US$ 0,014 de entrada mais US$ 0,008 de saída, ou US$ 0,022, em 12/10/2026. Uma correção no Sonnet 5.5 com 10 mil tokens de entrada e 3 mil de saída fica perto de US$ 0,05. Duas revisões e uma correção ficam abaixo de US$ 0,10 por vídeo; o render local não consome tokens.
A cota pesa mais que o dinheiro. O Claude Code divide a mesma janela de cinco horas e o teto semanal com o chat, o desktop e o celular. Os créditos mensais de API anunciados em 07/10/2026 para assinantes Max (US$ 100 no 5x e US$ 200 no 20x; no Team, até US$ 500 em conjunto) valem na API, no Agent SDK, nos Managed Agents e no playground, não acumulam e não cobrem o Claude Code interativo: o claude -p do orquestrador continua na cota da assinatura. No Codex com o Plus, a janela de cinco horas comporta de 15 a 160 mensagens de 6.1 Sol e de 5 a 45 de Astra, e as tarefas no Codex Cloud saem da mesma cota, gastando mais que as locais. Quem assinou o Pro 200 entre 22/09 e 29/09/2026 mantém a cota antiga só até 29/10/2026; assinaturas novas já entram com a cota menor.
Se a cota estiver acabando, troque o revisor para o gpt-6-luna nas checagens mecânicas e guarde o Sol para a revisão de lógica; se um bug de sincronia resistiu a duas rodadas, faça uma única chamada ao Astra. Para três vídeos por semana, rode o orquestrador em série; com dezenas de vídeos, a documentação do Claude indica a ferramenta Workflow do TypeScript SDK e um maxBudgetUsd por lote. A conta por tarefa, e não por assinatura, é a mesma da aula sobre escolher entre Claude e ChatGPT pelo custo do erro.
Quanto custa revisar um vídeo com dois agentes
US$ 0,022
Uma rodada de revisão no GPT-6.1 Sol
7 mil tokens de entrada e 800 de saída
US$ 0,05
Uma correção no Sonnet 5.5
10 mil tokens de entrada e 3 mil de saída
< US$ 0,10
Orquestração por vídeo
duas revisões e uma correção
15 a 160
Mensagens de 6.1 Sol no Plus
por janela de 5 horas
Fonte: Cálculo pelas tabelas de preço da OpenAI e da Anthropic e pela página de planos do ChatGPT, lidas em 09/10/2026
Guia prático: o Claude revisando o Codex, no mesmo schema e com teto de gasto
Na aula, o Codex revisa o que o Claude escreve. Aqui o sentido se inverte: o Claude Code revisa os scripts de FFmpeg do Codex com o mesmo config/schemas/revisao.json, sem ferramenta de escrita, com limite de turnos e de dólares, e os dois lados gravam o custo real no custos/orquestracao.csv.
Funções, casos de uso e aplicações
Funções
Opções de linha de comando para revisar sem loop e sem surpresa na conta
| Função ou recurso | O que faz | Quando usar | Desde |
|---|---|---|---|
| claude -p --json-schema com --output-format json | Devolve o veredito validado no campo structured_output; schema inválido encerra com erro | O Claude revisar no mesmo molde do Codex | Erro em schema inválido desde a v2.1.205 |
| --max-budget-usd | Para a execução quando o gasto estimado chega ao valor; o gasto de subagentes conta | Toda revisão automática | Corte de subagentes desde a v2.1.217 |
| --max-turns | Limita os turnos do agente e sai com erro ao atingir o número | Impedir que o revisor vire uma refação | Referência de 12/10/2026 |
| --permission-mode dontAsk com --allowedTools | Nega tudo o que pediria aprovação, menos o que a lista libera, como Bash(ffprobe *) | Revisor que lê e mede sem escrever | Referência de 12/10/2026 |
| --permission-prompts none | Avisa o agente que ninguém vai aprovar e para de esperar resposta | Revisão agendada, sem pessoa na frente | v2.1.259 |
| codex exec --json | Saída em linhas JSON; o evento turn.completed traz os tokens de entrada, cache, saída e raciocínio | Custo real da rodada do Codex no CSV | Referência de 12/10/2026 |
| claude import codex | Traz a configuração do Codex para o Claude Code; --dry-run mostra antes | Manter os dois agentes com as mesmas regras de partida | v2.1.213 |
Fonte: Claude Code Docs, CLI reference e Run Claude Code programmatically; ChatGPT Learn, Non-interactive mode; 12/10/2026
Casos de uso
Renata, sócia de uma agência de conteúdo para clínicas odontológicas em Porto Alegre
Marketing digital
Dor
O Codex escreve os scripts de corte dos Reels e ninguém revisa; um script sem yuv420p gerou uma semana de vídeos que não abriam no celular.
Solução
Revisão inversa: o Claude lê cada script novo do Codex no mesmo schema, só com leitura e ffprobe, teto de US$ 0,30 e oito turnos por arquivo.
Resultado
Acompanhe no CSV quantos scripts reprovam na primeira rodada e quanto custa cada revisão; em um mês, decida se o teto pode cair.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Paulo, professor de uma pós-graduação a distância em Fortaleza
Educação
Dor
As revisões automáticas das aulas gravadas rodam de madrugada e, quando um pedido de permissão aparece, a execução fica parada até de manhã.
Solução
--permission-prompts none e --permission-mode dontAsk no revisor agendado; o que pediria aprovação vira negação registrada no resultado.
Resultado
Pela manhã, o JSON de cada aula mostra o veredito e as negações; observe se alguma negação se repete e transforme-a em regra do --allowedTools.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Na prática
O script abaixo roda depois que o Codex entrega um script de corte, como o scripts/slideshow.sh da aula 13. O Claude recebe o mesmo critério com números da aula, responde no config/schemas/revisao.json e grava o custo estimado (total_cost_usd, a estimativa que o próprio Claude Code calcula) no CSV. A última parte mostra como tirar os tokens de uma rodada do Codex pelos eventos do --json.
#!/usr/bin/env bash
# uso, na raiz video-ia: bash scripts/revisao_inversa.sh scripts/slideshow.sh receita-cartola
set -euo pipefail
ALVO="$1"; VIDEO="$2"
mkdir -p qa/revisao custos logs
source .env
MODELO="$MODEL_DIRECTOR"; [ -n "$MODELO" ] || MODELO=sonnet
SAIDA="qa/revisao/$VIDEO.claude-revisa-codex.json"
CRITERIO="Revise $ALVO contra config/REGRAS-PRODUCAO.md. Cheque: (1) H.264 com yuv420p; \
(2) 30 fps; (3) AAC 192k; (4) -movflags +faststart; (5) nenhum id de modelo escrito no script; \
(6) nenhuma chamada a /v1/videos. Não edite nada. Pronto = as seis checagens avaliadas; \
se reprovar, liste de uma vez todas as que falharam."
claude -p "$CRITERIO" \
--model "$MODELO" --output-format json \
--json-schema "$(cat config/schemas/revisao.json)" \
--tools "Read,Grep,Glob,Bash" --allowedTools "Bash(ffprobe *)" \
--permission-mode dontAsk --permission-prompts none \
--max-turns 8 --max-budget-usd 0.30 > "$SAIDA"
jq '.structured_output' "$SAIDA" > "qa/revisao/$VIDEO.veredito-claude.json"
jq -r '"veredito: \(.structured_output.veredito) | US$ \(.total_cost_usd)"' "$SAIDA"
echo "$(date +%F),$VIDEO,claude-revisor,$(jq -r .total_cost_usd "$SAIDA")" >> custos/orquestracao.csv
# Lado do Codex: tokens reais de uma rodada pelos eventos turn.completed
# codex exec --json -m gpt-6.1-sol --output-schema ./config/schemas/revisao.json \
# -o "qa/revisao/$VIDEO.rodada-1.json" "$CRITERIO" > "logs/$VIDEO.codex.jsonl"
# jq -c 'select(.type == "turn.completed") | .usage' "logs/$VIDEO.codex.jsonl"Revisão nos dois sentidos em cinco passos
Passo 1: Reaproveite o schema da aula
O mesmo config/schemas/revisao.json serve aos dois revisores.
Deu certo quando: jq . config/schemas/revisao.json imprime o molde sem erro.
Erro comum: Criar um schema diferente para o Claude e comparar vereditos que não batem.
Passo 2: Rode a revisão inversa num script do Codex
bash scripts/revisao_inversa.sh scripts/slideshow.sh receita-cartola.
Deu certo quando: O terminal mostra o veredito e o custo em dólar.
Erro comum: Liberar Bash sem restrição e dar ao revisor a chance de escrever.
Passo 3: Confira que nada mudou
git status --short logo depois da revisão.
Deu certo quando: Nenhum arquivo alterado.
Erro comum: Aceitar uma correção "de passagem" feita pelo revisor.
Passo 4: Grave os tokens do Codex
Na rodada do Codex, acrescente --json e leia o turn.completed.
Deu certo quando: Uma linha de uso por rodada, ao lado da linha do Claude no CSV.
Erro comum: Somar só o custo do Claude e achar que a revisão saiu barata.
Passo 5: Ajuste o teto depois de dez vídeos
Compare o total_cost_usd das revisões com o valor do --max-budget-usd.
Deu certo quando: O teto fica com folga acima da revisão mais cara.
Erro comum: Teto colado no gasto médio, que corta a revisão no meio.
No fim você tem: Os dois agentes revisam um ao outro no mesmo molde, sem escrever e com o custo de cada rodada no CSV.
Armadilhas
Revisor automatizado: o que evitar e o que fazer
Evite
Coluna a evitar
- Tratar --max-budget-usd como limite exato: ele usa estimativa e o gasto pode passar
- Usar --bare sem saber que ele pula o CLAUDE.md e exige ANTHROPIC_API_KEY, fora da assinatura
- Dar Bash sem filtro ao revisor
- Definir OPENAI_API_KEY no job inteiro do GitHub Actions
- Ler só o campo result e perder o veredito estruturado
Prefira
Coluna recomendada
- Teto com folga acima da revisão mais cara já medida
- -p normal, que lê o CLAUDE.md e as regras do projeto
- dontAsk com --allowedTools "Bash(ffprobe *)"
- openai/codex-action e a chave só na etapa do Codex
- jq '.structured_output' e o JSON gravado em qa/revisao/
Na Cozinha da Rafa, a terça-feira é do corte 9:16 de 60 segundos do baião de dois. O Claude, no Sonnet, escreve a composição HyperFrames a partir do storyboard/cenas.json e do audio/narracao.mp3. O Codex, no 6.1 Sol em read-only, reprova na rodada 1: duração declarada de 58 segundos contra 60,4 de áudio e uma legenda a 4% da borda inferior. O Claude corrige só esses dois itens e a rodada 2 aprova. Na quinta, o vídeo longo 16:9 reprova duas vezes por um id veo-3.1-generate-preview escrito num script; o orquestrador para com código 3, e a Rafa move o id para o .env, como a regra manda, antes de rodar de novo.
Rode o ciclo completo no próximo vídeo da semana. Está pronto quando os dois agentes resumem as mesmas regras, o revisor termina com git status limpo, o orquestrador aprova ou para na segunda rodada com o veredito em qa/revisao/ e o custos/orquestracao.csv mostra a orquestração do vídeo abaixo de US$ 0,10.
Seu caderno neste capítulo
Abrir o caderno completoSelecione um trecho do capítulo para destacar ou anotar. Nos vídeos e áudios, use Anotar este momento. No teclado, selecione com Shift e as setas e use Alt+Shift+D para destacar ou Alt+Shift+N para anotar.
Salvo neste navegador. Entre na sua conta para levar o caderno a outros aparelhos.
Entre na sua conta para compartilhar o que aprendeu e convidar alguém para estudar com você.
Conexões deste capítulo
Veja o que estudar antes e para onde seguir depois, explore os conceitos e compare abordagens em outros cursos. Sugestões marcadas como “sugerido pelo grafo” vêm dos assuntos em comum, não do índice do curso.
Estude antes
- CursoClaude Code CLI: Programação com IA
- Veja o que o Claude Code faz antes de instalarsugerido pelo grafoApresenta o conceito “Claude Code”, usado em “Pôr Claude Code e Codex em revisão cruzada sem loop”.
- CursoAstra profundosugerido pelo grafoA quinta parte do Astra planeja o vídeo e edita o material bruto com o modelo dirigindo a ferramenta. O curso de vídeo com IA aprofunda esse trabalho com Claude Code, Codex e ElevenLabs, do roteiro à publicação. O grafo já sugeria esta ordem pela regra de entrada da trilha; com a ordem anterior curada, ela passa a ser declarada (Etapa 4, wave 3).
- CursoSetup Completo: do zero ao Claude Codesugerido pelo grafo7 capítulos de “Vídeo com IA: Claude Code, Codex e ElevenLabs” usam conceitos apresentados em “Setup Completo: do zero ao Claude Code”.
Depois, siga para
- CursoFrontends com Vibecodingsugerido pelo grafo21 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
- CursoDo Agile ao Agentic Operating Modelsugerido pelo grafo5 capítulos de “Do Agile ao Agentic Operating Model” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
- CursoAgentes de IA Autônomos: Do Conceito à Produçãosugerido pelo grafo7 capítulos de “Agentes de IA Autônomos: Do Conceito à Produção” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
- CursoLLM FinOps: o custo da IA para quem assina o orçamentosugerido pelo grafo4 capítulos de “LLM FinOps: o custo da IA para quem assina o orçamento” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
Conceitos deste capítulo
O mesmo assunto em outros cursos
- Bastidores: Como Este Portal Foi ConstruídoAgentes em worktrees: produção em paraleloExaminar conexões de Agentes em worktrees: produção em paralelo
- Vibecoding para SEOSetup do Ambiente: Claude Code + Cursor em 15 MinutosExaminar conexões de Setup do Ambiente: Claude Code + Cursor em 15 Minutos
- Skills de IA com Vibecoding e TerminalModos de Permissão: Equilibrando Velocidade e Controle HumanoExaminar conexões de Modos de Permissão: Equilibrando Velocidade e Controle Humano
- VS Code: Do Zero ao Editor ProfissionalClaude Code: o que um líder faz sem programarExaminar conexões de Claude Code: o que um líder faz sem programar
Voltar ao capítulo anterior: Gerar storyboard e miniaturas com gpt-image no lugar do Sora
Leve uma ideia para a prática
Escolha uma atividade no painel e volte a este curso quando quiser.
Atividades e evolução ficam reunidas no painel da sua conta.
Laboratórios ao vivo deste curso
Cada laboratório monta a biblioteca real dentro da aula, com controles para você mexer e o código do exemplo para copiar. O texto de reserva descreve a demonstração para quem lê sem JavaScript. O link abre o capítulo já no ponto do laboratório.
MediaRecorder, Canvas 2D e Long Animation Frames (plataforma)
Grave a cena em tempo real e veja os quadros que se perdem
Suba as partículas, force um bloqueio de 300 ms e grave seis segundos; compare com o render quadro a quadro desta aula.
Pacote
Abrir no capítuloMontar vídeo em HTML com HyperFrames e escolher entre ele e o Remotionsem pacoteMotion
Ver agentes em paralelo trocando mensagens numa linha do tempo
Reproduza a cena, percorra o tempo pelo controle e compare o tempo de parede com a soma das barras de cada agente.
Pacote
Abrir no capítuloParalelizar cenas com subagentes sem estourar o limite das APIsmotionReact (sem dependência extra), com as APIs do Veo e do fal.ai
Prompt de vídeo em cinco camadas, pronto para a API
Escolha plano, câmera, luz, ação e áudio e copie o prompt e o JSON para o Veo ou para o fal.ai.
Pacote
Abrir no capítuloEscrever prompt de vídeo em cinco camadas e manter o personagem consistentereactReact (sem dependência extra), com o comando para o FFmpeg
Corte o vídeo apagando palavras da transcrição
Aperte as palavras para removê-las, ligue a remoção de pausas e copie o comando FFmpeg e a legenda SRT gerados.
Pacote
Abrir no capítuloRemover pausas e reenquadrar o vídeo de 16:9 para 9:16 com legenda por palavrareactReact (sem dependência extra)
Quanto custa cada etapa do seu pipeline de vídeo
Troque a ferramenta de cada etapa e o percentual de b-roll e veja qual etapa pesa no custo por minuto e por vídeo.
Pacote
Abrir no capítuloOrquestrar o pipeline com etapas idempotentes e teto de gastoreact
Capítulos vizinhos em Vídeo com IA: Claude Code, Codex e ElevenLabs
- 12Configurar o Codex com GPT-6 Astra num sandbox que pede aprovação
- 13Gerar storyboard e miniaturas com gpt-image no lugar do Sora
- 14Pôr Claude Code e Codex em revisão cruzada sem loop
- 15Narrar em português com Eleven v4 por API e usar o Flash no volume
- 16Clonar ou desenhar uma voz com consentimento por escrito e verificação