{ "family": "voxcpm2", "display_name": "VoxCPM2", "description": "OpenBMB tokenizer-free TTS model supporting 30 languages and 9 Chinese dialects, with 48 kHz output, natural-language voice design, controllable short-reference voice cloning, and expressive style guidance.", "category": "tts", "status": "supported", "tasks": [ "tts", "clone", "design" ], "modes": [ "offline", "streaming" ], "languages": [ "ar", "my", "zh", "zh dialects", "da", "nl", "en", "fi", "fr", "de", "el", "he", "hi", "id", "it", "ja", "km", "ko", "lo", "ms", "no", "pl", "pt", "ru", "es", "sw", "sv", "tl", "th", "tr", "vi" ], "options": { "request": [ { "name": "min_tokens", "type": "int", "description": "Minimum generated audio tokens.", "required": false, "min": 0, "default": 2 }, { "name": "max_tokens", "type": "int", "description": "Maximum generated audio tokens. Zero resolves to model max_length; requires min_tokens <= resolved max_tokens <= model limit.", "required": false, "min": 0, "default": 4096 }, { "name": "num_inference_steps", "type": "int", "description": "Flow sampling steps. Must be positive.", "required": false, "default": 10 }, { "name": "guidance_scale", "type": "float", "description": "Classifier-free guidance scale. Must be nonnegative.", "required": false, "default": 2 }, { "name": "retry_badcase", "type": "bool", "description": "Retry detected bad generations. Offline only; streaming requires false.", "required": false, "default": true }, { "name": "retry_badcase_max_times", "type": "int", "description": "Total attempts including the initial attempt, not extra retries; must be positive.", "required": false, "default": 3 }, { "name": "retry_badcase_ratio_threshold", "type": "float", "description": "Bad-case audio/text length ratio threshold. Must be positive.", "required": false, "default": 6 }, { "name": "seed", "type": "int", "description": "Sampling seed.", "required": false, "min": 0, "max": 4294967295, "default": 1234 }, { "name": "cfm_noise_file", "type": "path", "description": "Precomputed flow noise file.", "required": false }, { "name": "stream_chunk_policy", "type": "enum", "description": "Streaming decoder cadence: grow emits one patch first, then doubles toward stream_frames_per_event; fixed uses the configured size. Ignored offline.", "required": false, "values": [ "grow", "fixed" ], "default": "grow" }, { "name": "stream_frames_per_event", "type": "int", "description": "Maximum generated latent patches per streaming decoder event. Set to 1 for one-patch emission. Ignored offline.", "required": false, "min": 1, "default": 4 }, { "name": "stream_left_context", "type": "int", "description": "Previous patches decoded as streaming left context.", "required": false, "min": 0, "max": 8, "default": 3 }, { "name": "ultimate_clone", "type": "bool", "description": "Use the voice reference itself as the continuation prompt. Requires reference audio and reference_text or prompt_text; cannot be combined with explicit prompt audio.", "required": false, "default": false }, { "name": "prompt_text", "type": "string", "description": "Transcript for continuation prompt audio, distinct from the base voice reference.", "required": false }, { "name": "chunk_strategy", "type": "enum", "description": "Long-form continuation or independent generation per chunk. Offline only.", "required": false, "values": [ "continuation", "stateless" ], "default": "continuation" }, { "name": "text_chunk_size", "type": "int", "description": "Framework long-form text chunk size. Offline only.", "required": false, "default": 2048 }, { "name": "text_chunk_mode", "type": "enum", "description": "Framework text chunking mode. Offline only.", "required": false, "values": [ "default", "tag_aware", "japanese", "endline" ], "default": "tag_aware" } ], "session": [ { "name": "audiovae_tile_frames", "type": "int", "description": "Opt-in causal AudioVAE tiling. Maximum new latent frames per tile; zero preserves full decoding.", "required": false, "default": 0, "min": 0 }, { "name": "perf_mode", "type": "enum", "description": "Opt-in packed attention and MLP projections. May change numerical results; off preserves standard execution.", "required": false, "values": [ "off", "cuda_perf" ], "default": "off" }, { "name": "lora", "type": "path", "description": "Native LoRA directory or checkpoint file with adjacent lora_config.json; merged into generator weights at session creation.", "required": false }, { "name": "lora_scale", "type": "float", "description": "Multiplier for the adapter's configured alpha/r scaling; default 1.", "required": false, "default": 1.0 }, { "name": "weight_type", "type": "enum", "description": "Language-model weight storage; does not override AudioVAE storage.", "required": false, "preset": "weight_type_full" }, { "name": "audiovae_weight_type", "type": "enum", "description": "AudioVAE weight storage; defaults independently to native, not the shared weight_type.", "required": false, "preset": "weight_type_full" }, { "name": "prompt_cache_slots", "type": "int", "description": "Cached encoded prompt slots; zero disables reuse.", "required": false, "min": 0, "default": 1 }, { "name": "mem_saver", "type": "bool", "description": "Release staged runtime graphs.", "required": false, "default": true }, { "name": "weight_context_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 3072 }, { "name": "text_embedding_graph_arena_mb", "type": "int", "description": "Text embedding host graph-metadata arena size in MiB, not device workspace.", "required": false, "min": 1, "default": 64 }, { "name": "lm_step_graph_arena_mb", "type": "int", "description": "LM step host graph-metadata arena size in MiB, not device workspace.", "required": false, "min": 1, "default": 1024 }, { "name": "projection_graph_arena_mb", "type": "int", "description": "Projection host graph-metadata arena size in MiB, not device workspace.", "required": false, "min": 1, "default": 256 }, { "name": "local_encoder_graph_arena_mb", "type": "int", "description": "Local encoder host graph-metadata arena size in MiB, not device workspace.", "required": false, "min": 1, "default": 512 }, { "name": "dit_graph_arena_mb", "type": "int", "description": "DiT estimator host graph-metadata arena size in MiB, not device workspace.", "required": false, "min": 1, "default": 1024 }, { "name": "audiovae_weight_context_mb", "type": "int", "description": "Context or graph arena size in MiB.", "required": false, "min": 1, "default": 768 }, { "name": "audiovae_graph_arena_mb", "type": "int", "description": "AudioVAE decoder host graph-metadata arena size in MiB, not device workspace.", "required": false, "min": 1, "default": 1024 }, { "name": "audiovae_encoder_graph_arena_mb", "type": "int", "description": "AudioVAE encoder host graph-metadata arena size in MiB, not device workspace.", "required": false, "min": 1, "default": 1024 }, { "name": "audiovae_latent_capacity", "type": "int", "description": "Optional decoder graph reservation in latent frames, reused by shorter requests and doubled when exceeded; omitted builds the graph at each request's own frame count.", "required": false, "min": 1 }, { "name": "exec_plan", "type": "string", "description": "JSON component execution plans. audiovae: impl=default/ggml; backend must match the session; no artifacts. params.threads is a nonnegative int: positive values require a CPU session and enable a dedicated AudioVAE backend with streaming decode overlap; also controls offline decoding and prompt encoding threads. Omitted/0 shares the session backend.", "required": false, "default": "{}" }, { "name": "audiovae_encoder_sample_capacity", "type": "int", "description": "Reserved encoder sample capacity.", "required": false, "min": 1, "default": 240000 } ], "load": [] }, "capabilities": { "clone": [ "speaker_reference" ], "design": [ "voice_design" ] }, "runtime": { "tags": [ "gguf", "stream" ] }, "ui": { "recommended_package": "voxcpm2_q8_0", "tags": [ "TTS", "Clone", "Design", "GGUF", "Stream" ], "docs": [ "docs/tts.md", "docs/gguf.md", "docs/models/vocalrender.md" ] }, "package_defaults": { "download": { "kind": "huggingface_snapshot", "repo": "audio-cpp/audio.cpp-gguf", "revision": "main", "gated": false } }, "packages": [ { "id": "voxcpm2_q8_0", "display_name": "VoxCPM2 Q8_0 GGUF", "default": true, "format": "gguf", "precision": "q8_0", "target_directory": "VoxCPM2-GGUF", "files": [ "VoxCPM2-GGUF/voxcpm2-q8_0.gguf" ], "strip_prefix": "VoxCPM2-GGUF" }, { "id": "voxcpm2_bf16", "display_name": "VoxCPM2 BF16 GGUF", "format": "gguf", "precision": "bf16", "target_directory": "VoxCPM2-GGUF", "files": [ "VoxCPM2-GGUF/voxcpm2-bf16.gguf" ], "strip_prefix": "VoxCPM2-GGUF" }, { "id": "voxcpm2_orig", "display_name": "VoxCPM2 Original-Dtype GGUF", "format": "gguf", "precision": "orig", "target_directory": "VoxCPM2-GGUF", "files": [ "VoxCPM2-GGUF/voxcpm2-orig.gguf" ], "strip_prefix": "VoxCPM2-GGUF" }, { "id": "voxcpm2_vocalrender_pro", "display_name": "VocalRender-Pro (VoxCPM2) Original-Dtype GGUF", "format": "gguf", "precision": "orig", "target_directory": "VoxCPM2-GGUF", "files": [ "VoxCPM2-GGUF/finetune/vocalrender-pro-orig.gguf" ], "strip_prefix": "VoxCPM2-GGUF" }, { "id": "voxcpm2_safetensors", "display_name": "VoxCPM2 Safetensors", "format": "safetensors", "precision": "native", "target_directory": "VoxCPM2", "files": [ "config.json", "model.safetensors", "tokenizer.json", "tokenizer_config.json" ], "download": { "kind": "huggingface_snapshot", "repo": "OpenBMB/VoxCPM2" } } ], "sources": [ { "format": "gguf", "roots": { "model": ".", "weights": "$gguf" }, "files": { "config": "model:config.json", "tokenizer_config": "model:tokenizer_config.json", "tokenizer_json": "model:tokenizer.json", "special_tokens_map": "model:special_tokens_map.json" }, "tensors": { "weights": { "source": "weights:", "prefix": "weights" }, "audiovae_weights": { "source": "weights:", "prefix": "audiovae_weights" } } }, { "format": "safetensors", "roots": { "model": "." }, "files": { "config": "model:config.json", "tokenizer_config": "model:tokenizer_config.json", "tokenizer_json": "model:tokenizer.json", "special_tokens_map": "model:special_tokens_map.json" }, "tensors": { "weights": "model:model.safetensors", "audiovae_weights": "model:audiovae.safetensors" } } ] }