REGSTAR
← Все проекты
Иконка MusicArkСтабильная версия · v1.0.0

> windows / управление музыкальной коллекцией

MusicArk

Управление локальной музыкальной библиотекой относительно коллекции Яндекс Музыки: сопоставление, поиск отсутствующих треков, версии записей, метаданные, загрузки и контролируемая синхронизация.

MusicArk разделяет идентичность трека, версию записи и покрытие коллекции вместо того, чтобы считать совпадение названий достаточным. Flutter-интерфейс работает с Python-бэкендом, локальной SQLite-базой, кешем провайдера и явными границами для записи файлов и действий в Яндекс Музыке.

Windows x64FlutterPythonSQLiteRU/ENMIT
Интерфейс MusicArk
v1.0.0Реальный интерфейс · открыть в полном размере ↗
ПлатформаWindows x64
Релизv1.0.0
Опубликован28 августа 2026
Схема данныхSQLite 1.9.0
ЛицензияMIT

> контекст

Локальная коллекция и библиотека стриминга — не одно и то же

MusicArk работает с разницей между музыкой, которую пользователь хочет хранить, и файлами, которые реально находятся на диске. Неопределённость показывается явно, а похожие метаданные сами по себе не считаются доказательством совпадения.

01 / проблема

Легко перепутать идентичность трека и наличие файла

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

02 / подход

Сначала идентичность, потом действия

MusicArk сначала строит кеш провайдера и индекс локальной библиотеки, затем выполняет консервативный Identity Matching, отдельно анализирует Variant, выводит Coverage из авторитетного состояния и только после этого предлагает загрузки, работу с метаданными, upload/recovery или Controlled Sync.

> возможности

Основные возможности

v1.0.0 содержит полный desktop MVP для Windows x64 и не требует отдельной установки Python.

01YM

Яндекс Музыка

Вход по пользовательскому токену и cache-first просмотр любимых треков, плейлистов и альбомов.

02LOCAL

Локальная библиотека

Индексирование нескольких папок без изменения файлов при обычном Scan; технические поля и метаданные сохраняются в SQLite.

03MATCH

Identity Matching

Консервативное сопоставление, где точность важнее полноты. Результат остаётся MATCHED, CONFLICT или UNMATCHED без принудительных догадок.

04VAR

Версии записей

Анализ различий записи отдельно от идентичности и пользовательские метки ORIGINAL / CENSORED с ручной проверкой сомнительных случаев.

05COVER

Coverage и Missing

Состояния covered / missing / needs_review / not_analyzed выводятся из актуального Matching и пользовательского triage, без второго движка сопоставления.

06DL

Загрузки

Сохраняемая очередь с Wanted, retry, cancel, remove и массовыми действиями; долгоживущий worker не пересоздаёт provider client для каждого трека.

07META

Редактор метаданных

Явная запись MP3/ID3, обложки, переименование и сравнение с Яндекс Музыкой через временную копию, проверку и атомарную замену.

08SYNC

Controlled Sync

Неизменяемый план, проверка устаревания, подтверждение, повторная валидация перед Apply и постановка только актуальных загрузок.

09PLAY

Воспроизведение и восстановление

Воспроизведение локальных и подготовленных треков, ручная загрузка собственных/разрешённых MP3 в Яндекс Музыку и recovery-сценарии.

> интерфейс

Скриншоты приложения

Актуальные скриншоты MusicArk из репозитория проекта. Изображения отображаются в исходных пропорциях и открываются в полном размере.

Экран MusicArk 1
01Экран MusicArk 1
Экран MusicArk 2
02Экран MusicArk 2
Экран MusicArk 3
03Экран MusicArk 3
Экран MusicArk 4
04Экран MusicArk 4
Экран MusicArk 5
05Экран MusicArk 5
Экран MusicArk 6
06Экран MusicArk 6

$ поток данных

Поток данных продукта

Желаемая коллекция, реальные файлы, идентичность и признаки версии записи остаются разными сущностями. Coverage формируется только после анализа соответствий.

01Кеш Яндекс МузыкиЖелаемая коллекция
02Локальный индексРеальные файлы и метаданные
03Matching + VariantИдентичность + признаки версии
04Coveragecovered / missing / review / unknown

$ архитектура

Архитектура приложения

Интерфейс и бэкенд разделены явными границами. Токены провайдера и защищённые media URL остаются на Python-стороне и не передаются во Flutter.

Flutter desktop

Постоянная оболочка приложения, Яндекс Музыка, Local Library, Matching/Coverage, Downloads, Sync, Metadata, Settings/Help/About и RU/EN интерфейс.

Python application layer

Интеграция с провайдером, локальный индекс, matching, variant analysis, coverage, downloads, metadata, sync planning, updates и feedback bridges.

SQLite

Кеш коллекций Яндекс Музыки, индекс локальной библиотеки, matching state, variant results, coverage triage, downloads, settings и sync history.

Bridge-процессы

Явные JSON/process boundaries соединяют Flutter с Python-сервисами. Бинарные обложки и credentials не проходят через metadata bridge.

Граница credentials

Токен Яндекс Музыки хранится в системном хранилище через keyring; временные signed URLs и auth/cookie данные не сохраняются в task payload.

Windows distribution

Flutter-приложение и замороженный Python runtime входят и в installer, и в portable; пользовательские данные отдельно хранятся в %LOCALAPPDATA%\MusicArk.

> инженерные решения

Инженерные решения

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

Matching

Точность важнее полноты

Ложный auto-match способен испортить последующие решения Coverage и Sync, поэтому сомнительные кандидаты остаются conflict или unmatched.

Coverage

Неизвестно — не значит отсутствует

Missing появляется только для актуального авторитетного UNMATCHED. Stale, conflict и unanalyzed остаются отдельными состояниями.

Metadata

Только явная запись

Scan, Matching, Variant, Coverage и просмотр Sync-plan не меняют аудиофайлы. Изменение MP3 происходит только после действия пользователя в редакторе.

Filesystem

Не превращать приложение в двустороннее зеркало

MusicArk не удаляет, не переименовывает, не перемещает и не перезаписывает существующие треки автоматически ради совпадения с Яндекс Музыкой.

Sync

План → подтверждение → повторная проверка

Apply отказывается от устаревшего плана и повторно проверяет Coverage и очередь перед постановкой загрузок.

Provider failures

Локальная библиотека должна оставаться доступной

Ошибки внешних API или загрузок ограничиваются соответствующей функцией и не должны блокировать работу с кешем и локальной коллекцией.

> технологии

Технологический стек

FlutterWindows desktop UI
Dartruntime интерфейса
Python ≥ 3.10backend runtime
SQLiteлокальное хранилище
yandex-music 3.0.0интеграция с провайдером
keyring 25.7.0хранилище credentials
mutagenметаданные аудио
httpx / requestsсетевой слой
ffmpegнеобязательная audio verification
PyInstallerзамороженный Python runtime

> безопасность

ЯВНЫЕ ГРАНИЦЫ

Файлы пользователя и credentials имеют явные границы.

MusicArk консервативно работает с локальными файлами, credentials и обновлениями. Обычная аналитика read-only, секреты провайдера остаются вне Flutter, а запуск installer возможен только после проверки manifest, размера, SHA-256 и подтверждения пользователя.

  • Токен Яндекс Музыки хранится через системный keyring
  • Flutter не получает токен и защищённые media URL
  • Scan/Matching/Variant/Coverage не изменяют аудиофайлы
  • Запись metadata использует временную копию и атомарную замену
  • Updater проверяет размер и SHA-256
  • Feedback diagnostics исключают пути библиотеки и credentials
Важно: MusicArk использует неофициальный API Яндекс Музыки через стороннюю библиотеку yandex-music. Это не официальный продукт Яндекса, и проект не аффилирован с Яндексом.

$ стабильный_релиз

MusicArk v1.0.0

v1.0.0 — первый стабильный публичный релиз для Windows. Installer и portable включают Flutter-приложение и замороженный Python backend runtime; отдельно устанавливать Python не требуется.

Installer SHA-256A94F53F01BE23033405A6BAB2909436CC4CC1B1E99B19F57DD3A1307869BD3B8
Portable SHA-256105E440C266B8EF3E9DDF2E40479FD4BEDF3ADF7253DD7A15D45127D51135D0E
Версия1.0.0
ПлатформаWindows x64
Установщик51 994 403 байт
Portable70 071 926 байт
ПодписьUNSIGNED
КаналСтабильный

> ссылки проекта

Ресурсы проекта

GitHub остаётся источником истины для release notes, архитектуры, границ исходного кода, сторонних лицензий и задач.