17 лет с покупки первого айфона я складывал музыку в одну медиатеку. Она начиналась с mp3-шек на жёстком диске, пережила переезд в стриминг (через iTunes Match) и росла до марта 2026-го. Плейлисты «Deepden», “Kizaru”, “повтор” — собранные под себя, годами.

Потом сверху решили, что оплачивать Apple Music в России никак нельзя. Я закинул 2000 ₽ на счёт Apple, чтобы не умерла синхронизация с iCloud, остальные подписки отменил — с мыслью, что за год решения, как обойти ограничения, найдутся. Так и жил без подписки: медиатека на месте, слушать нельзя. В августе 2026-го понадобился особенный трек, которого не было в Я.Музыке (худший сервис — и, к сожалению, ровно потому, что соблюдает законы РФ). Завёл американский аккаунт — тем более после покупки MacBook Air в американском сторе подарили три месяца халявы. Регистрируюсь, соглашаюсь на триал, открываю «Музыку».

Пусто.

10 532 трека — как оказалось позже — канули в лету. Переживал я даже не из‑за конкретных треков, а из‑за плейлистов: там собирались подборки под каждое настроение. Собирать их заново — ни в Я.Музыке, ни где‑то ещё — у меня не было ни желания, ни времени.

6 453 трека и все плейлисты вернулись на место. Ниже — как именно.

Главное сразу

Я не программист и этот код не писал. Неделю я жил так: Apple Music снова работает, любимый CarPlay работает, а библиотека пустая. Потом чё‑то психанул и пошёл к ИИ. Сначала к Gemini — тот подсказал единственное полезное: запросить свои данные на privacy.apple.com, а дальше выдал скрипт, которым полученную выгрузку разобрать было невозможно. Выгрузку я запросил, три недели её ждал, а когда она пришла — завёл отдельный проект в Claude Code (Opus 5), скормил туда всё целиком и за вечер решил свой вопрос.

Поэтому статья не про «смотрите, какой я написал инструмент». Она про то, что потерянную медиатеку в принципе можно вернуть: Apple бесплатно отдаёт все данные, весь фокус — как их прочитать. Ниже то, что нашлось: почему очевидные способы не работают, где Apple подсовывает не ту песню и какие три косяка её API не описаны нигде.

Инструмент, если он вам нужен: github.com/vdovikovva/apple‑music‑library‑restore. Все замеры, размеры выборок и точные запросы — в docs/FINDINGS.md там же.

TL;DR

  • Выгружаем свои данные с privacy.apple.com — это может занять от одной недели до трёх (как в моём случае), но это произойдёт. В процессе Apple будет присылать письма о ходе дела.

  • Медиатека Apple Music — это не файлы, а список номеров, и этот список Apple отдаёт бесплатно по GDPR‑запросу. После выгрузки вы увидите, что Apple фиксирует каждое ваше действие: что и как вы слушали, что лайкали, какие радиостанции запускали и так далее и тому подобное. Думаю, все это понимают, но увидеть воочию — отдельное удовольствие)

  • Каталожные номера разные в разных странах: каждый третий российский номер в США не значит ничего.

  • Переводить их надо не одним способом, а цепочкой из трёх — от самого точного к самому широкому. Назовем эту цепочку каскадом.

  • Главная ловушка — подмена версии трека: вместо трёхминутной радиоверсии прилетает девятиминутный клубный микс с тем же названием.

  • Итог: 83,6% треков с каталожным номером восстановимы. Свои mp3 — нет, никогда, вообще.

Понятие, которое понадобится сразу: ISRC (International Standard Recording Code) — международный код записи.

Весь метод помещается в несколько строк:

Песня из выгрузки
  ├─ нашлась по ISRC?               → берём: точность 100%, охват 24%
  ├─ нет → номер работает как есть? → берём: точность 96%, охват 63–66%
  ├─ нет → конвертер Apple нашёл?   → берём: точность 87%, охват 76% остатка
  └─ нет → в потери, руками не выдумываем
  и на каждом шаге — сверка длительности, иначе подсунут другую версию

Что Apple отдаёт бесплатно

По GDPR компания обязана по запросу выдать всё, что о вас хранит. Apple делает это через privacy.apple.com: “Запросить копию данных” → «Сведения о мультимедийных сервисах Apple». У меня весь процесс занял три недели — если читаете с намерением повторить, запрос имеет смысл отправить прямо сейчас, до того как дочитаете.

Помимо технических данных о том, как я слушал треки, как пользовался CarPlay и где лайкнул радиостанцию, получаем главное — папку Apple Music Activity. Внутри .json‑файлы:

{ "Title": "Amazing", "Artist": "Seal", "Album": "Amazing - EP",
  "Track Duration": 182320, "Apple Music Track Identifier": "277254389" }

Название, исполнитель, альбом, длительность и какой‑то номер. Вот он, каталожный идентификатор — уникальный номер песни в системе Apple, главное во всей истории.

Первая же проверка: в файле с треками 10 532 песни, а этот номер заполнен только у 6 615. Куда делись четыре тысячи? Оказалось, полей с номерами не одно, а четыре, и каждое про своё происхождение трека: стриминг (6 615), ваш файл, который Apple узнала по звуку через iTunes Match (1 704), покупка в iTunes (161) и опознание по тегам (31). Итого номер есть у 8 511 песен, а у 2 021 нет вообще — это файлы, которые опознать не удалось. Вот эти две тысячи и окажутся невосстановимыми: это те треки, которые я добавлял в медиатеку «руками» и они не были распознаны Apple.

«Ну так загрузи список обратно» — почему нет

Казалось бы: список треков есть, плейлисты есть, погнали добавлять. Но это так не работает.

Приложение «Музыка» умеет добавлять только файлы с диска. Закинуть список треков даже с идентификаторами Apple нельзя никак: ни xml, ни csv, ни excel. Автоматизировать тоже не выйдет — с этого, кстати, начал заход Gemini: в AppleScript команды «добавь песню из каталога» просто нет, есть только «добавь файл». Почему Gemini решил, что это возможно, — бог весть.

Сервисы переноса плейлистов (Soundiiz, TuneMyMusic и подобные) ищут песни по тексту «исполнитель — название». На моих объёмах это всегда платно, и перенос выходит не один в один: спросите у такого сервиса «Arty — The Wall» — он понятия не имеет, какую из шести версий вам подсунуть, радио, клубную, концертную или ремикс.

А у нас на руках не текст, а точные номера. Совпадение по номеру — это не «похоже», это «ровно та самая запись».

Главная подстава: у песни в каждой стране свой номер

Казалось бы, всё: берём номера, скармливаем Apple, идём слушать музыку.

Но каталожные номера различаются в разных странах.

Введём понятие — витрина (по‑английски storefront). Витрина это Apple Music конкретной страны: российская, американская, японская. Каталоги у них разные — где‑то песня есть, где‑то нет, где‑то лежит другое издание того же альбома. И одна и та же песня в российской и американской витрине имеет разные номера.

Насколько всё плохо? Да хрен знает, проще проверить. Взяли из медиатеки сто случайных песен и спросили у американской витрины, знает ли она эти номера: сработали 63%. Повторили на другой выборке, из ста пятидесяти, — 66%.

Каждый третий номер в чужой стране — мусор. Значит, номера надо как‑то переводить.

Две оговорки, чтобы дальше не спотыкаться:

  • «Точность» везде дальше означает одно и то же: длительность найденной песни отличается от исходной не больше чем на 5 секунд. Почему меряем именно длительностью — в разделе про подмену версий.

  • Все проценты — с одной медиатеки, моей, с перекосом в электронику и русский рэп. У вас будут свои.

Как достучаться до Apple напрямую

Раз обычным способом треки в медиатеку не закинуть — идём к серверам Apple напрямую, через тот же API, которым пользуется сам плеер. Найти его несложно: сайт music.apple.com работает через публичный Apple Music API. Открываешь инструменты разработчика в браузере, листаешь медиатеку и смотришь, куда стучится страница: там и адреса, и формат ответов, и токены.

Токенов нужно два: developer token подтверждает, что вы обращаетесь через разрешённую программу, а music‑user‑token — что вы это вы. Ставлю сто фишек на чёрное, что большинство сначала пытались обойтись одним и получали 401 на любом запросе к своей библиотеке.

Официальный путь получить первый — программа разработчиков Apple за 99 долларов в год. Понял, принял, но для разового восстановления медиатеки это на 99 баксов дороже, чем я готов был заплатить. Второй путь: раз сайт Apple ходит на те же адреса с теми же токенами, их можно взять прямо из браузера — открываем консоль и вставляем строчку:

copy(JSON.stringify({
  developer_token: MusicKit.getInstance().developerToken,
  music_user_token: document.cookie.match(/media-user-token=([^;]+)/)[1]
}, null, 2))

Готовые токены оказываются в буфере обмена.

Честно про этот способ. Вы берёте ключ плеера Apple и идёте с ним к своим же данным: ничего чужого не трогаете, оплату не обходите. Но условиями это не предусмотрено — серая зона. Прямого запрета обращаться к API своим скриптом в Apple Media Services Terms нет, зато есть типовой запрет на «роботов», шлющих больше запросов, чем мог бы человек. За ~12 000 запросов на скорости втрое ниже потолка я не поймал ни одной ошибки о лимите, но гарантий не даю: я не юрист, риск ваш. И токен — это ключ от вашей медиатеки, не выкладывайте его никуда.

Три способа перевести ID

Задача: превратить российский номер песни в американский. Способов нашлось три, и разница между ними больше, чем кажется.

Способ 1: попробовать номер как есть — просто спросить у американской витрины про российский номер. В один запрос можно засунуть сразу сотню номеров через запятую, поэтому способ ещё и самый дешёвый:

GET /v1/catalog/us/songs?ids=277254389,291959214,585591345

Работает для 63–66% песен.

Способ 2: ISRC. Два шага. Сначала идём в российскую витрину — потому что только она понимает наш номер — и просим карточку трека: в ней лежит ISRC. Потом с этим ISRC идём в американскую и ищем трек уже по международному коду (filter[isrc]=). Отличаются запросы двумя буквами в адресе, /catalog/ru/ против /catalog/us/, но роли у них разные: русская витрина работает переводчиком номера в международный код, американская — по этому коду ищет.

Находит всего 24%: ISRC есть далеко не у каждого трека. Зато точность 100% — ни одной ошибки.

Тут легко запутаться, поэтому скажу прямо: точность и охват — разные вещи. ISRC не ошибается никогда, но отвечает только про четверть медиатеки. Остальным трём четвертям он не поможет вообще — и вот ради них нужен третий способ.

Способ 3: официальный конвертер Apple. Сюрприз — filter[equivalents], инструмент ровно для нашей задачи: «вот номер из другой витрины, дай мне тот же трек в своей». Находит 76% из того, что не нашлось первым способом — лучший охват из трёх, но принимает только один номер за запрос. И точность — 87%. А вот что происходит в оставшихся 13%, я сначала не понял вообще: Apple отдавала трек с правильным названием, правильным исполнителем и правильным альбомом.

Стравили ISRC и конвертер на одних и тех же 51 песне: там, где они разошлись — семь случаев, — прав был ISRC. Все семь раз.

Отсюда главный вывод: не выбирать один способ, а выстроить цепочкой — сначала ISRC, потом прямой номер, потом конвертер для остатка. Именно в таком порядке, а не «сначала дешёвые»: прямая проверка ошибается в 4% случаев, и если поставить её первой, она застолбит около 190 неверных версий — найденное на раннем шаге дальше уже не перепроверяется.

Ловушка: подмена версии

Конвертер Apple иногда возвращает не ту версию песни:

Было:  Dario G — Sunchyme (Radio Edit)
Стало: Dario G — Sunchyme                            разница 144 секунды

Было:  Arty — The Wall (Radio Edit)
Стало: Arty — The Wall (Original Extended Mix)       разница 234 секунды

Было:  Gouryella — Gouryella
Стало: Gouryella — Gouryella                         разница 422 секунды

Закономерность одна: короткую радиоверсию подменяет длинный оригинал или клубный микс. В медиатеке с электроникой семиминутный клубный микс и трёхминутная радиоверсия — совершенно разные вещи, примерно как режиссёрская версия и трейлер.

Третий пример — самый показательный, поэтому разберу его отдельно. У меня в медиатеке лежала радиоверсия, но в её названии это никак не отмечено: просто «Gouryella — Gouryella». Каталог вернул трек с точно таким же названием, тем же исполнителем и похожим альбомом — только он на семь минут длиннее, потому что это оригинальный трансовый микс. Отличить их по тексту невозможно в принципе: строки совпадают посимвольно. Любой сервис переноса засчитал бы это как идеальное совпадение и подсунул вам десятиминутную версию вместо той, что вы слушали пятнадцать лет.

Спасает простая мысль: у песни есть длительность, и она есть и в выгрузке, и в ответе Apple. Расходятся на семь минут — не одна и та же запись, как бы одинаково она ни называлась.

Порог — 5 секунд, и он не с потолка: распределение расхождений резко двугорбое. Масса в пределах пары секунд — та же запись, где секунды набегают от мастеринга; отдельная кучка на 90–420 секундах — другая версия; между 5 и 30 почти пусто, там и граница. Что укладывается в 5 секунд, добавляем автоматически; остальное инструмент не выбрасывает и не подставляет наугад, а откладывает в таблицу — открываешь в Numbers, сортируешь и решаешь сам. У меня таких набралось 279 на семь тысяч.

Дальше полагается написать, как я героически разобрал их за вечер. Я их не разобрал. Ни одной. Таблица так и лежит в папке work/. И это оказалось нормально: порог в пять секунд уже сделал главное — не пустил в медиатеку заведомо чужие версии.

Одна тонкость напоследок: написание имени латиницей не значит подмену. Каста → Kasta с разницей в 8 секунд — та же песня, просто в американском каталоге исполнитель записан латиницей. Судить надо по длительности, а не по буквам.

Три косяка, про которые нигде не написано

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

Удаление работает на другом адресе. В документации указан api.music.apple.com: читать можно, добавлять можно, а удалять — нельзя, прилетает 401. Тот же токен, та же секунда, соседняя строчка кода. Оказалось, у сайта Apple есть второй адрес, amp-api.music.apple.com, и вот там удаление работает. Без этого не было бы отката — а значит, вся затея превращалась бы в операцию в один конец.

«Принято» не значит «сделано». На добавление Apple отвечает 202 — «запрос принял, обработаю». Не «добавил». Отправил 6 665 песен, в медиатеке появилось 6 428: 237 песен Apple приняла и молча не добавила. Повторил, отправил по одной — то же самое, при этом в каталоге они есть и играют. Судя по составу (рождественские сборники, концертные альбомы), лицензия разрешает слушать, но не добавлять. Сделать нельзя ничего, но вывод универсальный: проверяйте результат, а не верьте ответу «принято».

Серые песни — это надгробия, а не музыка. В новом аккаунте нашлись 243 записи, и я обрадовался: часть медиатеки уцелела! Полез смотреть — пусто: ни обложки, ни исполнителя, ни возможности включить, только название и длительность. Таких оказалось 218 из 243: когда подписка кончилась, Apple удалила из облака сами файлы, залитые через iTunes Match, а записи остались. Вывод обидный — свои файлы вернуть невозможно без резервной копии, у меня её не было. И практический: такие записи нельзя считать за «песня уже есть», иначе останетесь с надгробием вместо музыки. Отличить просто: у живых есть поле playParams, у мёртвых нет.

Что в итоге получилось

Сколько

Доля

Песен в выгрузке

10 532

— из них с каталожным номером

8 511

81%

— свои mp3 (вернуть нельзя)

2 021

19%

Найдено надёжно

7 115

83,6%

Живых в медиатеке после переезда

6 453

Отложено на ручную проверку

279

3,3%

Нет в американском каталоге

1 108

13,0%

Между «найдено 7 115» и «живых 6 453» теряются две порции: 453 дубля (разные записи медиатеки вели на один и тот же каталожный номер) и 237 песен, которые Apple приняла и молча не добавила. Плейлистов своих в выгрузке оказалось 190, но у 150 Apple отдала одни названия без состава; из оставшихся сорока восстановились 34 — 1 215 песен, плюс 41 плейлист от самой Apple. Порядок треков внутри сохранился.

Задачу я закрыл не на сто процентов, а на «мне хватает». Нужны были две вещи, и обе приехали: основной архив — музыка, копившаяся все семнадцать лет, с тех времён, когда её таскали на жёстком диске и подписывали теги руками, — и плейлисты под конкретные ситуации. Их не соберёшь заново по памяти, и это та часть, потерю которой было бы по‑настоящему жалко. Они открываются и играют в том же порядке, что и все эти годы.

Что вернуть невозможно — и что можно, но незачем

  • Свои загруженные файлы. После окончания подписки Apple удаляет их из облака, помогает только резервная копия. Читаете это с живой подпиской — сделайте копию сегодня.

  • Покупки. Намертво привязаны к старому Apple ID.

  • Счётчики прослушиваний, даты добавления, оценки. API не позволяет их записать: 223 821 событие прослушивания лежит в выгрузке — прекрасный материал для статистики и совершенно бесполезный для восстановления.

  • Смарт‑плейлисты, Genius‑миксы — в выгрузке этого просто нет.

Инструмент

Четыре скрипта на Python, библиотек ставить не надо: github.com/vdovikovva/apple‑music‑library‑restore.

EXPORT="/путь/к/папке/Apple Music Activity"

python3 01_check.py    --export "$EXPORT" --from ru --to us   # оценить, 2 мин
python3 02_resolve.py  --export "$EXPORT" --from ru --to us   # разобрать, ~час
# смотрим work/manual_review.csv, потом заливаем:
python3 03_add_tracks.py    --export "$EXPORT" --apply
python3 04_add_playlists.py --export "$EXPORT" --apply
python3 03_add_tracks.py --undo    # откат по журналу, если что

Шаги 1 и 2 в медиатеку не пишут вообще, шаги 3 и 4 без --apply только показывают, что собираются сделать. Всё добавленное пишется в журнал, по нему же делается откат. Страны задаются в --from и --to — работает не только для России и США. Нужен компьютер: с одного айфона не выйдет ни запустить скрипты, ни достать токены.

Что в итоге про ИИ

Раз уж я начал с честности, ей и закончу. Опыт вышел неоднозначный. Gemini выдал ровно одну полезную мысль — запросить выгрузку — и один скрипт, который к реальным данным отношения не имел. Claude в агентном режиме задачу вытянул, но не «одной кнопкой»: были тупики, были гипотезы, которые пришлось проверять и выбрасывать, был перевёрнутый порядок шагов в каскаде, всплывший только при финальной вычитке кода.

Полезным ИИ оказался там, где надо перелопатить 264 мегабайта выгрузки, прогнать двенадцать тысяч запросов и не сойти с ума. А решения — что считать успехом, где остановиться, что вообще не восстанавливать — всё равно принимал я. Собственно, поэтому статья не про код, а про то, что медиатеку можно вернуть.

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

Если повторите на своей библиотеке — напишите в комментариях, что получилось: страну, откуда и куда, и сколько треков доехало. Соберу и обновлю статью.


Проверено 6 августа 2026 на Apple Music API версии 1. Apple меняет правила без предупреждения — если читаете позже, перепроверьте цифры сами: для этого в репозитории есть первый скрипт, он как раз про это.