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.

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.
Son 12: pessoacomum · jóvenes · profesionales · mujeres · emprendedores · tecnicos · 40mais · 60mais · educadores · creadores · recolocacao · familia. Cada uno con su propio canal y gancho.
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.
flow.json, los prompts y las opciones quedan congelados cuando nace el flujo. Editar sirve para los PRÓXIMOS — ni /refazer toma el cambio.
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.
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.
Normalmente tú, en el estudio de HeyGen. Hay 5 rutas para esta fase — la tabla de abajo.
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.
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.
Las cuatro automáticas son fases con la clave opcional en el flow.json. La quinta es la ausencia de todas ellas.
No hay ninguna flag activada. Grabas en HeyGen y el bot ni se entera; solo espera el /aprovar.
Fase estudio (opcional: estudio). El bot abre/prepara el estudio; tú terminas.
Fase gerar (opcional: api). El BOT genera — consume de la billetera prepaga de HeyGen, ~US$ 1 por minuto.
Fase gerar-creditos (opcional: creditos). La misma generación, consumiendo créditos.
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.
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.
Están en templates/. Todos en 1080×1920, fondo #0E1116, acento ámbar #F5A623.
Parte superior: imagen de 704px + headline. Medio: avatar 608px (audio). Base: panel de texto 608px (hook). La portada de impacto — el formato original.
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.
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.
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.
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
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.
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.
El bot ejecuta el flujo, con este repo declarado en config/fluxos.json.
# en el chat autorizado /fluxos /promoavatar help
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
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
Todos los comandos se escriben en el chat de Telegram, en el bot autorizado.
| 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
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
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
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
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.
"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
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]
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.
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
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.
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.
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.
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.
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.
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.
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.
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>.
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.
/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.
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).
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.
state/artefatos/fluxos/A<N>/ se queda en el repo del BOT, no aquí. Es allí donde aterrizan los avatares descargados.
~/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.
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í.
La fase 3 llama a scripts/montar-reel.py. Se puede ejecutar directamente, fuera del bot — útil para rehacer un reel sin gastar flujo.
--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.
# 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