explainroo
explainroo is a free, open source tool that lets your AI agent make explainer videos with a voice. It runs on your own computer and needs no API key.
Envie o vídeo bruto: a IA corta erros e pausas, planeja o ritmo e aplica zooms, legendas e motion design. Você ajusta na timeline e exporta no navegador.
Translation pending
MediaGitHub @jrsanntosOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Editor de vídeo web em que a IA faz a edição e o usuário dirige. O usuário envia o vídeo bruto, descreve o que quer ("tire os silêncios, dê zoom nas ênfases, crie um gráfico quando eu citar números") e um agente monta a timeline. Depois, ajusta o que quiser manualmente — sem gastar créditos — ou seleciona um trecho e pede uma intervenção pontual à IA.
Público inicial: quem ganha dinheiro com vídeo falado (VSLs, aulas, infoprodutos, profissionais liberais).
A IA nunca renderiza pixels. Ela edita um JSON de timeline; o navegador do usuário desenha o preview em tempo real e, na maior parte dos casos, também exporta o arquivo final. Servidor pesado só entra quando o usuário pede render na nuvem.
vídeo bruto ──► navegador (IndexedDB) áudio 16 kHz ──► transcrição
│ │
▼ ▼
UI manual ──► operações ──► Timeline State (JSON) ◄── operações ◄── agente (Claude)
│
renderFrame(estado, t) ← um único renderizador (Canvas 2D)
│ │
preview (rAF) export WebCodecs (MP4) [futuro: render em nuvem]
Detalhes em docs/ARCHITECTURE.md. Plano de execução em docs/ROADMAP.md. Especificação da versão 1.0 em docs/V1_SPEC.md.
| Caminho | O que é |
|---|---|
packages/core | Schema do Timeline State (zod) e do Brand Kit, operações de edição ancoradas por palavra, mapeamento de tempo/transcrição, detecção de silêncio e de takes ruins, skills (presets de nicho), tabela de créditos e planos, contexto compacto para o agente. Sem dependência de DOM. |
packages/renderer | renderFrame (compositor Canvas 2D), legendas e a biblioteca de componentes de motion design paramétricos. |
apps/web | Next.js: editor (player, timeline, chat, inspetor), exportação local via WebCodecs, contas, painel de administração (/admin) e planos e créditos (/planos) e as rotas /api/agent, /api/transcribe, /api/auth/*, /api/billing/*, /api/stripe/webhook e /api/admin/*. |
apps/web/src/server | Camada de servidor: banco Postgres (migrações em schema.ts), sessões, recuperação de senha, limite de requisições, ledger de créditos, cobrança pelo Stripe, custo de IA, configurações cifradas e modelos de edição. |
Requer Node 22+, pnpm 10+ e um Postgres 14+ (o docker-compose.yml sobe um local).
docker compose up -d
pnpm install
cp apps/web/.env.example apps/web/.env.local
pnpm dev
Abra http://localhost:3000. Variáveis em apps/web/.env.local:
| Variável | Para quê | Sem ela |
|---|---|---|
ANTHROPIC_API_KEY (ou VIDEOEDITOR_ANTHROPIC_KEY) | Agente de edição (chat) | Chat responde que não está configurado; todo o resto funciona |
AGENT_MODEL | Modelo das edições completas (padrão claude-sonnet-5-5) | — |
AGENT_MODEL_FAST | Modelo dos ajustes pontuais (padrão claude-haiku-5-5) | — |
GROQ_API_KEY | Transcrição com timestamp por palavra (Whisper) | Sem legendas e sem cortes baseados na fala |
GEMINI_API_KEY | Modelo reserva (Google Gemini): o agente segue nele se a Anthropic ficar sem saldo, recusar a chave, sobrecarregar ou cair | Sem a Anthropic, o agente fica indisponível |
GEMINI_MODEL | Modelo reserva (padrão gemini-4-hydrogen). Os preços dele (US$ por milhão de tokens) ficam no painel /admin, para o teto de custo valer também na reserva | — |
AGENT_MODEL_EDITOR, AGENT_MODEL_CRITIC | Modelo do Editor e do Crítico visual (padrão: o principal) | — |
Na primeira execução, crie uma conta em http://localhost:3000/login. Em desenvolvimento, sem ADMIN_EMAILS, a primeira conta vira administradora e acessa /admin, onde as chaves de API também podem ser cadastradas (cifradas no banco, com prioridade sobre o .env.local). Em produção, defina ADMIN_EMAILS e APP_SECRET.
| Variável | Para quê |
|---|---|
ADMIN_EMAILS | E-mails que viram admin (em produção, a única forma) |
APP_SECRET | Cifra das chaves de API salvas pelo painel |
DATABASE_URL | Conexão com o Postgres (obrigatória). As tabelas são criadas na primeira requisição. |
DATABASE_POOL_MAX | Conexões por instância (padrão 10) |
APP_URL | Endereço público, para links de e-mail e retornos do Stripe (obrigatória em produção) |
RESEND_API_KEY, EMAIL_FROM | Envio do e-mail de recuperação de senha. Sem elas, em desenvolvimento o link sai no terminal |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Login com Google. No Google Cloud Console, crie um ID do cliente OAuth (Aplicativo da Web) com o redirecionamento {APP_URL}/api/auth/google/callback. Sem elas, o botão do Google não aparece |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_CREATOR, STRIPE_PRICE_PRO, STRIPE_PRICE_TOPUP | Cobrança. Sem elas, /planos mostra os planos como "em breve" |
This is the beginning of the README. Read the rest at the original. Read the full README ↗