Всем привет, любите ли вы генерировать музыку так, как люблю я? Можете не отвечать, скорее всего нет. Но вот с ужесточением правил Suno, генерировать музыку там стало просто бессмысленно (кто не в курсе с сентября, они закрыли скачку треков).

Потому я собрал десктопную студию в стиле Suno для YuE2, новой открытой модели генерации песен от команды M‑A-P (Multimodal Art Projection). Пишете стиль и текст, получаете полноценную песню с вокалом и аккомпанементом в 48 кГц стерео. Всё считается на вашей видеокарте: без облака, подписок, очередей и без установки Python.

Меня зовут Илья, я блогер, основатель сервиса для генерации ArtGeneration.me и просто фанат нейросетей. И вот уже несколько лет я делаю портативки для всего, что как‑то связано с генерацией звука и музыки. И мимо релиза YuE2 пройти тоже не мог, но обо всем по порядку.

❯ Что за модель YuE2

YuE2 — вторая версия открытой модели YuE. Главная идея в символьном планировании: прежде чем петь, модель записывет композицию нотами в формате ABC (мелодию вокала, инструментальную тему и аккорды) и только потом генерирует по этой партитуре звук. У закрытых сервисов вроде Suno партитуры нет: песня выходит такой, какой вышла, и одну ноту в ней не поправишь. Здесь можно открыть ноты, поменять мелодию, аккорды, темп или тональность и перепеть ту же композицию.

Вот начало партитуры, которую модель написала для трека «Дача, лето, комары»: две партии, вокал и инструментальная тема, а аккорды стоят в кавычках прямо перед нотами.

X:1
T:
M:2/4
L:1/32
Q:1/4=102
V: Vocal clef=treble name="Vocal Melody" snm="Vocal"
V: Ins clef=treble name="Ins Melody" snm="Inst."
K:Dm
% intro
V: Vocal
z12"Dm"z4|"Dm"z16|"Dm"z16|"Dm"z16|
V: Ins
Z|D4A4A4A4|d4A4A4A4|d4f2g2a4f4|
% verse
V: Vocal
"Dm"D4A4A4F4|"C"G4F2E2"Dm"D8|"Dm"D4A4A4F4|"C"G4F2E2"Dm"D4z4|
V: Ins
Z4|
% chorus
V: Vocal
"Dm"d4d4f4d4|"C"c4e4"Dm"d8|"Dm"d4d4f4d4|"C"c4e4"Dm"d8|
V: Ins
Z4|

В студии она сразу рисуется нотным станом, а под ним лежит тот же текст, который можно поправить руками и перепеть:

Внутри один трансформер примерно на 3,6 млрд параметров, собраный из двух «экспертов» с общим вниманием (Mixture‑of‑Transformers):

  • AR‑эксперт (причинный, токен за токеном) читает стиль и текст, пишет партитуру, а по ней семантические токены музыки, 25 штук в секунду;

  • NAR‑эксперт (двунаправленный) методом flow matching превращает эти токены в акустические латенты;

  • VAE‑декодер собирает из латентов готовое стерео 48 кГц.

Для каверов в ту же схему встраивается SheetSage2: он слушает запись и снимает с неё мелодию в такую же партитуру, которую YuE2 потом поёт в новом стиле. Схема из официальной карточки модели на Hugging Face:

❯ Насколько хорошо она поёт

Авторы прогнали модель через WildSongBench: 192 промпта и 17 систем, включая свежий Suno v6. По среднему баллу SongBench YuE2 в режиме best‑of-8 (лучший из восьми вариантов) набрала 6,96, это выше Suno v5 (6,87), Mureka 9 (6,94) и Suno v6 (6,56). В обычном режиме, где выбирается лучший из двух, выходит 6,73. Это цифры самих авторов, но и на слух модель дейстивтельно выдаёт цельные песни с понятной дикцией.

Партитура решает и в каверах. На тесте SHS100K YuE2 с полной партитурой сохраняет мелодию так, что кавер узнаётся как та же песня в 71% случаев. У открытой ACE‑Step 1.5 на этом же тесте 2,4%. На графике ниже по горизонтали качество песни, по вертикали то, насколько точно модель следует тексту и описанию:

❯ Зачем понадобилась студия

Официально YuE2 запускается из Python‑кода через PyTorch, а для полной точности нужна карта на 24 ГБ. Я собрал YuE2 Studio на нативном движке yue2.cpp (C++/CUDA с квантованными весами GGUF): один exe для Windows, без Python и зависимостей, работает от 6 ГБ видеопамяти. Внутри всё, что умеет модель, и ещё немного сверху:

  • Полные песни до шести минут по стилю и тексту. На RTX 4090 трек длиной 3:38 рендерится примерно за 46 секунд

  • Редактируемая партитура: композиция приходит нотным станом и текстом ABC. Поменяли ноты, темп или тональность, и композиция та же, исполнение новое. Режимы «мелодия с аккордами», «только мелодия» и «без партитуры»

  • Сначала только ноты: партитура за секунды, без пения. Можно прочитать, поправить и уже потом петь

  • Каверы: SheetSage2 снимает мелодию с записи, YuE2 поёт её в вашем стиле. Слова должны ложиться на эту мелодию: оригинальный текст или новый с тем же числом слогов в каждой строке и ударениями на тех же нотах

  • Точный перерендер: каждый трек хранит запрос и аудиокоды, поэтому его можно отрисовать заново бит в бит или с другими шагами, сидом звука и форматом, не сочиняя заново

  • Ассистент‑соавтор: локальная Gemma или OpenRouter пишет стиль и текст по идее в одну строку и правит партитуру по просьбе

  • Караоке по словам: тайминг каждого слова через Parakeet или Whisper, а встроенный видеоредактор собирает из трека клип с караоке прямо на видеокарте

  • Разбор песни на дорожки: трек раскладывается на шесть стемов: барабаны, бас, вокал, гитару, пианино и всё остальное. Можно вытащить минус или чистый вокал

  • 110 готовых примеров из yue2.cpp в один клик и доступ ко всем настройкам движка: сэмплинг, шаги, гайденс, сиды, MP3 или WAV 16/24/32 бит

  • Библиотека: поиск, плейлисты, обложки по шаблонам, MP3 с названием, текстом и обложкой в тегах

  • Всё рядом с exe: модели, песни, настройки и временные файлы лежат в папке студии, установленная версия обновляется сама. Интерфейс на русском, английском, китайском, японском и корейском

❯ Почему я ушел с Python и Gradio

Последние пару лет я делаю портативные сборки нейросетей (TTS, дубляж, генерация музыки), и почти все они были устроены одинаково: Python, PyTorch, веб‑интерфейс на Gradio и батник, который всё это ставит. Схема рабочя, но у неё есть потолок, и я в него упёрся:

  • Вес. Одна только сборка PyTorch с CUDA весит гигабайты, а к ней ещё десятки зависимостей. Портативка весит больше самой модели.

  • Установка. Нужна правильная сборка torch под конкретное поколение видеокарты, путь без кириллицы и пробелов, живой интернет на время установки. Самый частый вопрос в чате: «у меня не ставится».

  • Хрупкость. Одна обновившаяся зависимость ломает всё окружение, а «обновиться» на практике значит переустановить. Сколько раз я через это проходил, лучше не считать.

  • Интерфейс. Gradio отлично подходит для демо, но когда нужны нотный стан, библиотека треков с плейлистами, плеер с караоке и видеоредактор, приходится бороться с фреймворком, а не делать продукт.

  • Скорость. PyTorch‑инференс в режиме «как в примере из репозитория» почти никогда не самый быстрый, а подгонять его под каждую карту — отдельная работа.

Для YuE2 я решил начать с чистого листа: ни строчки Python на пути выполнения, один исполняемый файл, нормальное десктопное приложение.

❯ Новый стек

Движок: yue2.cpp на ggml

В основе студии yue2.cpp, нативный порт YuE2 на C++ поверх ggml (того же, на чём работает llama.cpp). Его автор, ServeurpersoCom, до этого сделал acestep.cpp и minimaxmusic.cpp. А я как раз делал студии под обе эти модели: сначала ACE‑Step Studio, ещё с бэкендом на Python и Gradio, потом её форк MiniMax Music3 Studio, уже на minimaxmusic.cpp. Из этой линейки YuE2 Studio и выросла. Что даёт сам yue2.cpp:

  • Квантованные веса GGUF. Бэкбон в BF16 весит 7,2 ГБ, в Q8_0 3,8 ГБ, в Q5_K_M 2,6 ГБ. Отсюда и 6 ГБ видеопамяти вместо 24 у официальной сборки.

  • Бэкенды подгружаются во время работы. В комплекте один yue‑server.exe и набор библиотек: ggml‑cuda, ggml‑vulkan и девять вариантов ggml‑cpu под разные наборы инструкций, от SSE4.2 до AVX-512. Один и тот же релиз работает на NVIDIA через CUDA, на AMD и Intel через Vulkan и на процессоре, без отдельных сборок под каждую карту.

  • Свои операции ggml. В VAE добавлены два fused‑оператора: активация Snake считается одним ядром вместо пяти, а транспонированные свёртки идут через GEMM на тензорных ядрах.

Сервис и оболочка: Rust и Tauri 2

Всё вокруг движка написано на Rust (axum, tokio, SQLite): очередь генераций, супервизор движка, библиотека треков, загрузчик моделей. Загрузчик качает веса в несколько потоков, умеет докачку, провреяет каждый файл по SHA-256 и берёт их с закреплённой ревизии на Hugging Face, так что модель под ногами не поменяется. Движок и остальные дочерние процессы сидят в Job Object с флагом kill‑on‑close: даже если студию убить через диспетчер задач, движок не останется висеть в памяти и держать видеокарту.

Окно сделано на Tauri 2 поверх системного WebView2, интерфейс на React. Ноты рисует abcjs, видеоредактор кодирует клипы через WebCodecs на видеокарте. Tauri же даёт подписанное автообновление: новая версия предлагается прямо в студии и ставится поверх старой.

Всё, что студия создаёт (модели, песни, настройки, логи, временные файлы и даже профиль WebView2), лежит в её папке рядом с exe. Ничего не пишется в AppData и системный Temp, чтобы удалить студию, достаточно удалить папку. В итоге установщик весит 163 МБ, портативный архив 186 МБ, модели качаются отдельно тем набором, который потянет ваша карта.

❯ Что получилось по скорости

Сборка

Видеокарта

Веса

Песня

Время

Официальная, PyTorch + CUDA graphs + FlashAttention

RTX 4090

BF16, VAE в FP32

3,6 мин

71 с

YuE2 Studio (yue2.cpp)

RTX 4090

Q8_0

3:38

≈46 с

yue2.cpp, с загрузкой модели

RTX PRO 6000 Blackwell

BF16

3:32

44 с

yue2.cpp, перерендер из сохранённых аудиокодов

RTX PRO 6000 Blackwell

BF16

3:32

16 с

Оговорка: в первых двух строках разные веса (у официальной сборки BF16, у меня Q8_0), так что это не лабораторное сравнение один к одному. Но для пользователя картина такая: на той же RTX 4090 песня выходит примерно в полтора раза быстрее, а минимальные требования к видеопамяти ниже в четыре раза. Насколько я знаю, сейчас это самый быстрый и самый нетребовательный к железу способ запустить YuE2 у себя на Windows. Дольше всего идёт авторегрессия: около 3,7 мс на токен, и упирается она в пропускную способность памяти при перечитывании весов. Именно здесь кванты и дают выигрыш.

❯ Claude Code и немного читерства

Кода в студии я руками не писал. Я не программист в классическом смысле: последние 20 лет я руководил разработкой как продакт и проджект‑менеджер. Всё, от движка до сайта проекта, написал Claude Code в десктопном приложении на модели Opus 5.5, а моя работа — ставить задачу, гонять студию как обычный пользователь и ругаться, когда что‑то не так. Ругаться приходилось часто.

Но надо сказать прямо: у меня был чит. Это далеко не первая моя студия на похожем стеке. Про Dub Studio, утилиту для перевода коротких видео, я уже писал на Хабре, а YuE2 Studio, как я уже говорил, выросла из MiniMax Music3 Studio. Плюс за это время накопились скиллы — инстркуции для агента, как собирать портативку, как оформлять репозиторий, как писать посты. Так что изобретать агенту ничего не пришлось: взять готовую студию, заменить движок на yue2.cpp и переделать интерфейс под партитуру и каверы.

Первая версия вышла через три часа после старта, а всего с доводкой, патчами и клипами ушло около восьми часов: 30 коммитов, около 7 тысяч новых строк поверх старой студии и 134 теста на Rust. По ценам API это стоило бы около $230, через модель прошло 880 миллионов токенов. Сам я сижу на подписке Max 20x за $200 в месяц, и её мне, конечно, не хватает.

Лучше всего агент справляется там, где результат можно проверить тестом или глазами за минуту: сервис, интерфейс, релизный скрипт, сайт, скриншоты на пяти языках. Проверяет он тоже сам: запускает студию, кликает по ней как пользователь и смотрит, что получилось. Караоке‑клипы для этой статьи собраны так же, через видеоредактор студии.

Почему это не магия

Со стороны выглядит так, будто я за ночь навайбкодил настоящее десктопное приложение, но это обманчиво. Когда появились агенты, живые команды у меня просто сменились командами агентов, а ставить задачи и принимать работу я умел и до этого. К тому же вайбкодингом я занимаюсь с тех пор, как появилось само слово, и мой харнесс оброс таким количеством правил и доработок, что описывать их я даже не возьмусь. Два года назад мой максимум с нейронками был один HTML‑файл с простенькой демкой. Так что повторить такое может не только лишь каждый, хотя доступно это сейчас всем.

И нет, кинуть промпт и уйти пить кофе не получится. Даже если заставить агента пройти четыре круга ревью, причём именно по диффам (ревью без диффов начинает выдумывать бесконечные правки), он всё равно может допустить тупейшие ошибки и не увидеть простейших вещей. Это как програмируемый станок с ЧПУ: всё автоматизировано, в цех можно не заходить, но лучше сидеть с рукой над кнопкой «Стоп», потому что остановить дешевле, чем потом разгребать последствия. С агентом так же: следишь, останавливаешь, напоминаешь погуглить лучшие практики, накидываешь идеи и бьёшь по хребту за тупорылые решения и хаки, которые он очень любит вставлять где не надо.

❯ Что нужно для запуска

  • Система: Windows 10/11 x64

  • Видеокарта: NVIDIA от 6 ГБ VRAM (GTX 16 / RTX 20 и новее); AMD и Intel через Vulkan пока экспериментально

  • Место на диске: от ~4 ГБ с лёгким набором моделей до ~34 ГБ со всеми самыми тяжёлыми

  • Лицензия: студия под MIT, веса YuE2 под CC BY‑NC 4.0, то есть песни только для некоммерческого использования

❯ Установка

1. Скачайте с GitHub установщик (обновляется сам) или портативный архив, его можно распаковать куда угодно.
2. Запустите YuE2-Studio.exe: студия определит видеокарту и предложит подходящий набор моделей от 3,6 до 10,4 ГБ.
3. Нажмите «Скачать»: загрузка идёт в несколько потоков, с докачкой и проверкой контрольных сумм.
4. Напишите стиль и текст или откройте пример и нажмите «Создать» — движок запустится сам.

Песни, сделанные в студии, на русском, английском, испанском, китайском и японском, можно послушать на странице проекта. А выше клипы с караоке, собранные встроенным видеоредактором.

Студия открытая, под MIT, так что если хотите что‑то добавить или починить, приходите в issues и пул‑реквесты на GitHub, буду рад. А в комментариях расскажите, чем вы сейчас генерируете музыку и чего вам не хватает в студии. Статья участвует в сезоне «Код будущего», так что если было интересно, а студия пригодилась, плюсик очень поможет.

⭐️ Поставить звезду на GitHub

? Скачать релиз, портативку или установщик

А меня можно так же найти в YouTube, в Телеграме и на Бусти. Залетайте, там тоже интересно, каждую пятницу смотрим новинки нейросетей и самое интересное тестируем вместе. Всех обнял и удачных генераций.

Комментарии (0)