Praeko Studio: vídeos com o seu agente
O Praeko Studio faz vídeos curtos (9:16) e longos (16:9) a partir de um roteiro: voz, legenda palavra a palavra, cenas, capa e os textos de cada rede. Você opera com o seu próprio agente de código, na sua máquina: o agente escreve o roteiro e o episode.yaml, roda os comandos e, só depois do seu sim, publica pelo Praeko. A voz, o render e o agente são por sua conta; o Studio não chama nenhum modelo de linguagem e nenhum roteiro seu sai da máquina até você publicar.
Requisitos
| Item | Detalhe |
|---|---|
| Node | 22 ou mais novo. |
| ffmpeg e ffprobe | No PATH. macOS: brew install ffmpeg; Debian e Ubuntu: sudo apt install ffmpeg. |
| Chrome | O Remotion baixa o *Chrome Headless Shell* sozinho no primeiro render (internet nesse momento; cerca de 570 MB em disco, medido no macOS). Ou use um Chrome instalado com CHROME_PATH. |
| Fontes | O modelo usa fontes do sistema (Arial Black, Menlo). Se faltarem, o doctor avisa; troque em brand.json por fontes que existam nos seus sistemas. |
| Sistemas | macOS e Linux. Windows é melhor esforço e não foi testado. |
| Terminal | O agente precisa de terminal (shell) para renderizar: é ele quem roda ffmpeg, o Remotion e os comandos do Studio. Sem terminal (por exemplo, o Claude Desktop sem shell), use o servidor MCP local do Studio (@praeko/studio-mcp); o servidor MCP remoto só publica e traz métricas, não renderiza vídeo. |
| Seu agente | Claude Code, Codex, Gemini CLI, Cursor, opencode, Cline ou Windsurf, com a sua assinatura ou chave. O Praeko não cobra nem intermedeia o agente. |
Instalar
npm install -g @praeko/studioyarn global add @praeko/studiopnpm add -g @praeko/studiobun add -g @praeko/studionpx @praeko/studio doctor
npx @praeko/studio init my-channelO comando é praeko-studio e também praeko studio … quando o @praeko/cli está instalado: ele entrega ao Studio, procurando no projeto, ao lado da CLI, na instalação global e no PATH.
Licenças: leia antes do primeiro render
| Componente | Licença |
|---|---|
@praeko/studio, studio-core, studio-kit |
MIT |
Remotion (remotion, @remotion/cli) |
Remotion License (não MIT); você instala |
HyperFrames (--engine hyperframes, opcional) |
Apache-2.0 |
| ffmpeg, Chrome | Termos próprios; o Studio não os redistribui |
| Modelo OmniVoice do VoiceStudio (voz local opcional) | CC-BY-NC: uso não comercial; não use em conteúdo monetizado |
O Remotion é o motor padrão dos vídeos e das capas; com --engine hyperframes o vídeo e a capa saem pelo HyperFrames e nada do Remotion é usado. Texto completo e fontes: praeko studio docs licenses (o LICENSES.md do pacote); praeko studio licenses --accept registra que você leu.
Seu primeiro vídeo em 10 minutos
Conferir o ambiente
praeko-studio doctorMostra Node, ffmpeg, Chrome, fontes, se há chaves (nunca o valor), as contas de voz ElevenLabs (saldo e renovação quando a chave lê; a voz final e em quais contas ela tem id; avisa se duas contas mostram o mesmo saldo), a rede e as licenças, com uma linha de correção por item. Com --offline não chama a rede e mostra só a configuração.
Criar o projeto
praeko-studio init my-channel --name "My Channel" --agent claude
cd my-channelCria brand.json, src/, episodes/, os sons e as instruções para o seu agente (--agent claude,codex,gemini,cursor,opencode,cline,windsurf ou all), e roda npm install. Num terminal ele antes faz uma entrevista curta (nome, para quem é, tom de voz, cores, fonte, até 3 referências) e grava brief.md e um rascunho de playbook.md, que o seu agente lê antes do primeiro roteiro; o Studio não assiste às referências, o agente é quem as analisa. Sem terminal (ou com --yes) nada é perguntado. Os pacotes vêm do npm por versão, sem file:.
Pedir o vídeo ao agente
Abra o seu agente na pasta do projeto e cole:
Faça um Short de 40 segundos sobre <TEMA> neste projeto do Praeko Studio.
Leia as instruções do projeto e rode `praeko studio docs episode-yaml` antes de escrever o YAML.
Use a voz draft, mostre o roteiro e as cenas para eu aprovar antes de gastar crédito de voz,
rode check e contact-sheet, e não publique nada sem eu pedir.Voz rascunho, conferência e render
praeko-studio new my-first --title "My first video"
praeko-studio voice my-first --quality draft
praeko-studio check my-first
praeko-studio render my-first --scale 0.5
praeko-studio contact-sheet my-first
praeko-studio cover my-first
praeko-studio package my-firstO agente faz estes passos por você. A voz draft é estimada e muda (grátis, sem rede) e serve para montar as cenas; check avisa até haver voz real. Para a voz final, --quality final usa a sua conta do ElevenLabs.
Simular a publicação
echo $PRAEKO_KEY | praeko-studio schedule --via praeko --key
praeko-studio schedule my-first --when "20/12 17:30" --via praekoSem --send o comando só lê os canais e mostra o que faria. Veja Publicar.
Comandos
Todos começam por praeko studio (ou praeko-studio). praeko studio --help lista o mesmo.
| Comando | Faz |
|---|---|
doctor [--json] [--offline] |
Confere o ambiente e mostra o aviso de licenças. |
licenses [--accept] |
O aviso de licenças; --accept registra a leitura. |
skill install [--agent …] [--lang en|pt] |
Grava as instruções do Studio no formato do seu agente. |
docs [topic] |
Documentação da versão instalada: episode-yaml, long-yaml, voice, publish, hyperframes, licenses. |
init <folder> |
Cria um projeto (--name, --handle, --agent, --lang, --no-install; --dev <studio> para quem contribui). Num terminal faz a entrevista de marca (Enter pula cada pergunta); com --yes ou sem terminal não pergunta nada e importa cores e fonte do ../brand/build/tokens.json (ou ../brand/tokens.json) quando existir, ou da pasta dada em --brand; as flags mandam sobre o tokens e a saída diz o que foi importado. Respostas por flag: --about, --audience, --tone, --accent, --background, --font, --brand <pasta>, --reference (até 3, com --reference-note), --voice-alias, --voice-provider. |
brief [--only …] |
Reabre a entrevista num projeto existente (só as respostas escolhidas) e reescreve o brief.md; guarda brief.md.bak e não sobrescreve um playbook.md que você editou (grava playbook.md.new). |
new <slug> [--long | --image] |
Cria um episódio (--title) e o registra em src/Root.tsx. --image cria um post de foto (format: image, um slide, sem voz nem vídeo). |
voice <slug> --quality draft|final|local |
Gera a voz e os tempos por palavra. voice balance, voices, account, config key cuidam das contas. |
compile <slug> |
Lê episode.yaml, confere âncoras e sobreposição, gera episode.spec.json. |
cut <long> <slug> --from … --to … |
Short vertical fatiado da voz de um longo. |
preview [slug] |
Abre o Remotion Studio (ou o preview do HyperFrames). |
render <slug> [--scale 0.5] [--engine remotion|hyperframes] |
Renderiza em out/<slug>.mp4. |
cover <slug> |
Renderiza a capa (out/<slug>-cover.png). |
slides <slug> |
Renderiza um post de imagem em out/<slug>-slide-01.jpg: 1080x1350 (4:5), JPEG sRGB, só com Remotion. Por enquanto vai só para o Instagram (schedule --via praeko); o formato está em praeko studio docs image. |
contact-sheet <slug> [--n 12] |
Mosaico de quadros para você (e o agente) olharem. |
check <slug> |
Roteiro, voz, publicação, declaração de IA e, com vídeo, duração, volume e quadros vazios. |
package <slug> |
Gera texts.md (YouTube, Instagram, TikTok, UTM) e confere limites. |
schedule <slug> --when … --via praeko [--send] |
Agenda pelo Praeko; sem --send só simula. |
post, queue, account <network> |
Avançado: publicação direta com credenciais suas de cada rede. queue install só no macOS. |
migrate [--dry-run] |
Converte um projeto do Studio 0.1.x (nomes em português) para o layout em inglês, com backup em .studio-backup/. |
help |
Mostra a lista de comandos (--lang pt traduz as mensagens). |
O projeto
my-channel/
brand.json # cores, fontes, handle, voz, links, hashtags
voices.json # (opcional) a sua voz; nunca chaves
src/ # index.ts, Root.tsx, brand.ts (o Root registra os episódios)
public/ # sfx/, cover/avatar.png, audio/ (voz gerada)
episodes/<slug>/
script.txt # o texto falado
episode.yaml # as cenas, declarativas
scenes.tsx # peças em TSX (capa e o que o YAML não cobre)
publication.json # textos de cada rede, hashtags, ai.synthetic
out/ # vídeos e capas renderizados{
"name": "My Channel",
"handle": "@mychannel",
"avatar": "cover/avatar.png",
"colors": { "background": "#14110f", "accent": "#f4b942", "text": "#f3ece0" },
"fonts": { "title": "'Arial Black', system-ui, sans-serif", "mono": "Menlo, monospace" },
"links": { "main": "https://example.com/" },
"voice": "draft-silent",
"pronunciation": { "example.com": "example dot com" },
"bannedNames": [],
"publishing": { "provider": "praeko", "hashtags": { "allowed": [], "banned": [] } }
}O episode.yaml é declarativo: cada item liga a uma frase da voz com when: "frase", e praeko studio compile confere. O que o YAML não cobre vira uma peça em scenes.tsx, feita com as peças do @praeko/studio-kit (panel, box, line, bubble, code, window, phone, frame). O render é uma função pura do episódio compilado e dos arquivos do projeto.
id: MyVideo
duration: 14
caption: 80
voice: audio/MyVideo.mp3
background: ["My video"]
outro: { start: 10, cta: FOLLOW THE PROFILE }
cover: { id: CoverMyVideo, component: CoverMyVideo }
scenes:
- start: 0
title: THE PROBLEM
label: PROBLEM
items:
- { type: big, at: 0.2, color: accent, size: 92, text: "The cache took the deploy down" }
- { type: box, when: "deploy", text: "cleared the cache" }Formato completo: praeko studio docs episode-yaml, praeko studio docs long-yaml e, para um post de foto, praeko studio docs image.
Posts de imagem (uma foto)
praeko studio new <slug> --image cria uma peça de imagem: o mesmo publication.json, check, package e envio de um vídeo, mas sem roteiro, voz nem vídeo. O episode.yaml tem format: image e um slide (vários slides seriam um carrossel, que chega numa fase futura), que reaproveita os itens de uma capa e leva um texto alternativo (alt, obrigatório, até 1000 caracteres). praeko studio slides <slug> renderiza out/<slug>-slide-01.jpg em 1080x1350, JPEG sRGB (só com Remotion). O package grava as imagens e o alt no publication.json e o texts.md só com a legenda do Instagram. Só o Instagram aceita foto por enquanto (YouTube não tem post de imagem; a foto do TikTok é uma fase futura): praeko studio schedule <slug> --via praeko sobe a foto como mídia type: image e cria o post com kind: image. O alt vai pelo Instagram quando o Praeko publica pela Meta; pelo Buffer ele é ignorado e o item avisa alt_ignored.
Chaves e custos: você traz as suas
| O quê | Quem paga | Onde fica a chave |
|---|---|---|
| Agente de código | Você (sua assinatura ou chave) | No próprio agente |
| Voz final (ElevenLabs) | Você, na sua conta | Variável ELEVENLABS_API_KEY, cofre do macOS ou ~/.config/praeko/secrets.json (permissão 600) |
| Render | Você (sua máquina) | - |
| Publicar pelo Praeko | Seu plano do Praeko | PRAEKO_KEY ou praeko studio schedule --via praeko --key (a mesma chave da praeko CLI) |
echo $ELEVENLABS_API_KEY | praeko-studio voice config key elevenlabs/principal
praeko-studio voice account add principal --voice my-voice --voice-id <YOUR_VOICE_ID>praeko-studio voice account list
praeko-studio voice account add backup --from-env ELEVENLABS_API_KEY_2 --dry-run # only checks the key and shows the plan, stores nothing
praeko-studio voice account add backup --from-env ELEVENLABS_API_KEY_2 # stores the key in the keychain and the voice in voices.jsonSem --from-env, o comando pede a chave no terminal (sem mostrá-la) ou lê da entrada padrão. --voice dá um apelido à voz e --voice-id informa o id; sem eles o comando procura o clone da sua voz na conta. Com mais de uma conta, o Studio escolhe pelo saldo e troca de conta se uma esgotar (--no-failover desliga).
A chave nunca vai para o projeto, o git, o log ou o chat com o agente. Use somente a sua voz ou uma voz que você tem autorização para usar. Detalhes: praeko studio docs voice.
Publicar pelo Praeko
O Studio não publica nada sozinho. Duas formas, as duas só depois do seu sim:
- CLI:
praeko studio schedule <slug> --via praeko --when "dd/mm hh:mm"simula; com--sendenvia o vídeo e agenda de verdade. O YouTube sobe privado e agendado; o TikTok vai como rascunho. - MCP do Praeko: um agente com shell envia o arquivo local com
create_media_upload(um passo; devolve ocurl), termina comcomplete_media_uploade cria o post comcreate_postouschedule_postem dois passos: a primeira chamada devolve só a prévia e umconfirmation_code; o agente mostra a prévia inteira a você e só repete a chamada comconfirmdepois do seu sim. Veja Servidor MCP.
Instruções para o seu agente
praeko-studio skill install --agent claude,codex,gemini,cursor,opencode,cline,windsurf --lang en| Agente | Arquivo gravado no projeto |
|---|---|
| Claude Code | .claude/skills/praeko-studio/SKILL.md + CLAUDE.md |
| Codex, opencode | AGENTS.md |
| Gemini CLI | GEMINI.md |
| Cursor | .cursor/rules/praeko-studio.mdc |
| Cline | .clinerules/praeko-studio.md |
| Windsurf | .windsurf/rules/praeko-studio.md |
O texto traz o fluxo do vídeo, o envio de arquivo local, a regra de dois passos e a declaração de IA. Em arquivos compartilhados (AGENTS.md, CLAUDE.md, GEMINI.md) o Studio grava só um bloco delimitado e preserva o resto. Os formatos de cada agente mudam com o tempo: confira na documentação do seu agente.
Problemas comuns
| Sintoma | O que fazer |
|---|---|
ffmpeg não encontrado |
Instale (brew install ffmpeg ou sudo apt install ffmpeg) e rode praeko studio doctor. |
| O primeiro render demora ou falha por rede | O Remotion está baixando o Chrome Headless Shell. Com internet, repita. Sem internet, instale o Chrome e defina CHROME_PATH. |
| O texto sai diferente ou quebra linha estranho | Falta uma fonte do brand.json. O doctor mostra qual; instale-a ou troque por uma fonte aberta. |
| Linux: não há cofre de chaves | O cofre do macOS (security) só existe no macOS. No Linux use ELEVENLABS_API_KEY, PRAEKO_KEY ou o arquivo ~/.config/praeko/secrets.json (permissão 600). |
| Windows | Não foi testado. Prefira variáveis de ambiente para as chaves e abra um relato se algo falhar. |
praeko studio diz que não achou o Studio |
Instale @praeko/studio (no projeto ou globalmente) ou rode com npx @praeko/studio. |
check avisa que a voz é estimada |
Esperado com o rascunho. Gere --quality final (com a sua chave) antes de publicar. |
| Projeto do Studio 0.1.x (nomes em português) | Rode praeko studio migrate --dry-run e depois praeko studio migrate: renomeia arquivos e chaves, com backup em .studio-backup/. |
Conteúdo gerado por IA e conformidade
Voz sintética realista, ou imagem e vídeo gerados que pareçam reais, exigem o rótulo de conteúdo alterado ou sintético no YouTube, o "AI info" no Instagram e o rótulo de conteúdo gerado por IA no TikTok. Preencha "ai": { "synthetic": true } no publication.json: check e package avisam quando falta. Na publicação direta do Studio o YouTube recebe o campo (containsSyntheticMedia); pelo caminho do Praeko e no Instagram e no TikTok você marca o rótulo no app da rede antes de publicar, porque a API pública do Praeko ainda não leva esse campo. As regras de cada rede mudam: confira a política vigente.