pimenov.ai

База знаний

Личный музыкальный архив без потери оригиналов

Методология безопасной сборки личной музыкальной медиатеки из облака, торрентов, дисков и старых папок: оригиналы, метаданные, QA и откат.

Опубликовано Обновлено

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

Начало этой истории описано в статье «Я хотел просто слушать редкие DJ-миксы, а построил личный музыкальный архив». Продолжение — в материале «Как один музыкальный архив превратился в домашнюю медиасистему». Пример переноса большого облачного архива есть в статье «Как мы перегоняем терабайт с Яндекс.Диска на Synology под присмотром Codex». Короткая версия результата собрана в кейсе «Как редкие DJ-миксы стали личным музыкальным архивом».

MEGA, Synology и Navidrome можно заменить другими хранилищами и плеерами. Главный принцип остаётся прежним: источник сохраняется, исправления выполняются в отдельной копии, а результат принимает владелец в своём реальном сценарии прослушивания.

Целевая архитектура архива

СлойНазначениеРазрешённые действияДоказательство
Загружаемый источникОблако, торрент-папка, диск или старое хранилищеЧтение и инвентаризацияСнимок путей, размеров и количества объектов
Исходный архивЛокальная неизменяемая копияИмпорт без перезаписиРеестр и отсутствие изменений после фиксации снимка
Рабочая библиотекаОтдельная версионная копияКлассификация, теги, обложки и исключенияПолный реестр и проверка выбранных файлов
МедиасерверКаталог, поиск и воспроизведениеПодключение подготовленной версииЗавершённое сканирование и сверка счётчиков
Клиент владельцаРеальный сценарий прослушиванияОбновление, поиск, воспроизведение и перемоткаПодтверждение владельца и статус ACCEPTED
🔴
Оригиналы не переименовываются, не ретегируются и не удаляются. Все исправления выполняются в новой версионной библиотеке, которую можно отбросить и собрать заново.

Чеклист быстрой проверки

  • Источники и зафиксированный исходный архив доступны рабочему процессу только для чтения.
  • Импорт использует одностороннее копирование и не передаёт удаления или переименования обратно.
  • До обработки сохранён реестр: путь, размер, формат, длительность, техническое состояние, теги и контрольная сумма.
  • Каждый файл получил итоговую классификацию.
  • Точные и вероятные дубликаты разделены; автоматического удаления нет.
  • Метаданные меняются только в производных копиях, а причина изменения записывается в реестр.
  • Повреждённые и неоднозначные файлы исключены из публикации, но сохранены в источнике.
  • Новый кандидат собран рядом с активной библиотекой и имеет уникальную версию.
  • Медиасервер видит только подготовленную версию; музыкальная папка по возможности подключена только для чтения.
  • Перед переключением сохранены предыдущая библиотека, конфигурация и данные каталога.
  • Полное сканирование завершено и подтверждено доступными счётчиками, логами или интерфейсом сервера.
  • ACCEPTED ставится только после проверки в реальном клиенте владельца.

Безопасная загрузка из источника

Первый проход должен читать и копировать файлы, не управляя прежним хранилищем. Двусторонняя синхронизация, автоматическая очистка и перенос вместо копирования создают лишний риск.

Официальное руководство MEGAcmd для версии 2.6.0 подтверждает, что команда get загружает удалённый файл или папку, а sync настраивает двустороннюю синхронизацию: добавления и удаления повторяются с обеих сторон. Поэтому для первичного импорта из MEGA используйте загрузку в отдельный каталог, а не sync.

ИсточникБезопасный первый проходОсновной риск
MEGA и другие облакаПолучить список объектов, затем скачать в отдельный каталогДвусторонняя синхронизация может распространить удаление
Торрент-папкаОставить раздаваемые файлы на месте и скопировать ихПереименование или ретегирование ломает раздачу
Внешний диск или старый компьютерСнять реестр и копировать партиями с проверкойНестабильный носитель может отказать во время прохода
NAS или общая папкаПодключить исходную папку только для чтенияОшибочные права могут разрешить массовую перезапись
Действующая медиатекаСкопировать доступные аудиофайлы в исходный слойБаза плеера не заменяет сами файлы

Практика для Яндекс.Диска описана в статье о прямом переносе на Synology, а для MEGA — в руководстве по MEGAcmd.

  1. Получите полный список объектов без изменения файлов.
  2. Проверьте конфликты путей и коллизии имён.
  3. Загружайте во временный файл, проверяйте размер и только затем выполняйте атомарное переименование.
  4. Если назначение уже существует, сохраните его и зафиксируйте конфликт.
  5. Вероятные и неоднозначные совпадения отправляйте в карантин; конфликтующие классификации оставляйте в REVIEW_REQUIRED.

В одном проходе с MEGA 200 новых объектов были добавлены в локальный исходный слой без изменения существующих файлов. Повторный запуск ничего не скопировал. Для торрент-папки аналогичной проверкой служит неизменность раздаваемых файлов, для внешнего диска — совпадение количества, размеров и контрольных сумм.

Реестр и классификация файлов

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

Классификация (Disposition)Когда ставитьЧто происходит дальше
LIBRARY_CANDIDATEФайл исправен, назначение понятноПопадает в версионный кандидат
QUARANTINE_DUPLICATEЕсть точный или вероятный дубльСохраняется до отдельного решения
HOLD_SOURCE_DAMAGEНе проходит декодирование или проверка контейнераНе публикуется и не исправляется автоматически
UNSUPPORTED_PRESERVEDФормат не входит в текущую библиотекуОстаётся в исходнике и реестре
ALREADY_PRESENTПроисхождение в активной библиотеке доказаноПовторно не добавляется
REVIEW_REQUIREDДанных недостаточно или классификации конфликтуютОжидает человеческого решения

В одном из проходов реестр распределил 826 файлов в библиотеку «Музыка», 449 — в «Моё», 285 оставил в HOLD, выделил 10 точных и 146 вероятных дубликатов. Источник получил ноль записей.

Разбор дубликатов и повреждений

  • Одинаковая контрольная сумма с высокой практической уверенностью указывает на совпадение байтов, но ещё не выбирает каноническое имя или расположение.
  • Близкая длительность и одинаковое название создают вероятную пару, которую нужно проверить прослушиванием.
  • FLAC и MP3 одного релиза могут сохраняться для разных сценариев. Решение о каноническом формате фиксируется явно.
  • Перед любым решением по повреждённому файлу сохраняются его контрольная сумма и ошибка декодера.

В практическом проходе пять пересекающихся релизов были оставлены в FLAC, их MP3-версии отправлены в карантин, а релизы только в MP3 сохранены в библиотеке. Один повреждённый трек остался в HOLD и не попал в Navidrome.

Метаданные в производных копиях

По состоянию на 8 сентября 2026 года официальное руководство Navidrome указывает, что каталог строится по тегам аудиофайлов и не использует имена папок и файлов для группировки треков. Минимальный набор включает Title, Artist, Album, Album Artist и Track Number. Для многодисковых релизов используйте Disc Number, чтобы различать диски.

  1. Сохраните исходные теги и предполагаемые новые значения в реестре.
  2. Автоматически применяйте только правила с точным условием, например заранее утверждённое соответствие конкретного исходного значения.
  3. Используйте папку как подсказку, а не единственное доказательство.
  4. Исправляйте нечитаемую кодировку только обратимым преобразованием с проверкой результата.
  5. Нетегируемые файлы сохраняйте побайтно неизменными; обложку при необходимости размещайте рядом отдельным файлом.

Для нескольких исполнителей Navidrome рекомендует многозначные теги ARTISTS и ALBUMARTISTS, если формат и редактор их поддерживают. Отдельные ARTIST и ALBUMARTIST при этом могут задавать отображаемую подпись. Такой способ точнее разделителей внутри одной строки.

В проходе восстановления артистов число пустых Artist уменьшилось с 328 до 65, а существующие непустые значения не менялись. В другом проходе были исправлены 34 строки с повреждённой кодировкой; 807 строк остались побайтно неизменными.

Версионная сборка и подключение Navidrome

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

services:
  navidrome:
    image: deluan/navidrome:<PINNED_VERSION>
    user: "<UID>:<GID>" # владеет /data и может читать /music
    environment:
      ND_SCANNER_SCANONSTARTUP: "false"
    volumes:
      - /srv/navidrome/data:/data
      - /srv/music/candidates/listener-v8:/music:ro

Официальная Docker-документация Navidrome подтверждает разделение прав: каталог /data должен быть доступен для чтения и записи, поскольку там создаются база и кэш; для /music достаточно чтения. Значения PUID и PGID официальный образ не использует — UID и GID задаются директивой user. Запуск контейнера от root не рекомендуется как способ исправления прав.

⚠️
Отключение Scanner.ScanOnStartup в примере относится к контролируемому публикационному окну. Постоянную конфигурацию выбирайте отдельно.

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

Доступность сервера ещё не подтверждает полноту индекса. Для новой библиотеки нужны полное сканирование, сверка каталога и отдельная клиентская проверка.

navidrome scan --full

# Для выбранных папок; идентификатор библиотеки и путь разделяются двоеточием:
navidrome scan --target 1:Music/Rock --target 2:Audiobooks

В Docker Compose официальный справочник командной строки Navidrome (CLI) предлагает запускать полный проход так:

docker compose run --rm navidrome scan --full

CLI-контейнер должен использовать те же версию образа, тома, окружение и конфигурацию, что и основной сервер. Для автоматизации полезно явно указывать файл конфигурации глобальным флагом -c или --configfile.

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

Один реальный запуск пришлось откатить: сканирование при запуске началось одновременно с целевым проходом, счётчики устарели, а база закрылась. После восстановления прежнего состояния публикация была повторена с временным ND_SCANNER_SCANONSTARTUP=false.

Переход PUBLISHED → ACCEPTED

СостояниеЧто доказаноЧего ещё нет
PUBLISHEDВерсия подключена, индекс обновлён, технические проверки прошлиПроверки на устройстве владельца
PUBLISHED_PENDING_QAТехническая часть стабильна, запрос проверки зафиксированОбновление, поиск, воспроизведение, перемотка и визуальная проверка
ACCEPTEDВладелец подтвердил клиентский сценарийКонтур закрыт, доказательства сохранены

Проверьте библиотеку в приложении, которым действительно пользуется владелец:

  1. Найдите новый репрезентативный релиз и старый контрольный трек.
  2. Проверьте библиотеку, исполнителя, альбом, название и обложку.
  3. Запустите воспроизведение минимум на 10 секунд и перемотайте трек.
  4. Повторите воспроизведение через используемый удалённый маршрут.
  5. Убедитесь, что HOLD-файл отсутствует, а старый контрольный трек работает.

По состоянию на 8 сентября 2026 года официальный каталог клиентов Navidrome указывает Amperfy как OpenSubsonic-клиент для iOS, iPadOS и macOS с автономным режимом и интеграцией CarPlay. Arpeggi указан как OpenSubsonic-клиент для iOS и iPadOS 17+ и по-прежнему распространяется через TestFlight.

В одном проходе серверная публикация осталась в состоянии PUBLISHED_PENDING_QA из-за отсутствия проверки в Amperfy. В другом Сергей обновил библиотеку и подтвердил воспроизведение в приложениях, после чего состояние перешло из PUBLISHED в ACCEPTED. Отдельное исправление метаданных стало ACCEPTED после проверки примеров в Arpeggi.

Эталонный шаблон доказательств

job:
  source_snapshot: <manifest-sha256>
  source_writes: 0
  candidate: listener-v8
  dispositions:
    library: <count>
    quarantine_duplicate: <count>
    hold_source_damage: <count>
  verification:
    selected_pass: <count>
    selected_fail: 0
    source_or_mount_read_only: true
    full_index: true
    catalog_check: ok
  publication:
    state: PUBLISHED_PENDING_QA
    rollback_bundle: <path>
  consumer_qa:
    client: <actual-owner-client>
    checks: [refresh, find, metadata, cover, play, seek, remote-route, hold-absent]
    owner_confirmed: false

Откат публикации

  1. Остановите медиасервер или публикационный процесс.
  2. Верните предыдущую конфигурацию и подключение к сохранённому принятому каталогу.
  3. При необходимости восстановите базу только на остановленном сервисе. Официальный CLI Navidrome прямо требует выполнять backup restore, когда сервер не запущен.
  4. Запустите контролируемое сканирование и повторите короткую серверную проверку.
  5. Проверьте старый контрольный трек в клиенте.

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

Типичные ошибки

  • Использовать двустороннюю синхронизацию для неизменяемого источника.
  • Менять теги и имена в исходном слое или активной библиотеке.
  • Считать папку, имя или один размер доказательством происхождения и дубликата.
  • Автоматически перекодировать повреждённый файл и объявлять его восстановленным.
  • Запускать конкурирующие процессы индексирования.
  • Удалять старую производную библиотеку сразу после серверной публикации.
  • Считать успешный код завершения, доступный /ping или состояние контейнера пользовательской приёмкой.

Официальные источники

Источники и изменчивые сведения проверены 8 сентября 2026 года.

Следующий шаг

Navidrome на Synology: домашняя музыкальная медиатека с Amperfy

Связанные материалы

Статья: Как один музыкальный архив превратился в домашнюю медиасистему

Блог: Что делать с Synology после настройки: фото, музыка и архив

База знаний: MEGA — полное руководство по надёжности, MEGAcmd и сценариям для Pro-аккаунта

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

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov