No Ar
Manual de configuração

Como configurar a sua locutora de IA

Um guia direto, sem termos técnicos, para você deixar a rádio do jeito que quiser: com músicas criadas por IA, com o seu próprio acervo, com um assistente temático e com controle de vídeo — inclusive uma rádio de videoclipes.

Por onde começar

Toda a configuração fica em um único arquivo chamado config.json, na pasta do programa. Você abre esse arquivo com um editor de texto (o Bloco de Notas serve), troca os valores e salva. As mudanças passam a valer quando você reinicia o programa.

As chaves que valem para qualquer modo

Independentemente do que você escolher abaixo, estes itens precisam estar preenchidos para a locutora funcionar:

config.json · trecho "webradio"
"webradio": {
  "enabled": true,
  "groq_api_key": "gsk_...sua_chave...",
  "elevenlabs_api_key": "sk_...sua_chave...",
  "dj_voice_id": "RVmX026jCrF5VqUvpCk0",
  "dj_name": "DJ Aurora",
  "station_name": "Rádio Monster FM 123.4",
  "language": "pt-BR"
}
  • groq_api_key — a chave do "cérebro" que escreve as falas.
  • elevenlabs_api_key e dj_voice_id — a chave e a voz que dão voz à locutora (no serviço padrão, o ElevenLabs). Dá para usar a Resemble.ai no lugar — veja a seção "A voz da locutora".
  • dj_name e station_name — o nome da locutora e o nome da rádio.
  • audio.tts — a voz que lê os recados de texto do ouvinte (narra "Fulano disse: …"). É obrigatória, fica em outro trecho ("audio") e é separada da voz da locutora. Detalhes em "A voz da locutora".
⚠️

A voz é cobrada por uso (créditos do serviço de voz — ElevenLabs ou Resemble). Quando os créditos acabam, a locutora para de responder os recados — só continuam as falas curtas que já ficaram gravadas. Se isso acontecer, é sinal de recarregar os créditos, não um defeito do programa.

🎙 A voz da locutora

A fala da locutora é gerada por um serviço de voz (TTS). Você pode escolher entre dois: o ElevenLabs (padrão) ou o Resemble.ai. A escolha é feita numa única chave, e todo o resto funciona igual nos dois — recados, vinhetas, cache de falas, controle de vídeo. Muda só de onde sai a voz.

🗣️

Existem duas vozes no programa, independentes: a voz da locutora (esta seção — webradio.dj_voice_id), que apresenta a programação e reage aos recados; e a voz que lê os recados de texto do ouvinte (audio.tts, no fim desta seção), que narra "Fulano disse: …". O ouvinte não escolhe a voz — quem dá voz ao texto é o programa. Já um recado em áudio toca na voz do próprio ouvinte.

config.json · trecho "webradio"
"tts_provider": "elevenlabs"

Valores possíveis: "elevenlabs" ou "resemble".

Opção 1 — ElevenLabs (padrão)

Usa a chave e a voz do ElevenLabs. É o que está configurado por padrão.

config.json · trecho "webradio"
"tts_provider": "elevenlabs",
"elevenlabs_api_key": "sk_...sua_chave...",
"dj_voice_id": "RVmX026jCrF5VqUvpCk0",
"elevenlabs_tts_model": "eleven_turbo_v2_5"
elevenlabs_api_key
A chave da sua conta ElevenLabs.
dj_voice_id
O identificador da voz escolhida no ElevenLabs.
elevenlabs_tts_model
O modelo de voz. Padrão eleven_turbo_v2_5. Um modelo Flash sai mais barato (ver a seção de custos).

Opção 2 — Resemble.ai

Para usar a Resemble, mude o tts_provider para "resemble" e preencha os campos abaixo. Quando você usa a Resemble, os campos do ElevenLabs não são exigidos (a não ser que você use o ElevenLabs para criar música, na Seção 1).

config.json · trecho "webradio"
"tts_provider": "resemble",
"resemble_api_key": "...seu_token...",
"resemble_voice_uuid": "...uuid_da_voz...",
"resemble_synthesize_url": "https://f.cluster.resemble.ai/synthesize",
"resemble_stream_url": "https://f.cluster.resemble.ai/stream",
"resemble_sample_rate": 48000
resemble_api_key
O token da sua conta Resemble (fica em API / Settings do painel). É a sua credencial de acesso.
resemble_voice_uuid
O identificador de uma voz da sua conta (em Voices) — algo como 1a2b3c4d. Não é o seu e-mail. É o equivalente ao dj_voice_id do ElevenLabs.
resemble_synthesize_url
Endereço que gera a voz. Já vem com o padrão; só mude se a Resemble alterar o endereço.
resemble_stream_url
Reservado — não é usado por enquanto (o programa gera a fala inteira antes de tocar). Pode deixar como está.
resemble_sample_rate
Qualidade de amostragem pedida à Resemble. Padrão 48000; pode deixar.
🔎

Onde achar o UUID da voz: no painel da Resemble, abra Voices e selecione a voz desejada — o UUID aparece nos detalhes dela ou na URL ao abri-la (algo como .../voices/SEU_UUID). É preciso ter ao menos uma voz criada na conta.

🔄

Pode trocar de serviço quando quiser, sem dor de cabeça: o programa mantém as falas gravadas (cache) separadas por voz, então ao mudar de ElevenLabs para Resemble (ou vice-versa) ela não mistura os timbres — gera o repertório novo na voz certa.

⚠️

Seja qual for o serviço, a voz é paga por uso. Se a locutora parar de responder os recados de repente, normalmente é a cota/créditos do serviço de voz que acabaram — recarregue na conta correspondente (ver "Erros comuns").

A voz que lê os recados de texto (audio.tts)

Quando o ouvinte manda um recado de texto (em vez de gravar um áudio), é o programa que lê a mensagem em voz alta, no formato "Fulano disse: …" (sorteando algumas variações). Essa voz é configurada à parte, no trecho "audio""tts", e é obrigatória: o programa não inicia sem ela, mesmo que você só receba recados em áudio. Ela é separada da voz da locutora — o ideal é usar uma voz diferente aqui (um "narrador" dos recados), mas pode ser a mesma conta/chave. Os provedores são os mesmos ("elevenlabs" padrão ou "resemble"), escolhidos por audio.tts.provider.

Com ElevenLabs (padrão):

config.json · trecho "audio"
"audio": {
  "tts": {
    "provider": "elevenlabs",
    "elevenlabs_api_key": "sk_...sua_chave...",
    "voice_id": "UMA_VOZ_PARA_OS_RECADOS",
    "elevenlabs_model": "eleven_turbo_v2_5"
  }
}

Com Resemble.ai:

config.json · trecho "audio"
"audio": {
  "tts": {
    "provider": "resemble",
    "resemble_api_key": "...seu_token...",
    "resemble_voice_uuid": "...uuid_da_voz..."
  }
}
provider
"elevenlabs" (padrão) ou "resemble" — qual serviço gera a narração dos recados de texto.
voice_id
No ElevenLabs: a voz da narração. Pode (e idealmente deve) ser diferente da dj_voice_id da locutora.
resemble_voice_uuid
No Resemble: o UUID da voz da narração (em Voices). Idealmente diferente do da locutora.
elevenlabs_model
Modelo da voz no ElevenLabs. Padrão eleven_turbo_v2_5; um modelo Flash sai mais barato (ver a seção de custos).
🔑

Os campos seguem a mesma lógica da voz da locutora: no ElevenLabs bastam elevenlabs_api_key + voice_id; no Resemble, resemble_api_key + resemble_voice_uuid. A resemble_synthesize_url e o resemble_sample_rate são opcionais — se você não os escrever, assumem o padrão (os mesmos valores da locutora).

⚠️

Essa voz também é paga por uso e conta para os créditos do serviço. Mas os recados de texto não se perdem se os créditos acabarem: o programa guarda a mensagem e tenta narrar de novo a cada poucos segundos — o recado entra na fila assim que a voz volta a funcionar.

🔑 Chaves e vozes: passo a passo

Aqui está, para cada serviço que o programa pode usar, como criar a conta, pegar a chave (ou token), escolher uma voz pronta e criar/clonar a sua própria voz. Tudo o que você pegar aqui vai parar no config.json — cada valor tem o seu campo, e no fim desta seção tem uma tabelinha de "qual valor vai em qual campo".

🧭

Os sites dessas empresas mudam o visual de tempos em tempos. Se um botão estiver com outro nome ou em outro canto, procure pelo termo em inglês entre parênteses que eu deixo ao lado — a ideia é sempre a mesma. O nome exato dos planos e os preços também mudam; confirme na própria página do serviço.

🔒

Trate as chaves como senhas: o programa as guarda só no seu config.json, na sua máquina, e nunca as mostra na transmissão. Nunca deixe a chave aparecer na tela durante a live nem cole em sites/grupos. Se uma chave vazar, apague-a no painel do serviço e gere outra.

Groq — o cérebro (e a transcrição)

O Groq é o cérebro da locutora: é ele que escreve as falas e faz a moderação dos recados. Também é ele que transcreve o áudio quando você usa um arquivo de áudio como contexto (Seção 3). Não tem voz — é só o texto. Tem um nível gratuito para começar.

  1. Crie uma conta em console.groq.com.
  2. Abra a página de chaves em console.groq.com/keys (no menu, API Keys).
  3. Clique em Create API Key, dê um nome qualquer (ex.: radio) e confirme.
  4. Copie a chave na hora — depois de fechar a janela ela não aparece mais. A chave começa com gsk_.

Cole no campo groq_api_key:

config.json · trecho "webradio"
"groq_api_key": "gsk_...sua_chave..."

ElevenLabs — a voz (padrão) e, opcionalmente, a música

O ElevenLabs é o serviço padrão de voz. A mesma chave serve para três coisas: a voz da locutora (dj_voice_id), a voz que lê os recados de texto (audio.tts) e, se você usar o modo de música por IA, a criação de música (Eleven Music).

1) Pegar a chave

  1. Crie a conta em elevenlabs.io e faça login.
  2. No menu lateral, abra API Keys (fica na área do seu perfil/workspace).
  3. Clique em Create Key, dê um nome e confirme.
  4. Copie na hora — o ElevenLabs mostra a chave uma única vez. Ela começa com sk_.

2) Escolher uma voz pronta (mais rápido)

  1. No menu, abra Voices. Em My Voices ficam as vozes da sua conta; em Explore (Voice Library) há um acervo enorme da comunidade.
  2. Achou uma voz que gostou? Clique nos três pontinhos (More actions) e em Copy voice ID.
  3. Cole esse ID em dj_voice_id (a locutora) e/ou em audio.tts.voice_id (a voz dos recados de texto) — o ideal é usar vozes diferentes nos dois.
💡

No plano gratuito, as vozes do Voice Library podem não funcionar pela chave (API). Se a locutora não falar com uma voz da biblioteca, use uma das vozes padrão que já vêm na conta (em My Voices) — essas funcionam sempre — ou assine um plano.

3) Criar/clonar a sua voz

Em VoicesCreate or Clone a Voice (criar ou clonar uma voz), você tem duas opções:

  1. Instant Voice Clone (clone instantâneo) — envie de 1 a 5 minutos de áudio limpo (sem ruído/música ao fundo). Fica pronta em segundos. É o caminho recomendado para a maioria. Exige um plano pago (a partir do Starter/Creator).
  2. Professional Voice Clone (clone profissional) — precisa de 30 minutos a 3 horas de gravação e treina um modelo (leva algumas horas). Fica bem mais fiel, mas exige plano superior. Vale quando a voz é o seu "produto".

Depois de criar, é só pegar o voice ID dela (os mesmos três pontinhos → Copy voice ID) e colar no campo da voz.

config.json · trecho "webradio"
"elevenlabs_api_key": "sk_...sua_chave...",
"dj_voice_id": "ID_DA_VOZ_QUE_VOCE_COPIOU",
"elevenlabs_tts_model": "eleven_turbo_v2_5"
🎚️

Modelo da voz: o padrão eleven_turbo_v2_5 é rápido e econômico. Existe um mais novo e expressivo, o eleven_v3, e o eleven_multilingual_v2. Para gastar menos, há modelos Flash (veja a seção "Reduzir custos"). Vale o mesmo para a voz dos recados (audio.tts.elevenlabs_model).

4) Criar música por IA (opcional — só no Modo 1)

Se você usa o modo em que a rádio cria as músicas, o Eleven Music usa a mesma chave do ElevenLabs. O modelo padrão da API hoje é o music_v1 (já existe o v2 no site, e ele está vindo para a API).

config.json · trecho "webradio"
"music_provider": "elevenlabs",
"elevenlabs_music_model": "music_v1"
⚠️

A criação de música do ElevenLabs é só para assinantes pagos (não funciona no plano grátis). Se você só quer a locutora lendo recados e tocando o seu acervo (Modos 2 e 3), não precisa disso.

Resemble.ai — alternativa de voz

É a outra opção de voz (no lugar do ElevenLabs), tanto para a locutora quanto para os recados de texto. Você só precisa dela se escolher "resemble" em tts_provider (ou em audio.tts.provider).

1) Pegar o token

  1. Crie a conta em resemble.ai e faça login.
  2. Clique no menu do canto superior direito e escolha API.
  3. Copie o API Token que aparece ali. É a sua credencial (não é o seu e-mail).

2) Escolher ou criar a voz

No painel, abra Voices. Você pode usar uma voz pronta, criar por descrição (Voice Design — você descreve a voz em texto e ela gera opções) ou clonar:

  1. Rapid Voice Clone (clone rápido) — a partir de uns 10 segundos de áudio; fica pronta em cerca de 1 minuto.
  2. Professional Voice Clone (clone profissional) — precisa de 10 a 25 minutos de gravação e leva uns 40 minutos para treinar; resultado mais fiel.
💡

Clonar pela API (programaticamente) exige o plano Business ou superior. Mas dá para criar a voz pelo próprio site num plano menor e depois só usar o UUID dela aqui no programa.

3) Achar o UUID da voz

Em Voices, abra a voz desejada — o UUID aparece nos detalhes dela ou na URL ao abri-la (algo como .../voices/SEU_UUID). É o equivalente ao dj_voice_id do ElevenLabs.

config.json · trecho "webradio"
"tts_provider": "resemble",
"resemble_api_key": "...seu_token...",
"resemble_voice_uuid": "...uuid_da_voz...",
"resemble_synthesize_url": "https://f.cluster.resemble.ai/synthesize"

O resemble_synthesize_url já vem com o endereço certo; só mude se a Resemble alterar o endereço dela.

Musicful — alternativa de música (opcional/avançado)

É a outra opção de criação de música (no lugar do Eleven Music), e só vale no Modo 1 (a rádio criando as músicas). Para a maioria, o Eleven Music (padrão) é o caminho mais simples — use o Musicful só se preferir o serviço deles.

  1. Crie uma conta em musicful.ai.
  2. No painel (dashboard), gere a sua API key.
  3. Confira na documentação do Musicful o endereço completo da API de geração (o endpoint).
config.json · trecho "webradio"
"music_provider": "musicful",
"musicful_api_key": "...sua_chave...",
"musicful_base_url": "https://...endereco_da_doc_do_musicful..."
⚠️

Diferente do ElevenLabs, o formato exato da API do Musicful (o endereço e os campos) pode variar — por isso o musicful_base_url precisa apontar para o endpoint que eles indicarem na documentação atual. Na dúvida, fique no Eleven Music (padrão), que já vem configurado.

Resumo: qual valor vai em qual campo

groq_api_key
Groq — o cérebro (falas + moderação) e a transcrição do áudio de contexto. Sempre necessário.
elevenlabs_api_key + dj_voice_id
ElevenLabs — a voz da locutora (no serviço padrão). Necessário, a menos que você use a Resemble.
audio.tts.*
A voz que lê os recados de textoElevenLabs ou Resemble. Obrigatória (o programa não inicia sem ela), mesmo que você só receba áudio.
resemble_api_key + resemble_voice_uuid
Resemble — só se você escolher a Resemble como voz (em vez do ElevenLabs).
music_provider + (Eleven Music / musicful_*)
Provedor de música por IA — só no Modo 1. Nos modos de acervo próprio, não é usado.

O mínimo para subir: a chave do Groq, uma voz para a locutora e uma voz para os recados (audio.tts). Música por IA e Resemble são opcionais, conforme o modo e o serviço de voz que você escolher.

📨 A página dos ouvintes

Os recados não saem do programa — eles chegam de uma página pública que é o seu subdomínio (ex.: seunome.postaudio.live). É essa página que você divulga para a audiência. Ninguém precisa instalar nada nem fazer login: a pessoa entra, escreve (ou grava), paga o Pix e manda. O recado entra na fila, e o programa puxa essa fila e toca no ar.

🔗

O endereço que você divulga é o seu subdomínio. O programa se liga a ele pelo source.url (a fila), e o token dos dois lados precisa ser o mesmo — veja o mapa no fim desta seção.

O que o ouvinte faz

  1. Abre a sua página e digita o nome.
  2. Escolhe Escrever ou Gravar — um ou o outro, nunca os dois.
  3. Escrevendo: digita a mensagem. Gravando: toca no microfone e grava a própria voz.
  4. Informa o valor do Pix (com o mínimo já indicado) e clica em Enviar recado.
  5. Aparece um "Recado enviado!" e ele já entra na fila.

O que acontece com cada tipo (ligando com a seção "A voz da locutora"): o texto é narrado pela voz do programa (a audio.tts), no formato "Fulano disse: …"; o áudio toca na voz do próprio ouvinte e é transcrito para você poder ler antes de colocar no ar.

É assim que ela aparece

Abaixo, um exemplo do que o ouvinte vê. O logo, o nome e o estilo seguem a sua marca; o campo de Pix some se você desligar o Pix.

Ao vivo
Rádio Monster FM 123.4
Mande seu recado no ar
Escreva uma mensagem para a gente ler no ar — ou grave um áudio e entre com a sua própria voz. Depois é só mandar.
Seu nome
Como devemos te chamar?
✍️ Escrever
🎙️ Gravar
Mensagem
Ex.: Um salve para a galera da quinta-feira!
Valor do Pix
R$ 0,00
Mínimo R$ 5,00
Enviar recado
postaudio.live® Termo de uso · Política de privacidade
Exemplo do que o ouvinte vê. Logo, nome e cores seguem a sua marca; o campo de Pix some se você desligar o Pix.

O que dá para mudar (e onde)

A aparência e os limites dessa página são controlados por um arquivo de configuração que fica na plataforma (na pasta do seu subdomínio), chamado config/audio_config.json. Os principais ajustes:

brand.contractorName / brand.logoUrl
O nome e o logo que aparecem no topo da página.
pix.min / pix.max
O valor mínimo (que aparece como dica) e o máximo do Pix.
features.pix
Liga/desliga o Pix. Em false, o campo de Pix some e nada de valor é exigido nem enviado.
limits
Limite do nome, do texto e da duração/tamanho do áudio gravado, além dos formatos aceitos.
links.terms / links.privacy
Para onde vão os links de Termo de uso e Política de privacidade no rodapé.
queue.token
O segredo que liga o programa à fila. Tem que ser o mesmo token que vai no source.url do programa.
⚠️

Atenção — são dois arquivos diferentes. Esta configuração da página (audio_config.json) fica na plataforma, na pasta do seu subdomínio — não é o config.json do programa. O programa não controla a aparência da página; ele só puxa a fila dela. Na primeira vez que você acessa o subdomínio, esse arquivo é criado automaticamente com valores padrão, prontos para você editar (marca, Pix mínimo, queue.token).

🎙️

Lembre: a voz que lê os recados de texto não fica aqui — fica no programa (audio.tts). O ouvinte não escolhe a voz; ele só escreve. Quem dá voz ao texto é o programa, com a voz que você configurou.

Qual modo escolher

Existem duas decisões independentes. A primeira: de onde vêm as músicas — a IA cria sozinha, ou a rádio toca o seu acervo. A segunda: quem é a locutora — uma apresentadora de rádio comum, ou um personagem/assistente que você descreve (o "contexto"). Combinando as duas, você tem quatro jeitos:

Músicas por IA · sem contexto

Rádio criativa automática

A IA inventa as músicas (sozinha e a pedido via Pix) e apresenta como uma rádio normal. → Seção 1.

Músicas por IA · com contexto

Rádio temática automática

A IA cria as músicas e a locutora segue um personagem que você define. → Seções 1 + 3.

Seu acervo · sem contexto

Rádio de músicas suas

Toca as suas músicas (de uma pasta) com uma locutora comum. → Seção 2.

Seu acervo · com contexto

Programa temático / assistente

Suas músicas ao fundo e a locutora vira um especialista no assunto que você descreve. → Seções 2 + 3.

💡

O controle de vídeo (Seção 4) é à parte: funciona junto com qualquer um desses quatro modos.

1 Músicas criadas por IA

Aqui a locutora inventa as músicas — tanto sozinha (24h, para nunca ficar sem som) quanto a pedido dos ouvintes que mandam um Pix. Você dá os gêneros e os limites de criação por dia (para controlar o custo), e ela cuida do resto.

config.json · trecho "webradio"
"ai_music": true,
"music_source": "",
"music_dir": "webradio/music",
"music_provider": "elevenlabs",
"genres": ["lo-fi","pop","sertanejo","eletronica","rock","mpb"],
"track_length_seconds": 90,
"vocals": "auto",

"autonomous": true,
"min_ready_tracks": 4,
"autonomous_daily_max": 30,
"renew_every_tracks": 20,

"about_every_minutes": 8,
"talk_every_tracks": 1,
"pix_every_minutes": 12,
"station_id_every_minutes": 20,

"submit_hint": "Acesse postaudio.live, escreva o estilo da música e finalize com um Pix",
"pix_suggested": "R$ 5",
"credit_template": "Essa música foi criada a pedido de {name}. Valeu, {name}!"
ai_music
true liga a criação de músicas por IA. É o que define este modo.
music_source
Precisa ficar vazio (""). Se você apontar uma pasta aqui, a criação por IA é desligada automaticamente (vira o modo da Seção 2).
genres
A lista de estilos que a IA usa na rotação e na criação.
vocals
auto (a IA decide), com (sempre cantada) ou sem (sempre instrumental).
autonomous_daily_max
Teto de músicas que a IA cria por dia — o seu freio de custo. 0 = sem limite (não recomendado).
renew_every_tracks
A cada N músicas tocadas, a IA aposenta a mais antiga e cria uma nova, renovando o repertório. 0 desliga.
about_every_minutes
De quanto em quanto tempo ela comenta que é uma rádio de IA. 0 desliga.
submit_hint / pix_suggested
Como o ouvinte participa e o valor sugerido de Pix que ela cita.
💸

Criar música consome créditos do provedor. Use sempre o autonomous_daily_max para limitar quantas músicas ela inventa por dia — especialmente junto com a renovação, senão o custo dispara.

2 Seu acervo, sem contexto

Este é o modo de rádio comum tocando as suas próprias músicas. Você aponta para uma pasta no computador e a locutora toca essas faixas, anuncia, lê os recados — e nunca diz que as músicas são feitas por IA. Nada é criado por IA aqui.

config.json · trecho "webradio"
"music_source": "C:\\Development\\postaudio.live\\musics\\live",
"ai_music": false,
"context": "",
"context_file": "",
"library_rotation": "shuffle",

"talk_every_tracks": 1,
"pix_every_minutes": 12,
"station_id_every_minutes": 20,
"about_every_minutes": 0,

"submit_hint": "Acesse postaudio.live e mande seu recado com um Pix",
"pix_suggested": "R$ 5"
music_source
A pasta do seu acervo. O programa varre todas as subpastas. É isto que liga este modo.
ai_music
Deixe false. (Apontar o music_source já desliga a IA, mas é bom deixar explícito.)
context / context_file
Ambos vazios — assim a locutora é uma apresentadora de rádio comum (sem personagem).
library_rotation
Como sortear as faixas: weighted (pasta maior toca mais — recomendado), flat (toca o acervo inteiro antes de repetir), even (tempo igual por pasta) ou shuffle (sorteio aleatório, priorizando as que ainda não tocaram; depois sorteia entre todas, sem repetir a última).
talk_every_tracks
A locutora fala a cada N músicas. 1 = fala em toda faixa.
station_id_every_minutes
De quanto em quanto tempo entra a vinheta da estação (a "chamada"). Atenção ao nome exato desta chave.
pix_every_minutes
De quanto em quanto tempo ela explica como mandar recado/Pix.
🎚️

As "chamadas" automáticas (vinheta e Pix) têm valores padrão mesmo se você não escrever nada: vinheta a cada 20 min e Pix a cada 12 min. Só mexa se quiser mudar o ritmo. Para deixar a locutora mais presente, baixe esses números.

3 Com contexto (assistente temático)

O "contexto" é onde você descreve quem a locutora é e o que ela pode falar. Em vez de uma apresentadora genérica, ela vira o personagem que você definir — por exemplo, "uma especialista em energia solar que só responde sobre esse assunto". As músicas continuam tocando (do seu acervo ou da IA); o que muda é a personalidade e o conhecimento dela e como ela responde aos recados.

Opção A — escrever o contexto direto no arquivo

config.json · trecho "webradio"
"music_source": "C:\\Development\\postaudio.live\\musics\\live",
"ai_music": false,

"context": "Você é uma IA especialista em placas solares e energia fotovoltaica. Responda apenas perguntas sobre esse tema, de forma simples e clara. Se a pergunta fugir do assunto, responda: Posso falar somente sobre energia solar.",
"context_max_chars": 5000,

"talk_every_tracks": 1,
"pix_every_minutes": 12,
"station_id_every_minutes": 20

Opção B — usar um arquivo de contexto (texto ou áudio)

Para textos grandes, é mais cômodo deixar o conteúdo num arquivo à parte e só apontar o caminho. O arquivo pode ser texto (.txt, .md, .html) ou até um áudio — neste caso o programa transcreve o áudio sozinho na primeira vez.

config.json · trecho "webradio"
"context_file": "C:\\Development\\postaudio.live\\context\\placasolar.md",
"context_max_chars": 8000
context
O texto que define o personagem e as regras dela. Vazio = locutora comum.
context_file
Caminho de um arquivo de contexto. Tem prioridade sobre o context acima: se preenchido, o conteúdo do arquivo vira o contexto. Aceita texto ou áudio.
context_max_chars
Tamanho máximo do contexto que a IA "enxerga". Padrão 5000. Use 0 para sem limite. Textos maiores que esse número são cortados.
✂️

Se o seu texto for maior que o context_max_chars, a parte que passar é ignorada — e a locutora não saberá responder sobre o que ficou de fora. Se o conteúdo é grande, aumente esse número (ex.: 8000 a 10000). Lembrando: contexto maior deixa cada fala um pouco mais lenta e mais cara, porque ele é usado em toda resposta.

💡

Quando há contexto, a locutora não força papo de música — ela fala do assunto que você definiu. Você pode combinar isto com a Seção 1 (IA criando música) ou com a Seção 2 (seu acervo). O mais comum é seu acervo + contexto.

O console manual: efeitos, tons e músicas

Além da locutora automática, o programa abre um painel no navegador (o "console") onde uma pessoa pode operar a rádio ao vivo: soltar efeitos sonoros, tocar tons rápidos e pôr músicas pra tocar na mão. Ele roda em paralelo à IA — quando você toca algo no console, a locutora cede a vez e volta sozinha depois.

🎛️

O console abre no endereço http://127.0.0.1:8080 (a porta vem de ui.port). É por ali que você dispara tudo desta seção com um clique.

É assim que ele aparece

Esta é a cara do console. Tudo o que aparece aqui é disparado com um clique (ou pelo teclado) e roda em paralelo à locutora — quando você toca algo, a IA cede a vez.

O console do programa: barra da IA no topo, placar da sessão, botão Tocar tudo, grade de efeitos sonoros, tons embutidos, biblioteca de músicas em loop e os efeitos de voz
O console do streamer, aberto em 127.0.0.1:8080.

De cima para baixo:

Barra da IA (topo)
IA NO AR com o ponto verde mostra que a locutora está no ar. Clicar nela ("toque para assumir o microfone") pausa a IA para você assumir; clicar de novo devolve o ar a ela. Só aparece com a webradio ligada.
Placar da sessão
na fila / tocados e, à direita, recados recebidos, total em Pix e o maior Pix. Zera toda vez que você reinicia o programa.
NO AR / FORA DO AR + Tocar tudo
A tarja diz se há um recado tocando agora. Tocar tudo dispara a fila em sequência, respeitando o corte (tempo máximo do recado) e o intervalo entre um e outro.
SONS
O soundboard: as abas são os pacotes (todos, Sons, virais…), com busca, volume e os pads de efeito. O caractere no canto de cada pad é a tecla de atalho.
TONS EMBUTIDOS
Os 10 tons prontos do programa (beep, blip, ding…), sempre disponíveis — os mesmos usados como vinheta das falas.
MÚSICAS
A sua biblioteca: ligue o loop e clique nas faixas para montar uma trilha sobrepondo loops; dá para salvar e recuperar essas montagens. As linhas são as pastas/gêneros.
VOZ
O efeito de voz aplicado ao recado na hora de tocar: normal, grave, agudo, eco, robô ou telefone.

Tons embutidos (vinhetas rápidas)

São 10 sons curtos já prontos no programa, sem precisar baixar nada. Servem como "carimbo" sonoro — tanto nos botões do console quanto como vinheta antes das falas da locutora. Os nomes são:

beepblippopdingbuzzboingrisercoinfanfaresadtrom

Você escolhe quais tons a locutora usa antes de cada tipo de fala — esta parte fica fora do console, no config.json:

config.json · trecho "webradio"
"stinger": "ding",
"stinger_credit": "coin",
"stinger_track": "blip",
"stinger_gain": 0.6
stinger
Tom das vinhetas da estação (identificação, "sobre a rádio", Pix).
stinger_credit
Tom dos momentos de Pix/crédito (pedido pago, recado).
stinger_track
Tom da entrada de músicas.
stinger_gain
Volume da vinheta em relação à voz, de 0 a 1 (padrão 0.6).
qualquer um deles
Use "none" para desligar aquela vinheta, ou "" para usar o tom padrão.

Efeitos sonoros (soundboard)

São os botões de efeito do console — aquelas "zoeiras" e sons temáticos que o operador solta ao vivo. Você monta a lista no campo sounds, e cada item pode ser um link da internet ou um arquivo do seu computador:

config.json · trecho "sounds"
"sounds": [
  "https://www.myinstants.com/media/sounds/vine-boom.mp3",
  "C:\\Development\\postaudio.live\\efeitos\\aplausos.mp3",
  { "url": "https://exemplo.com/tada.mp3", "gain": 0.6 },
  { "path": "C:\\Development\\postaudio.live\\myinstants\\viral", "name": "Virais", "gain": 0.8 }
]
  • Link (URL): o programa baixa e converte na primeira vez (depois fica em cache).
  • Arquivo do PC: aponte o caminho de um arquivo de áudio (mp3, wav, etc.).
  • Com volume próprio: use a forma { "url": "...", "gain": 0.6 }gain vai de 0 a 1 (deixe de fora para volume cheio).
  • Pasta inteira = uma aba: aponte uma pasta com "path" e ela vira um grupo de botões (aba) no console, com todos os áudios de dentro. O "name" é o nome da aba.
🗂️

Sons soltos (links e arquivos avulsos) ficam juntos numa aba chamada "Sons". Cada pasta que você adicionar vira uma aba separada, ótimo pra organizar por tema (memes, aplausos, suspense…). No console você ainda tem um botão para parar todos os efeitos de uma vez.

Músicas do console

O operador também pode tocar músicas na mão, separadas das que a locutora coloca. Elas saem de uma pasta no seu computador, e a organização é simples: cada subpasta vira uma aba, e os arquivos dentro são as faixas.

config.json · trecho "music"
"music": {
  "root": "C:\\Development\\postaudio.live\\musics\\live",
  "cache_dir": "C:\\Development\\postaudio.live\\musics\\cache",
  "volume": 1.0
}
root
A pasta das músicas do console. Cada subpasta vira uma aba; os arquivos são as faixas. Vazio = recurso desligado.
cache_dir
Onde o programa guarda as músicas já convertidas (pra tocar rápido na próxima vez). Pode deixar o padrão.
volume
Volume geral das músicas do console, de 0 a 1 (1.0 = cheio).
▶️

No console, clicar numa música toca; clicar de novo para. Dá pra tocar várias de uma vez e parar todas juntas. A conversão é feita sob demanda (só quando a faixa vai tocar pela primeira vez), então a primeira reprodução pode levar um instante a mais.

💡

Não confunda as três pastas de música: music.root é a do console manual (operador); webradio.music_source é o acervo da locutora automática (Seção 2); e webradio.music_dir é onde a IA salva as músicas que cria (Seção 1). Elas têm finalidades diferentes — mas nada impede que music.root e music_source apontem pra mesma pasta, se você quiser o mesmo acervo nos dois.

4 Controle de vídeo

O programa pode controlar um vídeo em sincronia com a locutora — usando o player VLC ou um vídeo dentro do OBS. Tudo isto fica no bloco video_control. Você pode usar VLC, OBS, ou os dois ao mesmo tempo. Por padrão vem tudo desligado.

📺

Quer que o programa escolha e toque videoclipes sozinho (em vez de só sincronizar um vídeo que você controla)? Isso é a Seção 5 — Rádio de vídeo. Esta seção (4) trata apenas de sincronizar um vídeo já controlado por você.

Três comportamentos que você liga ou desliga

  • Pausar quando a locutora fala (pause_on_speech) — a locutora/recado começa a falar e o vídeo pausa; ao terminar, volta a tocar.
  • Não tocar música com o vídeo (suppress_music) — enquanto o vídeo está rodando, a rádio não toca música (o som é o do vídeo). Quando o vídeo para ou acaba, a música volta sozinha.
  • Repetir o vídeo (loop) — quando o vídeo termina, ele recomeça do início.

Usando o VLC

config.json · bloco "video_control"
"video_control": {
  "vlc_enabled": true,
  "vlc_host": "127.0.0.1",
  "vlc_port": 8081,
  "vlc_password": "minhaSenha",
  "pause_on_speech": true,
  "suppress_music": true,
  "loop": true
}
▶️

Para o VLC aceitar o controle, abra-o uma vez assim (a senha precisa ser a mesma do vlc_password):

como abrir o VLC
vlc --extraintf http --http-host 127.0.0.1 --http-port 8081 --http-password minhaSenha
⚠️

Use a porta 8081 (como no exemplo), e não 8080 — a 8080 é usada pelo próprio painel do programa e dá conflito.

Usando o OBS

config.json · bloco "video_control"
"video_control": {
  "obs_enabled": true,
  "obs_host": "127.0.0.1",
  "obs_port": 4455,
  "obs_password": "senhaDoWebSocket",
  "obs_input": "Video",
  "pause_on_speech": true,
  "suppress_music": true,
  "loop": true
}
  • No OBS, ligue em Ferramentas → Configurações do Servidor WebSocket (porta padrão 4455) e use a senha de lá no obs_password.
  • obs_input precisa ser o nome exato da sua Fonte de Mídia (o vídeo) no OBS.
vlc_enabled / obs_enabled
Ligam cada um. Você pode ligar só um, ou os dois.
pause_on_speech
true = pausa o vídeo enquanto a locutora fala; false = o vídeo continua tocando por baixo da voz.
suppress_music
true = sem música enquanto o vídeo toca (o vídeo é o áudio); volta quando o vídeo para.
loop
true = o vídeo recomeça ao terminar.
obs_input
O nome exato da Fonte de Mídia no OBS que será controlada.
🎬

Para o vídeo voltar a tocar música depois (com suppress_music ligado), pare ou deixe o vídeo acabar — apenas pausar mantém a música em espera (porque pausar pode ser a própria locutora falando).

5 Rádio de vídeo: tocar videoclipes

Aqui a rádio deixa de tocar só som e passa a tocar vídeos: o programa escolhe um videoclipe da sua pasta, manda tocar e, quando ele acaba, volta para um vídeo padrão que fica em repetição (um "stand-by"). Ao abrir o programa, esse vídeo padrão já entra no ar. O som vem do próprio vídeo — a voz da locutora continua entrando por cima, normalmente.

🎬

Não confunda com a Seção 4: lá o programa só sincroniza um vídeo que você controla (pausa quando a locutora fala). Aqui é o programa que escolhe e toca os videoclipes da sua pasta, troca de um para o outro e cai no vídeo padrão entre eles. As duas coisas usam o mesmo player (OBS ou VLC), configurado no bloco video_control — veja a Seção 4 para ligar a conexão.

As três chaves novas

config.json · trecho "webradio"
"media_kind": "video",
"video_source": "C:\\Development\\postaudio.live\\videos",
"default_video": "C:\\Development\\postaudio.live\\videos\\standby.mp4"
media_kind
O que entra na programação: "audio" (padrão — só músicas), "video" (só videoclipes da pasta abaixo) ou "both" (mistura áudios e vídeos na mesma rotação).
video_source
A pasta dos videoclipes. O programa varre todas as subpastas — cada subpasta funciona como um "gênero" na rotação, igual ao acervo de músicas.
default_video
O vídeo padrão (stand-by): toca ao abrir o programa e sempre que um clipe termina, em repetição. Recomenda-se um vídeo curto e sem som (logo, vinheta). Veja o destaque abaixo.
🖥️

Para aparecer vídeo (clipes ou o padrão) é obrigatório ter um player ligado no video_control: OBS (com obs_input) ou VLC. Se você definir vídeo sem nenhum player, o programa não inicia e avisa o motivo. A conexão com o OBS/VLC é a mesma da Seção 4.

De onde vem o som

O áudio do videoclipe é o som do próprio vídeo (tocado pelo OBS/VLC) — o programa não toca uma música por baixo. A voz da locutora continua saindo pelo programa e se mistura ao vídeo. Quando ela fala, o vídeo abaixa o volume (no OBS) ou pausa (no VLC) e volta sozinho ao terminar.

O vídeo padrão vale em qualquer modo

O default_video funciona em qualquer media_kind — inclusive no "audio". Ou seja: dá para ter uma rádio só de áudio com um vídeo fixo de fundo (um visual, um logo animado) enquanto as músicas tocam por cima. Basta definir o default_video e ter um player ligado; o media_kind continua "audio" e só áudios alternam sobre o vídeo parado.

🔇

Use um default_video sem som. Ele só tem o volume abaixado quando a locutora falanão durante a música. Então, se o vídeo padrão tiver áudio, ele vai somar com a música que estiver tocando. Um loop mudo resolve.

Misturando áudio e vídeo ("both")

Com media_kind: "both", a rotação alterna sozinha: quando cai uma música, ela toca e o vídeo padrão fica na tela; quando cai um videoclipe, ele aparece com o próprio som; ao acabar, volta para o padrão. O ouvinte também pode pedir um clipe pelo nome, igual aos pedidos de música. Para equilibrar quanto toca de cada, use o library_rotation (Seção 2): weighted pesa pelo tamanho das pastas; flat toca tudo antes de repetir.

Deixando a janela do vídeo do jeito certo

Por padrão, o VLC redimensiona a janela a cada vídeo (cada clipe tem um tamanho). Para manter estável, abra o VLC em tela cheia (ou trave o tamanho da janela) e esconda o nome do arquivo:

como abrir o VLC (rádio de vídeo)
vlc --extraintf http --http-host 127.0.0.1 --http-port 8081 --http-password minhaSenha --fullscreen --no-video-title-show --no-osd
  • Prefere janela em vez de tela cheia? Troque --fullscreen por --no-qt-video-autoresize e maximize a janela uma vez — o vídeo passa a escalar para dentro dela.
  • No OBS isso não acontece (não há "janela"): a Fonte de Mídia renderiza dentro da cena. Para vídeos de tamanhos diferentes ficarem sempre iguais, clique na fonte com o botão direito → Transformar → Editar transformação → Caixa delimitadora: "Escalar para limites internos".
📺

Cada videoclipe toca uma vez e o vídeo padrão fica em repetição — isso é automático; você não precisa mexer no loop da Seção 4 (ele é ignorado aqui, assim como o pause_on_speech e o suppress_music). E, como nos modos de acervo, a locutora nunca diz que os vídeos são feitos por IA — ela apenas apresenta o que está tocando.

$ Reduzir custos sem perder funcionalidades

O programa usa serviços pagos por uso. Saber onde está o gasto ajuda a economizar sem desligar recursos. Abaixo, os custos em ordem — do maior para o menor — e os ajustes que cortam despesa mantendo tudo funcionando.

Onde está o gasto

1 · Criar música por IA
De longe o mais caro — mas só existe com ai_music: true. Se você usa o seu acervo (Seção 2), isto já está desligado e não custa nada.
2 · Vozes (TTS)
Cobradas por caractere falado (ElevenLabs/Resemble). São duas: a da locutora e a que lê os recados de texto (audio.tts). No modo de acervo próprio, é o seu maior gasto — e o que faz a cota acabar.
3 · Texto / cérebro
Cobrado por uso (Groq), mas barato mesmo com muitas falas. Pouco impacto.
4 · Transcrição do contexto
Só roda uma vez e fica em cache. Desprezível.

Economizando na voz (o caso mais comum)

Existem dois tipos de fala, e eles custam de formas diferentes:

  • Falas genéricas (vinheta, Pix, "sobre a rádio", comentários de faixa) já são gravadas uma vez e reaproveitadas do disco (o "cache de falas"). O gasto escondido aqui é a renovação: por padrão a IA gera uma fala nova de tempos em tempos, o tempo todo.
  • Falas personalizadas (a apresentação e a reação a cada recado) nunca são gravadas — são feitas na hora, toda vez. É o gasto que cresce com o uso, e é a parte mais valiosa.
💡

Detalhe importante: com o cache ligado e a renovação desligada, a frequência das chamadas não afeta o custo — uma vinheta tocada do disco 100 vezes custa zero a mais. Ou seja, você pode deixar a locutora bem presente sem gastar mais. Os intervalos (station_id_every_minutes, pix_every_minutes) são só ritmo, não dinheiro.

Os ajustes que economizam sem tirar nenhum recurso:

talk_cache_renew_every
Ponha 0: o repertório de falas genéricas é gerado uma vez e reproduzido para sempre. Acaba o gasto contínuo em segundo plano. Única "perda": menos variedade nas vinhetas.
elevenlabs_tts_model
Troque por um modelo mais barato (família Flash, ex.: eleven_flash_v2_5). Reduz o preço por caractere das falas da locutora (inclusive as reações aos recados), com pouca diferença de qualidade. Confirme as tarifas atuais no painel do ElevenLabs.
max_dj_talk_seconds
Corta o tamanho das falas. Baixar de 18 para ~14 reduz os caracteres de cada recado.
talk_cache_size
Menos variantes = menos gravações iniciais. Impacto pequeno (é gasto de uma vez só), mas ajuda.
bright_model
Deixe vazio (""): evita usar um cérebro mais caro para algumas falas.
🗣️

A voz que lê os recados de texto tem o seu próprio modelo, separado do da locutora: para baratear também essa parte, ponha um modelo Flash em audio.tts.elevenlabs_model (ex.: eleven_flash_v2_5).

Configuração de "economia máxima" (modo acervo próprio)

config.json · trecho "webradio"
"talk_cache": true,
"talk_cache_renew_every": 0,
"talk_cache_size": 5,
"elevenlabs_tts_model": "eleven_flash_v2_5",
"max_dj_talk_seconds": 14,
"bright_model": ""
🛑

O que NÃO cortar: não reduza a frequência nem desligue os recados para economizar — eles são a parte que dá valor à rádio. Para baratear os recados sem removê-los, use o modelo de voz mais barato e o corte de duração acima. O resto (vinhetas) já fica quase de graça com o cache.

🎵

Se você usa criação de música por IA (Seção 1), aí o maior gasto é gerar faixas. Os freios são autonomous_daily_max (teto por dia — o principal), renew_every_tracks (a renovação cria faixas novas o tempo todo — aumente bastante ou ponha 0), min_ready_tracks (buffer menor) e track_length_seconds (faixas mais curtas).

Como aplicar mudanças

  • Abra o config.json com um editor de texto (Bloco de Notas ou VS Code).
  • Altere os valores que quiser e salve o arquivo.
  • Reinicie o programa — as mudanças só valem depois disso.
  • Os nomes das configurações diferenciam maiúsculas de minúsculas e precisam ser escritos exatamente como nos exemplos.

Erros comuns

  • Vírgula sobrando ou faltando. No JSON, cada item é separado por vírgula — mas o último item de um bloco não leva vírgula antes do }. Esse é o erro nº 1: se houver, o programa nem inicia.
  • Aspas "curvas". Ao copiar de e-mail/Word, as aspas podem virar “curvas” e quebram o arquivo. Use sempre aspas retas (").
  • Nome de configuração errado. Ex.: o certo é station_id_every_minutes (e não "station_every_mins"). Nome errado é simplesmente ignorado.
  • A locutora parou de responder recados. Geralmente são os créditos do serviço de voz (da locutora e/ou da narração dos recados — ElevenLabs ou Resemble) que acabaram. As falas curtas já gravadas continuam, mas as respostas personalizadas param. Os recados de texto não se perdem: ficam aguardando e são narrados assim que os créditos voltam. Recarregue os créditos.
  • O programa não inicia e reclama de audio.tts. A voz que lê os recados de texto é obrigatória: preencha o trecho "audio""tts" com o provedor e a voz (ElevenLabs: chave + voice_id; Resemble: token + resemble_voice_uuid). Veja "A voz da locutora".
  • O som some quando chega uma notificação (WhatsApp/Discord/Teams). É o Windows abaixando o áudio dos outros programas quando um app de mensagens fica ativo (o “ducking de Comunicações”) — não é defeito do programa. Vá em Som → aba Comunicações → “Não fazer nada” (rode mmsys.cpl) e feche o app de mensagens pela bandeja (clique com o botão direito no ícone → Sair; só fechar a janela não basta — ele continua ativo no fundo). Alternativa à prova de tudo: mande a saída do programa para um cabo de áudio virtual e capture esse cabo no OBS — por ser um dispositivo separado, o Windows não o abaixa.

Na dúvida se o arquivo está válido, cole o conteúdo em um validador de JSON on-line (por exemplo, jsonlint.com) — ele aponta a linha exata de qualquer erro antes de você reiniciar o programa.