Shorts 9:16 · tudo local

Um roteiro vira short narrado em 30 segundos

Você escreve as falas e escolhe os cards. O cardshorts grava a voz, confere, gera as imagens e monta o vídeo com legenda.

Banner do cardshorts: roteiro em YAML vira vídeo 9:16 narrado
Em resumo

O cardshorts é uma ferramenta de linha de comando que cria vídeos curtos verticais (Reels, Shorts, TikTok) a partir de um arquivo de texto. Cada cena tem uma fala e uma tela pronta (um "card"). A ferramenta grava a narração com uma voz clonada, confere se a voz falou certo, gera as imagens e entrega o MP4 com legenda palavra a palavra, cabendo em 30 segundos. É para quem quer publicar vídeos provocativos com frequência sem editar na mão. Roda no seu computador, com placa de vídeo e os projetos de voz e imagem do INEMA instalados.

O que é

Formato pronto, você só escreve

Nasceu de uma série de shorts sobre IA no Brasil. O que funcionou virou molde: cinco estilos de tela, regras de voz e de conteúdo e um comando que faz o resto.

Etapas do cardshorts: roteiro, voz, imagens, cards, legenda e vídeo

🎬 Um arquivo, um vídeo

O roteiro.yaml lista as cenas: fala + molde de card + textos. Um comando entrega o MP4 1080×1920.

🎙️ Voz conferida

Cada fala é transcrita depois de gravada. Se a voz errou palavra, grava de novo (até 3 vezes) e corta o balbucio do fim.

⏱️ Cabe em 30 s

Acelera a fala até 1,2× para caber no tempo máximo. Se não couber, para e avisa quanto cortar.

Como funciona

Do roteiro ao MP4

Cada etapa usa uma ferramenta local. Voz e imagens ficam em cache: mudou um texto, só aquela fala é gravada de novo.

roteiro.yaml→ Voz (Chatterbox)→ Conferência (Whisper)→ Imagens (FLUX.2 klein)→ Cards (HTML + Chrome)→ Montagem (ffmpeg)→ Legenda + trilha→ MP4 ≤ 30 s
Pré-requisitos

O que precisa estar instalado

Os caminhos podem ser trocados por variáveis CS_* ou por um config.yaml na raiz do projeto.

Voz e transcrição

inemavox com tts_direct.py (Chatterbox) e transcrever_v1.py (Whisper large-v3), e um áudio de referência da voz.

export CS_INEMAVOX=~/projetos/inemavox
export CS_VOZES=~/minhas-vozes   # nei.wav, etc.

Imagens

Servidor com POST /generate (inemaimg com FLUX.2 klein).

export CS_IMAGEM_API=http://localhost:8000/generate

Montagem

ffmpeg com libass, Chrome headless do Playwright e Python 3 com PyYAML.

npx playwright install chromium-headless-shell
pip install pyyaml
Guia de uso · passo a passo

Seu primeiro short

Comece pela prévia, que é rápida. Só grave a voz quando os cards estiverem bons.

1

Baixe e veja os estilos

Lista os 5 estilos, os moldes de cada um e os campos que cada molde pede.

git clone https://github.com/inematds/cardshorts && cd cardshorts
./cardshorts.py estilos
2

Crie a pasta do vídeo

Copia o roteiro de exemplo do estilo escolhido.

./cardshorts.py novo meus/ia-trabalho --estilo versus
3

Escreva o roteiro

Uma fala por cena, escrita como se fala: números por extenso, "inema ponto club". Em 30 segundos cabem umas 70 palavras.

estilo: versus
max_seg: 30
musica: true
voz: {ref: nei}
imagens:
  dupla: {prompt: "two modern faceless humanoid robots...", w: 1088, h: 640}
cenas:
  - fala: "De um lado, quem trabalha. Do outro, os humanoides."
    molde: capa-dupla
    campos: {foto_cima: "img:equipe", foto_baixo: "img:dupla", faixa: "VOCÊ × ELES", ...}
4

Confira a prévia

Gera as imagens e os cards e junta tudo em previa.png. Veja se nenhum texto saiu do card e se a faixa da legenda (parte de baixo) não cobre o título.

./cardshorts.py cards meus/ia-trabalho/roteiro.yaml  # → previa.png
5

Monte o vídeo

Grava a voz (uns 2 minutos por fala na primeira vez), confere cada fala, ajusta a velocidade e monta. O log mostra a legenda final para revisar.

./cardshorts.py montar meus/ia-trabalho/roteiro.yaml
# narração 31.4s → velocidade 1.13x
# pronto: meus/ia-trabalho/ia-trabalho.mp4 (28.6s)
6

Ajuste e repita

Mudou uma fala? Só ela é gravada de novo. Palavra errada na legenda? Corrija no roteiro, sem regravar.

correcoes: {garanda: garanta}
./cardshorts.py musica musicas/calma.mp3 "calm lofi piano, instrumental"  # outra trilha
7

Use com o agente

A pasta skill/ é uma skill para Claude Code e Codex: ela escolhe estilos diferentes para cada versão e segue as regras de conteúdo.

ln -s $PWD/skill ~/.claude/skills/cardshorts
# no Claude Code: "/cardshorts faz 3 versões diferentes sobre ..."
Estilos

Cinco caras para a mesma ideia

Para fazer três versões de um tema, use três estilos. O mesmo molde com outro texto sai parecido demais.

Estilo versus
versusEditorial P&B com vermelho, X × Y, tela dividida
Estilo cracha
crachaAlvo, crachás carimbados, cédula em branco
Estilo documento
documentoFormulário em branco, aviso, certificado
Estilo extrato
extratoNota fiscal com total, pendências e enquete
Estilo celular
celularNotificação, busca, fila e SIM/NÃO

Exemplo pronto: exemplos/versus

Quatro cenas, voz clonada, trilha tensa gerada localmente e legenda palavra a palavra. Saiu deste comando, sem edição manual:

./cardshorts.py montar exemplos/versus/roteiro.yaml
O comando garanteComo
Fala fiel ao textoTranscrição local; abaixo de 85% de semelhança, grava de novo
Sem ruído no fimCorta 0,35 s depois da última palavra ouvida
Até 30 sVelocidade entre 1,0× e 1,2×; acima disso, pede corte
Música sem cobrir a vozA trilha abaixa sozinha quando a voz entra
Roadmap

O que vem depois

A versão atual cobre os cards estáticos. Próximos passos:

Agora
5 estilos, 23 moldes, skillVoz conferida, cache, velocidade automática, legenda, trilha e envio pelo Telegram.
Próximo
Card animadoContadores subindo e barras enchendo como molde (hoje dá para usar um MP4 pronto com video: na cena).
Depois
Mais estilos e publicaçãoNovos moldes conforme a série pedir e publicação direta no YouTube pelo yt-pubx.