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
405 lines
12 KiB
JSON
405 lines
12 KiB
JSON
{
|
|
"family": "vieneu_v3_turbo",
|
|
"display_name": "VieNeu-TTS v3 Turbo",
|
|
"description": "On-device Vietnamese/English TTS (48 kHz) with instant voice cloning from 3-5 s of reference audio, by Phạm Nguyễn Ngọc Bảo (pnnbao97). Takes SEA-G2P phonemes as text input.",
|
|
"category": "tts",
|
|
"status": "community",
|
|
"tasks": [
|
|
"tts",
|
|
"clone"
|
|
],
|
|
"modes": [
|
|
"offline"
|
|
],
|
|
"languages": [
|
|
"vi",
|
|
"en"
|
|
],
|
|
"capabilities": {
|
|
"clone": [
|
|
"speaker_reference"
|
|
]
|
|
},
|
|
"runtime": {
|
|
"tags": [
|
|
"gguf"
|
|
]
|
|
},
|
|
"options": {
|
|
"request": [
|
|
{
|
|
"name": "auto_frame_cap",
|
|
"type": "bool",
|
|
"description": "Cap the generation budget using the chunk's phoneme count. Legacy frame_cap remains accepted.",
|
|
"required": false,
|
|
"default": true
|
|
},
|
|
{
|
|
"name": "text_chunk_min_size",
|
|
"type": "int",
|
|
"description": "Phoneme-string chunks shorter than this character count join a neighbour. Legacy text_chunk_min remains accepted.",
|
|
"required": false,
|
|
"default": 20
|
|
},
|
|
{
|
|
"name": "speaker_embedding_file",
|
|
"type": "path",
|
|
"description": "File containing a comma-separated 192-dimensional speaker embedding.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "speaker_embedding",
|
|
"type": "string",
|
|
"description": "Inline comma-separated 192-dimensional speaker embedding.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "reference_codes",
|
|
"type": "string",
|
|
"description": "Pre-encoded reference codes in row-major order, comma- or space-separated; codebooks per frame come from the checkpoint.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "reference_codes_file",
|
|
"type": "path",
|
|
"description": "Pre-encoded reference codes, one frame per line. Replaces audio encoding and can be used with a speaker embedding instead of reference audio.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "x_vector_only_mode",
|
|
"type": "bool",
|
|
"description": "Clone using only the speaker embedding. Defaults to true for embedding-only input, otherwise false.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "encode_reference_only",
|
|
"type": "bool",
|
|
"description": "Encode reference audio and return an acoustic-tokens artifact without generating speech.",
|
|
"required": false,
|
|
"default": false
|
|
},
|
|
{
|
|
"name": "max_tokens",
|
|
"type": "int",
|
|
"description": "Maximum generated frames per text chunk; uses the checkpoint max_new_tokens setting (300 fallback). Each frame represents 80 ms.",
|
|
"required": false,
|
|
"min": 1
|
|
},
|
|
{
|
|
"name": "do_sample",
|
|
"type": "bool",
|
|
"description": "Enable sampling for all codebooks unless subtalker_do_sample overrides later codebooks.",
|
|
"required": false,
|
|
"default": true
|
|
},
|
|
{
|
|
"name": "temperature",
|
|
"type": "float",
|
|
"description": "Sampling temperature for all codebooks unless overridden for the subtalker.",
|
|
"required": false,
|
|
"default": 0.8
|
|
},
|
|
{
|
|
"name": "top_k",
|
|
"type": "int",
|
|
"description": "Top-k sampling limit for all codebooks unless overridden for the subtalker.",
|
|
"required": false,
|
|
"default": 25
|
|
},
|
|
{
|
|
"name": "top_p",
|
|
"type": "float",
|
|
"description": "Nucleus cutoff within top-k candidates, unless overridden for the subtalker.",
|
|
"required": false,
|
|
"default": 0.95
|
|
},
|
|
{
|
|
"name": "repetition_penalty",
|
|
"type": "float",
|
|
"description": "Repetition penalty applied independently to each codebook.",
|
|
"required": false,
|
|
"default": 1.2
|
|
},
|
|
{
|
|
"name": "repetition_window",
|
|
"type": "int",
|
|
"description": "Recent frames remembered per codebook for repetition penalties; zero uses all history.",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 64
|
|
},
|
|
{
|
|
"name": "babble_retries",
|
|
"type": "int",
|
|
"description": "Regenerations for short chunks that exceed their text; zero disables the guard.",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 2
|
|
},
|
|
{
|
|
"name": "subtalker_temperature",
|
|
"type": "float",
|
|
"description": "Temperature override for later codebooks; omitted or negative inherits temperature.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "subtalker_top_k",
|
|
"type": "int",
|
|
"description": "Top-k override for later codebooks; omitted or negative inherits top_k.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "subtalker_top_p",
|
|
"type": "float",
|
|
"description": "Nucleus cutoff override for later codebooks; omitted or negative inherits top_p.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "subtalker_do_sample",
|
|
"type": "bool",
|
|
"description": "Sampling override for later codebooks; inherits do_sample when omitted.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "seed",
|
|
"type": "int",
|
|
"description": "Sampling seed; omitted draws a random seed.",
|
|
"required": false,
|
|
"min": 0,
|
|
"max": 4294967295
|
|
},
|
|
{
|
|
"name": "text_chunk_size",
|
|
"type": "int",
|
|
"description": "Maximum character budget per phoneme-string chunk; must be positive.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 200
|
|
}
|
|
],
|
|
"session": [
|
|
{
|
|
"name": "g2p_dict_file",
|
|
"type": "path",
|
|
"description": "SEA-G2P dictionary file (sea_g2p.bin). When set, input is Vietnamese/English text rather than precomputed phonemes.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "g2p_library",
|
|
"type": "path",
|
|
"description": "SEA-G2P shared library used with g2p_dict_file; searched by library name when omitted.",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "mem_saver",
|
|
"type": "bool",
|
|
"description": "Release the talker cached-step graph after each request.",
|
|
"required": false,
|
|
"default": false
|
|
},
|
|
{
|
|
"name": "voice_prompt_cache_slots",
|
|
"type": "int",
|
|
"description": "Prepared voice-prompt cache slots; zero disables caching.",
|
|
"required": false,
|
|
"min": 0,
|
|
"default": 1
|
|
},
|
|
{
|
|
"name": "weight_type",
|
|
"type": "enum",
|
|
"description": "Shared talker matmul storage.",
|
|
"required": false,
|
|
"preset": "weight_type_full",
|
|
"default": "native"
|
|
},
|
|
{
|
|
"name": "conv_weight_type",
|
|
"type": "enum",
|
|
"description": "Speaker encoder convolution weight storage.",
|
|
"required": false,
|
|
"values": [
|
|
"native",
|
|
"f32",
|
|
"f16"
|
|
],
|
|
"default": "f32"
|
|
},
|
|
{
|
|
"name": "talker_weight_type",
|
|
"type": "enum",
|
|
"description": "Talker matmul storage; inherits weight_type when omitted.",
|
|
"required": false,
|
|
"preset": "weight_type_full"
|
|
},
|
|
{
|
|
"name": "talker_graph_arena_mb",
|
|
"type": "int",
|
|
"description": "Talker graph metadata arena. Size in MiB; must be positive.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 256
|
|
},
|
|
{
|
|
"name": "speech_decoder_graph_arena_mb",
|
|
"type": "int",
|
|
"description": "Codec decoder graph metadata arena. Size in MiB; must be positive.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 32
|
|
},
|
|
{
|
|
"name": "speaker_encoder_graph_arena_mb",
|
|
"type": "int",
|
|
"description": "Speaker encoder graph metadata arena. Size in MiB; must be positive.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 32
|
|
},
|
|
{
|
|
"name": "talker_constant_context_mb",
|
|
"type": "int",
|
|
"description": "Talker constant metadata context. Size in MiB; must be positive.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 4096
|
|
},
|
|
{
|
|
"name": "code_predictor_constant_context_mb",
|
|
"type": "int",
|
|
"description": "Code predictor constant metadata context. Size in MiB; must be positive.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 1536
|
|
},
|
|
{
|
|
"name": "speech_decoder_constant_context_mb",
|
|
"type": "int",
|
|
"description": "Codec decoder constant metadata context. Size in MiB; must be positive.",
|
|
"required": false,
|
|
"min": 1,
|
|
"default": 1536
|
|
}
|
|
],
|
|
"load": []
|
|
},
|
|
"ui": {
|
|
"recommended_package": "vieneu_v3_turbo_q8_0",
|
|
"tags": [
|
|
"TTS",
|
|
"Clone",
|
|
"GGUF"
|
|
],
|
|
"docs": [
|
|
"docs/models/vieneu_v3_turbo.md",
|
|
"docs/tts.md",
|
|
"docs/gguf.md"
|
|
]
|
|
},
|
|
"packages": [
|
|
{
|
|
"id": "vieneu_v3_turbo_q8_0",
|
|
"display_name": "VieNeu-TTS v3 Turbo Q8_0 GGUF",
|
|
"default": true,
|
|
"format": "gguf",
|
|
"precision": "q8_0",
|
|
"target_directory": "VieNeu-TTS-v3-Turbo-GGUF",
|
|
"files": [
|
|
"gguf/vieneu-v3-turbo-q8_0.gguf",
|
|
"gguf/voices/manifest.json",
|
|
"gguf/voices/minh_quan_pro/ref_codes.txt",
|
|
"gguf/voices/minh_quan_pro/speaker.emb.txt"
|
|
],
|
|
"download": {
|
|
"kind": "huggingface_snapshot",
|
|
"repo": "pnnbao-ump/VieNeu-TTS-v3-Turbo"
|
|
},
|
|
"strip_prefix": "gguf"
|
|
},
|
|
{
|
|
"id": "vieneu_v3_turbo_bf16",
|
|
"display_name": "VieNeu-TTS v3 Turbo BF16 GGUF",
|
|
"format": "gguf",
|
|
"precision": "bf16",
|
|
"target_directory": "VieNeu-TTS-v3-Turbo-GGUF",
|
|
"files": [
|
|
"gguf/vieneu-v3-turbo-bf16.gguf",
|
|
"gguf/voices/manifest.json",
|
|
"gguf/voices/minh_quan_pro/ref_codes.txt",
|
|
"gguf/voices/minh_quan_pro/speaker.emb.txt"
|
|
],
|
|
"download": {
|
|
"kind": "huggingface_snapshot",
|
|
"repo": "pnnbao-ump/VieNeu-TTS-v3-Turbo"
|
|
},
|
|
"strip_prefix": "gguf"
|
|
},
|
|
{
|
|
"id": "vietneu_tts_v3_turbo_q8_0",
|
|
"display_name": "VieNeu-TTS v3 Turbo Q8_0 GGUF (first community port, July 2026 weights)",
|
|
"format": "gguf",
|
|
"precision": "q8_0",
|
|
"target_directory": "VieNeu-TTS-v3-Turbo-GGUF-2026-07",
|
|
"files": [
|
|
"model.gguf"
|
|
],
|
|
"download": {
|
|
"kind": "huggingface_snapshot",
|
|
"repo": "phuocnguyen90/VieNeu-TTS-v3-Turbo-GGUF"
|
|
}
|
|
}
|
|
],
|
|
"sources": [
|
|
{
|
|
"format": "gguf",
|
|
"roots": {
|
|
"model": ".",
|
|
"weights": "$gguf"
|
|
},
|
|
"files": {
|
|
"config": "model:config.json",
|
|
"tokenizer_config": "model:tokenizer_config.json",
|
|
"speech_tokenizer_config": "model:speech_tokenizer/config.json"
|
|
},
|
|
"optional_files": {
|
|
"generation_config": "model:generation_config.json",
|
|
"vocab": "model:vocab.json",
|
|
"merges": "model:merges.txt",
|
|
"tokenizer_json": "model:tokenizer.json",
|
|
"special_tokens_map": "model:special_tokens_map.json"
|
|
},
|
|
"tensors": {
|
|
"model_weights": {
|
|
"source": "weights:",
|
|
"prefix": "model_weights"
|
|
},
|
|
"speech_tokenizer_weights": {
|
|
"source": "weights:",
|
|
"prefix": "speech_tokenizer_weights"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"format": "safetensors",
|
|
"roots": {
|
|
"model": "."
|
|
},
|
|
"files": {
|
|
"config": "model:config.json",
|
|
"tokenizer_config": "model:tokenizer_config.json",
|
|
"speech_tokenizer_config": "model:speech_tokenizer/config.json"
|
|
},
|
|
"optional_files": {
|
|
"generation_config": "model:generation_config.json",
|
|
"vocab": "model:vocab.json",
|
|
"merges": "model:merges.txt",
|
|
"tokenizer_json": "model:tokenizer.json",
|
|
"special_tokens_map": "model:special_tokens_map.json"
|
|
},
|
|
"tensors": {
|
|
"model_weights": "model:model.safetensors",
|
|
"speech_tokenizer_weights": "model:speech_tokenizer/model.safetensors"
|
|
}
|
|
}
|
|
]
|
|
}
|