Портативная версия F5-TTS RUSSIAN

#23
by zelenukhin - opened

Делаю репост с 4pda куда изначально её выложил.

Портативку сделал путем переделки портативки Fish-Speech другого автора, но вроде всё прекрасно работает.

Саму портативку берём здесь:
https://drive.google.com/file/d/1B0WozqqaH6NVSBWuqcSIf2Nm6ZC0kWPE/view?usp=sharing

Нужно также скачать ffmpeg (например тут https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-8.0-full_build.7z) и скопировать ffmpeg.exe в папку C:\Windows.
Распаковываем и запускаем Start.cmd. При первом запуске она будет долго скачивать модели, я уже подставил в коде скрипта русскую модель (https://huggingface.co/Misha24-10/F5-TTS_RUSSIAN/blob/main/F5TTS_v1_Base_v2/model_last_inference.safetensors), так что она сама скачает то что нужно. Также при первой генерации она будет скачивать модель Whisper имейте это в виду. Также обращаю внимания что F5-TTS со всеми скачанными файлами будет занимать около 18 Гб.

У кого карта 50хх прочтите дополнение:
Запускаете command line.cmd. Выполняете по очереди команды.

pip uninstall torch torchvision torchaudio xformers audio-separator -y
python -m pip install torch==2.7.0+cu128 torchvision==0.19.0+cu128 torchaudio==2.7.0+cu128 xformers audio-separator --index-url https://download.pytorch.org/whl/cu128 --extra-index-url https://pypi.org/simple

или переименуйте "Start update PyTorch.cmd.tmp" в "Start update PyTorch.cmd". Отредактируйте его в блокноте, заменив команды pip uninstall и pip install на ту что я выше написал. После этого запустите.

Как пользоваться:

  1. В директории с F5-TTS я закинул Демагог со словарями которые я подправил под F5-TTS
    Краткая инструкция в картинках:

SCR-20250824-hmxo.png

SCR-20250824-hofv-2.png

Соответственно вставляем сначала текст в Демагог и получаем текст с ударениями. Ударения здесь через знак + перед ударной гласной.
Свои слова в Демагог добавляем в словарь 35_мой словарь.dic, дважды щелкните по нему в Демагог и он откроется в отдельной вкладке для редактирования (отредактировав не забудьте нажать иконку дискеты для сохранения).
Если вы хотите делать замену без учета окончаний то в левой части от знака равно вы добавляете *, а в правой части вы просто упускаете окончание. Пример:

Лондон*=Л+ондон

Такой шаблон будет менять Л+ондоне, Л+ондана и т.д.

  1. Запускаем Start.cmd и ждем запуска F5-TTS. Модель используем указанную по умолчанию F5-TTS_v1, т.к. она заменена на русскую.

  2. Указываем голос образец. Желательно в формате wav, PCM, 44100. Важно: длина не более 12 секунд.
    Пару образцов я закинул в папку Examples

  3. Вставляете текст с проставленными в Демагоге ударениями и жмёте Synthesize.
    Как я писал выше при первой генерации будут выкачиваться еще одна модель на 1,3 Гб. В последующих она будет стартовать сразу же.

Замеченная проблема. F5-TTS иногда съедает последнее слово в генерируемом тексте. Чтобы этого избежать с новой строки напишите в конце текста многоточие:

...

Привет, спасибо что поделился подробным гайдом

У меня битый архив. Что я делаю не так?
image.png

Это про самую первую ссылку в статье, вот эту:
https://drive.google.com/file/d/1B0WozqqaH6NVSBWuqcSIf2Nm6ZC0kWPE/view?usp=sharing

Проблема с битым архивом решилась обновлением 7z :) Скачал последнюю версию 7z с официального сайта и всё распаковалось корректно, без ошибок:)😅

Было обнаружено что в оригинальной F5-TTS подгружаются лишнее модели Qwen и E2-TTS которые мы не используем, а они жрут видео-память.
Применяем патч и расход видео-памаяти с 10 Гб упадёт до 3.5Гб!

В моей портативке найдите этот файл:

\f5-tts\venv\Lib\site-packages\f5_tts\infer\infer_gradio.py

Там найдите строчки:

chat_model_state = AutoModelForCausalLM.from_pretrained(chat_model_name, torch_dtype="auto", device_map="auto")
chat_tokenizer_state = AutoTokenizer.from_pretrained(chat_model_name)

и закомментируйте их:

# chat_model_state = AutoModelForCausalLM.from_pretrained(chat_model_name, torch_dtype="auto", device_map="auto")
# chat_tokenizer_state = AutoTokenizer.from_pretrained(chat_model_name)

Найдите строчку:

E2TTS_ema_model = load_e2tts() if USING_SPACES else None

и закомментируйте её:

# E2TTS_ema_model = load_e2tts() if USING_SPACES else None

Убираем лишнее в интерфейсе:
Находим строчки:

[app_tts, app_multistyle, app_chat, app_credits],
["Basic-TTS", "Multi-Speech", "Voice-Chat", "Credits"],

заменяем на:

[app_tts, app_multistyle, app_credits],
["Basic-TTS", "Multi-Speech", "Credits"],

Находим строчку:

choices=[DEFAULT_TTS_MODEL, "E2-TTS", "Custom"], label="Choose TTS Model", value=DEFAULT_TTS_MODEL

заменяем на:

choices=[DEFAULT_TTS_MODEL, "Custom"], label="Choose TTS Model", value=DEFAULT_TTS_MODEL

Находим строчку:

choices=[DEFAULT_TTS_MODEL, "E2-TTS"], label="Choose TTS Model", value=DEFAULT_TTS_MODEL

заменяем на:

choices=[DEFAULT_TTS_MODEL], label="Choose TTS Model", value=DEFAULT_TTS_MODEL

у вас сборка жестко привязана к диску С (дело не в путях заданных файле запуска) на других дисках надо делать символическую ссылку на С, а в остальном, все супер, спасибо за проделанную работу!

Спасибо за гайд! И да, проще всего будет сделать симлинк
mklink /D C:\f5-tts E:\TTS\f5-tts
где "E:\TTS" фактический путь до папки f5-tts , куда вы ее положили.
В остальном все понятно. И решение с обновлением 7z при ошибке распаковки тоже актуально.

Sign up or log in to comment