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 меняет правила без предупреждения — если читаете позже, перепроверьте цифры сами: для этого в репозитории есть первый скрипт, он как раз про это.

