Estúdio criativo local · 5 provedores

73 modelos de imagem e vídeo, um contrato só.

As chaves ficam na sua máquina, o prompt é editável antes de gastar, os arquivos são seus e cada centavo aparece escrito.

Estação de trabalho num quarto escuro, com um monitor exibindo uma grade de imagens geradas em painéis iluminados de âmbar
O que é

Um agregador que roda na sua máquina.

Ele guarda as suas chaves, conhece o formato que cada modelo espera, reescreve o pedido no estilo daquele modelo, envia, acompanha, baixa o arquivo e anota o custo. Nada disso é difícil — e esse é o ponto: é exatamente a camada pela qual os serviços de wrapper cobram assinatura.

🔌 Cinco provedores, um contrato

fal, Kling, Agnes, kie e um servidor local na sua GPU vivem atrás do mesmo adapter. Nenhum é obrigatório: o que faltar aparece indisponível com o motivo, e o estúdio sobe assim mesmo.

💵 Custo escrito, não estimado

Três unidades que não se somam — dólar, crédito de plano e zero. O consumo real é medido pelo delta da conta, e o que não dá para saber antes de rodar é marcado como desconhecido em vez de chutado.

🧠 Nenhum LLM manda aqui

Roteamento, catálogo, preço, disponibilidade e retry são código determinístico. O modelo é ferramenta contratada por tarefa, nunca gerente — por isso o custo é previsível.

Como funciona

Da ideia ao recibo.

O mesmo caminho vale para você na tela e para um agente conectado por MCP.

Sua ideia Refino por modelo Orçamento Envio ao provedor Acompanhamento Cópia local Custo no ledger
1

Refino visível

A reescrita é mostrada e editável antes de você gastar. É o lugar mais barato para pegar um mal-entendido — depois de enviar, o conserto custa outra rodada.

2

Corrente de três elos

Gemini, depois OpenRouter, depois o Codex local. Com um único refinador, a cota dele derruba o estúdio inteiro — foi o que aconteceu em produção, e por isso virou corrente.

3

Arquivo seu, na hora

Toda mídia é espelhada localmente de propósito: as URLs dos provedores expiram (24h no Kling, temporárias na Agnes). O que você gerou não some quando o link morre.

Os cinco provedores

ProvedorModelosComo cobraO que precisa
fal.ai37dólar, preço ao vivoFAL_KEY
Kling26créditos do planoCLI oficial com login OAuth
Agnes AI4zeroAGNES_API_KEY
kie.ai4créditosKIE_API_KEY
inemaimg2zero (sua GPU)servidor local no ar
Pré-requisitos

A lista é curta.

Node é o único requisito de verdade. Todo provedor é opcional e degrada sozinho — uma chave que falta deixa aqueles modelos indisponíveis, com o motivo e como resolver, e o estúdio continua abrindo.

Node 22.5+

Node 24 recomendado, porque o estúdio usa o node:sqlite nativo — sem banco externo, sem serviço para subir.

node -v  # v22.5 ou maior

Pelo menos um provedor

Para gerar qualquer coisa. Comece pelos de custo zero se quiser experimentar sem gastar.

# grátis, sem cartão
apihub.agnes-ai.com  # Agnes

Opcionais que valem

Um refinador (Google AI Studio ou OpenRouter); Chrome para imprimir PDF; Codex ou Claude Code para o construtor de sites com agente.

# sem refinador, o prompt vai cru
# — e a Agnes recusa não-inglês
Guia de uso · passo a passo

Do clone ao primeiro resultado.

Comandos reais, na ordem. Do zero ao primeiro arquivo gerado leva alguns minutos — a maior parte é o npm install.

1

Clonar e instalar

Sem etapa de build: o estúdio roda direto do código.

git clone https://github.com/inematds/bench-studio-en.git
cd bench-studio-en
npm install
2

Criar o arquivo de configuração

O .env.example documenta as 19 variáveis: o que cada uma destrava, como cobra e onde criar a chave. Preencha só o que você tiver.

cp .env.example .env  # .env é ignorado pelo git
3

Subir o estúdio

Sobe a API e a interface juntas. A interface fica em localhost:5200 e a API em localhost:8787.

npm run dev  # abre em http://localhost:5200
4

Conferir as chaves pela tela

Botão Config, no topo à direita. Ele mostra cada variável: presente ou não, de onde veio e os 4 últimos caracteres — nunca o valor. Dá para testar cada provedor ali e gravar o .env sem sair da tela. Por segurança, só aceita gravação de quem está na própria máquina.

# ordem de leitura, do mais forte para o mais fraco
exportado no shell  >  .env do projeto  >  ~/.env
5

Curar o catálogo uma vez

73 modelos é muito para rolar. Em Model catalog, filtre por provedor e desligue o que não vai usar. É preferência, não bloqueio: o modelo some dos seletores, mas um Redo de um resultado antigo continua funcionando.

# voltar ao estado de fábrica: apague o arquivo
rm data/catalog-prefs.json
6

Gerar sem gastar

O botão No cost liga exatamente os modelos de custo zero. Use-os para achar o prompt que funciona; depois gaste no modelo que renderiza melhor.

# 6 modelos a custo zero: Agnes (4) + servidor local (2)
7

Opcional: pôr uma senha

Vem sem senha, de propósito — falar com a própria máquina não deveria pedir uma. Se for expor na rede, defina: fica guardada como hash scrypt, e trocar a senha derruba quem já estava dentro.

npm run set-password            # pergunta sem ecoar
npm run set-password -- --remove  # tira a senha
8

Acessar de outra máquina (opcional)

De fábrica só a própria máquina enxerga o estúdio. Abrir para fora são três coisas — a interface escutando na rede, a regra de firewall e lembrar de desfazer as duas. Um comando faz tudo, e o close desfaz exatamente o que o open fez.

./scripts/remote.sh open     # publica no IP da máquina
./scripts/remote.sh status   # aberto ou fechado, e com qual proteção
./scripts/remote.sh close    # volta a só-local

O open oferece a senha antes de abrir. Diga sim e ele chama o set-password; responda n e o estúdio abre sem senha, que é o padrão. A oferta existe por um motivo duro: a senha só se define na própria máquina — pela rede é 403, mesmo já logado. É essa regra que impede quem achar a porta aberta de pôr uma senha própria e te trancar para fora. Numa VPS, a ordem certa é npm installnpm run set-passwordremote.sh open. A porta da API (8787) nunca é publicada.

./scripts/remote.sh open --ip 203.0.113.7  # só esse endereço
./scripts/remote.sh open --firewall        # liga o ufw (SSH liberado antes)
9

Conectar um agente (opcional)

A aba Connect entrega a configuração MCP pronta para Claude, Codex e Cursor. O agente enxerga o mesmo elenco de modelos que você — não uma lista paralela.

npm run mcp  # servidor MCP em stdio
10

Conferir que está tudo de pé

Os contratos rodam em segundos. O e2e usa navegador de verdade e pede o Chromium do Playwright uma vez.

npm run test:contracts   # 30 testes
npx playwright install chromium && npm run test:e2e
Dicas

O que economiza tempo e dinheiro.

Coisas aprendidas rodando o estúdio de verdade, não lendo a documentação dos provedores.

📖 Leia o prompt refinado

Ele é editável antes do envio. Corrigir ali é grátis; corrigir depois custa outra geração.

🔗 Mantenha dois refinadores

Com um só, uma cota estourada derruba tudo — e o sintoma aparece longe da causa: a Agnes passa a recusar por português.

↩️ Redo em vez de redigitar

Todo resultado carrega modelo, controles, prompt refinado, ideia original e anexos. O Redo devolve tudo, para você mudar uma coisa sem pagar outra reescrita.

🔀 O mesmo modelo em duas rotas

Veo, Nano Banana, gpt-image e gemini-image aparecem por mais de um provedor, com contas diferentes: dólar no fal, crédito de plano no Kling. O provedor aparece ao lado do nome — é escolha real, não duplicata.

⚠️ O Kling nunca re-tenta sozinho

Todo job do Kling é cobrado, inclusive os que falham. Nada é reenviado sem você mandar.

💾 Vigie o disco, não a CPU

Cada arquivo é espelhado localmente: ~1,3 MB por imagem, 0,7–5 MB por vídeo. O estúdio ocioso usa 274 MB de RAM e quase nenhuma CPU.

🏗️ Site? prefira um agente

Codex e Claude Code escrevem os arquivos e corrigem os próprios erros. Os motores de modelo puro (Qwen local, OpenRouter) não precisam de sandbox e custam zero, mas pedem mais supervisão.

🎨 Aponte o construtor para algo seu

Um site ou PDF de sua autoria calibra o acabamento — tokens, fontes, paleta, raios. Marca, texto, estrutura e arquivos nunca são copiados.

Segurança

O que protege o quê.

A postura de fábrica é a mais fechada possível sem atrapalhar: tudo em loopback, sem senha, e nada sai da sua máquina além das chamadas aos provedores que você configurou.

🔑 Chaves

Lidas no servidor, nunca devolvidas à interface. A tela mostra presença, origem e os 4 últimos caracteres. O .env é gravado com permissão só do dono.

🚧 Gravação só da máquina

Mesmo com sessão válida, trocar chave ou senha pela rede é recusado. A checagem sobrevive ao proxy de desenvolvimento: uma origem encaminhada só é aceita quando o socket já é local.

🔒 Senha opcional

Hash scrypt, cookie httpOnly, sessão de 12h. Ela protege a API e os arquivos gerados. Esconder também a casca da interface é trabalho de proxy reverso, não deste processo — e isso está dito na documentação, não escondido.

Deixando no ar com segurança

Na ordem do que protege mais. O open é postura de teste: tráfego em HTTP puro, legível no caminho.

#O que fazerComo
1Pôr senha na instalaçãonpm run set-password antes do open — pela rede não dá, nem depois de logado
2Manter a API em loopbacké o padrão; BENCH_API_HOST=0.0.0.0 é opt-out consciente
3Restringir quem alcançaremote.sh open --ip <seu-ip>, ou Tailscale (nenhuma porta aberta)
4Ligar o firewallremote.sh open --firewall — e confira também o painel da VPS
5HTTPS na frentenginx/Caddy + Let's Encrypt servindo o dist/ e proxy para 127.0.0.1:8787, com X-Forwarded-For
6Usuário próprio, não rootunidade systemd, .env em 600
7Fechar ao terminar./scripts/remote.sh close — exposição esquecida é a que custa crédito
Roadmap

Onde está e para onde vai.

O que está pronto foi medido; o que está por fazer está listado sem promessa de data.

v1.5.2
No ar73 modelos em 5 provedores, curadoria e disponibilidade separadas, filtros de resultado, Redo, aba de modos, construtor com quatro motores, tela de configuração, senha opcional e error boundary por workspace.
Próximo
Publicar do estúdioMandar um site gerado para o git direto da tela, sem levar os arquivos no braço.
Próximo
Agrupar rotas repetidasSeis famílias existem em mais de um provedor; mostrá-las como um modelo com rotas alternativas, em vez de linhas soltas no catálogo.
Estudo
Vídeo localRodar geração de vídeo na própria GPU, ao lado dos modelos de imagem que já rodam.
Estudo
Encadear planos de vídeoUsar o último quadro de um take como referência do próximo, para resolver consistência entre cortes.