Eronponce/tts-ai-reader

0

stars

3

commits

Python

primary language

Jul 7, 2026

updated

README

TTS Reader — leitor de capítulos com narração local

Aplicação web local que transforma texto (capítulos de livros, web novels, etc.) em narração com voz neural, rodando 100% na sua máquina. Cole o texto, aperte play e acompanhe a leitura com highlight palavra a palavra sincronizado com o áudio.

Funcionalidades

  • Narração em streaming: o texto é dividido em trechos de ~180 caracteres (abaixo do limite de 203 do XTTS para pt) e o áudio é gerado em segundo plano enquanto você ouve — não precisa esperar o capítulo inteiro renderizar.
  • Controle de qualidade automático: cada trecho gerado é transcrito com o Whisper; se a transcrição não bater com o texto (sinal de alucinação/ruído), o trecho é gerado de novo (até 3 tentativas, fica a melhor).
  • Download do capítulo completo: quando todos os trechos estão prontos, um botão baixa o áudio inteiro em MP3 (ou WAV via /api/download?format=wav).
  • Highlight palavra a palavra: cada palavra acende na tela no momento em que é falada. O alinhamento é feito transcrevendo o áudio gerado com o Whisper e casando as palavras com o texto original.
  • Clique para navegar: clicar em qualquer palavra pula a narração para aquele ponto.
  • Modo multi-vozes (roteiro): cole um roteiro no formato [PERSONAGENS]/[ROTEIRO] e cada personagem ganha uma voz própria, atribuída de forma determinística e persistida em characters.json (edite o arquivo para trocar a voz de alguém). Use o TEMPLATE_IA.md como prompt em qualquer LLM para converter um capítulo comum nesse formato.
  • Controle de velocidade (0.75x a 2x) e barra de progresso da geração.
  • Economia de GPU: se a aba ficar fechada/inativa por 15 segundos (heartbeat), a geração pausa sozinha e retoma quando você volta.
  • Geração paralela: no XTTS, um pool de instâncias do modelo (padrão 2, ajuste com a variável de ambiente XTTS_INSTANCES) gera vários trechos ao mesmo tempo, enquanto o alinhamento roda em paralelo no faster-whisper (CTranslate2, ~4x mais rápido que o openai-whisper). Se a VRAM acabar, reduza XTTS_INSTANCES para 1.

Motores de voz

MotorModeloMulti-vozesObservações
XTTS-v2 (padrão)Coqui XTTS-v2✅ (58 speakers embutidos)Autoregressivo; alucinações mitigadas por chunks curtos, sampling conservador e verificação com Whisper
TADAHumeAI/tada-3b-ml✅ (clonagem)Alinhamento texto-áudio forçado: não pula nem inventa palavras
F5-TTSfirstpixel/F5-TTS-pt-br❌ (voz única de referência)Finetune pt-BR com clonagem da voz em f5_reference.wav

O modo multi-vozes do TADA clona os speakers embutidos do XTTS a partir de áudios de referência em voice_refs/, gerados uma única vez com:

python generate_voice_refs.py              # todas as 58 vozes (~5 min)
python generate_voice_refs.py --registry   # só as vozes já usadas no characters.json

Requisitos

  • Windows (testado) com GPU NVIDIA (recomendado ~16 GB de VRAM; roda em CPU, mas fica lento)
  • Python 3.11+
  • Os modelos são baixados automaticamente do Hugging Face no primeiro uso

Instalação

python -m venv .venv
.venv\Scripts\activate
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu128
pip install fastapi uvicorn coqui-tts f5-tts hume-tada openai-whisper faster-whisper librosa soundfile

Uso

run.bat        # ou: .\run.ps1

Abre http://127.0.0.1:8000 no navegador. Cole o texto (puro ou no formato de roteiro), escolha o motor e clique em Processar texto.

Estrutura

server.py              # API FastAPI: sessão de narração, worker de geração, seek, heartbeat
tts_engine.py          # chunking com spans + síntese com alinhamento (lock de GPU)
alignment.py           # alinhamento palavra-tempo via Whisper + corte de alucinação final
characters.py          # parser do formato de roteiro e registro personagem -> voz
engines/               # xtts_engine, f5tts_engine, tada_engine (interface comum)
static/                # frontend (HTML/CSS/JS puro)
generate_voice_refs.py # gera os áudios de referência para clonagem no TADA
TEMPLATE_IA.md         # prompt pronto para converter capítulos em roteiro multi-vozes

Arquivos gerados em runtime (fora do git): characters.json (registro de vozes), voice_refs/ (áudios de referência e cache de prompts do TADA).

Contributors

Eronponce

3 commits

Eronponce/tts-ai-reader

0

stars

3

commits

Python

primary language

Jul 7, 2026

updated

README

TTS Reader — leitor de capítulos com narração local

Aplicação web local que transforma texto (capítulos de livros, web novels, etc.) em narração com voz neural, rodando 100% na sua máquina. Cole o texto, aperte play e acompanhe a leitura com highlight palavra a palavra sincronizado com o áudio.

Funcionalidades

  • Narração em streaming: o texto é dividido em trechos de ~180 caracteres (abaixo do limite de 203 do XTTS para pt) e o áudio é gerado em segundo plano enquanto você ouve — não precisa esperar o capítulo inteiro renderizar.
  • Controle de qualidade automático: cada trecho gerado é transcrito com o Whisper; se a transcrição não bater com o texto (sinal de alucinação/ruído), o trecho é gerado de novo (até 3 tentativas, fica a melhor).
  • Download do capítulo completo: quando todos os trechos estão prontos, um botão baixa o áudio inteiro em MP3 (ou WAV via /api/download?format=wav).
  • Highlight palavra a palavra: cada palavra acende na tela no momento em que é falada. O alinhamento é feito transcrevendo o áudio gerado com o Whisper e casando as palavras com o texto original.
  • Clique para navegar: clicar em qualquer palavra pula a narração para aquele ponto.
  • Modo multi-vozes (roteiro): cole um roteiro no formato [PERSONAGENS]/[ROTEIRO] e cada personagem ganha uma voz própria, atribuída de forma determinística e persistida em characters.json (edite o arquivo para trocar a voz de alguém). Use o TEMPLATE_IA.md como prompt em qualquer LLM para converter um capítulo comum nesse formato.
  • Controle de velocidade (0.75x a 2x) e barra de progresso da geração.
  • Economia de GPU: se a aba ficar fechada/inativa por 15 segundos (heartbeat), a geração pausa sozinha e retoma quando você volta.
  • Geração paralela: no XTTS, um pool de instâncias do modelo (padrão 2, ajuste com a variável de ambiente XTTS_INSTANCES) gera vários trechos ao mesmo tempo, enquanto o alinhamento roda em paralelo no faster-whisper (CTranslate2, ~4x mais rápido que o openai-whisper). Se a VRAM acabar, reduza XTTS_INSTANCES para 1.

Motores de voz

MotorModeloMulti-vozesObservações
XTTS-v2 (padrão)Coqui XTTS-v2✅ (58 speakers embutidos)Autoregressivo; alucinações mitigadas por chunks curtos, sampling conservador e verificação com Whisper
TADAHumeAI/tada-3b-ml✅ (clonagem)Alinhamento texto-áudio forçado: não pula nem inventa palavras
F5-TTSfirstpixel/F5-TTS-pt-br❌ (voz única de referência)Finetune pt-BR com clonagem da voz em f5_reference.wav

O modo multi-vozes do TADA clona os speakers embutidos do XTTS a partir de áudios de referência em voice_refs/, gerados uma única vez com:

python generate_voice_refs.py              # todas as 58 vozes (~5 min)
python generate_voice_refs.py --registry   # só as vozes já usadas no characters.json

Requisitos

  • Windows (testado) com GPU NVIDIA (recomendado ~16 GB de VRAM; roda em CPU, mas fica lento)
  • Python 3.11+
  • Os modelos são baixados automaticamente do Hugging Face no primeiro uso

Instalação

python -m venv .venv
.venv\Scripts\activate
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu128
pip install fastapi uvicorn coqui-tts f5-tts hume-tada openai-whisper faster-whisper librosa soundfile

Uso

run.bat        # ou: .\run.ps1

Abre http://127.0.0.1:8000 no navegador. Cole o texto (puro ou no formato de roteiro), escolha o motor e clique em Processar texto.

Estrutura

server.py              # API FastAPI: sessão de narração, worker de geração, seek, heartbeat
tts_engine.py          # chunking com spans + síntese com alinhamento (lock de GPU)
alignment.py           # alinhamento palavra-tempo via Whisper + corte de alucinação final
characters.py          # parser do formato de roteiro e registro personagem -> voz
engines/               # xtts_engine, f5tts_engine, tada_engine (interface comum)
static/                # frontend (HTML/CSS/JS puro)
generate_voice_refs.py # gera os áudios de referência para clonagem no TADA
TEMPLATE_IA.md         # prompt pronto para converter capítulos em roteiro multi-vozes

Arquivos gerados em runtime (fora do git): characters.json (registro de vozes), voice_refs/ (áudios de referência e cache de prompts do TADA).

Contributors

Eronponce

3 commits

Languages

Python

74.3%

JavaScript

17.7%

CSS

4.6%

HTML

2.9%