Fluxo A# · 12 públicos · portão humano

Um assunto vira 12 reels, um para cada público.

O bot escreve os roteiros e PARA. Você grava os avatares no HeyGen; quando terminar, libera e ele baixa, monta os reels 9:16 e entrega em cada canal.

promoavatar — reels de divulgação por público
O que é

Definição de pipeline, não código

Este é o repo de domínio do fluxo /promoavatar do inemaccbot. Aqui não há uma linha de TypeScript — só o flow.json, os prompts e a ajuda do chat. Um fluxo novo é uma entrada no registry do bot mais um repo como este.

👥 Um roteiro por público

São 12: pessoacomum · jovens · profissionais · mulheres · empreendedores · tecnicos · 40mais · 60mais · educadores · criadores · recolocacao · familia. Cada um com canal e gancho próprios.

⏸️ Dois portões, nos lugares certos

O bot para depois do texto (antes de gastar avatar) e depois do baixar (antes de gastar render). Discordar de um roteiro no portão custa um texto refeito, não 12 avatares gravados na mão.

🧊 Congelado na criação

flow.json, prompts e opções são congelados quando o fluxo nasce. Editar vale para os PRÓXIMOS — nem /refazer pega a mudança.

Como funciona

O ciclo, em uma tela

Quatro fases e dois portões. Os portões são o "pausa_apos": true das fases texto e baixar no flow.json — o pipeline para sozinho ali e só anda quando você libera.

1. texto ⏸️ /aprovar A#N 2. avatar 2.5 baixar ⏸️ você confere 3. reel entregue no canal

1 · texto

Um roteiro por público, gravado em textos/A<N>/<publico>.md. O chat te manda cada roteiro junto com o TÍTULO exato do vídeo. Portão 1 logo depois.

2 · avatar

Normalmente você, no estúdio do HeyGen. Existem 5 rotas para esta fase — a tabela abaixo.

2.5 · baixar

Acha o vídeo no HeyGen pelo título e baixa o MP4 — com a legenda queimada se o estúdio gravou com ela, limpo se não. Janela de 90 minutos. Portão 2 depois.

3 · reel

Monta o reel 9:16 (capa de impacto com o gatilho do público) e entrega direto na pasta do canal daquele público. Não existe fase separada de publicação.

A fase 2 tem 5 rotas — só uma roda por fluxo

As quatro automáticas são fases com a chave opcional no flow.json. A quinta é a ausência de todas elas.

✋ manual (padrão)

Nenhuma flag ligada. Você grava no HeyGen e o bot nem sabe como — só espera o /aprovar.

🖥️ estúdio

Fase estudio (opcional: estudio). O bot abre/prepara o estúdio, você conclui.

🔌 api

Fase gerar (opcional: api). O BOT gera — gasta da carteira pré-paga da HeyGen, ~US$ 1 por minuto.

🎟️ créditos

Fase gerar-creditos (opcional: creditos). Mesma geração, consumindo créditos.

🤖 navegador

Fase navega-avatar (opcional: navega). Agente LLM clonando o TEMPLATE-AVATAR. A rota mais cara: ~17,8k tokens por público, ~214k no fluxo de 12.

🔑 o que amarra as 5

O título. Em qualquer rota o vídeo tem que se chamar A<N>-<publico>-v1. Na rota manual isso é 100% responsabilidade sua.

Documentadas no chat: | api e | estudio. As flags de creditos e navega existem como fase no flow.json mas não estão no HELP.md — confirme antes de usar.

Templates do reel

Quatro layouts, e ninguém escolhe na hora do render

Ficam em templates/. Todos 1080×1920, fundo #0E1116, acento âmbar #F5A623.

empilhado-capa (padrão)

Topo: imagem 704px + headline. Meio: avatar 608px (áudio). Base: painel de texto 608px (hook). A capa de impacto — o formato original.

empilhado-explicativo

Igual, mas a base vira o vídeo explicativo daquela fala, mudo e em loop. Use quando o explicativo existe em vídeo.

diptico

Metade e metade: imagem 960px em cima, avatar 960px embaixo. Sem terceira faixa. Bom para mito×realidade e comparação, onde a imagem carrega o contraste.

imagem-plena

A imagem ocupa o quadro inteiro; o avatar entra num recorte no topo-direita. O rodapé é proibido: a interface da rede cobre o canto inferior e o avatar não apareceria.

O layout decorre do texto que você aprovou

A fase 1 grava a linha Formato escolhido: em cada <publico>.md (o PASSO ZERO do prompt), e o templates/mapa.json traduz. No A#19 real isso deu 9 formatos diferentes para 12 públicos — variação de verdade, sem ninguém decidir nada em tempo de render.

# precedência (resolvida pelo preparar.py)
--template explícito
  › template do ALVO no flow.json
    › mapa.json
      › template da raiz do flow.json

headline e hook são obrigatórios

Cada faixa declara uma fonte: imagens, avatar, texto ou explicativo. A headline vai no topo; o hook vai no painel de base. Layout com base e hook faltando = base preta — foi o A#23, com hook em 0 de 8 imagens. Por isso o prompt manda escrever hook sempre, mesmo nos layouts sem base.

Pré-requisitos

O que precisa estar no ar

Este repo sozinho não roda nada — ele é lido pelo bot. O que você precisa é o bot no ar, uma conta HeyGen e as pastas de canal.

inemaccbot rodando

O fluxo é executado pelo bot, com este repo declarado em config/fluxos.json.

# no chat autorizado
/fluxos
/promoavatar help

Conta HeyGen

É onde você grava os avatares, na pausa entre as fases 1 e 2. O download casa por nome exato do vídeo.

# o título é o contrato
A<N>-<publico>-v1
# ex.: A8-mulheres-v1

Pasta do canal

O canal do público vira pasta por regra derivada — o caminho não está escrito em lugar nenhum.

# criar um canal novo
mkdir -p ~/projetos/yt-pub-lives33/imports/videos
Guia de uso · passo a passo

Do assunto ao reel entregue

Todos os comandos são digitados no chat do Telegram, no bot autorizado.

1

Confira em sombra antes de gastar

| sombra imprime fase × público × fila × tarefa e não enfileira nada. Rodar os 12 públicos são 12 avatares gravados na mão — o normal é filtrar.

/promoavatar Não comece aprendendo ferramentas | sombra
2

Crie o fluxo

Sem filtro vão os 12. Para testar barato, um público só. O | e o -- convivem — mas campo escrito sem um dos dois é RECUSADO, não vira assunto em silêncio.

/promoavatar <assunto>                        # os 12 públicos
/promoavatar <assunto> | alvos=mulheres       # barato p/ testar
/promoavatar <assunto> --alvo=jovens --alvo=40mais
/promoavatar <assunto> | legenda              # padrão é SEM legenda
3

Escreva a sua posição no assunto

Assunto em aberto ("isso é bom ou ruim?") fazia o agente explicar os dois lados e fechar morno — e ninguém comenta com equilibrista. Hoje o prompt manda cravar um lado e dizer no resumo qual foi. A posição que você mandar vence a dele, então escrever a sua continua sendo o melhor caminho.

# melhor: sua posição + um fato concreto + a pergunta
# que você quer nos comentários
4

Revise os roteiros no portão

O bot manda cada roteiro no chat e PARA. É aqui que discordar é barato: /refazer custa um texto, não um render.

/status A#7              # fase × público, e os títulos
/refazer A#7 mulheres    # só o público que não ficou bom
5

Grave os avatares com o título exato

No estúdio, o vídeo precisa se chamar exatamente A<N>-<publico>-v1. O download casa por igualdade exata de string: nome diferente = vídeo nunca encontrado, e a fase expira em 90 minutos. O chat te manda o título pronto justamente para não ser digitado de memória.

A7-mulheres-v1
A7-jovens-v1
# a legenda do avatar se decide AQUI: gravou com ela, o reel
# sai com ela — e não há como removê-la depois. Nesse caso,
# crie o fluxo SEM | legenda, senão saem duas.
6

Libere o portão

"Terminei minha parte." O bot então baixa os vídeos, monta os reels e entrega em cada canal.

/aprovar A#7     # sinônimos: /pronto, /aprovado, /ok
7

Acompanhe até o link final

Se um público falhar, refaça só ele — as tentativas dele são zeradas. Cancelar é sobre o pipeline: o que já foi criado no estúdio continua lá.

/status A#7
/refazer A#7 mulheres
/cancelar A#7 [publico]
Onde mudar o quê

Domínio, bot e skill são camadas diferentes

A regra: o que é decisão de público ou de campanha mora neste repo; o que é identidade visual da marca mora na skill. A skill é global — mexer nela muda TODO reel, inclusive os disparados direto no chat.

Mora aqui (domínio)

O canal e o gancho de cada público, como os roteiros são escritos, o que este pipeline pede ao reel, o clipe de CTA do fim e a ajuda do chat.

flow.json              # alvos.<publico>.canal / .gatilho
prompts/fase1-texto.md # como os roteiros são escritos
cta/cta-9x16.mp4       # troque o arquivo
HELP.md                # /promoavatar help

Mora fora

Como o reel é MONTADO (cores, fontes, posições, SFX) é da skill global; filas, timeouts, modelo e esforço são do bot.

# skill (global — muda a marca inteira)
~/.claude/skills/reel-edita-inema/SKILL.md
# bot
inemaccbot/prompts/reel.md
inemaccbot/config/skills.json

Melhorar o reel, na ordem do mais barato: trocar o clipe de cta/ → ajustar o entrega do flow.json → e só então mexer na skill.

Para quem, e onde fica

O domínio diz para quem (mulheres tem "canal": "lives4"); o bot sabe onde — sempre ~/projetos/yt-pub-<canal>/imports/videos. Nunca ponha caminho no flow.json.

Legenda: o que é nosso e o que não é

Quem decide a legenda do avatar é o estúdio: o download pega a versão legendada quando ela existe, e a limpa quando não. A opção | legenda é outra — é a que o nosso editor desenha. Ligar as duas faz sair duas; e legenda queimada vem enquadrada para 16:9, sem remoção possível depois.

Como alterar

Prompts, templates, alvos e destino

As quatro coisas que você mais vai querer mexer. Todas seguem a mesma trava: o que vale é o que existia quando o fluxo nasceu — editar vale para os PRÓXIMOS, e nem /refazer pega a mudança.

1 · O prompt (como os roteiros são escritos)

Arquivo: prompts/fase1-texto.md. É o documento inteiro que a fase 1 entrega ao agente — CONTEXTO FIXO, PASSO ZERO, OFICINA DE GANCHO, as 16 REGRAS DE ESCRITA e o contrato de saída.

Duas armadilhas: os 11 formatos do PASSO ZERO são chaves do templates/mapa.json — renomeou aqui, renomeie lá. E as cinco variáveis injetadas pelo bot não podem sumir:

{{input}}    # o assunto
{{publicos}} # os alvos REAIS do fluxo
{{pasta}}    # onde gravar (absoluto)
{{ref}} {{saida}}

A skill inemaclub-textos dá a estrutura do arquivo; este prompt dá as regras e sobrescreve a skill. Mudar a estrutura é na skill — e vale para todo mundo.

2 · Os templates (o layout do reel)

a) mudar como um layout se parece → edite templates/<nome>.json. Três regras:

y + altura das faixas têm que fechar 1920 (y é posição absoluta, elas não se empilham sozinhas — faixa faltando é faixa preta). A fonte é o que alimenta a faixa: imagens · avatar · texto (o hook) · explicativo. E escurecer é o véu sob a headline: baixo demais, o texto some no claro da foto.

b) mudar qual formato cai em qual layouttemplates/mapa.json. As chaves existem com e sem acento, de propósito:

"mito versus realidade": "diptico",
"comparação": "diptico",
"comparacao": "diptico"

Formato fora do mapa cai no padrão da raiz — não inventa layout. c) Para fixar o layout de um público, use o campo template dentro do alvo.

3 · Os alvos (os públicos)

Arquivo: flow.json, chave alvos.

"empreendedores": {
  "canal": "lives1",
  "gatilho": "Transforme IA em redução de custos…",
  "template": "diptico"   # opcional
}

O gatilho é a dor daquele público (a regra 2 do prompt manda usá-lo). Adicionar = mais uma entrada; remover = apague. Para rodar só alguns sem mexer em nada, use --alvo= na criação.

A chave é contrato, não rótulo: ela vira o arquivo textos/A<N>/<publico>.md, o título A<N>-<publico>-v1, o --alvo do reel e o seed-key das imagens. Minúsculas, sem acento, sem espaço e sem hífen — foi por isso que pessoa-comum virou pessoacomum.

4 · O destino (onde o reel é entregue)

Não existe caminho escrito em lugar nenhum: o destino é derivado do canal do público.

<canal> → ~/projetos/yt-pub-<canal>/imports/videos

Trocar o canal = editar alvos.<publico>.canal. Criar canal novo = criar a pasta, só isso:

mkdir -p ~/projetos/yt-pub-lives33/imports/videos

Dois públicos podem dividir o mesmo canal. Mudar a regra (a pasta base, o imports/videos) não é aqui — é o destinos.ts do bot, e muda todos os fluxos. Para um reel avulso fora do fluxo, use montar-reel.py --saida <caminho>.

Não é deste repo

O que é do inemaccbot, e não daqui

Este repo é domínio: ele declara o pipeline. Quem executa é o inemaccbot. Procurar aqui uma coisa que é de lá é a perda de tempo mais comum — a lista abaixo é justamente o que não está neste repo.

Os comandos do chat

/promoavatar, /status, /aprovar, /refazer, /cancelar e o parser de | e -- são do bot. Aqui só existe o HELP.md, que é o TEXTO da ajuda — não o código dela.

O motor de fases

Filas (texto, io, navegador, render), tentativas, timeouts, o congelamento na criação e o próprio conceito de portão. O flow.jsondeclara; quem obedece é o bot (inemaccbot/config/skills.json).

As tarefas heygen.*

heygen.gerar, heygen.estudio, heygen.baixar são nomes de funções que vivem no bot (inemaccbot/src/fila/tarefas/heygen.ts) — inclusive o escolherUrl, que decide entre o MP4 legendado e o limpo.

O estado dos fluxos

state/artefatos/fluxos/A<N>/ fica no repo do BOT, não aqui. É lá que os avatares baixados aterrissam.

As pastas de canal

~/projetos/yt-pub-<canal>/imports/videos é regra derivada pelo bot. O caminho não está escrito em lugar nenhum — aqui só existe o nome do canal.

Como o reel é MONTADO

Cores, fontes, posições, corte de silêncio e SFX são da skill global ~/.claude/skills/reel-edita-inema/SKILL.md. Mexer ali muda TODO reel da marca, inclusive os disparados direto no chat.

A regra de bolso: se a resposta muda o comportamento de todos os fluxos, não é daqui. Se muda só o promoavatar, é daqui.

Parâmetros

Os motores do reel, na mão

A fase 3 chama scripts/montar-reel.py. Dá para rodar direto, fora do bot — útil para refazer um reel sem gastar fluxo.

montar-reel.py

--avatar        # obrigatório: o MP4 do HeyGen
--ws            # obrigatório: workspace do reel
--alvo          # público; vira o seed-key das imagens
--textos        # o <publico>.md (seção ## IMAGENS)
--template      # override de layout (vence tudo)
--flow --mapa   # de onde resolver template e mapa
--qualidade     # high (padrão) · standard · draft
--cta --sem-cta # o clipe de fecho
--pular-preparo # reaproveita o preparo do --ws
--saida         # destino do MP4

preparar.py tem as mesmas, mais --explicativo, --sem-imagens, --sem-transcricao e --sem-montar.

Exemplos

# reel padrão — layout sai do mapa
python3 scripts/montar-reel.py \
  --avatar A34-jovens-v1.mp4 \
  --ws /tmp/ws-A34-jovens --alvo jovens \
  --textos textos/A34/jovens.md --flow flow.json

# rascunho barato, só p/ ver enquadramento
... --qualidade draft --sem-cta

# forçar layout, ignorando o mapa
... --template imagem-plena

# trocar CTA sem regerar imagem
... --pular-preparo --saida saida/A34-jovens.mp4