LINUX.ORG.RU

CloudMus — новый кроссплатформенный открытый плеер для Яндекс Музыки и YouTube Music

 , yandex music, youtube music,


4

1

Встречайте CloudMus. Это музыкальный проигрыватель для Linux и Windows, который собирает в одном окне Яндекс Музыку, YouTube Music и музыку из локальной папки. У всех источников одна очередь, одна история и одинаковое управление.

Автора замучили плееры-обёртки сайтов на Electron, которые тормозят, выжирают память и батарею ноутбука, автор вынашивал эту идею 10 лет, теперь с Клодом может себе это позволить ). Плеер написан на C++20/Qt 6, звук играет через libmpv, распространяется под лицензией MIT. Для Linux есть AppImage, для Windows – инсталлятор.

Кроме привычных функций плеера, сделан максимальный упор на визуал, в нём есть стеклянный интерфейс с настоящим размытием фона на KDE Plasma, Wayland-композиторах и Windows 11, своя визуальная тема, плавные анимации для поддержки мониторов >60Hz, а также глобальные хоткеи на все основные действия, включая лайк, дизлайк и скачивание трека. Хоткеи работают в KDE, GNOME 48+, на X11 и в Windows. Ещё есть полноценная поддержка MPRIS (Linux) и SMTC (Windows), скачивание треков и плейлистов, предзагрузка следующего трека и отдельный прокси для каждого сервиса: например, YouTube Music через прокси, а Яндекс Музыка напрямую.

Текущая версия проекта — 0.6.1.

Источники

  • Яндекс Музыка: вход по коду на сайте Яндекса. Доступны библиотека, лайки, плейлисты с редактированием, «Моя волна» и станции, а также персональные подборки: «Плейлист дня», «Дежавю», «Премьера», «Тайник».
  • YouTube Music: библиотека, лайки, плейлисты, миксы (My Supermix, My Mix 1–7, Discover, Replay) и радио от трека. Вход пока неудобный: нужно вставить заголовки запроса или cURL-команду из залогиненной сессии браузера, потому что штатный вход Google через устройство сейчас сломан в ytmusicapi. Это временное решение, см. планы.
  • Локальная папка: по умолчанию xdg-user-dir MUSIC. Подпапки и M3U показываются как плейлисты, обложки и теги читаются из файлов.

Возможности

  • стеклянный фон: настоящее размытие на KDE Plasma и Wayland-композиторах со стандартным протоколом blur, акрил на Windows 11, на GNOME — прозрачность с расширением вроде Blur my Shell;
  • настраиваемые глобальные хоткеи на воспроизведение, переключение треков, перемотку, громкость, лайк, дизлайк, скачивание, показ окна плеера и тихий режим;
  • общая очередь и история для треков из разных источников;
  • настройка уникальности проигрывания, борется с частыми повторами одного и того же трека в радио плейлистах;
  • лайки и дизлайки синхронизируются с аккаунтом сервиса, трек можно добавить в свои плейлисты или убрать из них;
  • предзагрузка нескольких следующих треков в кэш, без паузы при переключении;
  • скачивание треков и целых плейлистов в локальную папку с тегами, с раскладкой по источнику, исполнителю или альбому. Для копирастов скачивание по умолчанию отключено и включить её пользователь может только подтвердив, что он не будет пиратить;
  • MPRIS (Linux) и SMTC (Windows) с перемоткой, громкостью, shuffle и repeat;
  • трей, уведомления с обложкой, автозапуск, автопроигрывание с места последней остановки;
  • отдельный HTTP/SOCKS5-прокси для каждого источника, через прокси идут и потоки, и обложки. В России это особенно полезно: YouTube Music можно пустить через прокси, а Яндекс Музыку оставить напрямую, и не придётся включать VPN на всю систему или переключать его туда-сюда;
  • тихий режим с хоткеем: громкость плавно опускается до заданного уровня без паузы, удобно для звонков и игр;
  • восстановление последнего плейлиста и трека при запуске;
  • светлая и тёмная темы, интерфейс на русском, английском, немецком, французском, испанском, итальянском и белорусском.
  • удобная система обновлений, сама проверяет новую версию при старте, скачивает, ставит и перезапускает, при этом музыка продолжит играть с того места где остановилась. Конечно, апдейт можно пропустить;
  • терминальный фронтенд плеера (без Qt), можно гонять в консольке (но пока он не сильно развит).

Поиска по каталогам сервисов пока нет.

Архитектура

Каждый музыкальный сервис подключается через бэкенд, который работает в отдельном процессе и общается с интерфейсом по JSON-RPC через stdin/stdout. Сейчас все бэкенды написаны на Python.

Это не окончательная архитектура. Сторонний бэкенд сейчас выполняется с правами пользователя, а значит, для конечных пользователей такая схема небезопасна. Паланируется, что бэкенды будут переведены на JavaScript и станут работать в песочнице на QuickJS. Появится онлайн-каталог, из которого бэкенды можно будет ставить прямо из приложения.

Планы

Помимо бэкендов для других сервисов (SoundCloud, VK Музыка, Spotify, Deezer, Bandcamp, Apple Music, TuneIn, Звук), запланировано:

  • удобная авторизация через встроенный браузер: обычный вход в аккаунт сервиса в окне плеера, без копирования заголовков и cURL-команд;
  • полноценный офлайн-режим: без интернета плеер будет быстро стартовать и работать с тем, что есть в кэше. Это важно для использования в машине. Сейчас режим реализован, но частично;
  • версия для macOS;
  • фронтенд на QML для Android и Android TV, плюс отдельная адаптация интерфейса под автомобильные магнитолы на Android. Порт на iOS пока не планируется: писать и публиковать под неё слишком хлопотно. Проект открытый, так что если кто-то захочет портировать, буду рад;
  • обнаружение и пропуск музыки, сгенерированной ИИ (реально задолбала уже всех вокруг);
  • поддержка радиосервисов с нарезкой эфира на треки и их сохранением;
  • визуализации MilkDrop из Winamp через projectM, чтобы можно было устроить крутую домашнюю дискотеку под винишко;
  • конечно же, больше красивых анимаций и автоматический режим экономии батареи, который их будет душить.

Телеметрия

В плеере есть анонимная телеметрия: Google Analytics и Sentry для отчётов о падениях. Мне она нужна, чтобы находить и исправлять ошибки, видеть, что люди пользуются плеером, и радоваться этому. Если вам это не нравится, отключите её в настройках.

Установка

Нужен x86_64 и glibc 2.31 или новее, то есть Debian 11, Ubuntu 20.04, Fedora 32, openSUSE Leap 15.3 и более свежие. AppImage скачивается со страницы релизов:

chmod +x CloudMus-*-x86_64.AppImage
./CloudMus-*-x86_64.AppImage

При первом запуске плеер добавляет себя в меню приложений. Если AppImage ругается на FUSE, поставьте libfuse2 (на Ubuntu 24.04+ это libfuse2t64) или запустите с ключом --appimage-extract-and-run. Обновления ставятся из самого приложения.

Пакетов для дистрибутивов пока нет. Если кто-то возьмётся собрать пакет, помогу. Для сборки из исходников нужны Qt 6, CMake ≥ 3.21, компилятор с поддержкой C++20, libmpv и Python ≥ 3.11. Подробности в руководстве разработчика.

>>> CloudMus — новый кроссплатформенный открытый плеер для Яндекс Музыки и YouTube Music

★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 13)
Ответ на: комментарий от navrocky

Дизайном как-то сложно всем угодить, к тому же тут накладывается еще вопрос организации GUI плеера как такового, какие панели, что на них должно быть. Поэтому популярны такие вещи как Foobar, где можно настроить как угодно. И хотя, конечно, Foobar в плане дизайна как дизайна это ужас ужасный и на порядки хуже сабжа, но настраиваемость там перекрывает этот недостаток. При всем уважении к твоему проекту, но я например располагаю элементы иначе, и даже не потому что так лучше, а потому что я так хочу. И есть плееры, которые именно на это ориентированы.

Второй аспект. Плеер, в идеале, должен быть не только некой веб-мордой в виде плейлиста, а еще и менеджером коллекции. Сложное редактирование тегов, автоматическое тегирование, каталогизация огромных коллекций.

Третий аспект. Плеер воспроизводит звук, поэтому он должен иметь развитые возможности по воспроизведению звука, внезапно. DSP плагины, решение проблем ресемплинга, воспроизведения DSD на оборудовании, которое умеет только PCM и прочее.

Четвертый аспект. В 2026 году, локальный плеер это не очень новость. У людей есть всякие сетевые плееры, мультирум системы. По сути, плеер должен быть распределенным - коллекция на NAS, сервер-транскодер на каком-то подкроватнике, клиенты на устройствах, непосредственно воспроизводящих звук. Вот есть mpd, и он частично такой, там сервер отдельно, морда отдельно подключается по TCP. А надо, чтобы не только сам сервер локально для себя играл на машине где он, как mpd, а чтобы он транскодированный поток мог синхронно воспроизводить по сети на N сетевых плееров в разных комнатах.

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

James_Holden ★★★★★
()
Ответ на: комментарий от Shadow

На скриншоте тут в 2 раза короче.

О чём речь? У меня сайдбары расширяются, надо больше, раздвинь мышкой.

navrocky ★★
() автор топика
Ответ на: комментарий от James_Holden

В его времена ещё и разрешения у всех были не такие большие, как сейчас – почти у каждого FHD минимум. И экраны были 4:3, конечно же.

yars068 ★★★★★
()
Ответ на: комментарий от James_Holden

но я например располагаю элементы иначе, и даже не потому что так лучше, а потому что я так хочу

Ну возможно это и будет, не отрицаю, я несколько раз перекраивал эту форму пока не пришел к тому что есть, может добавлю плавающие dock панели, благо в обычном Qt Widgets это почти бесплатно даётся. Просто сейчас пока не до этого. Есть приоритеты, покрыть больше сервисов и платформ, macos, android.

Второй аспект. Плеер, в идеале, должен быть не только некой веб-мордой в виде плейлиста, а еще и менеджером коллекции. Сложное редактирование тегов, автоматическое тегирование, каталогизация огромных коллекций.

Сейчас есть бэкенд, который играет файлы из локальной папки, при скачивании плеер умеет раскладывать по альбомам. Есть какой-никакой выбор качества скачивания. В планах добавить авто перекодировку в нужный формат. Уже можно смотреть на кодек и битрейт трека. Надо будет добавить поиск.. ну постепенно будет наполняться его функционал. Причем облачные сервисы можно отключить и тогда это будет чисто локальный олдскульный плеер.

коллекция на NAS

Jellyfin мне уже предложили затащить бэкендом. Ну а остальное подумаю, пока конечно далеко до таких заморок.

Третий аспект. Плеер воспроизводит звук, поэтому он должен иметь развитые возможности по воспроизведению звука, внезапно. DSP плагины, решение проблем ресемплинга, воспроизведения DSD на оборудовании, которое умеет только PCM и прочее.

В планах затащить эквалайзер и визуализацию milkdrop, а это скорее всего потребует реализации своего процессинга звука вместо mpv. Ну а там можно будет и над более сложными штуками подумать, если они кому-то будут нужны.

navrocky ★★
() автор топика
Ответ на: комментарий от navrocky

А зачем Qt5 если не секрет?

Она всё-таки компактнее, и можно переносить программу на не совсем новые системы, что тоже бывает нужно.

они очень близки

Меня больше всего выморозило, что они под флагом борьбы с не-юникодом выкинули QTextCodec (точнее, убрали в модуль совместимости, но знаем мы эти модули совместимости), потом работу с не-юникодом пришлось вернуть, уже в QStringEncoder/QStringDecoder. В итоге крестовый поход свёрнут, но совместимость сломана. Я видимо в свои проекты буду добавлять небольшой враппер, чтобы работало везде (модуль совместимости тащить не хочу, его всё равно выкинут в обозримое время).

В чём вопрос? Да, это виндовый аналог MPRIS

Просто буквы «DE» вводит в заблуждение, эта аббревиатура обычно всё-таки с линуксами ассоциируется. Я бы тогда написал

Ещё есть полноценная поддержка MPRIS (Linux) и SMTC (Windows), скачивание треков…

hobbit ★★★★★
()
Ответ на: комментарий от delidov_george

Если у MAX внезапно откроют исходники, это будет само по себе замечательное событие, гораздо важнее, чем то, на каком оно тулките. Ну а пока исходники не открыты, то и переписывать нечего.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Она всё-таки компактнее, и можно переносить программу на не совсем новые системы, что тоже бывает нужно.

Ну сейчас оно должно запускаться на любом практически линуксе 5-летней давности (в теории). AppImage собирается на старом Debian 11 (2021).

navrocky ★★
() автор топика
Ответ на: комментарий от delidov_george

А можно попросить MAX ещё переписать на Qt? ))

А на чём там он сейчас? Под Linux есть app? Не слежу вообще. Просто его пока в браузере гоняю если приспичит читнуть школьный чат 🙈

Ну и кстати это неблагодарное занятие, даже если исходники откроют, вряд ли кто-то решится себе ставить какой-то левый мессенджер, чтобы потом все нюдсы утекли.

navrocky ★★
() автор топика
Последнее исправление: navrocky (всего исправлений: 1)
Ответ на: комментарий от navrocky

Про конфиденциальность согласен - там же ещё и госсуслуги, медицина и прочее…

delidov_george ★
()
Ответ на: комментарий от delidov_george

Благодаря плееру увидел, что вся моя коллекция 192 kbps. А Яндекс обещал… Эх.

Хм, хм, может глюк какой-то, я поразбираюсь. А может они после прилётов подрезали отдаваемое качество. Что-то мне помнится я видел 320 kbps. А сейчас тоже 192 kbps все треки отдаются.

navrocky ★★
() автор топика

Яндекс позволяет использовать его сервис в сторонних приложениях? Не будет от них претензий к автору?

Jurik_Phys ★★★★★
()
Ответ на: комментарий от Jurik_Phys

Яндекс позволяет использовать его сервис в сторонних приложениях? Не будет от них претензий к автору?

Ну кто знает ) Но плееров и расширений для браузера которые позволяют качать с ЯМ - вагон.

В конце концов это решается вынесением плагина в другую репу под другим акком.

ЗЫЖ: ну и у меня в плеере просто так нельзя качать, надо в диалоге согласиться с тем что качать будешь лично для себя и не будешь пиратить. Скачал, запиратил, ты виноват а не плеер. Плеер предупреждал 😅

navrocky ★★
() автор топика
Последнее исправление: navrocky (всего исправлений: 2)

Ляяяя ТС. Короч ты ппц как меня вдохновил твоим проектом. Короч вот PR с android приложением которое делает по сути как у тебя для яндекс музыки

https://github.com/cloudmus/cloudmus/pull/5

Тут готовый release APK и запись экрана моего телефона с демонстрацией, что получилось

https://github.com/outZoNe/cloudmus/tree/add_android_client/YandexMus/DOCS


Если хочешь, то принимай реквест или не принимай)

romanlinux ★★★
()

Пожелание - сделать плавное затухание и нарастание в конце и в начале каждой мелодии при смене

Windows ★★★
()
Ответ на: комментарий от romanlinux

Если хочешь, то принимай реквест или не принимай)

Не ну классно что вдохновил ) На видео выглядит круто уже. Я конечно так сразу сейчас не смогу принять. Я ещё даже не продумывал как оно там будет для андроид делаться. Вижу пока три пути реализации:

  • приложение на QML, с переиспользованием всей логики которая сейчас есть в десктопном, так как заранее я предусмотрел MVVM архитектуру и достаточно только вьюхи переделать
  • нативное на Jetpack Compose с переиспользованием более низкого сервисного слоя на C++, но тогда надо отвязывать его от Qt
  • полностью нативное на Jetpack Compose (твой вариант), тогда надо тупо дублировать все фичи в две кодовые базы

Ещё был вариант с бэкендами на Kotlin, чтобы и нативно компильнуть при помощи K/N вместо питона для десктопа и под андроид просто либу затащить. Но этот путь не позволяет сделать стор и скачивание сторонних.

В планах развития у меня есть поддержка стора бэкендов. Основные цели:

  • возможность писать бэкенды и распространять сторонними разработчиками
  • безопасность бэкенда для конечных пользователей, нельзя просто взять и дать запускать левый бинарник или скрипт на уровне системы
  • возможность организовать стор без особых затрат с моей стороны на хостинги и прочую дребедень
  • возможность ставить бэкенды прямо в приложении на всех платформах (linux, windows, macos, android)

Как я себе его вижу:

  • Фронтенд предоставляет JS рантайм, по аналогии с нодой, например на QuickJS. Прокидывает в скрипт только необходимое API для фетчинга данных, работы с конфигом и т.д., плюс контролирует куда ходит скрипт (по манифесту), чтобы налево не ходил и не майнил там втихаря
  • бэкенд пишется на JS или TS (компилится в JS) + манифест + ресурсы. Работать будет на всех платформах (QuickJS очень лёгкий, память не ест, 1,5МБ рантайм)
  • всё это выкладывается сторонним разработчиком в репу на гихабе с README
  • cloudmus сканит репы на гитхабе по маске и предлагает поставить соответствующий бэкенд
  • все счастливы!

Соответственно это не такая простая задача 😅 Пусть пока MR полежит, я на него буду смотреть и думать )

navrocky ★★
() автор топика
Последнее исправление: navrocky (всего исправлений: 4)
Ответ на: комментарий от navrocky

Вайбкодинг и разработка с помощью агентов — две принципиально разные вещи. Вайбкодер не ревьюит код, а агенты помогают программисту выполнять обычную работу.

По моим наблюдениям, индустрия вполне осознаёт, что вайбкодинг — путь в никуда, чёрный ящик, тех долг и дыры в безопасности. Это область пет-проектов и прототипов.

Вообще не важно, использует ли программист агента. Всё равно что раньше учитывать, использует ли он IDE и StackOverflow. Важно то, насколько хорошо он владеет проектом. И если ему лень работать с кодом, значит нихрена он не владеет проектом.

kaldeon ★★
()
Ответ на: комментарий от Windows

Пожелание - сделать плавное затухание и нарастание в конце и в начале каждой мелодии при смене

Я уже пытался сделать бесшовное проигрывание треков, но с mpv это сложновато, нужен свой звуковой пайплайн. В планах эквалайзер, может ещё какие DSP эффекты, вот там можно будет замутить.

Хотя затухание можно и сейчас сделать… Добавлю в бэклог.

navrocky ★★
() автор топика
Ответ на: комментарий от Jurik_Phys

А что мешает послать его с его претензиями на хутор бабочек ловить? Де-юре разве есть какое-то нарушение, за которое можно подать в суд?

Wapieth ★★
()
Последнее исправление: Wapieth (всего исправлений: 1)
Ответ на: комментарий от yorshka

У SoundCloud очень всратая модель работы со сторонними клиентами: они дают тебе токен с ограничением по количеству прослушиваний на всех пользователей твоего софта.

Надо брать токен от официального клиента, значит. Никогда не понимал этих токенов, это из той же серии как недавняя история с orca - прога сама сообщает сервису кто она, а сервис ей верит.

firkax ★★★★★
()
Ответ на: комментарий от kaldeon

Индустрия идёт к тому, чтобы совсем не знать про код, потрму что ей это выгодно. Уже сейчас большинство не смотрит в то, что написал агент, и вместо этого отдают на ревью другим агентам.

Puzan ★★★★★
()

использую cmus. почти все то же самое, только без яндекса …

tempusnemini
()
Ответ на: комментарий от navrocky

А можешь подробнее, что не получилось бы сделать на qml?

rumgot ★★★★★
()
Ответ на: комментарий от navrocky

TEYES SPRO/CC2 Android 8.1

Мне вот что гугл пишет:

Совместимость по версиям Qt6

• Qt 6.0 – Qt 6.4: Официально поддерживали Android, начиная с версии 6.0 (API 23). Собрать приложение под Android 8.1 на этих версиях можно без каких-либо проблем.

• Qt 6.5 – Qt 6.7: Минимальная официально поддерживаемая версия поднялась до Android 8.0 (API 26). Так как Android 8.1 имеет API 27, ваше устройство полностью укладывается в эти требования.

• Qt 6.8 и новее (включая актуальные LTS-релизы): Официальные системные требования были повышены. Теперь минимальной поддерживаемой версией официально является Android 9.0 (API 28).

Loki13 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.