Bỏ qua để đến nội dung

IrodoriTTS

Tạo giọng nói tiếng Nhật tự nhiên bằng tính năng nhân bản giọng nói, VoiceDesign dựa trên chú thích (caption) và markup emoji biểu cảm bằng Irodori-TTS v4.1.

Irodori-TTS v4.1 là model text-to-speech tập trung vào tiếng Nhật, hỗ trợ cả nhân bản giọng nói và VoiceDesign được mô tả bằng văn bản trong một checkpoint duy nhất. TomoriBot kết nối với Irodori thông qua wrapper FastAPI cục bộ trong servers/tts/irodoritts/, mặc định sử dụng Aratako/Irodori-TTS-v4.1-Small.

Các checkpoint Hugging Face tương thích có thể được chọn bằng IRODORI_TTS_MODEL_ID, bao gồm các bản fine-tune của cộng đồng như phasefield-audio/Irodori-TTS-v4.1-Anime.

Irodori sử dụng uv để quản lý phần phụ thuộc và backend PyTorch. Máy chủ duy trì pyproject.toml riêng với các phần phụ thuộc Irodori và dacvae đã được ghim để cài đặt có thể tái lập. Hãy cài đặt uv trước, sau đó chạy script thiết lập từ thư mục gốc của repository 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

Các script thiết lập tạo servers/tts/irodoritts/.venv, do đó bun run launch --irodoritts vẫn tiếp tục hoạt động sau khi cài đặt.

Các backend khả dụng:

  • cu128: NVIDIA CUDA 12.8 trên Windows và Linux
  • cpu: Chỉ CPU, hoặc macOS CPU/MPS thông qua PyPI
  • rocm: AMD ROCm trên Linux/WSL
  • xpu: Intel XPU trên Windows và Linux

URL endpoint mặc định là http://127.0.0.1:8013.

Model mặc định là Aratako/Irodori-TTS-v4.1-Small. Bạn có thể chọn các checkpoint chính thức khác (bao gồm model Large 3.29B tham số và các biến thể lượng hóa của nó), các bản fine-tune cộng đồng hoặc các tệp checkpoint cục bộ thông qua các biến môi trường.

Model / IRODORI_TTS_MODEL_IDTham sốKích thước checkpointVRAM khuyến nghịGhi chú
Aratako/Irodori-TTS-v4.1-Small766M1.5 GB4-6 GBModel mặc định: suy luận nhanh và mức sử dụng bộ nhớ thấp.
Aratako/Irodori-TTS-v4-Large3.29B12.25 GB10-14 GBModel Large đầy đủ không lượng hóa với backbone văn bản T5Gemma 2.
Aratako/Irodori-TTS-v4-Large-Quantized/float8-weight-only3.29B3.58 GB6-8 GBTrọng số FP8 với activation BF16: khuyến nghị cho NVIDIA Ada (RTX 40-series) trở lên.
Aratako/Irodori-TTS-v4-Large-Quantized/int8-weight-only3.29B3.58 GB6-8 GBTrọng số INT8 đa dụng với tính toán BF16 trên NVIDIA CUDA.
Aratako/Irodori-TTS-v4-Large-Quantized/int4-weight-only3.29B2.75 GB5-6 GBBiến thể Large nhỏ nhất: yêu cầu NVIDIA Ampere (RTX 30-series) trở lên.
phasefield-audio/Irodori-TTS-v4.1-Anime766M1.5 GB4-6 GBBản fine-tune cộng đồng dành cho cách phát âm phong cách anime.

Đối với nhân bản giọng nói, Small mang lại chất lượng tương đương với tốc độ suy luận nhanh hơn. Large có bộ mã hóa văn bản mạnh hơn và bám sát các mô tả VoiceDesign hơn.

Máy chủ đọc .env ở thư mục gốc của repository hoặc servers/tts/irodoritts/.env cục bộ.

Thêm vào .env trong thư mục gốc TomoriBot:

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

Trong 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

Trên 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

Nếu bạn đã tải tệp checkpoint (.pt hoặc .safetensors) về máy cục bộ, hãy đặt IRODORI_TTS_CHECKPOINT trỏ tới đường dẫn của tệp đó:

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

Irodori hiện tại tải checkpoint cùng với bất kỳ asset tokenizer nào đi kèm trong repo Hugging Face. Các biến thể thư mục con trên Hugging Face cũng được hỗ trợ bởi IRODORI_TTS_MODEL_ID khi repo model cung cấp chúng.

Chạy /providers, chọn Thêm endpoint tùy chỉnh mới, và sử dụng API Compatibility cho giọng nói:

  • API Compatibility: tts-clone
  • endpoint_url: http://127.0.0.1:8013

Sau khi lưu kết nối, chọn kết nối đó và sử dụng dropdown model của nó để thêm một model Speech. Đối với v4.1, các cài đặt được khuyến nghị là:

  • Voice Source Mode: Auto
  • Script Markup Style: Emoji

Auto cho phép cùng một endpoint Irodori hỗ trợ cả hai chế độ giọng nói của TomoriBot, nhờ đó các tín hiệu cảm xúc không bị mất khi gửi:

  • Các persona có mẫu giọng nói được gán trong Persona > Voice sẽ gửi clip tham chiếu đã lưu để nhân bản giọng nói.
  • Các persona có prompt VoiceDesign được thiết lập trong Persona > Voice sẽ gửi prompt bằng ngôn ngữ tự nhiên đã lưu làm điều kiện caption cho Irodori.

Bạn vẫn có thể chọn Voice Clone làm Voice Source Mode nếu chỉ muốn nhân bản giọng nói từ âm thanh tham chiếu.

Sử dụng /providers để đăng ký endpoint và thiết lập model. Sau đó mở /config > Models > Switch Models để chọn và kích hoạt endpoint đã đăng ký.

  1. Chuẩn bị một clip thoại tiếng Nhật rõ ràng với một giọng nói và không có nhạc nền. Khoảng 30 giây là đã đủ: vượt qua mốc đó âm thanh bổ sung hầu như không mang lại thêm độ trung thực âm sắc mà lại tốn dung lượng tải lên và thời gian suy luận.
  2. Mở /config trong Models > TTS Parameters & Voices và tải clip lên.
  3. Mở /config trong Persona > Voice, sau đó chọn persona và mẫu giọng nói.

Irodori mặc định giới hạn tham chiếu 120 giây và cắt ngắn các clip dài hơn. Đặt IRODORI_MAX_REF_SECONDS để thay đổi giới hạn này.

Máy chủ mã hóa mỗi đoạn tham chiếu một lần và lưu kết quả trong servers/tts/irodoritts/reference-cache/, nhờ đó các yêu cầu lặp lại sẽ bỏ qua bước này. Việc thay thế clip của persona sẽ tạo một mục mới, và các mục cũ vẫn được giữ lại cho đến khi bạn xóa thư mục này.

  1. Mở /config trong Persona > Voice.
  2. Chọn persona.
  3. Nhập mô tả bằng ngôn ngữ tự nhiên về giọng nói và cách phát âm mong muốn.

TomoriBot gửi prompt này dưới dạng instruct; wrapper Irodori sẽ ánh xạ nó tới điều kiện caption của v4.1. Yêu cầu VoiceDesign không cần clip tham chiếu đã lưu.

TomoriBot loại bỏ cú pháp custom emoji của Discord trước khi gửi văn bản tới TTS. Với script_markup: emoji, emoji Unicode được giữ nguyên cho việc điều kiện hóa văn bản của Irodori.

IrodoriTTS hỗ trợ các chú thích emoji trong văn bản đầu vào để tác động đến hiệu ứng âm thanh, phong cách nói và biểu cảm cảm xúc. Khi Script Markup Style của TomoriBot được đặt thành Emoji, các emoji Unicode này sẽ được giữ lại và gửi tới Irodori.

Để biết các emoji được hỗ trợ và ý nghĩa của chúng, hãy xem chú thích emoji ở upstream. Emoji đóng vai trò là các tín hiệu phong cách và kết quả có thể thay đổi.

Văn bản dài được chia thành các đoạn (chunk) và trả về dưới dạng một tin nhắn thoại duy nhất. Các yêu cầu dài có thể vượt quá thời gian chờ mặc định 240 giây; hãy điều chỉnh TTS_SYNTHESIZE_TIMEOUT_MS nếu cần. Đặt IRODORI_CHUNKING_ENABLED=false để tắt chia đoạn hoặc IRODORI_CHUNK_MIN_CHARS để điều chỉnh ngưỡng phân chia.

Mặc định vẫn là lấy mẫu tuyến tính 40 bước chất lượng cao hơn của Irodori. Để có độ trễ thấp hơn, hãy thử Sway Sampling với ít bước hơn:

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

Đây là sự đánh đổi giữa chất lượng suy luận và tốc độ, vì vậy hãy thử nghiệm với checkpoint và giọng nói đã chọn trước khi thiết lập cố định.

Chế độ độ trễ thấp giúp xử lý mỗi câu nhanh hơn khoảng 3-4 lần trên GPU NVIDIA với cùng 40 bước và cài đặt giọng nói, vì vậy chế độ này không phải đánh đổi chất lượng như Sway Sampling. Hãy bật tính năng này trong .env:

IRODORI_COMPILE_MODE="cudagraphs"

cudagraphs là chế độ nhanh nhất. compile nhanh hơn khoảng 2 lần so với mặc định; hãy thử chế độ này nếu cudagraphs hoạt động không ổn định trên GPU của bạn. Cả hai chế độ đều yêu cầu backend cu128, và máy chủ sẽ từ chối khởi động với một trong hai chế độ này trên các backend khác.

Những điều cần lưu ý:

  • Máy chủ sẽ làm nóng (warm up) trước khi báo trạng thái sẵn sàng. Lần khởi động đầu tiên mất khoảng 2-4 phút; các lần khởi động sau mất khoảng 1-2 phút vì các kernel đã biên dịch được lưu đệm trên đĩa. bun run launch --irodoritts sẽ chờ tối đa 5 phút; trên GPU chậm hơn, hãy tăng giới hạn đó bằng TOMORI_TTS_STARTUP_TIMEOUT_MS (tính bằng mili-giây).
  • Yêu cầu đầu tiên với độ dài câu mới hoặc đoạn âm thanh giọng nói mới sẽ tốn thêm một phần nhỏ của giây, chỉ một lần duy nhất.
  • Lượng VRAM sử dụng giảm nhẹ.
  • Âm thanh không giống hệt từng bit so với chế độ mặc định đối với cùng một seed. Khi kiểm thử, âm thanh nghe tương đương, vì vậy hãy nghe thử vài câu với giọng nói của riêng bạn trước khi sử dụng chính thức.

Trên Windows, chế độ này cũng cần trình biên dịch Microsoft C++:

  1. Cài đặt Visual Studio Build Tools cùng khối lượng công việc Desktop development with C++.
  2. Chạy lại .\servers\tts\irodoritts\install-irodori.ps1 cu128 để gói Windows Triton được cài đặt.
  3. Khởi động máy chủ (hoặc bun run launch --irodoritts) từ Developer PowerShell for VS, hoặc tải trình biên dịch vào PowerShell thông thường trước:
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] }
}

Nếu thiếu trình biên dịch hoặc Triton, máy chủ sẽ dừng khi khởi động và thông báo thành phần bị thiếu.

BiếnMặc địnhMục đích
IRODORI_TTS_MODEL_IDAratako/Irodori-TTS-v4.1-SmallRepo model Hugging Face hoặc nguồn repo/subfolder được hỗ trợ
IRODORI_TTS_CHECKPOINTkhông đặtCheckpoint .pt hoặc .safetensors cục bộ tùy chọn; ghi đè model Hugging Face
TOMORI_TTS_HOST127.0.0.1Địa chỉ liên kết máy chủ; xem Truy cập mạng
IRODORI_TTS_PORT8013Cổng máy chủ
IRODORI_MODEL_DEVICEautoThiết bị model (auto, cuda, cpu, mps, xpu)
IRODORI_CODEC_DEVICEautoThiết bị codec
IRODORI_MODEL_PRECISIONbf16 trên CUDA, nếu không thì fp32Độ chính xác của model
IRODORI_CODEC_PRECISIONfp32Độ chính xác của codec
IRODORI_COMPILE_MODEoffoff, compile, hoặc cudagraphs; xem Chế độ độ trễ thấp
IRODORI_NUM_STEPS40Các bước lấy mẫu Euler
IRODORI_T_SCHEDULE_MODElinearLịch lấy mẫu (linear hoặc sway)
IRODORI_SWAY_COEFF-1.0Hệ số sway khi sử dụng lịch sway
IRODORI_CFG_SCALE_TEXT3.0Tỷ lệ hướng dẫn văn bản
IRODORI_CFG_SCALE_CAPTION3.0Tỷ lệ hướng dẫn Caption / VoiceDesign
IRODORI_CFG_SCALE_SPEAKER5.0Tỷ lệ hướng dẫn người nói tham chiếu
IRODORI_MAX_REF_SECONDSmặc định theo checkpointGiới hạn tùy chọn cho thời lượng âm thanh tham chiếu
IRODORI_CHUNKING_ENABLEDtrueChia văn bản dài tại các ranh giới dấu câu hợp lệ và nối các đoạn đã tạo
IRODORI_CHUNK_MIN_CHARS80Số ký tự không phải khoảng trắng tối thiểu trước khi chia tại ranh giới câu mạnh; dấu phẩy là ranh giới dự phòng ở mức khoảng 1.5 lần giá trị này