{ "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" } } ] }