Pular para o conteúdo

IrodoriTTS

Gere fala em japonês natural com clonagem de voz, VoiceDesign baseado em legendas e marcações expressivas de emojis usando o Irodori-TTS v4.1.

O Irodori-TTS v4.1 é um modelo de conversão de texto em fala focado em japonês que suporta tanto clonagem de voz quanto VoiceDesign descrito em texto em um único checkpoint. O TomoriBot conecta-se ao Irodori por meio do wrapper FastAPI local em servers/tts/irodoritts/, usando por padrão Aratako/Irodori-TTS-v4.1-Small.

Checkpoints compatíveis do Hugging Face podem ser selecionados com IRODORI_TTS_MODEL_ID, incluindo fine-tunes da comunidade como phasefield-audio/Irodori-TTS-v4.1-Anime.

O Irodori utiliza uv para o gerenciamento de dependências e do backend PyTorch. O servidor mantém seu próprio pyproject.toml com dependências fixadas do Irodori e dacvae para instalações reproduzíveis. Instale o uv primeiro e, em seguida, execute o script de configuração a partir da raiz do repositório do TomoriBot:

Terminal window
.\servers\tts\irodoritts\install-irodori.ps1 cu128
.\servers\tts\irodoritts\.venv\Scripts\python.exe servers\tts\irodoritts\server.py
Terminal window
bash servers/tts/irodoritts/install-irodori.sh cu128
servers/tts/irodoritts/.venv/bin/python servers/tts/irodoritts/server.py

Os scripts de configuração criam servers/tts/irodoritts/.venv, portanto o comando bun run launch --irodoritts continua funcionando após a instalação.

Backends disponíveis:

  • cu128: NVIDIA CUDA 12.8 no Windows e Linux
  • cpu: apenas CPU, ou macOS CPU/MPS via PyPI
  • rocm: AMD ROCm no Linux/WSL
  • xpu: Intel XPU no Windows e Linux

A URL padrão do endpoint é http://127.0.0.1:8013.

O modelo padrão é Aratako/Irodori-TTS-v4.1-Small. Você pode selecionar outros checkpoints oficiais (incluindo o modelo Large de 3,29B parâmetros e suas variantes quantizadas), fine-tunes da comunidade ou arquivos locais de checkpoint por meio de variáveis de ambiente.

Modelo / IRODORI_TTS_MODEL_IDParâmetrosTamanho do checkpointVRAM recomendadaNotas
Aratako/Irodori-TTS-v4.1-Small766M1.5 GB4-6 GBModelo padrão: inferência rápida e baixo uso de memória.
Aratako/Irodori-TTS-v4-Large3.29B12.25 GB10-14 GBModelo Large completo sem quantização com base de texto T5Gemma 2.
Aratako/Irodori-TTS-v4-Large-Quantized/float8-weight-only3.29B3.58 GB6-8 GBPesos em FP8 com ativações em BF16: recomendado para NVIDIA Ada (série RTX 40) e mais recentes.
Aratako/Irodori-TTS-v4-Large-Quantized/int8-weight-only3.29B3.58 GB6-8 GBPesos em INT8 de uso geral com computação em BF16 no NVIDIA CUDA.
Aratako/Irodori-TTS-v4-Large-Quantized/int4-weight-only3.29B2.75 GB5-6 GBVariante Large mais compacta: requer NVIDIA Ampere (série RTX 30) ou mais recente.
phasefield-audio/Irodori-TTS-v4.1-Anime766M1.5 GB4-6 GBFine-tune da comunidade para interpretação de fala estilo anime.

Para clonagem de voz, a versão Small oferece qualidade similar com inferência mais rápida. A Large conta com um codificador de texto mais robusto e segue as descrições de VoiceDesign com maior precisão.

O servidor lê o arquivo .env da raiz do repositório ou um .env local em servers/tts/irodoritts/.env.

Adicione ao seu .env na raiz do TomoriBot:

IRODORI_TTS_MODEL_ID="phasefield-audio/Irodori-TTS-v4.1-Anime"

No Windows PowerShell:

Terminal window
$env:IRODORI_TTS_MODEL_ID = "phasefield-audio/Irodori-TTS-v4.1-Anime"
.\servers\tts\irodoritts\.venv\Scripts\python.exe servers\tts\irodoritts\server.py

No Linux Bash:

Terminal window
IRODORI_TTS_MODEL_ID=phasefield-audio/Irodori-TTS-v4.1-Anime \
servers/tts/irodoritts/.venv/bin/python servers/tts/irodoritts/server.py

Se tiver baixado um arquivo de checkpoint (.pt ou .safetensors) localmente, aponte IRODORI_TTS_CHECKPOINT para o caminho dele:

IRODORI_TTS_CHECKPOINT="/path/to/custom_checkpoint.pt"

A versão atual do Irodori baixa o checkpoint juntamente com quaisquer recursos de tokenizador incluídos no repositório do Hugging Face. Variantes em subpastas do Hugging Face também são suportadas por IRODORI_TTS_MODEL_ID quando disponibilizadas no repositório do modelo.

Execute /providers, selecione Adicionar Novo Endpoint Personalizado e use a compatibilidade de API de fala:

  • Compatibilidade de API: tts-clone
  • endpoint_url: http://127.0.0.1:8013

Depois de salvar a conexão, selecione-a e use o menu suspenso de modelos para adicionar um modelo de Fala. Para a v4.1, as configurações recomendadas são:

  • Modo de Origem de Voz: Auto
  • Estilo de Marcação de Script: Emoji

A opção Auto permite que o mesmo endpoint do Irodori atenda a ambos os modos de voz do TomoriBot, garantindo que as indicações de emoção sejam preservadas:

  • Personas com uma amostra de voz definida em Persona > Voz enviam um clipe de referência armazenado para clonagem de voz.
  • Personas com um prompt de VoiceDesign definido em Persona > Voz enviam o prompt em linguagem natural como condicionamento de legenda do Irodori.

Você ainda pode escolher Voice Clone como o Modo de Origem de Voz se desejar apenas clonagem por áudio de referência.

Use /providers para registrar o endpoint e configurar o modelo. Em seguida, abra /config > Modelos > Alternar Modelos para selecionar e ativar o endpoint registrado.

  1. Prepare um clipe de voz limpo em japonês com apenas um locutor e sem música de fundo. Cerca de 30 segundos já são suficientes: após esse limite, o áudio adicional traz pouco ganho de fidelidade de timbre, aumentando o tamanho do upload e o tempo de inferência.
  2. Abra /config em Modelos > Parâmetros de TTS e Vozes e envie o clipe.
  3. Abra /config em Persona > Voz, depois selecione a persona e a amostra de voz.

O Irodori adota por padrão um limite de referência de 120 segundos e trunca clipes maiores. Defina IRODORI_MAX_REF_SECONDS para alterar esse limite.

O servidor codifica cada clipe de referência uma vez e mantém o resultado em servers/tts/irodoritts/reference-cache/, então solicitações repetidas pulam essa etapa. Substituir o clipe de uma persona cria uma nova entrada, e as entradas antigas permanecem até você excluir a pasta.

  1. Abra /config em Persona > Voz.
  2. Selecione a persona.
  3. Digite uma descrição em linguagem natural da voz e da entonação desejadas.

O TomoriBot envia esse prompt como instruct; o wrapper do Irodori o mapeia para o condicionamento caption da v4.1. Solicitações de VoiceDesign não requerem um clipe de referência armazenado.

O TomoriBot remove a sintaxe de emojis personalizados do Discord antes de enviar o texto ao TTS. Com script_markup: emoji, emojis Unicode são preservados para o condicionamento de texto do Irodori.

O IrodoriTTS suporta anotações de emojis no texto de entrada para modular efeitos sonoros, estilos de fala e expressões emocionais. Com o Estilo de Marcação de Script do TomoriBot configurado como Emoji, esses emojis Unicode são mantidos e enviados ao Irodori.

Para consultar a lista de emojis suportados e seus significados, consulte as anotações de emojis do projeto upstream. Emojis funcionam como sugestões de estilo e os resultados podem variar.

Textos longos são divididos em blocos e retornados como uma única mensagem de voz. Solicitações muito extensas podem ultrapassar o limite padrão de 240 segundos de tempo limite; ajuste TTS_SYNTHESIZE_TIMEOUT_MS se necessário. Defina IRODORI_CHUNKING_ENABLED=false para desativar a divisão ou IRODORI_CHUNK_MIN_CHARS para regular o limite de quebra.

O padrão permanece a amostragem linear de 40 passos de alta qualidade do Irodori. Para menor latência, experimente o Sway Sampling com menos passos:

Terminal window
$env:IRODORI_NUM_STEPS = "6"
$env:IRODORI_T_SCHEDULE_MODE = "sway"
$env:IRODORI_SWAY_COEFF = "-1.0"

Trata-se de um equilíbrio entre qualidade e velocidade de inferência, portanto teste com o checkpoint e as vozes escolhidas antes de adotar definitivamente.

O modo de baixa latência torna cada frase cerca de 3-4x mais rápida em uma GPU NVIDIA com os mesmos 40 passos e configurações de voz, então não sacrifica a qualidade da forma que a Amostragem Sway faz. Ative no .env:

IRODORI_COMPILE_MODE="cudagraphs"

cudagraphs é o modo mais rápido. compile é cerca de 2x mais rápido que o padrão; experimente se o cudagraphs não funcionar bem na sua GPU. Ambos precisam do backend cu128, e o servidor se recusa a iniciar com qualquer um dos modos em outros backends.

O que esperar:

  • O servidor aquece antes de relatar que está pronto. A primeira inicialização leva cerca de 2-4 minutos; inicializações posteriores levam cerca de 1-2 minutos porque os kernels compilados ficam em cache no disco. bun run launch --irodoritts aguarda até 5 minutos; em uma GPU mais lenta, aumente esse limite com TOMORI_TTS_STARTUP_TIMEOUT_MS (em milissegundos).
  • A primeira solicitação com um novo comprimento de frase ou um novo clipe de voz adiciona uma fração de segundo, apenas uma vez.
  • O uso de VRAM diminui ligeiramente.
  • O áudio não é idêntico bit a bit ao modo padrão para a mesma seed. Nos testes soou equivalente, então ouça algumas falas com suas próprias vozes antes de confiar nele.

No Windows, o modo também precisa do compilador Microsoft C++:

  1. Instale o Visual Studio Build Tools com a carga de trabalho Desenvolvimento para desktop com C++.
  2. Execute novamente .\servers\tts\irodoritts\install-irodori.ps1 cu128 para que o pacote Triton para Windows seja instalado.
  3. Inicie o servidor (ou bun run launch --irodoritts) a partir do Developer PowerShell for VS, ou carregue o compilador em um PowerShell comum primeiro:
Terminal window
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
$vs = & $vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
cmd /c "`"$vs\VC\Auxiliary\Build\vcvars64.bat`" >nul && set" | ForEach-Object {
if ($_ -match "^([^=]+)=(.*)$") { Set-Item -Path "Env:$($Matches[1])" -Value $Matches[2] }
}

Se o compilador ou o Triton estiverem ausentes, o servidor será interrompido na inicialização e informará qual deles está faltando.

VariávelPadrãoFinalidade
IRODORI_TTS_MODEL_IDAratako/Irodori-TTS-v4.1-SmallRepositório de modelos do Hugging Face ou subpasta suportada
IRODORI_TTS_CHECKPOINTnão definidoCheckpoint local .pt ou .safetensors opcional; substitui o modelo do Hugging Face
TOMORI_TTS_HOST127.0.0.1Endereço de vinculação do servidor; consulte Acesso à rede
IRODORI_TTS_PORT8013Porta do servidor
IRODORI_MODEL_DEVICEautoDispositivo do modelo (auto, cuda, cpu, mps, xpu)
IRODORI_CODEC_DEVICEautoDispositivo do codec
IRODORI_MODEL_PRECISIONbf16 em CUDA, caso contrário fp32Precisão do modelo
IRODORI_CODEC_PRECISIONfp32Precisão do codec
IRODORI_COMPILE_MODEoffoff, compile ou cudagraphs; consulte Modo de baixa latência
IRODORI_NUM_STEPS40Passos de amostragem de Euler
IRODORI_T_SCHEDULE_MODElinearCronograma de amostragem (linear ou sway)
IRODORI_SWAY_COEFF-1.0Coeficiente sway ao usar o cronograma sway
IRODORI_CFG_SCALE_TEXT3.0Escala de orientação do texto
IRODORI_CFG_SCALE_CAPTION3.0Escala de orientação de legenda / VoiceDesign
IRODORI_CFG_SCALE_SPEAKER5.0Escala de orientação do locutor de referência
IRODORI_MAX_REF_SECONDSpadrão do checkpointLimite opcional na duração do áudio de referência
IRODORI_CHUNKING_ENABLEDtrueDivide textos longos nos limites de pontuação permitidos e concatena os blocos gerados
IRODORI_CHUNK_MIN_CHARS80Mínimo de caracteres sem espaço antes da divisão em limites fortes de frase; vírgulas funcionam como alternativa por volta de 1,5x esse valor