Об этом проекте

TastyTunes представляет собой настольное приложение, которое служит пультом дистанционного управления для сетевых плееров Cambridge Audio, построенных на платформе StreamMagic. В README указаны поддерживаемые модели: Evo 75/150, CXN100 и CXN (V2), MXN10, AXN10, EXN100, Edge NQ и 851N; разработка и ежедневное тестирование проводятся на базе Evo 150. Приложение работает локально, взаимодействует со стримером через сеть пользователя и не требует наличия аккаунта или облачного сервиса. Инсталляторы доступны для macOS 11+ (universal, подписанные и нотаризованные), Windows 10+ (единый подписанный установщик для x64 и arm64) и Linux (AppImage для x64 или arm64, включая 64-битную Raspberry Pi OS). При запуске приложение обнаруживает устройства StreamMagic в сети через SSDP, при этом IP-адрес можно ввести вручную, если автоматический поиск не дал результатов. Демо-режим позволяет использовать все функции приложения с помощью встроенного виртуального стримера и двух sample-библиотек без наличия реального оборудования. Экран «Now Playing» отображает обложку альбома в крупном размере на размытом фоне, детали трека, бейджи формата (кодек, частота дискретизации, разрядность, lossless и MQA), а также индикатор качества сигнала, состояния которого различаются по форме и цвету. Помимо основного окна, предлагаются полноэкранный режим Display, безрамочный мини-плеер, который всегда находится поверх других окон, и опциональная панель в меню или системном трее. Функция библиотеки объединяет все локальные медиасерверы UPnP и USB-накопитель стримера в представления «Артисты», «Альбомы» и «Треки». В основе лежит перестраиваемый локальный индекс, поддерживающий поиск по мере ввода во всех источниках. Фильтрация и сортировка доступны по жанру, десятилетию, формату, динамическому диапазону, а также с разделением на альбомы и сборники. Работа с альбомами сохраняет приглашенных гостей на своих местах, группирует сборники в разделе Various Artists, отображает разделители дисков для многодисковых наборов и сворачивает многотомные бокс-сеты за селектором томов. Отсутствующие обложки могут быть загружены из Cover Art Archive. Помимо воспроизведения из библиотеки, доступны избранное, локально хранящиеся плейлисты, основанные на определении контента, очередь с возможностью множественного выбора и переупорядочивания перетаскиванием, 99 слотов пресетов стримера (вызываемых клавишами с цифрами, каждый с собственным уровнем громкости), семиполосный эквалайзер с tilt и balance, переключение источников и просмотр каталога radio-browser.info с категориями по жанрам и десятилетиям. Синхронизированные тексты песен поступают из LRCLIB и подсвечиваются построчно; клик по строке перематывает трек на этот момент. Биографии артистов и факты об альбомах берутся из MusicBrainz и Wikipedia с указанием ссылок на источники. Аудиоанализ считывает файлы с локальных медиасерверов для отрисовки формы волны в полосе прокрутки и под обложкой, а также для вычисления значения динамического диапазона по процедуре TT-DR базы данных DR, что затем становится опцией фильтрации и сортировки в Библиотеке. Ограниченный лог недавно прослушанного и запись прослушивания в виде ежегодных файлов JSON Lines отслеживают, что и как долго воспроизводилось; обе функции можно очистить или отключить. Скробблинг в ListenBrainz отправляет данные о прослушивании только после фактического воспроизведения и повторяет неудачные попытки отправки. Автоматизация включает таймеры сна (от 15 минут до двух часов или до конца трека) с опциональным затуханием громкости, а также расписания по дням недели, которые могут пробуждать устройство для воспроизведения пресета с плавным нарастанием громкости или переводить его в режим ожидания. Опциональный MCP-сервер, выключенный по умолчанию, открывает возможности приложения для локальных ИИ-агентов, таких как Claude Code или Claude Desktop. Он охватывает управление воспроизведением и громкостью, пресеты и источники, библиотеку и радио, избранное, тембр и эквалайзер, таймеры сна, запись прослушивания и аудиоанализ. Инструменты редактирования отделены и отключены до ручного включения, а агенты наследуют лимит громкости интерфейса, защитные механизмы питания и переключатели соединения. В README также приведен пример rest_command для Home Assistant, который вызывает эндпоинт MCP без дополнительных интеграций. В документации проекта точно указано, какой сетевой трафик покидает машину: для управления стримером или просмотра библиотеки за пределы локальной сети ничего не отправляется. Загрузка текстов, контекста артистов и альбомов, недостающих обложек, проверка обновлений и поиск по радио могут быть отключены, а скробблинг выключен до добавления токена. В приложении нет аналитики, телеметрии или системы аккаунтов; встроены консоль запросов и консоль сырого трафика стримера. Стек технологий: Electron с electron-vite, React 19, TypeScript, Tailwind CSS v4 и Zustand. Основной процесс обрабатывает ввод-вывод устройства через SSDP и WebSocket SMOIP стримера. Стример рассматривается как единственный источник истины: команды отправляются, состояние возвращается, и интерфейс перерисовывается на основе этих данных. Проект выпущен под лицензией GNU General Public License v3.0, разработка ведется в ветке develop, а CI выполняет проверки typecheck, ESLint и Prettier.