Skip to content

IrodoriTTS

Genera voz japonesa natural con clonación de voz, VoiceDesign basado en subtítulos y marcado expresivo con emojis mediante Irodori-TTS v4.1.

Irodori-TTS v4.1 es un modelo de texto a voz enfocado en japonés que admite tanto clonación de voz como VoiceDesign descrito por texto en un solo checkpoint. TomoriBot se conecta a Irodori a través del contenedor local con FastAPI en servers/tts/irodoritts/, utilizando por defecto Aratako/Irodori-TTS-v4.1-Small.

Se pueden seleccionar checkpoints compatibles de Hugging Face mediante IRODORI_TTS_MODEL_ID, incluidos ajustes finos de la comunidad como phasefield-audio/Irodori-TTS-v4.1-Anime.

Irodori utiliza uv para la gestión de dependencias y del backend de PyTorch. El servidor mantiene su propio pyproject.toml con dependencias fijadas de Irodori y dacvae para instalaciones reproducibles. Instala uv primero y luego ejecuta el script de instalación desde la raíz del repositorio de 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

Los scripts de instalación crean servers/tts/irodoritts/.venv, por lo que bun run launch --irodoritts continúa funcionando después de la instalación.

Backends disponibles:

  • cu128: NVIDIA CUDA 12.8 en Windows y Linux
  • cpu: solo CPU, o CPU/MPS en macOS mediante PyPI
  • rocm: AMD ROCm en Linux/WSL
  • xpu: Intel XPU en Windows y Linux

La URL del punto de conexión predeterminado es http://127.0.0.1:8013.

El modelo predeterminado es Aratako/Irodori-TTS-v4.1-Small. Puedes seleccionar otros checkpoints oficiales (incluido el modelo Large de 3.29B parámetros y sus variantes cuantizadas), ajustes finos de la comunidad o archivos de checkpoint locales mediante variables de entorno.

Modelo / IRODORI_TTS_MODEL_IDParámetrosTamaño del checkpointVRAM recomendadaNotas
Aratako/Irodori-TTS-v4.1-Small766M1.5 GB4-6 GBModelo predeterminado: inferencia rápida y bajo consumo de memoria.
Aratako/Irodori-TTS-v4-Large3.29B12.25 GB10-14 GBModelo Large completo sin cuantizar con base de texto T5Gemma 2.
Aratako/Irodori-TTS-v4-Large-Quantized/float8-weight-only3.29B3.58 GB6-8 GBPesos FP8 con activaciones en BF16: recomendado para NVIDIA Ada (serie RTX 40) y superiores.
Aratako/Irodori-TTS-v4-Large-Quantized/int8-weight-only3.29B3.58 GB6-8 GBPesos INT8 de uso general con cómputo BF16 en NVIDIA CUDA.
Aratako/Irodori-TTS-v4-Large-Quantized/int4-weight-only3.29B2.75 GB5-6 GBLa variante de Large más compacta: requiere NVIDIA Ampere (serie RTX 30) o superior.
phasefield-audio/Irodori-TTS-v4.1-Anime766M1.5 GB4-6 GBAjuste fino de la comunidad para entonación al estilo anime.

Para la clonación de voz, Small ofrece una calidad similar con inferencia más veloz. Large cuenta con un codificador de texto más potente y sigue las descripciones de VoiceDesign con mayor apego.

El servidor lee el archivo .env en la raíz del repositorio o un .env local en servers/tts/irodoritts/.env.

Añade a tu archivo .env en la raíz de TomoriBot:

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

En 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

En 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

Si descargaste un archivo de checkpoint (.pt o .safetensors) localmente, define IRODORI_TTS_CHECKPOINT con su ruta:

IRODORI_TTS_CHECKPOINT="/ruta/a/checkpoint_personalizado.pt"

La versión actual de Irodori descarga el checkpoint junto con los recursos del tokenizador incluidos en el repositorio de Hugging Face. Las variantes en subcarpetas de Hugging Face también son compatibles con IRODORI_TTS_MODEL_ID cuando el repositorio del modelo las proporciona.

Ejecuta /providers, elige + Agregar nuevo punto de conexión personalizado y usa la compatibilidad de API de voz:

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

Tras guardar la conexión, selecciónala y usa su menú desplegable de modelos para agregar un modelo de voz. Para v4.1, la configuración recomendada es:

  • Modo de fuente de voz: Automático
  • Estilo de marcado de script: Emoji

Automático permite que el mismo punto de conexión de Irodori admita ambos modos de voz de TomoriBot, conservando las indicaciones emocionales al enviar:

  • Las personas con una muestra de voz asignada en Persona > Voz envían el clip de referencia almacenado para clonación de voz.
  • Las personas con un prompt de VoiceDesign configurado en Persona > Voz envían la indicación guardada en lenguaje natural como acondicionamiento por subtítulo (caption) de Irodori.

Puedes seguir utilizando Clon de voz como modo de fuente de voz si únicamente deseas clonación mediante audio de referencia.

Usa /providers para el registro del punto de conexión y la configuración del modelo. Luego abre /config > Modelos > Cambiar modelos para seleccionar y activar el punto de conexión registrado.

  1. Prepara un clip de voz limpio en japonés con un solo hablante y sin música de fondo. Alrededor de 30 segundos es suficiente: más allá de ese punto, el audio adicional aporta poca fidelidad de timbre y aumenta el tamaño de subida y el tiempo de inferencia.
  2. Abre /config en Modelos > Parámetros y voces TTS y sube el clip.
  3. Abre /config en Persona > Voz, y elige la persona y la muestra de voz.

Irodori aplica por defecto un límite de referencia de 120 segundos y recorta los clips más largos. Define IRODORI_MAX_REF_SECONDS para modificar este límite.

El servidor codifica cada clip de referencia una vez y guarda el resultado en servers/tts/irodoritts/reference-cache/, por lo que las solicitudes repetidas omiten ese paso. Reemplazar el clip de una persona crea una entrada nueva, y las entradas anteriores permanecen hasta que elimines la carpeta.

  1. Abre /config en Persona > Voz.
  2. Elige la persona.
  3. Ingresa una descripción en lenguaje natural de la voz y entonación deseadas.

TomoriBot envía este texto como instruct; el contenedor de Irodori lo asigna a la condición caption de v4.1. Las solicitudes de VoiceDesign no requieren un clip de referencia guardado.

TomoriBot elimina la sintaxis de emojis personalizados de Discord antes de enviar texto a TTS. Con script_markup: emoji, los emojis Unicode se conservan para el acondicionamiento textual de Irodori.

IrodoriTTS admite anotaciones con emojis en el texto de entrada para modular efectos de sonido, estilos de habla y expresiones emocionales. Al configurar el Estilo de marcado de script de TomoriBot en Emoji, estos emojis Unicode se conservan y se transmiten a Irodori.

Para conocer los emojis compatibles y sus significados, consulta las anotaciones de emoji en origen. Los emojis actúan como sugerencias de estilo y los resultados pueden variar.

Los textos extensos se dividen en fragmentos y se devuelven como un solo mensaje de voz. Las solicitudes largas pueden exceder el tiempo de espera predeterminado de 240 segundos; ajusta TTS_SYNTHESIZE_TIMEOUT_MS si es necesario. Define IRODORI_CHUNKING_ENABLED=false para desactivar la división o IRODORI_CHUNK_MIN_CHARS para modificar el umbral de corte.

El valor predeterminado sigue siendo el muestreo lineal de 40 pasos de alta calidad de Irodori. Para reducir la latencia, prueba el muestreo Sway con menos pasos:

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

Este ajuste intercambia calidad de inferencia por velocidad, por lo que conviene probarlo con tu checkpoint y voces elegidos antes de adoptarlo permanentemente.

El modo de baja latencia hace que cada oración sea entre 3 y 4 veces más rápida en una GPU NVIDIA con los mismos 40 pasos y ajustes de voz, por lo que no sacrifica calidad a diferencia del muestreo Sway. Actívalo en .env:

IRODORI_COMPILE_MODE="cudagraphs"

cudagraphs es el modo más rápido. compile es aproximadamente 2 veces más rápido que el valor predeterminado; pruébalo si cudagraphs no funciona bien en tu GPU. Ambos requieren el backend cu128, y el servidor no iniciará con ninguno de estos modos en otros backends.

Qué esperar:

  • El servidor realiza un precalentamiento antes de reportarse listo. El primer inicio tarda entre 2 y 4 minutos; los inicios posteriores tardan entre 1 y 2 minutos porque los kernels compilados se guardan en caché en el disco. bun run launch --irodoritts espera hasta 5 minutos; en una GPU más lenta, aumenta ese límite con TOMORI_TTS_STARTUP_TIMEOUT_MS (en milisegundos).
  • La primera solicitud con una nueva longitud de oración o un nuevo clip de voz añade una fracción de segundo, una sola vez.
  • El uso de VRAM disminuye ligeramente.
  • El audio no es idéntico a nivel de bits al del modo predeterminado para la misma semilla. En las pruebas sonó equivalente, así que escucha algunas frases con tus propias voces antes de depender de él.

En Windows, este modo también necesita el compilador de C++ de Microsoft:

  1. Instala Visual Studio Build Tools con la carga de trabajo Desarrollo para el escritorio con C++.
  2. Vuelve a ejecutar .\servers\tts\irodoritts\install-irodori.ps1 cu128 para instalar el paquete Triton para Windows.
  3. Inicia el servidor (o bun run launch --irodoritts) desde Developer PowerShell for VS, o carga primero el compilador en una instancia normal de PowerShell:
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] }
}

Si falta el compilador o Triton, el servidor se detiene al iniciar e indica cuál de ellos falta.

VariablePredeterminadoPropósito
IRODORI_TTS_MODEL_IDAratako/Irodori-TTS-v4.1-SmallRepositorio del modelo en Hugging Face o fuente compatible de repositorio/subcarpeta
IRODORI_TTS_CHECKPOINTno definidaCheckpoint local opcional .pt o .safetensors; tiene prioridad sobre el modelo de Hugging Face
TOMORI_TTS_HOST127.0.0.1Dirección de escucha del servidor; consulta Acceso a la red
IRODORI_TTS_PORT8013Puerto del servidor
IRODORI_MODEL_DEVICEautoDispositivo para el modelo (auto, cuda, cpu, mps, xpu)
IRODORI_CODEC_DEVICEautoDispositivo para el códec
IRODORI_MODEL_PRECISIONbf16 en CUDA, de lo contrario fp32Precisión del modelo
IRODORI_CODEC_PRECISIONfp32Precisión del códec
IRODORI_COMPILE_MODEoffoff, compile o cudagraphs; consulta Modo de baja latencia
IRODORI_NUM_STEPS40Pasos de muestreo de Euler
IRODORI_T_SCHEDULE_MODElinearEsquema de muestreo (linear o sway)
IRODORI_SWAY_COEFF-1.0Coeficiente sway al usar el esquema sway
IRODORI_CFG_SCALE_TEXT3.0Escala de guía de texto
IRODORI_CFG_SCALE_CAPTION3.0Escala de guía para subtítulos / VoiceDesign
IRODORI_CFG_SCALE_SPEAKER5.0Escala de guía para el hablante de referencia
IRODORI_MAX_REF_SECONDSvalor predeterminado del checkpointLímite opcional para la duración del audio de referencia
IRODORI_CHUNKING_ENABLEDtrueDivide el texto largo en límites válidos de puntuación y concatena los fragmentos generados
IRODORI_CHUNK_MIN_CHARS80Mínimo de caracteres sin espacios en blanco antes de cortar en límites oracionales fuertes; las comas sirven de límites secundarios a aproximadamente 1.5 veces este valor