Pular para o conteúdo
Beneverso
Equipe

Guia

Ferramentas que rodam só na máquina

O CLI de render (_kit), o editor visual de carrossel e a biblioteca de recortes da Bené. Não têm página web — este é o mapa de onde estão e como rodar.

Produção

Original no vault: Beneverso_Vault/99_⚙️_Sistema/Design_System_Imagens/_kit/

Ressalva: ISTO NÃO É A TRANSCRIÇÃO DE UM DOCUMENTO SÓ, porque o documento não existe: a pasta _kit não tem README. O que está transcrito abaixo é o cabeçalho de cada script (o texto que o próprio autor escreveu no topo do arquivo .py), o README.md do editor de carrossel e o _INDEX.md da biblioteca de recortes. Nada foi inventado, mas o conjunto foi montado aqui — no vault ele está espalhado. DUAS ARMADILHAS DE CAMINHO. (1) O editor de carrossel mora DENTRO da pasta da peça do Douglas Ruas, não numa pasta de ferramenta: ele foi escrito para aquele carrossel e nunca foi generalizado. Usar em peça nova hoje significa copiar a pasta. (2) Estas ferramentas rodam na máquina do Felipe, com Python, Pillow, rembg e Chrome instalados. Não há versão web delas — os dois geradores que existem no ar (/arte e /gerador) são outra coisa.

Existem quatro ferramentas de arte no projeto. Duas estão no ar e qualquer pessoa da equipe usa pelo navegador; duas rodam só no computador de quem tem o repositório. Este guia é sobre as segundas — que são as mais poderosas e as que ninguém acha.

O que está no ar (para comparar)

FerramentaOndeO que faz
Gerador de arte Beneversoequipe.beneverso.com.br/arteRenderiza o design system de imagens em peça pronta, pelo navegador
Gerador Benedita do Rioequipe.beneverso.com.br/geradorDo projeto irmão (marca separada — não compartilha ativo com o Beneverso)

O que roda só na máquina

FerramentaOnde
CLI de render — _kitBeneverso_Vault/99_⚙️_Sistema/Design_System_Imagens/_kit/
Editor visual de carrosselBeneverso_Vault/10_🎬_Conteudo/Carrosseis/assets/2026-08-13_douglas-ruas/editor/

1. O CLI de render (_kit)

A linha de comando por baixo do gerador web. São cinco scripts, e cada um faz uma coisa. O que segue é o cabeçalho de cada arquivo, como está escrito neles.

render.py — o renderizador

Renderizador do Design System de imagens do Beneverso. Converte os HTML das peças em PNG 2160px via Chrome headless e gera a versão 1080 para subir. Também mede a densidade da peça (§5.4).

python render.py                      # renderiza todas as variacoes/
python render.py ../variacoes/V2.html # renderiza uma peça
python render.py caminho.html --1x1   # formato quadrado

Formatos que ele conhece: 4x5 (2160×2700), 1x1 (2160×2160) e 9x16 (2160×3840). O PNG sai numa subpasta _render ao lado do HTML.

A densidade é uma medição, não um enfeite: é o "% de pixels que difere do fundo dominante (§5.4). Alvo: 20–55%". Peça abaixo de 20% está vazia; acima de 55% está entulhada.

variar.py — o motor de variação dos formatos recorrentes

Sorteia uma combinação dos eixos de um formato (fundo, textura, personagem, layout, frase), aplica as TRAVAS DE CONTRASTE, preenche o template e renderiza. Registra a combinação em edicoes.json para não repetir nas próximas semanas.

python variar.py F01_sextou              # a peça da semana
python variar.py F01_sextou --n 3        # 3 opções pra escolher
python variar.py F01_sextou --fundo bg-roxo   # trava um eixo
python variar.py F01_sextou --seed 42    # reproduz uma edição exata
python variar.py --lista                 # formatos disponíveis

Os formatos recorrentes prontos são dois: F01_sextou e F02_boa_segunda, em Design_System_Imagens/formatos/. Cada um traz RECEITA.md, receita.json, template.html e a pasta _render com o resultado. Quem precisar de um "sextou" não precisa inventar nada.

As travas de contraste não são preferência estética. Do próprio script:

Fundos claros exigem tinta preta. Derivado da tabela de contraste medida em WCAG (DESIGN_SYSTEM.md §2.3) — não é preferência, é legibilidade. (…) verde tem 3.51 com branco: passa em display, reprova em corpo -> trata como claro

E ele evita repetir: a janela é de 8 edições recentes, gravadas em edicoes.json.

peca.py — o motor de FORMA (v2)

Diferença para o variar.py (v1): o v1 sorteava CONTEÚDO (frase, grito, personagem) dentro de um template.html de estrutura fixa. Este sorteia FORMA — grade, trama, tratamento de manchete, moldura, campo de cor — e o conteúdo entra como dado. Não existe mais um template por formato: existe uma função que monta a peça.

É esta a interface que o gerador web vai expor (mesmo desenho do gerador do Benedita do Rio: campos de texto + escolhas + botão Variar).

python peca.py --amostras 12        # folha de contato: 12 formas
python peca.py --grade gr-capa      # trava a grade, sorteia o resto
python peca.py --seed 42            # reproduz uma peça exata
python peca.py --eixos              # lista os eixos e o total de combos

Os eixos de forma, como estão declarados:

  • Grades (10): gr-splash, gr-cinta, gr-diagonal, gr-quadro, gr-inset, gr-tira, gr-capa, gr-poster, gr-sangria, gr-dossie
  • Tramas (12): tr-benday, tr-benday-fino, tr-45, tr-degrade, tr-degrade-alto, tr-raios, tr-raios-alto, tr-explosao, tr-speed, tr-listras, tr-cruz, tr-grade
  • Tratamentos de manchete (8): tt-classico, tt-knockout, tt-offset, tt-extrusao, tt-vazado, tt-tarja, tt-duplo, tt-pesado
  • Molduras (7): md-nenhuma, md-amarela, md-escura, md-dupla, md-quadro, md-barras, md-cantos

A saída vai para variacoes_v2/. As 12 variações de layout já testadas (V1_manchete a V6_cta na primeira leva; C01_poster_classico a C06_cinta_offset na segunda) são o vocabulário de layout da casa.

recorte.py — recorte + outline de adesivo

Prepara personagem para o Beneverso: recorte + outline de adesivo.

O §5.3 manda que foto real entre "sempre recortada com outline preto de adesivo (raio ≈ 1.4% do menor lado) mais sombra dura". Até agora essa rotina só existia no histórico de uma conversa — o que obrigava a redescobrir os parâmetros a cada personagem novo. Agora está aqui.

Duas saídas por foto:

personagens/_limpos/<nome>.png            rembg puro, sem tratamento
personagens/cutouts/<nome>_outline.png    o que as peças usam
python recorte.py "C:/.../IMG_1588.JPG" --nome bene_fofoca
python recorte.py --lote lista.txt          # varias de uma vez
python recorte.py --refaz                   # re-trata tudo de _limpos/

⚠️ A linha vermelha, escrita no próprio script:

O outline NÃO é do Benedita do Rio: lá é recorte de tesoura (borda irregular, serrilhada). Aqui é adesivo — borda lisa, uniforme, com sombra dura deslocada. Não trocar um pelo outro (§0 da linha vermelha).

Os parâmetros do §5.3, como estão no código: raio de 1,4% do menor lado · deslocamento da sombra 2,2% em x e 2,4% em y · alfa da sombra 118 (dura, sem blur, só translúcida) · altura de trabalho 2000px.

contato.py — a folha de contato

Folha de contato das amostras, pra ver a variacao de uma vez. Le a proporcao da PRIMEIRA peca em vez de assumir 4:5 — senao o 1:1 e o 9:16 saem esmagados na folha e a gente julga o layout errado.

python contato.py                    # variacoes_v2/_render
python contato.py <pasta> [colunas]

O que mais vive no _kit

beneverso.css e forma.css (o design system executável, em CSS), a pasta fonts/, edicoes.json (o log de sorteios) e lote_estudio.txt (a lista de fotos da sessão de estúdio).


2. O editor visual de carrossel

O que segue é o README.md do editor, transcrito.

Editor visual dos 10 cards. Você muda texto, arrasta qualquer elemento, troca cor e fundo, e joga foto nova pra ser recortada no estilo da casa.

Como abrir

python editor.py

Sobe em http://127.0.0.1:8777 e abre o navegador sozinho. Ctrl+C no terminal fecha.

O que dá pra fazer

AçãoComo
Selecionarclique no elemento (ou na lista do painel direito)
Moverarraste. Ou setas = 1px, Shift+setas = 20px
Mudar de camada▲▼ na lista, ou Ctrl+↑ / Ctrl+↓
Editar textopainel direito, campo Texto
Destacar palavraponha *entre asteriscos* — vira a cor de destaque do elemento
ApagarDelete
DesfazerCtrl+Z
Novo elementoescolha o tipo no painel e clique Adicionar
Trocar fundo/textura/molduraseção Fundo do card
Foto novaarraste a imagem pra dentro da janela (ou botão Trocar foto…)
ExportarBaixar este / Baixar os 10 / Salvar na pasta

Camadas

A ordem da lista é a ordem de desenho: quem está embaixo na lista aparece por cima na arte. Foi isso que fez as fotos taparem balão e assinatura nos cards 5, 7 e 8 — a foto entrava sempre por último. Agora dá pra empurrar a foto pro fundo com ▲ (ou Ctrl+↑) e o texto volta a aparecer.

Balões

Um tipo só, com quatro formas e rabicho em qualquer lado:

ControleO que faz
Estiloretangular, cantos redondos, pensamento (nuvem), explosão de gibi
Rabicho — ladoembaixo, em cima, à esquerda, à direita, ou sem rabicho
Onde no lado0–92%, desliza o rabicho ao longo daquele lado
Tamanhodo rabicho
Bordaespessura (0 tira a borda)
Respiro internodistância do texto até a borda
Coresfundo, texto, destaque e borda, cada uma separada
Inclinaçãogira o balão inteiro
Alinhamentodo texto dentro do balão

No estilo pensamento o rabicho vira automaticamente três bolinhas decrescentes em vez de bico. No menu Adicionar há atalho para os três: balão de fala, de pensamento e de grito (esse já vem amarelo, centralizado e torto).

Os balões que já existiam no carrossel continuam funcionando — o formato antigo (rabicho: esq/dir) é lido e convertido na hora de desenhar, sem precisar mexer no projeto.json.

O recortador

Arraste qualquer foto pra dentro da janela. Ela passa por:

  1. rembg com o modelo u2net_human_seg (especializado em pessoas — o u2net genérico confundia a madeira escura do plenário da Alerj com o sujeito);
  2. limpeza de ilhas — fica só o maior componente conectado, senão os pedaços de fundo que o rembg achou que eram pessoa viram borrões pretos flutuando depois que o outline dilata;
  3. outline de adesivo do §5.3 — silhueta preta dilatada + sombra dura, a mesma rotina do _kit/recorte.py. O cutout que sai daqui é indistinguível dos que já estão na peça.

A primeira foto da sessão demora (~1 min) porque o modelo tem que subir; as seguintes levam ~5s. Se já houver foto no card, ela é substituída; se não, entra um elemento novo.

Os cutouts vão pra ../cutouts/ e o recorte sem tratamento pra ../originais/.

Onde ficam as coisas

editor/
  editor.py          servidor local (só stdlib) + recorte
  editor.html        o editor (canvas)
  montar_projeto.py  gera o projeto.json a partir do roteiro
  projeto.json       O SEU TRABALHO — salvo a cada mudança
  _exportado/        PNGs do botão "Salvar na pasta"

projeto.json é o arquivo que importa. Faça cópia dele antes de experimentar muito. montar_projeto.py --forca reescreve o carrossel do zero e apaga tudo que você ajustou — só use se quiser recomeçar. Sem --forca ele se recusa a sobrescrever.

Reverter card devolve um card ao estado original do roteiro, sem tocar nos outros.

Formato

O canvas trabalha em 2160×2700 (4:5) e exporta nesse tamanho. Para 1:1 ou 9:16, mude "formato" no topo do projeto.json para 1x1 ou 9x16 — mas aí vale conferir card a card, porque as posições foram feitas pro 4:5.

Diferenças pro render do Chromium

Os PNGs originais da peça saíram de HTML + Chromium headless (_kit/render.py), então há duas diferenças pequenas e conhecidas:

  • O corpo de texto sai um tico mais leve — o CSS pedia font-weight:800 e o arquivo Inter-Bold.ttf é 700; o canvas não sintetiza peso.
  • O contorno de texto é strokeText antes de fillText, que reproduz o paint-order:stroke fill do CSS, mas o encaixe das curvas pode variar 1px em corpo muito grande.

Nada disso aparece no feed. Se algum dia precisar de fidelidade absoluta, os HTML originais continuam em ../cards/ e rendem pelo render.py.

Se der problema

  • "não consegui carregar o projeto" — o projeto.json não existe. Rode python montar_projeto.py.
  • Texto com fonte errada / larguras estranhas — as @font-face não chegaram. Recarregue a página; o editor avisa em amarelo se alguma fonte faltar.
  • Porta 8777 ocupada — outro editor já está rodando. Feche o terminal antigo, ou mude PORTA no topo do editor.py.

O resto do pipeline do Douglas Ruas

Na mesma pasta do editor moram recortar.py (tira o fundo das fotos em lote) e publicar.py (fecha a entrega). Com o editor, é a cadeia completa de uma peça — a mais completa que existe hoje no projeto. A peça que saiu dela é /producoes/douglas-ruas-pedreira.


3. A biblioteca de recortes da Bené

Fica em Design_System_Imagens/personagens/ e é o ativo que mais economiza tempo em peça nova: a Bené já recortada, com o outline de adesivo aplicado. O que segue é o _INDEX.md, transcrito.

Tratamentos

Três tratamentos, e não se misturam na mesma peça (exceção: painel de quadrinho V4, onde o gutter separa os quadros).

  1. Foto real + outline — padrão para atualidade, dado, notícia e meme
  2. HQ / comic — épico, luta, capa
  3. Cartoon chibi — deboche leve, CTA

A coluna que importa: TOM

Curadoria por tom é o que impede o motor de variação de gerar bobagem. Uma foto histórica de plenário não serve para um "Sextou", mesmo estando no acervo. A receita.json de cada formato escolhe só os personagens do tom que ela aceita.

Arquivo (em cutouts/)TratamentoExpressãoTom
bene_celular_outline.pngfoto realsorrindo, olhando celularleve · atual
bene_dedo_riste_outline.pngfoto realdedo em riste, sorrindoleve · atual · didático
bene_espanto_outline.pngfoto realespanto, boca abertaleve · reação · meme
bene_cocar_outline.pngfoto real P&Bcocar, plenário, sériasolene · histórico
bene_chibi_outline.pngcartoonapontando, bravinhaleve · meme
bene_sh_outline.pngHQheroína, raivaépico
crivella_serio_outline.pngfoto realsérioadversário

Sessão de estúdio — entrou em 11/08/2026

Recortadas de _Assets_Producao/Fotos Bené/ com _kit/recorte.py --lote lote_estudio.txt. Dobrou o acervo de foto real, que era o que mais deixava as peças com cara de repetida: antes, 8 de 10 amostras saíam com o mesmo cutout.

Arquivo (em cutouts/)ExpressãoTom
bene_fofoca_outline.pngmão na boca, rindo de cantoleve · cochicho · meme⭐ o mais "SERÁ?!" do acervo
bene_desconfiada_outline.pngmão no queixo, sorriso de cantoleve · desconfiança⭐ combina com a voz da página
bene_gargalhada_outline.pngrindo alto, cabeça pra trásleve · comemoração
bene_sorriso_outline.pngretrato, sorriso abertoleve · afetivo
bene_corpo_inteiro_outline.pngde pé, mãos juntas, corpo inteirosolene · institucional⭐ único de corpo inteiro — é o que as grades de sangria e pôster pedem
bene_fe_outline.pngmãos em prece, olhos fechadossolene · fé
bene_conversa_outline.pngsentada de perfil, rindoleve⚠️ o recorte pegou o encosto da cadeira
bene_apoiada_outline.pngsentada, mão no rostoleve⚠️ pegou a poltrona e a manta

As duas com ⚠️ não entram no sorteio automático — servem se a peça for montada à mão e o móvel não atrapalhar. Para promovê-las, refazer o recorte à mão e rodar python recorte.py --refaz (re-trata a partir de _limpos/, sem passar pelo rembg de novo).

Os originais sem tratamento ficam em personagens/_limpos/. É de lá que o --refaz parte quando os parâmetros de outline mudarem — não é preciso rodar o rembg outra vez.

Sem recorte, na pasta hq/, ficam os seis tratamentos de HQ (3D pixar, chibi, Mario Kart, Pokémon, super-heroína).


Original completo

  • Beneverso_Vault/99_⚙️_Sistema/Design_System_Imagens/_kit/ — os cinco scripts, o CSS e as fontes
  • Beneverso_Vault/99_⚙️_Sistema/Design_System_Imagens/personagens/_INDEX.md — a biblioteca de recortes
  • Beneverso_Vault/10_🎬_Conteudo/Carrosseis/assets/2026-08-13_douglas-ruas/editor/README.md — o editor
  • A régua que os scripts citam por parágrafo (§2.3, §5.3, §5.4) está no DESIGN_SYSTEM.md da mesma pasta — ver também o Guia Visual

Transcrição do vault. Mudou o arquivo lá? Atualize lib/guias.ts — o vault é a fonte, esta página é o espelho.