--- license: apache-2.0 base_model: openbmb/VoxCPM2 base_model_relation: finetune language: - ru pipeline_tag: text-to-speech tags: - tts - voxcpm - voxcpm2 - russian - stress - lora - accent - homographs --- # Shtorm-VoxCPM2-RU версия от **Shtorm** — русская VoxCPM2 с управляемыми ударениями. VoxCPM2 с запечённой LoRA, которая учит модель **ставить ударения по меткам в тексте**: `+` перед ударной гласной. Грузится как обычная VoxCPM2, без адаптеров и дополнительного кода. *VoxCPM2 fine-tune (merged LoRA) that follows explicit Russian stress marks: `+` before the stressed vowel.* ## Статус Экспериментальная версия «как есть». Формальных замеров нет — проверялась на слух на наборах омографов, намеренно неправильных ударений и реальных текстах, на нескольких голосах. ## Как размечать текст - `+` **перед** ударной гласной: `зам+ок`, `стрелк+и`, `м+олоко`. - **Односложные слова желательно не размечать** (`как`, `не`, `вы`, `мне`): в обучении меток на них не было, и модель читает такую метку как выделение слова — речь становится растянутой. - `ё` не размечать — она всегда ударная. - Числа, даты, сокращения — **словами** до подачи в модель (нормализатор отключается, см. ниже). - Метки удобно расставлять автоакцентором (например, RUAccent) и потом снимать с односложных слов. - Без меток модель читает как обычная VoxCPM2. ## Использование ```python from voxcpm import VoxCPM import soundfile as sf model = VoxCPM.from_pretrained("ArtShtorm/Shtorm-VoxCPM2-RU", load_denoiser=False) wav = model.generate( text="Мы купили м+олоко, а на двери висел зам+ок.", cfg_value=2.0, inference_timesteps=10, normalize=False, # обязательно: встроенный нормализатор может испортить метки ) sf.write("out.wav", wav, model.tts_model.sample_rate) ``` ### Клонирование голоса (рекомендуется Hi-Fi) Референс 5–15 с чистой речи + его **дословный текст** (без меток) — голос стабилен между предложениями: ```python wav = model.generate( text="Стр+елки час+ов показывали полночь.", reference_wav_path="voice.wav", prompt_wav_path="voice.wav", prompt_text="Точный текст того, что звучит в voice.wav.", cfg_value=2.0, inference_timesteps=10, normalize=False, ) ``` Длинный текст лучше озвучивать **по предложениям** с одним и тем же референсом и склеивать. ## Ограничения - Изредка случайные сбои произношения отдельного слова — помогает перегенерация с другим сидом. - Ошибки в разметке озвучиваются как написано: качество ударений зависит от того, кто их расставил. - На отдельных словах в отдельных контекстах модель может держаться привычного ударения. - Проверено на ограниченном числе голосов; на сильно непохожих референсах — проверять. ## Лицензия Apache-2.0, как у базовой модели [openbmb/VoxCPM2](https://huggingface.co/openbmb/VoxCPM2). Спасибо команде OpenBMB за VoxCPM.