Мини-плеер «Моей волны» Яндекс.Музыки, живущий в системном трее Windows.
Включаешь свою волну и сворачиваешь — без вкладки браузера, без полноразмерного окна Яндекс.Музыки на панели задач. Play/Pause, лайк/дизлайк, громкость и следующий трек — всё из иконки в трее.
Note
Это неофициальный клиент, использующий обратно-инженерный API Яндекс.Музыки через
библиотеку yandex-music. Проект
не аффилирован с Яндексом.
-
Моя волна (
user:onyourwave) — с полноценным фидбеком ротору (radioStarted,trackStarted,skip,trackFinished), как у настоящего клиента. -
Максимальное качество звука — треки запрашиваются в lossless (FLAC), если он есть у трека и позволяет подписка; иначе — лучший доступный mp3/aac. С понижением качества до mp3 192 кбит/с, если основной запрос не удался.
-
Управление из трея — Play/Pause, следующий/предыдущий трек, лайк, дизлайк, выход. «Предыдущий» ходит по локальной истории прослушанного, не трогая ротор — можно свободно вернуться назад и снова уйти вперёд без лишних запросов к Яндексу. Повторное нажатие «Нравится» снимает лайк (дизлайк для этого не годится — он скипает трек и учит Яндекс его не рекомендовать). Дизлайк тоже отменяем: трек после «Не нравится» скипается, но если вернуться к нему по истории (⏮), пункт меню превратится в «↩ Убрать дизлайк». Все действия сразу подтверждаются мини-плашкой снизу экрана (❤/💔/👎/↩/⏭/⏮) — переключение трека занимает пару секунд на загрузку, и без мгновенного отклика легко подумать, что нажатие не сработало.
-
Окно плеера (
Ctrl+Shift+Alt+Xили «🎛 Плеер» в трее) — всё в одном: текущий трек, перемотка (мм:сс), громкость и скорость воспроизведения. Хоткей работает как переключатель — открыть/закрыть. Громкость и скорость сохраняются вconfig.jsonи восстанавливаются при следующем запуске. -
Скорость воспроизведения — от 0.5x до 2.0x. Питч меняется вместе со скоростью (как на старой кассете/пластинке при смене скорости), а не сохраняется независимо — так и звучит естественнее, и не нужен тяжёлый time-stretch.
-
Громкость колесом мыши — зажми
Ctrl+Shift+Altи крути колесо где угодно (иконки трея Windows не отдают прокрутку сторонним приложениям, поэтому это глобальный хоткей, а не наведение на иконку) — ±5% за щелчок. Вместо тоста — мини-плашка снизу экрана с процентом и полоской, обновляется вживую и сама гаснет через паузу. -
Хоткеи с клавиатуры — глобальные, работают из любого окна:
Ctrl+Shift+Alt+Q— предыдущий трекCtrl+Shift+Alt+E— следующий трекCtrl+Shift+Alt+W— пауза / продолжитьCtrl+Shift+Alt+X— открыть/закрыть окно плеераCtrl+Shift+Alt+D— ускорить на 5%Ctrl+Shift+Alt+A— замедлить на 5%Ctrl+Shift+Alt+S— сбросить скорость до 1.0x
Настраиваются под себя через пункт «⌨ Хоткеи» в трее — там же кнопка записи новой комбинации; сохраняются в
config.jsonи подхватываются сразу без перезапуска. Громкость колесом мыши (см. выше) туда не входит — это отдельный механизм (глобальный хук мыши, а не клавиатуры), поэтому комбинацияCtrl+Shift+Alt+колесодля неё фиксированная. -
Тёмная тема — окно авторизации, окна плеера и хоткеев, всплывающее меню трея. Скруглённые кнопки и слайдеры со сглаживанием (рендер через Pillow — сам tkinter такого не умеет).
-
Уведомления — всплывающий тост с исполнителем и названием при смене трека.
-
Авторизация без паролей — официальный OAuth Device Flow Яндекса: код на экране, подтверждение на
ya.ru/device, токен сохраняется автоматически.
При первом запуске main.py сам откроет диалог с кодом устройства и браузер на
странице Яндекса — пароль нигде вводить не нужно, только подтверждение входа в
уже открытой сессии аккаунта. Полученный токен сохраняется в config.json и
переиспользуется при следующих запусках; если он "протухнет", авторизация запустится
заново автоматически.
Списки лайкнутых/дизлайкнутых треков кэшируются в likes_cache.json рядом с
конфигом: при запуске они доступны мгновенно из файла, а с сервером сверяется
только номер ревизии — полный список не перекачивается, пока в нём что-то не
изменится (например, лайк с другого устройства).
Important
config.json содержит токен вашего аккаунта Яндекса — по чувствительности это
как пароль. Файл уже в .gitignore, но проверьте перед тем, как публиковать
форк.
- Python 3.14
yandex-music— неофициальная библиотека для API Яндекс.Музыки (авторизация, ротор, треки).- pystray + Pillow — иконка и меню в трее.
- pygame-ce — воспроизведение аудио прямо из памяти, без временных файлов.
- tkinter — окна авторизации, громкости, перемотки, скорости и хоткеев.
- pycryptodome — расшифровка AES-CTR потоков из
get-file-info(эндпоинт, которым мобильные и десктоп-клиенты запрашивают lossless). - PyAV — единая точка декодирования: любой контейнер/кодек (mp3, flac,
flac-mp4— FLAC, упакованный во фрагментированный MP4 для адаптивной раздачи, обычный формат lossless в роторе) декодируется в сырой PCM и играется черезpygame.mixer.Sound/Channel, а не потоково черезmixer.music— это и даёт перемотку с произвольной позиции, и скорость воспроизведения (ресемплинг с "враньём" про частоту даёт естественный питч, едущий вместе со скоростью). - ctypes + WH_MOUSE_LL / WH_KEYBOARD_LL — глобальные низкоуровневые хуки
мыши и клавиатуры для хоткеев громкости и управления плеером. Без сторонних
зависимостей, только
user32.dll.
pip install -r requirements.txt
python main.pyЛибо запустите run.bat — он стартует плеер через pythonw (без окна консоли)
и сразу закрывается сам, оставляя работать только иконку в трее.
Готовый MiniYaMu.exe (~56 МБ, самодостаточный, Python не нужен) лежит в
Releases — собирается автоматически GitHub Actions на каждый
тег v*. Либо соберите сами:
pip install pyinstaller
pyinstaller --noconfirm --onefile --noconsole --name MiniYaMu --icon icon.ico main.pyГотовый файл появится в dist\MiniYaMu.exe — можно закинуть куда угодно и
запускать. В отличие от запуска из исходников, exe хранит config.json (токен,
громкость, хоткеи) и likes_cache.json в %APPDATA%\MiniYaMu — рядом с exe
писать нельзя (он может лежать в защищённой от записи папке).
Warning
yandex-music работает поверх неофициального, обратно-инженерного API — Яндекс
может в любой момент поменять бэкенд и что-то сломать без предупреждения
(так уже случалось с форматом фидбека ротору). Используйте на свой страх и риск.
MIT © 2026 tglagcs



