Some checks failed
Linux Build / Linux cpu (push) Has been cancelled
Linux Build / Linux cpu-clang (push) Has been cancelled
Linux Build / Linux vulkan (push) Has been cancelled
mac-build / macOS CPU (push) Has been cancelled
Nix Build / Nix (cpu) (push) Has been cancelled
Nix Build / Nix (vulkan) (push) Has been cancelled
windows-build / Windows CPU (push) Has been cancelled
513 lines
16 KiB
JSON
513 lines
16 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"family": "irodori_tts",
|
|
"display_name": "Irodori-TTS",
|
|
"description": "Japanese TTS with RF and MeanFlow checkpoints, supporting zero-shot voice cloning, automatic duration prediction, multimodal voice design, and emoji-style control.",
|
|
"category": "tts",
|
|
"status": "supported",
|
|
"tasks": [
|
|
"tts",
|
|
"clone",
|
|
"design"
|
|
],
|
|
"modes": [
|
|
"offline",
|
|
"streaming"
|
|
],
|
|
"languages": [
|
|
"ja"
|
|
],
|
|
"capabilities": {
|
|
"clone": [
|
|
"speaker_reference"
|
|
],
|
|
"design": [
|
|
"voice_design"
|
|
]
|
|
},
|
|
"options": {
|
|
"request": [
|
|
{
|
|
"name": "stream_frames_per_event",
|
|
"type": "int",
|
|
"description": "Codec latent frames per streaming audio event; default 12 (0.48 seconds at 25 Hz).",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 12
|
|
},
|
|
{
|
|
"name": "language",
|
|
"type": "string",
|
|
"description": "Text language code; Irodori-TTS supports Japanese only.",
|
|
"required": false,
|
|
"default": "ja"
|
|
},
|
|
{
|
|
"name": "instruct",
|
|
"type": "string",
|
|
"description": "Natural-language voice or style instruction describing target voice identity, style, or emotion; supported only by caption-conditioned checkpoints. Legacy instruction and caption are accepted as aliases.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "no_ref",
|
|
"type": "bool",
|
|
"description": "Use no-reference generation; default true unless a speaker reference is provided.",
|
|
"required": false,
|
|
"default": true
|
|
},
|
|
{
|
|
"name": "speaker_embedding_file",
|
|
"type": "path",
|
|
"description": "Speaker Inversion embedding (*.speaker.safetensors written by Irodori-TTS training) used as the speaker condition instead of reference audio; use it with the base checkpoint it was trained on. Cannot be combined with reference audio or no_ref=true.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "reference_duration_sec",
|
|
"type": "float",
|
|
"description": "Trim reference audio to its first reference_duration_sec seconds before encoding it, as Python Irodori-TTS does; default is the checkpoint's ref_max_seconds (30 when it has none); 0 keeps the whole reference.",
|
|
"required": false,
|
|
"min": 0.0
|
|
},
|
|
{
|
|
"name": "t_schedule_mode",
|
|
"type": "string",
|
|
"description": "RF Euler timestep schedule: linear or sway; default linear.",
|
|
"required": false,
|
|
"default": "linear"
|
|
},
|
|
{
|
|
"name": "sway_coeff",
|
|
"type": "float",
|
|
"description": "Sway Sampling coefficient; must be finite and produce strictly decreasing timesteps. Default -1.0.",
|
|
"required": false,
|
|
"default": -1.0
|
|
},
|
|
{
|
|
"name": "num_inference_steps",
|
|
"type": "int",
|
|
"description": "Sampling steps; omitted uses 40 for RF checkpoints or 4 for MeanFlow checkpoints.",
|
|
"required": false,
|
|
"min": 1
|
|
},
|
|
{
|
|
"name": "duration_sec",
|
|
"type": "float",
|
|
"description": "Target duration in seconds; omitted or nonpositive values select predicted duration.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "duration_scale",
|
|
"type": "float",
|
|
"description": "Predicted-duration multiplier; must be > 0 when set; default 1.0.",
|
|
"required": false,
|
|
"min": 0.0,
|
|
"default": 1.0
|
|
},
|
|
{
|
|
"name": "text_chunk_mode",
|
|
"type": "enum",
|
|
"description": "Text chunk policy; word_budget also accepts the legacy spelling default.",
|
|
"values": [
|
|
"word_budget",
|
|
"tag_aware",
|
|
"japanese",
|
|
"endline"
|
|
],
|
|
"required": false,
|
|
"default": "endline"
|
|
},
|
|
{
|
|
"name": "text_chunk_size",
|
|
"type": "int",
|
|
"description": "Maximum characters per text chunk; default 100, or the model text-token window if smaller.",
|
|
"required": false,
|
|
"min": 1
|
|
},
|
|
{
|
|
"name": "min_duration_sec",
|
|
"type": "float",
|
|
"description": "Minimum generated duration in seconds; must be > 0 and no greater than max_duration_sec; default 0.5.",
|
|
"required": false,
|
|
"min": 0.0,
|
|
"default": 0.5
|
|
},
|
|
{
|
|
"name": "max_duration_sec",
|
|
"type": "float",
|
|
"description": "Maximum generated duration in seconds; must be at least min_duration_sec; default 30. Must be > 0.",
|
|
"required": false,
|
|
"min": 0.0,
|
|
"default": 30.0
|
|
},
|
|
{
|
|
"name": "text_guidance_scale",
|
|
"type": "float",
|
|
"description": "Text classifier-free guidance scale; default 3.0. Nonpositive values disable the corresponding CFG branch.",
|
|
"required": false,
|
|
"default": 3
|
|
},
|
|
{
|
|
"name": "speaker_guidance_scale",
|
|
"type": "float",
|
|
"description": "Speaker classifier-free guidance scale; default 5.0. Nonpositive values disable the corresponding CFG branch.",
|
|
"required": false,
|
|
"default": 5
|
|
},
|
|
{
|
|
"name": "caption_guidance_scale",
|
|
"type": "float",
|
|
"description": "Caption classifier-free guidance scale; default 3.0. Nonpositive values disable the corresponding CFG branch.",
|
|
"required": false,
|
|
"default": 3
|
|
},
|
|
{
|
|
"name": "guidance_scale",
|
|
"type": "float",
|
|
"description": "Override all classifier-free guidance scales when set. Nonpositive values disable the corresponding CFG branch.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "guidance_mode",
|
|
"type": "enum",
|
|
"description": "Classifier-free guidance combination mode; default independent.",
|
|
"values": [
|
|
"independent",
|
|
"joint",
|
|
"alternating"
|
|
],
|
|
"required": false,
|
|
"default": "independent"
|
|
},
|
|
{
|
|
"name": "guidance_min_t",
|
|
"type": "float",
|
|
"description": "Minimum diffusion timestep value where guidance is active; default 0.5. The parser does not enforce a nonnegative bound.",
|
|
"required": false,
|
|
"default": 0.5
|
|
},
|
|
{
|
|
"name": "guidance_max_t",
|
|
"type": "float",
|
|
"description": "Maximum diffusion timestep value where guidance is active; default 1.0. The parser does not enforce a nonnegative bound.",
|
|
"required": false,
|
|
"default": 1
|
|
},
|
|
{
|
|
"name": "seed",
|
|
"type": "int",
|
|
"description": "Unsigned 32-bit generation seed in [0, 4294967295]; omitted uses a random seed.",
|
|
"required": false,
|
|
"min": 0,
|
|
"max": 4294967295
|
|
},
|
|
{
|
|
"name": "trim_tail",
|
|
"type": "bool",
|
|
"description": "Trim trailing silence-like samples; default true.",
|
|
"required": false,
|
|
"default": true
|
|
}
|
|
],
|
|
"session": [
|
|
{
|
|
"name": "weight_type",
|
|
"type": "enum",
|
|
"description": "Model weight storage type; default native.",
|
|
"preset": "weight_type_full",
|
|
"required": false,
|
|
"default": "native"
|
|
},
|
|
{
|
|
"name": "codec_weight_type",
|
|
"type": "enum",
|
|
"description": "DACVAE codec weight storage type; default native.",
|
|
"preset": "weight_type_codec_q8",
|
|
"required": false,
|
|
"default": "native"
|
|
},
|
|
{
|
|
"name": "codec_backend",
|
|
"type": "enum",
|
|
"description": "DACVAE codec execution backend. Use cpu as an opt-in workaround for backend-specific codec decoder issues; default same.",
|
|
"values": [
|
|
"same",
|
|
"cpu"
|
|
],
|
|
"required": false,
|
|
"default": "same"
|
|
},
|
|
{
|
|
"name": "condition_graph_arena_mb",
|
|
"type": "int",
|
|
"description": "Condition encoder graph arena size in MiB; default 256.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 256
|
|
},
|
|
{
|
|
"name": "rf_graph_arena_mb",
|
|
"type": "int",
|
|
"description": "RF sampler graph arena size in MiB; default 768.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 768
|
|
},
|
|
{
|
|
"name": "codec_graph_arena_mb",
|
|
"type": "int",
|
|
"description": "DACVAE codec graph arena size in MiB; default 512.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 512
|
|
},
|
|
{
|
|
"name": "codec_decode_chunk_steps",
|
|
"type": "int",
|
|
"description": "Decode the latent in windows of this many frames (25 per second) so the codec's activation memory stops growing with the output length; 0 decodes the whole sequence at once (default).",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 0
|
|
},
|
|
{
|
|
"name": "codec_decode_overlap_steps",
|
|
"type": "int",
|
|
"description": "Latent frames of context decoded on each side of a window and then discarded; default 16.",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 16
|
|
},
|
|
{
|
|
"name": "codec_encode_chunk_steps",
|
|
"type": "int",
|
|
"description": "Encode reference audio in windows of this many latent frames (25 per second) so the codec's activation memory stops growing with the reference length; 0 encodes the whole reference at once (default).",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 0
|
|
},
|
|
{
|
|
"name": "codec_encode_overlap_steps",
|
|
"type": "int",
|
|
"description": "Latent frames of reference audio encoded as context on each side of a window and then discarded; default 16.",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 16
|
|
},
|
|
{
|
|
"name": "condition_weight_context_mb",
|
|
"type": "int",
|
|
"description": "Condition encoder weight context size in MiB; default 32.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 32
|
|
},
|
|
{
|
|
"name": "rf_weight_context_mb",
|
|
"type": "int",
|
|
"description": "RF sampler weight context size in MiB; default 32.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 32
|
|
},
|
|
{
|
|
"name": "codec_weight_context_mb",
|
|
"type": "int",
|
|
"description": "DACVAE codec weight context size in MiB; default 32.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 32
|
|
},
|
|
{
|
|
"name": "mem_saver",
|
|
"type": "bool",
|
|
"description": "Release staged runtime graphs after request phases; default true.",
|
|
"required": false,
|
|
"default": true
|
|
},
|
|
{
|
|
"name": "reference_cache_slots",
|
|
"type": "int",
|
|
"description": "Prepared reference-speaker cache slots; default 1.",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 1
|
|
}
|
|
],
|
|
"load": []
|
|
},
|
|
"dependencies": [],
|
|
"runtime": {
|
|
"tags": [
|
|
"gguf"
|
|
]
|
|
},
|
|
"ui": {
|
|
"recommended_package": "irodori_tts_v4_small_q8_0",
|
|
"tags": [
|
|
"TTS",
|
|
"Clone",
|
|
"Design",
|
|
"GGUF"
|
|
],
|
|
"docs": [
|
|
"docs/tts.md",
|
|
"docs/gguf.md"
|
|
]
|
|
},
|
|
"package_defaults": {
|
|
"download": {
|
|
"kind": "huggingface_snapshot",
|
|
"repo": "audio-cpp/audio.cpp-gguf",
|
|
"revision": "main",
|
|
"gated": false
|
|
}
|
|
},
|
|
"packages": [
|
|
{
|
|
"id": "irodori_tts_v4_small_q8_0",
|
|
"display_name": "Irodori-TTS v4.1 Small Q8_0 GGUF",
|
|
"default": true,
|
|
"format": "gguf",
|
|
"precision": "q8_0",
|
|
"target_directory": "Irodori-TTS-v4-Small-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-v4-Small-GGUF/irodori-tts-v4-small-q8_0.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-v4-Small-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_v4_1_anime_q8_0",
|
|
"display_name": "Irodori-TTS v4.1 Anime Q8_0 GGUF",
|
|
"format": "gguf",
|
|
"precision": "q8_0",
|
|
"target_directory": "Irodori-TTS-v4-Small-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-v4-Small-GGUF/irodori-tts-v4.1-anime-q8_0.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-v4-Small-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_v4_small_f16",
|
|
"display_name": "Irodori-TTS v4.1 Small F16 GGUF",
|
|
"format": "gguf",
|
|
"precision": "f16",
|
|
"target_directory": "Irodori-TTS-v4-Small-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-v4-Small-GGUF/irodori-tts-v4-small-f16.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-v4-Small-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_600m_v3_voicedesign_q8_0",
|
|
"display_name": "Irodori-TTS 600M v3 VoiceDesign Q8_0 GGUF",
|
|
"format": "gguf",
|
|
"precision": "q8_0",
|
|
"target_directory": "Irodori-TTS-600M-v3-VoiceDesign-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-600M-v3-VoiceDesign-GGUF/irodori-tts-600m-v3-voicedesign-q8_0.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-600M-v3-VoiceDesign-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_600m_v3_voicedesign_f16",
|
|
"display_name": "Irodori-TTS 600M v3 VoiceDesign F16 GGUF",
|
|
"format": "gguf",
|
|
"precision": "f16",
|
|
"target_directory": "Irodori-TTS-600M-v3-VoiceDesign-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-600M-v3-VoiceDesign-GGUF/irodori-tts-600m-v3-voicedesign-f16.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-600M-v3-VoiceDesign-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_500m_v3_q8_0",
|
|
"display_name": "Irodori-TTS 500M v3 Q8_0 GGUF",
|
|
"format": "gguf",
|
|
"precision": "q8_0",
|
|
"target_directory": "Irodori-TTS-500M-v3-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-500M-v3-GGUF/irodori-tts-500m-v3-q8_0.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-500M-v3-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_v4_1_small_mf_q8_0",
|
|
"display_name": "Irodori-TTS v4.1 Small MeanFlow Q8_0 GGUF",
|
|
"format": "gguf",
|
|
"precision": "q8_0",
|
|
"target_directory": "Irodori-TTS-v4-Small-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-v4-Small-GGUF/irodori-tts-v4.1-small-mf-q8_0.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-v4-Small-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_v4_1_small_mf_f16",
|
|
"display_name": "Irodori-TTS v4.1 Small MeanFlow F16 GGUF",
|
|
"format": "gguf",
|
|
"precision": "f16",
|
|
"target_directory": "Irodori-TTS-v4-Small-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-v4-Small-GGUF/irodori-tts-v4.1-small-mf-f16.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-v4-Small-GGUF"
|
|
},
|
|
{
|
|
"id": "irodori_tts_500m_v3_f16",
|
|
"display_name": "Irodori-TTS 500M v3 F16 GGUF",
|
|
"format": "gguf",
|
|
"precision": "f16",
|
|
"target_directory": "Irodori-TTS-500M-v3-GGUF",
|
|
"files": [
|
|
"Irodori-TTS-500M-v3-GGUF/irodori-tts-500m-v3-f16.gguf"
|
|
],
|
|
"strip_prefix": "Irodori-TTS-500M-v3-GGUF"
|
|
}
|
|
],
|
|
"sources": [
|
|
{
|
|
"format": "gguf",
|
|
"roots": {
|
|
"model": ".",
|
|
"weights": "$gguf"
|
|
},
|
|
"files": {
|
|
"model_config": "model:model_config.json"
|
|
},
|
|
"optional_files": {
|
|
"tokenizer_json": "model:tokenizer.json",
|
|
"tokenizer_v4_json": "model:tokenizer/tokenizer.json",
|
|
"pretrained_text_config": "model:text_encoder_config.json"
|
|
},
|
|
"tensors": {
|
|
"model_weights": {
|
|
"source": "weights:",
|
|
"prefix": "model_weights"
|
|
},
|
|
"codec_weights": {
|
|
"source": "weights:",
|
|
"prefix": "codec_weights"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"format": "safetensors",
|
|
"roots": {
|
|
"model": ".",
|
|
"tokenizer": "../llm-jp-3-150m",
|
|
"codec": "../Semantic-DACVAE-Japanese-32dim"
|
|
},
|
|
"files": {
|
|
"model_config": "model:model_config.json"
|
|
},
|
|
"optional_files": {
|
|
"tokenizer_json": "tokenizer:tokenizer.json",
|
|
"tokenizer_v4_json": "model:tokenizer/tokenizer.json",
|
|
"pretrained_text_config": "model:text_encoder_config.json"
|
|
},
|
|
"tensors": {
|
|
"model_weights": "model:model.safetensors",
|
|
"codec_weights": "codec:weights.safetensors"
|
|
}
|
|
}
|
|
]
|
|
}
|