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)
| Ferramenta | Onde | O que faz |
|---|---|---|
| Gerador de arte Beneverso | equipe.beneverso.com.br/arte | Renderiza o design system de imagens em peça pronta, pelo navegador |
| Gerador Benedita do Rio | equipe.beneverso.com.br/gerador | Do projeto irmão (marca separada — não compartilha ativo com o Beneverso) |
O que roda só na máquina
| Ferramenta | Onde |
|---|---|
CLI de render — _kit | Beneverso_Vault/99_⚙️_Sistema/Design_System_Imagens/_kit/ |
| Editor visual de carrossel | Beneverso_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ção | Como |
|---|---|
| Selecionar | clique no elemento (ou na lista do painel direito) |
| Mover | arraste. Ou setas = 1px, Shift+setas = 20px |
| Mudar de camada | ▲▼ na lista, ou Ctrl+↑ / Ctrl+↓ |
| Editar texto | painel direito, campo Texto |
| Destacar palavra | ponha *entre asteriscos* — vira a cor de destaque do elemento |
| Apagar | Delete |
| Desfazer | Ctrl+Z |
| Novo elemento | escolha o tipo no painel e clique Adicionar |
| Trocar fundo/textura/moldura | seção Fundo do card |
| Foto nova | arraste a imagem pra dentro da janela (ou botão Trocar foto…) |
| Exportar | Baixar 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:
| Controle | O que faz |
|---|---|
| Estilo | retangular, cantos redondos, pensamento (nuvem), explosão de gibi |
| Rabicho — lado | embaixo, em cima, à esquerda, à direita, ou sem rabicho |
| Onde no lado | 0–92%, desliza o rabicho ao longo daquele lado |
| Tamanho | do rabicho |
| Borda | espessura (0 tira a borda) |
| Respiro interno | distância do texto até a borda |
| Cores | fundo, texto, destaque e borda, cada uma separada |
| Inclinação | gira o balão inteiro |
| Alinhamento | do 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:
- rembg com o modelo
u2net_human_seg(especializado em pessoas — ou2netgenérico confundia a madeira escura do plenário da Alerj com o sujeito); - 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;
- 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:800e o arquivoInter-Bold.ttfé 700; o canvas não sintetiza peso. - O contorno de texto é
strokeTextantes defillText, que reproduz opaint-order:stroke filldo 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.jsonnão existe. Rodepython montar_projeto.py. - Texto com fonte errada / larguras estranhas — as
@font-facenã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
PORTAno topo doeditor.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).
- Foto real + outline — padrão para atualidade, dado, notícia e meme
- HQ / comic — épico, luta, capa
- 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/) | Tratamento | Expressão | Tom |
|---|---|---|---|
bene_celular_outline.png | foto real | sorrindo, olhando celular | leve · atual |
bene_dedo_riste_outline.png | foto real | dedo em riste, sorrindo | leve · atual · didático |
bene_espanto_outline.png | foto real | espanto, boca aberta | leve · reação · meme |
bene_cocar_outline.png | foto real P&B | cocar, plenário, séria | solene · histórico |
bene_chibi_outline.png | cartoon | apontando, bravinha | leve · meme |
bene_sh_outline.png | HQ | heroína, raiva | épico |
crivella_serio_outline.png | foto real | sério | adversá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ão | Tom | |
|---|---|---|---|
bene_fofoca_outline.png | mão na boca, rindo de canto | leve · cochicho · meme | ⭐ o mais "SERÁ?!" do acervo |
bene_desconfiada_outline.png | mão no queixo, sorriso de canto | leve · desconfiança | ⭐ combina com a voz da página |
bene_gargalhada_outline.png | rindo alto, cabeça pra trás | leve · comemoração | |
bene_sorriso_outline.png | retrato, sorriso aberto | leve · afetivo | |
bene_corpo_inteiro_outline.png | de pé, mãos juntas, corpo inteiro | solene · institucional | ⭐ único de corpo inteiro — é o que as grades de sangria e pôster pedem |
bene_fe_outline.png | mãos em prece, olhos fechados | solene · fé | |
bene_conversa_outline.png | sentada de perfil, rindo | leve | ⚠️ o recorte pegou o encosto da cadeira |
bene_apoiada_outline.png | sentada, mão no rosto | leve | ⚠️ 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--refazparte 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 fontesBeneverso_Vault/99_⚙️_Sistema/Design_System_Imagens/personagens/_INDEX.md— a biblioteca de recortesBeneverso_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.mdda mesma pasta — ver também o Guia Visual