# Яндекс Музыка для Omarchy [English version](README.md) Нативный мини-плеер Яндекс Музыки для оболочки [Omarchy](https://omarchy.org/). Браузер используется только для Device OAuth, а воспроизведение работает в фоне через `mpv`. > Проект использует неофициальную библиотеку [yandex-music-api](https://github.com/MarshalX/yandex-music-api) и не связан с компанией Яндекс. Для воспроизведения полных треков может потребоваться подписка Яндекс Музыки. ## Скриншоты
Медиатека и поиск
Встроенные настройки
Авторизация через Яндекс Device OAuth
## Возможности - Нативный мини-плеер в верхнем баре Omarchy - Фоновое воспроизведение без открытого браузера - Экраны «Сейчас», «Медиатека» и единый каталог «Поиск» для треков, исполнителей, альбомов и плейлистов - «Моя волна» с настройками настроения, рекомендаций, языка и обратной связью для более точной выдачи - Лайки, «Не рекомендовать», пользовательские и персональные плейлисты, история, любимые сущности и радиостанции - Добавление треков в плейлисты, создание приватных плейлистов, удаление из собственных плейлистов и рекомендации для их дополнения - Синхронные тексты песен с подсветкой, автопрокруткой и переходом к выбранной строке - «Радио по треку» с последовательностью похожих рекомендаций и radio feedback - Сведения о релизе и участниках записи, загружаемые по требованию - Воспроизведение по порядку, перемешивание, повтор очереди и повтор трека - Системные медиаклавиши и безопасная MPRIS-интеграция - Восстановление очереди, позиции, громкости, паузы и настроек - Настраиваемый состав бара, форма обложки, бегущая строка и уведомления - Повторные попытки при обрыве потока и автоматическое обновление OAuth-токена ## Интерфейс и управление ### Верхний бар В баре могут отображаться кнопки предыдущего трека, Play/Pause и следующего трека, обложка, исполнитель, название и линия прогресса. Нажмите на обложку или информацию о треке, чтобы открыть попап. Длинная строка «Исполнитель — Название» может обрезаться или плавно прокручиваться целиком. Ширина информации, кнопки, обложка и прогресс настраиваются. ### Сейчас играет - Ползунок перемотки срабатывает после отпускания; реальная позиция остаётся видимой, а целевая динамически показывается в скобках - Previous, Play/Pause и Next образуют крупную центрированную transport-группу; Play/Pause визуально является главным действием, а Like и меню «Действия» симметрично обрамляют её по краям - Mute, ползунок громкости и процент находятся в верхней части меню «Действия»: основной экран стал ниже, а редкое управление не конкурирует с воспроизведением - Сердце или клавиша `L` добавляет либо удаляет лайк; меню «Действия» или клавиша `D` переключает «Не рекомендовать», а новый дизлайк в «Моей волне» сразу пропускает трек - Меню «Действия» также содержит добавление текущего трека в плейлист, «Радио по треку», режим очереди и вход в настройки - Нажатие на обложку плавно разворачивает её на ширину попапа и оставляет сведения о треке, полосу прогресса с перемоткой и ту же иерархию управления; режим сохраняется при закрытии и повторном открытии попапа, а повторное нажатие или `Escape` возвращает обычный вид - Явные вкладки «Список», «Текст» и «О треке» заменяют группу неочевидных иконок над очередью - Во вкладке «Текст» LRC подсвечивается и прокручивается по позиции, а нажатие на строку перематывает трек; если синхронный LRC недоступен, показывается обычный текст, а отсутствие текста или ошибка загрузки не прерывают плеер - «О треке» открывает альбом, дату релиза, жанр, лейблы, номер трека, версию, описание и credits, доступные для текущей композиции - Любой трек очереди можно выбрать напрямую - При наведении на строку трека появляется кнопка плейлиста; в очереди она заменяет длительность, открывает выбор собственного плейлиста или создание нового приватного плейлиста, не запускает строку, а плейлисты с этим треком помечаются и не принимают дубликат - Нажатие на исполнителя или альбом открывает его страницу в каталоге «Поиск» Открытие «Мне нравится» или пользовательского плейлиста медиатеки **не прерывает текущий трек**. Сначала загружается отдельный список, а воспроизведение начинается только после ручного выбора композиции. Большие коллекции загружаются страницами по 50 треков, следующая страница подгружается автоматически при достижении конца списка. Недавно открытые коллекции и все уже загруженные для них страницы мгновенно восстанавливаются из краткосрочного кэша в памяти. Тексты и подробные сведения загружаются только по запросу и хранятся лишь в памяти для текущего и нескольких недавно открытых треков. ### Медиатека - Просмотр «Мне нравится» и собственных плейлистов без автоматического запуска - В собственном плейлисте можно удалить выбранный трек после подтверждения или открыть рекомендации и добавить один из предложенных треков - Лениво загружаемые персональные подборки: Плейлист дня, Тайник, Премьера и Дежавю - Раздел «Недавно слушали» с треками и контекстами истории, загружаемыми страницами по 50 элементов - Любимые альбомы, исполнители и сохранённые чужие плейлисты с переходом на существующие страницы каталога - Каталог жанровых, тематических и других доступных радиостанций с поиском и автоматической пагинацией при скролле; очередь запускается только после явного выбора станции - Разделы и загруженные данные кэшируются только в памяти на ограниченное время и очищаются при выходе из аккаунта или перезапуске backend - Раскрываемая «Моя волна» с настройками: - настроение: любое, весёлое, энергичное, спокойное или грустное; - подбор: сбалансированный, больше любимого, популярное или больше нового; - язык: любой, русская или зарубежная музыка. ### Поиск Поиск работает по трекам, исполнителям, альбомам и плейлистам; режим **Все** показывает четыре отдельные секции. После ввода минимум двух символов и паузы 300 мс появляются подсказки; пока они загружаются, внутри поля вращается индикатор. Выберите подсказку клавишами ↑/↓ и запустите поиск через Enter или нажатием мыши. Результаты загружаются страницами по явной кнопке «Загрузить ещё». Страницы исполнителя, альбома и плейлиста открываются внутри той же вкладки «Поиск» и не меняют воспроизведение. У каждой строки трека есть отдельное действие добавления в собственный плейлист; оно не запускает воспроизведение. Возврат восстанавливает неизменными запрос, фильтр, загруженные страницы и модели результатов. Альбом показывает метаданные и треки; у исполнителя сначала идут популярные треки, затем независимо пагинируемые «Альбомы» и «Синглы», а в конце — до десяти похожих исполнителей; плейлист показывает доступные треки. Воспроизведение начинается только после явного выбора трека. При запуске популярных треков исполнителя очередь в фоне догружает следующие страницы по 20 треков и продолжается за пределами первоначально видимого списка. Списки каталога используют собственную виртуализированную прокрутку под неподвижными вкладками и элементами управления. Обложки автоматически повторяют загрузку после временного сбоя CDN и показывают fallback-иконку, если изображение осталось недоступным. ### Настройки Настройки открываются из подписанного меню «Действия» и имеют собственную кнопку возврата в левом верхнем углу. Доступно: - продолжение воспроизведения после перезапуска сервиса; - раздельное восстановление очереди, позиции и громкости; - лучшее доступное качество или экономия трафика; - отображение кнопок, исполнителя, названия, обложки и прогресса в баре; - квадратная, скруглённая или круглая обложка; - компактная, обычная или широкая информация о треке; - обрезка или плавная прокрутка длинной строки; - уведомления о смене трека с обложкой альбома; - выход из аккаунта с подтверждением. Настройки хранятся в `~/.config/omarchy-yandex-music/preferences.json` с правами `600`. ## Системные медиаклавиши Backend регистрирует безопасный MPRIS-плеер с названием **Yandex Music**. Omarchy и аппаратные клавиши управляют Play/Pause, предыдущим и следующим треком. Через MPRIS публикуются метаданные и обложка, но никогда не передаются временные ссылки на аудиопоток. ## Требования - Omarchy 4.x - Python 3 - `mpv` - `jq` - `util-linux` (`flock`) - `coreutils` (`sha256sum`) - Подключение к интернету ## Установка Установите и включите плагин стандартной командой Omarchy: ```bash omarchy plugin add https://github.com/vornashev/omarchy-yandex-music.git --enable ``` Вручную выполнять `git clone`, `cd` или использовать `sudo` не нужно. При первой загрузке плагин автоматически установит Python-окружение, CLI и пользовательский systemd-сервис. Python-пакеты устанавливаются только из полного набора wheels, зафиксированного по версиям и SHA-256 в `requirements.txt`; installer не обновляет `pip` и не исполняет VCS-зависимость из сети. Первичная настройка может занять некоторое время. Будут созданы: - `~/.config/omarchy/plugins/vornashev.yandex-music/` - `~/.local/share/omarchy-yandex-music/` - `~/.local/bin/omarchy-yandex-music` - `~/.config/systemd/user/omarchy-yandex-music.service` После установки нажмите на плеер в баре, запустите Device OAuth и скопируйте показанный код кнопкой рядом с ним перед переходом на страницу Яндекса. После авторизации браузер можно закрыть. ## Горячие клавиши Внутри попапа: Буквенные команды привязаны к физическим клавишам QWERTY, поэтому работают в английской и русской раскладках. Они активны только пока попап открыт и не перехватываются в поле поиска или настройках. В интерфейсе показываются латинские мнемоники. Отдельной клавиши Stop нет: `Space` приостанавливает воспроизведение без потери позиции. - `1`, `2`, `3` — «Сейчас», «Медиатека», «Поиск»; - `Space` — Play/Pause; - `N` — следующий трек; - `P` — предыдущий трек; - `L` — поставить или убрать лайк; - `D` — поставить или убрать отметку «Не рекомендовать»; - `F` — развернуть или свернуть режим обложки; - `C` — скопировать код Device OAuth во время авторизации; - `Escape` — закрыть меню «Действия», свернуть обложку, вернуться из настроек или закрыть попап. Аппаратные медиаклавиши работают через MPRIS. ## Обновление ```bash omarchy plugin update vornashev.yandex-music ``` Backend обновится автоматически при загрузке обновлённого плагина. Обычное обновление и перезапуск сервиса сохраняют OAuth-токен; его удаляют только явный выход из аккаунта и uninstall с `--purge`. ## Удаление Используйте скрипт плагина, чтобы вместе с ним удалить фоновый сервис и CLI. Сохранить OAuth-токен, настройки и состояние воспроизведения: ```bash ~/.config/omarchy/plugins/vornashev.yandex-music/uninstall.sh ``` Удалить также все локальные данные: ```bash ~/.config/omarchy/plugins/vornashev.yandex-music/uninstall.sh --purge ``` ## Диагностика ```bash systemctl --user status omarchy-yandex-music.service journalctl --user -u omarchy-yandex-music.service -n 100 omarchy-yandex-music status | jq omarchy restart shell ``` ## Конфиденциальность и файлы - OAuth-токен: `~/.config/omarchy-yandex-music/token.json` - Состояние: `~/.config/omarchy-yandex-music/state.json` - Настройки: `~/.config/omarchy-yandex-music/preferences.json` - Временные обложки уведомлений: `$XDG_RUNTIME_DIR/omarchy-yandex-music-covers/` Токен, состояние и настройки имеют права `600` и исключены из репозитория. Кэш обложек временный и удаляется после перезагрузки. ## Лицензия [MIT](LICENSE)