PTENES
Flujo A# · 12 públicos · puerta humana

Un tema se convierte en 12 reels, uno para cada público.

El bot escribe los guiones y SE DETIENE. Grabas los avatares en HeyGen; cuando termines, autorizas y él descarga, arma los reels 9:16 y los entrega en cada canal.

promoavatar — reels de difusión por público
Qué es

Definición del pipeline, no código

Este es el repo de dominio del flujo /promoavatar del inemaccbot. Aquí no hay ni una línea de TypeScript — solo el flow.json, los prompts y la ayuda del chat. Un flujo nuevo es una entrada en el registry del bot más un repo como este.

👥 Un guion por público

Son 12: pessoacomum · jóvenes · profesionales · mujeres · emprendedores · tecnicos · 40mais · 60mais · educadores · creadores · recolocacao · familia. Cada uno con su propio canal y gancho.

⏸️ Dos puertas, en los lugares correctos

El bot se detiene después del texto (antes de gastar avatar) y después del descargar (antes de gastar el render). Discrepar de un guion en el filtro cuesta rehacer un texto, no grabar 12 avatares a mano.

🧊 Congelado al crear

flow.json, los prompts y las opciones quedan congelados cuando nace el flujo. Editar sirve para los PRÓXIMOS — ni /refazer toma el cambio.

Cómo funciona

El ciclo, en una pantalla

Cuatro fases y dos puertas. Las puertas son el "pausa_apos": true de las fases texto e baixar en el flow.json — el pipeline se detiene solo ahí y solo avanza cuando lo autorizas.

1. texto→ ⏸️ /aprovar A#N→ 2. avatar→ 2.5 descargar→ ⏸️ tú revisas→ 3. reel→ entregado en el canal

1 · texto

Un guion por público, grabado en textos/A<N>/<publico>.md. El chat te envía cada guion junto con el TÍTULO exacto del video. Puerta 1 justo después.

2 · avatar

Normalmente tú, en el estudio de HeyGen. Hay 5 rutas para esta fase — la tabla de abajo.

2.5 · descargar

Busca el video en HeyGen por el título y descarga el MP4 — con el subtítulo incrustado si el estudio lo grabó con él; limpio si no. Ventana de 90 minutos. Puerta 2 después.

3 · reel

Arma el reel 9:16 (portada impactante con el gancho del público) y entrega directamente en la carpeta del canal de ese público. No existe una fase separada de publicación.

La fase 2 tiene 5 rutas; solo una se ejecuta por flujo

Las cuatro automáticas son fases con la clave opcional en el flow.json. La quinta es la ausencia de todas ellas.

✋ manual (predeterminado)

No hay ninguna flag activada. Grabas en HeyGen y el bot ni se entera; solo espera el /aprovar.

🖥️ estudio

Fase estudio (opcional: estudio). El bot abre/prepara el estudio; tú terminas.

🔌 api

Fase gerar (opcional: api). El BOT genera — consume de la billetera prepaga de HeyGen, ~US$ 1 por minuto.

🎟️ créditos

Fase gerar-creditos (opcional: creditos). La misma generación, consumiendo créditos.

🤖 navegador

Fase navega-avatar (opcional: navega). Agente LLM clonando el TEMPLATE-AVATAR. La ruta más cara: ~17,8k tokens por público, ~214k en el flujo de 12.

🔑 lo que conecta las 5

O título. En cualquier ruta, el video debe llamarse A<N>-<publico>-v1. En la ruta manual eso es 100% tu responsabilidad.

Documentadas en el chat: | api e | estudio. Los flags de creditos e navega existen como fase en el flow.json pero no están en el HELP.md — confirma antes de usar.

Plantillas del reel

Cuatro diseños, y nadie elige al renderizar

Están en templates/. Todos en 1080×1920, fondo #0E1116, acento ámbar #F5A623.

empilhado-capa (predeterminado)

Parte superior: imagen de 704px + headline. Medio: avatar 608px (audio). Base: panel de texto 608px (hook). La portada de impacto — el formato original.

empilhado-explicativo

Igual, pero la base pasa a ser el video explicativo de esa intervención, sin sonido y en bucle. Úsalo cuando el explicativo existe en video.

díptico

Mitad y mitad: imagen de 960px arriba, avatar de 960px abajo. Sin tercera franja. Bueno para mito frente a realidad y comparaciones, donde la imagen transmite el contraste.

imagem-plena

La imagen ocupa todo el cuadro; el avatar entra en un recorte en el parte superior derecha. El pie de página está prohibido: la interfaz de la red cubre la esquina inferior y el avatar no se vería.

El diseño se deriva del texto que aprobaste

La fase 1 registra la línea Formato escolhido: en cada <publico>.md (el PASSO ZERO del prompt), y el templates/mapa.json traduce. En el A#19 real eso dio 9 formatos diferentes para 12 públicos — una variación real, sin que nadie decida nada durante el render.

# precedencia (resuelta por preparar.py)
--template explícito
  › template do ALVO no flow.json
    › mapa.json
      › template da raiz do flow.json

el headline y el hook son obligatorios

Cada franja declara una fonte: imagens, avatar, texto o explicativo. A headline ve a la parte superior; el hook ve al panel de base. Diseño con base y hook si falta = base negra — fue el A#23, con hook en 0 de 8 imágenes. Por eso el prompt indica que escribas hook siempre, incluso en los diseños sin base.

Requisitos previos

Qué debe estar en línea

Este repo por sí solo no ejecuta nada: el bot lo lee. Lo que necesitas es el bot en funcionamiento, una cuenta de HeyGen y las carpetas de canal.

inemaccbot en ejecución

El bot ejecuta el flujo, con este repo declarado en config/fluxos.json.

# en el chat autorizado
/fluxos
/promoavatar help

Cuenta de HeyGen

Es donde grabas los avatares, en la pausa entre las fases 1 y 2. La descarga coincide por el nombre exacto del video.

# el título es el contrato
A<N>-<publico>-v1
# ej.: A8-mulheres-v1

Carpeta del canal

El canal del público se convierte en una carpeta según una regla derivada; la ruta no está escrita en ningún lado.

# crear un canal nuevo
mkdir -p ~/projetos/yt-pub-lives33/imports/videos
Guía de uso · paso a paso

Del tema al reel entregado

Todos los comandos se escriben en el chat de Telegram, en el bot autorizado.

1

Comprueba en modo sombra antes de gastar

| sombra imprime fase × público × fila × tarea y no pone nada en la cola. Ejecutar los 12 públicos significa grabar 12 avatares a mano — lo normal es filtrar.

/promoavatar Não comece aprendendo ferramentas | sombra
2

Crea el flujo

Sin filtro van los 12. Para probar a bajo costo, un solo público. El | e o -- conviven — pero un campo escrito sin uno de los dos se RECHAZA; no se convierte en un tema sin avisar.

/promoavatar <assunto>                        # los 12 públicos
/promoavatar <assunto> | alvos=mulheres       # barato para probar
/promoavatar <assunto> --alvo=jovens --alvo=40mais
/promoavatar <assunto> | legenda              # el valor predeterminado es SIN subtítulos
3

Escribe tu postura sobre el tema

Un tema abierto («¿esto es bueno o malo?») hacía que el agente explicara ambos lados y terminara con una conclusión tibia; nadie comenta con un equilibrista. Ahora el prompt indica que se decante por un lado y diga en el resumen cuál eligió. La posición que indiques prevalece sobre la suya, así que escribir la tuya sigue siendo el mejor camino.

# mejor: tu postura + un hecho concreto + la pregunta
# que quieres en los comentarios
4

Revisa los guiones en la puerta

El bot envía cada guion al chat y SE DETIENE. Aquí es barato discrepar: /refazer cuesta un texto, no un render.

/status A#7              # fase × público, y los títulos
/refazer A#7 mulheres    # solo el público que no quedó bien
5

Graba los avatares con el título exacto

En el estudio, el video debe llamarse exactamente A<N>-<publico>-v1. La descarga coincide por igualdad exacta de cadenas: nombre distinto = video nunca encontrado, y la fase vence en 90 minutos. El chat te envía el título listo justamente para que no tengas que escribirlo de memoria.

A7-mulheres-v1
A7-jovens-v1
# el subtítulo del avatar se decide AQUÍ: si grabaste con él, el reel
# sale con ella — y después no hay forma de quitarla. En ese caso,
# crea el flujo SIN | subtítulo, si no, aparecen dos.
6

Abre la puerta

"Ya terminé mi parte." El bot entonces descarga los videos, arma los reels y los entrega en cada canal.

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

Sigue hasta el enlace final

Si falla un público, rehace solo ese: sus intentos se reinician. Cancelar se refiere al pipeline: lo que ya se creó en el estudio sigue ahí.

/status A#7
/refazer A#7 mulheres
/cancelar A#7 [publico]
Dónde cambiar qué

El dominio, el bot y la skill son capas diferentes

La regla: lo que sea una decisión de público o de campaña va en este repo; lo que sea identidad visual de la marca va en la skill. La skill es global: modificarla cambia TODOS los reels, incluso los que se lanzan directamente desde el chat.

Está aquí (dominio)

El canal y el gancho de cada público, cómo se escriben los guiones, qué le pide este pipeline al reel, el clip de CTA final y la ayuda del chat.

flow.json              # alvos.<publico>.canal / .gatilho
prompts/fase1-texto.md # cómo se escriben los guiones
cta/cta-9x16.mp4       # cambia el archivo
HELP.md                # /promoavatar help

Está fuera

Cómo se ARMA el reel (colores, fuentes, posiciones, SFX) corresponde a la skill global; las colas, los tiempos de espera, el modelo y el esfuerzo corresponden al bot.

# skill (global — cambia toda la marca)
~/.claude/skills/reel-edita-inema/SKILL.md
# bot
inemaccbot/prompts/reel.md
inemaccbot/config/skills.json

Mejora el reel, empezando por lo más barato: cambiar el clip de cta/ → ajustar el entrega del flow.json → y solo entonces modificar la skill.

Para quién y dónde está

El dominio indica para quién (mulheres tiene "canal": "lives4"); el bot sabe dónde — siempre ~/projetos/yt-pub-<canal>/imports/videos. Nunca pongas una ruta en flow.json.

Leyenda: qué es nuestro y qué no

Quien decide el subtítulo del avatar es el estudio: la descarga obtiene la versión subtitulada cuando existe y la limpia cuando no. La opción | legenda es otra: es la que dibuja nuestro editor. Activar las dos hace que salga dos; y los subtítulos incrustados quedan encuadrados para 16:9, sin posibilidad de quitarlos después.

Cómo modificar

Prompts, plantillas, públicos y destino

Las cuatro cosas que más querrás cambiar. Todas siguen la misma restricción: lo que cuenta es lo que existía cuando nació el flujo — editar vale para los PRÓXIMOS, y ni /refazer toma el cambio.

1 · El prompt (cómo se escriben los guiones)

Archivo: prompts/fase1-texto.md. Es el documento completo que la fase 1 entrega al agente — CONTEXTO FIJO, PASO CERO, TALLER DE GANCHO, las 16 REGLAS DE ESCRITURA y el contrato de salida.

Dos trampas: los 11 formatos del PASSO ZERO son claves del templates/mapa.json — si lo renombraste aquí, renómbralo allá. Y las cinco variables inyectadas por el bot no pueden desaparecer:

{{input}}    # el tema
{{publicos}} # los objetivos REALES del flujo
{{pasta}}    # dónde grabar (absoluto)
{{ref}} {{saida}}

La skill inemaclub-textos da la estructura del archivo; este prompt da las reglas y sobrescribe la skill. Cambia la estructura en la skill — y se aplica a todos.

2 · Las plantillas (el diseño del reel)

a) cambiar el aspecto de un diseño → edita templates/<nome>.json. Tres reglas:

y + altura de las franjas tienen que cerrar 1920 (y es posición absoluta, no se apilan solas — la franja que falta queda negra). La fonte es lo que alimenta la franja: imagens · avatar · texto (o hook) · explicativo. E escurecer es el velo bajo el titular: demasiado bajo, el texto desaparece en las zonas claras de la foto.

b) cambiar qué formato corresponde a cada diseño → templates/mapa.json. Las claves existen con y sin acento, a propósito:

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

El formato que no esté en el mapa usa el predeterminado de la raíz; no inventes un diseño. c) Para fijar el diseño de un público, usa el campo template dentro del público.

3 · Los objetivos (los públicos)

Archivo: flow.json, clave alvos.

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

O gatilho es el dolor de ese público (la regla 2 del prompt indica que debes usarlo). Agregar = una entrada más; eliminar = bórralo. Para ejecutar solo algunos sin cambiar nada, usa --alvo= en la creación.

La clave es el contrato, no la etiqueta: se convierte en el archivo textos/A<N>/<publico>.md, el título A<N>-<publico>-v1, o --alvo del reel y el seed-key de las imágenes. En minúsculas, sin acento, sin espacios y sin guion — fue por eso que pessoa-comum se convirtió pessoacomum.

4 · El destino (dónde se entrega el reel)

No hay ninguna ruta escrita en ningún lado: el destino es derivado del canal del público.

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

Cambiar el canal = editar alvos.<publico>.canal. Crear un canal nuevo = crear la carpeta, nada más:

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

Dos públicos pueden compartir el mismo canal. Cambiar la regla (la carpeta base, el imports/videos) no es aquí — é o destinos.ts del bot, y cambia todos los flujos. Para un reel suelto fuera del flujo, usa montar-reel.py --saida <caminho>.

No es de este repo

Qué pertenece a inemaccbot y no está aquí

Este repo es dominio: él declara el pipeline. Quien ejecuta é o inemaccbot. Buscar aquí algo que está allá es la pérdida de tiempo más común — la lista de abajo es justamente lo que no está en este repo.

Los comandos del chat

/promoavatar, /status, /aprovar, /refazer, /cancelar y el parser de | e -- son del bot. Aquí solo existe el HELP.md, que es el TEXTO de la ayuda — no su código.

El motor de fases

Colas (texto, io, navegador, render), intentos, tiempos de espera, el bloqueo durante la creación y el propio concepto de compuerta. El flow.json solo declara; quien obedece es el bot (inemaccbot/config/skills.json).

Las tareas heygen.*

heygen.gerar, heygen.estudio, heygen.baixar son nombres de funciones que viven en el bot (inemaccbot/src/fila/tarefas/heygen.ts) — incluso el escolherUrl, que decide entre el MP4 con subtítulos y el limpio.

El estado de los flujos

state/artefatos/fluxos/A<N>/ se queda en el repo del BOT, no aquí. Es allí donde aterrizan los avatares descargados.

Las carpetas de canal

~/projetos/yt-pub-<canal>/imports/videos es una regla derivada por el bot. La ruta no está escrita en ningún lado: aquí solo existe el nombre del canal.

Cómo se ARMA el reel

Los colores, las fuentes, las posiciones, el recorte de silencios y los SFX corresponden a la skill global ~/.claude/skills/reel-edita-inema/SKILL.md. Cambiar eso modifica TODO reel de la marca, incluidos los que se activan directamente en el chat.

La regla práctica: si la respuesta cambia el comportamiento de todos los flujos, no es de aquí. Si solo cambia promoavatar, es de aquí.

Parámetros

Los motores del reel, en tus manos

La fase 3 llama a scripts/montar-reel.py. Se puede ejecutar directamente, fuera del bot — útil para rehacer un reel sin gastar flujo.

montar-reel.py

--avatar        # obligatorio: el MP4 de HeyGen
--ws            # obligatorio: workspace del reel
--alvo          # público; se convierte en la seed-key de las imágenes
--textos        # el <publico>.md (sección ## IMAGENS)
--template      # override de diseño (prevalece sobre todo)
--flow --mapa   # dónde buscar la plantilla y el mapa
--qualidade     # high (predeterminado) · standard · draft
--cta --sem-cta # el clip de cierre
--pular-preparo # reutiliza la preparación de --ws
--saida         # destino del MP4

preparar.py tiene las mismas, más --explicativo, --sem-imagens, --sem-transcricao e --sem-montar.

Ejemplos

# reel predeterminado — el diseño sale del 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

# borrador económico, solo para ver el encuadre
... --qualidade draft --sem-cta

# forzar el diseño, ignorando el mapa
... --template imagem-plena

# cambiar el CTA sin regenerar la imagen
... --pular-preparo --saida saida/A34-jovens.mp4