Skip to content

Repository files navigation

StemFlow

StemFlow — небольшая Windows-программа для тех случаев, когда нужно достать вокал из песни, убрать его из минуса или разложить трек на отдельные партии. Всё работает локально: музыка никуда не загружается и не отправляется на сторонние серверы.

Главное окно StemFlow

Что умеет программа

  • отделяет вокал от инструментала;
  • раскладывает трек на вокал, ударные, бас и остальное;
  • умеет дополнительно разделить очищенный вокал на передний и бэк;
  • использует NVIDIA GPU, если он доступен, и переключается на CPU, если его нет;
  • открывает аудио MP3, WAV, FLAC, OGG, M4A, AAC и WMA;
  • принимает видео MP4, MKV, MOV, AVI, WEBM, WMV, M4V, MPEG, TS и 3GP, сам извлекает первую аудиодорожку и работает уже с ней;
  • по умолчанию сохраняет результат в MP3 320 кбит/с; также доступны WAV и FLAC;
  • позволяет слушать, выключать и солировать дорожки прямо в программе;
  • хранит историю обработок и показывает, если файлы были удалены;
  • нормально выглядит при масштабировании Windows от 100 до 200%.

Внутри используются FFmpeg и HTDemucs. Есть два профиля: быстрый htdemucs и более медленный htdemucs_ft. Второй запускает четыре дообученные модели и даёт заметно более чистый результат на сложных треках.

Установка

Самый простой вариант — скачать StemFlow-Setup.exe по ссылке в описании релиза и запустить его. Python, FFmpeg, CUDA runtime и модели уже входят в установщик, отдельно ставить их не нужно.

Текущая сборка больше 2 ГиБ, поэтому прикрепить её к GitHub Release напрямую не получится: у GitHub есть ограничение на размер одного файла релиза. Установщик нужно положить в отдельное файловое хранилище, а ссылку добавить в описание релиза. В сам Git-репозиторий .exe добавлять не нужно.

Сборка довольно большая:

  • установщик занимает около 2,3 ГБ;
  • после установки программа занимает примерно 5,5 ГБ;
  • для обработки длинных песен понадобится дополнительное свободное место.

Установщик пока не подписан коммерческим сертификатом. Поэтому SmartScreen может показать сообщение о неизвестном издателе. В таком случае нужно нажать «Подробнее», а затем «Выполнить в любом случае».

Запуск из исходников

Нужны Windows 10/11 x64 и Python 3.11 x64.

install.bat
run.bat

install.bat создаст виртуальное окружение и установит зависимости. Если в системе найдётся NVIDIA GPU, будет установлена CUDA-версия PyTorch.

FFmpeg можно установить через winget:

winget install --id Gyan.FFmpeg -e

Сборка установщика

Для полноценной сборки также нужен Inno Setup 6.

py -3.11 -m venv .venv-build
.venv-build\Scripts\python.exe -m pip install -r requirements.txt
.venv-build\Scripts\python.exe -m pip install -r requirements-cuda.txt
.venv-build\Scripts\python.exe -m pip install -r requirements-dev.txt
build_release.bat

Скрипт скачает FFmpeg и официальные checkpoint-файлы Demucs, проверит их SHA-256, соберёт папочную версию через PyInstaller и создаст release\StemFlow-Setup.exe.

Тесты

.venv-build\Scripts\python.exe -m ruff check app tests scripts
.venv-build\Scripts\python.exe -m pytest

Сейчас в проекте 33 теста. Они проверяют команды FFmpeg, импорт видео, работу настроек, историю, выбор CUDA/CPU, модели, обработку ошибок и повторный запуск разделения.

Как устроено разделение

Сначала FFmpeg берёт первую аудиодорожку исходного файла и переводит её во временный stereo PCM float32. В случае с видео картинка при этом не перекодируется и не сохраняется. Затем Demucs обрабатывает аудио отдельным процессом, чтобы интерфейс не зависал. После этого дорожки экспортируются в выбранный формат.

В режиме «Вокал слоями» передний и бэк-вокал разделяются по center/side составляющим очищенной вокальной дорожки. На обычных стерео-миксах это хорошо отделяет центральный лид от разведённых по сторонам даблов и подпевок. Если исходник моно или весь вокал записан строго по центру, бэк-дорожка может получиться почти пустой — это ограничение самого микса.

Структура проекта

app/
  models/       структуры данных
  services/     FFmpeg, модели, настройки, история
  ui/           страницы приложения
  widgets/      плеер и элементы интерфейса
  workers/      фоновые задачи разделения и загрузки
installer/      сценарий Inno Setup
scripts/        подготовка ресурсов и smoke-тест интерфейса
tests/          автоматические тесты

Публикация в GitHub

В корне лежит publish_github.bat. При первом запуске он попросит адрес пустого репозитория, создаст локальный Git-репозиторий, сделает коммит и отправит ветку main. Пароли и токены скрипт не хранит — вход выполняется средствами Git for Windows или через SSH. Батник публикует исходники; большой установщик в GitHub он не отправляет.

Лицензия

Код StemFlow распространяется по лицензии MIT. Список сторонних компонентов и их лицензий находится в THIRD_PARTY_NOTICES.md.

About

Local Windows app for separating vocals and instrumentals using Demucs and FFmpeg

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages