За два дня, –, мы собрали для YouTube Music набор автоматических плейлистов и систему, которая вычищает ИИ-музыку из рекомендаций. Проект работает без участия человека на бесплатном GitHub Actions: каждую пятницу обновляет 8 публичных чартовых плейлистов, каждую ночь собирает личный «Мой микс без ИИ» и его версию из клипов. За первые запуски скрипт поставил дизлайк 1407 ИИ-трекам; после исправления одной ошибки 34 дизлайка сняты, и в итоге отмечены 1373 трека от 990 исполнителей и каналов, из них 343 на русском языке. Код написан в диалоге с моделью Claude Opus 5.5 в Claude Code; ниже – что получилось, как отличали ИИ от живой музыки и как повторить проект.

Зачем это понадобилось
Поток сгенерированной музыки растёт быстрее, чем площадки успевают его фильтровать. По данным Deezer, в июне 2026 года полностью сгенерированные ИИ треки впервые превысили половину суточных загрузок – в пиковые дни до 90 000 композиций. Deezer исключает такие треки из алгоритмических рекомендаций, а неслушаемые и накрученные удаляет.
YouTube Music начал распространение меток Made with AI для песен, созданных преимущественно генеративным ИИ. Метка касается только значительного участия нейросети, а её отсутствие не гарантирует, что ИИ не использовали. В нашей проверке метку не удалось найти ни у одного из 25 треков, которые наш детектор уже признал синтезированными, – ни в данных песни, доступных скрипту, ни в коде страницы. Возможно, распространение до этих треков ещё не дошло или метка видна только в приложении.
На практике в персональных миксах аккаунта, на котором делался проект, по нашим правилам было от 4 до 28% ИИ-треков. В отдельных «радио» от ИИ-трека доля доходила до 68–76%, а один из самых заметных хитов недели – BAD TIMES исполнителя Imael Angel, первое место в мировом и российском чартах Shazam и в чарте продаж iTunes House – получил у нашего детектора оценку 1,00, то есть был распознан как синтезированный.
Что получилось: 8 публичных и 2 личных плейлиста

Чартовые плейлисты обновляются каждую пятницу в 19:00 по Москве. Описания у них на русском и английском, все треки ищутся только среди официальных аудиозаписей YouTube Music и проходят ИИ-фильтр. Если свежего трека ещё нет на стримингах, берётся видео с YouTube после сверки исполнителя и названия; если трека нет нигде, его место занимает следующая позиция чарта.
| Плейлист | Источник | Состав |
|---|---|---|
| Топ 30 · Мир · Billboard Global | Billboard Global 200 | 30 главных песен недели: стриминг и продажи более чем в 200 территориях |
| Клубный топ · House & Techno | Beatport Top 100 и iTunes | Beatport House 8 и Techno 8 (покупки диджеев), iTunes House 7 и Techno 7 (продажи слушателям) |
| Спокойная электроника · Deep & Melodic | Beatport Top 100 и iTunes | Beatport Deep House, Melodic House & Techno и Organic House по 5, iTunes Downtempo 8 и Ambient 7 |
| Топ 30 · Неоклассика | iTunes Top Songs, жанр Classical | Сводный чарт продаж 10 стран без академической классики, оперного попа и поп-каверов |
| Россия · Shazam & Золотой Граммофон | Shazam (Россия, 7 дней) и «Русское Радио» | 15 самых распознаваемых треков и 15 лидеров хит-парада по голосованию слушателей |
| Хит-парад Радио Шансон | radioshanson.ru | Еженедельный хит-парад по голосованию слушателей |
| Новое в чартах за неделю | Все чарты выше | Только треки, впервые вошедшие в любой топ; первое заполнение – |
| Лучшее за месяц | Все чарты выше | 30 треков с наибольшим числом очков за месяц; первое заполнение – |

Два личных плейлиста приватные: они собираются из персональных миксов конкретного аккаунта, поэтому ссылок на них в статье нет.
- «Мой микс без ИИ» – 100 треков каждую ночь: знакомое и любимое 20, давно не слушали 5, новинки любимых исполнителей 20, незнакомое в любимых жанрах 30 («радио» YouTube от любимых треков каждого жанра), тренды недели 15 (наши чартовые плейлисты), новые жанры 10 (по два соседних жанра за ночь, по кругу). Доли жанров: шансон 22%, русская поп 18%, спокойная электроника 18%, клубная 16%, неоклассика 13%, мировой поп 13%, в итоге около 36–40 русских песен из 100. Повторы со вчерашним миксом исключены.
- «Мой микс – клипы» – 60 треков по тому же алгоритму, но только с настоящим официальным клипом и без треков звукового микса этого дня. YouTube Music при добавлении в плейлист подменяет клип аудиоверсией, поэтому в плеере нужно один раз включить режим «Видео».
Как скрипт отличает ИИ от живой музыки
Аудиторию ИИ-проектам накручивают, поэтому число прослушиваний и подписчиков не помогает. Подделать нельзя возраст исполнителя, и на нём построены правила.
- Проверяются только новые исполнители и каналы – с первым релизом или созданием канала не раньше 2024 года, когда вышла третья версия генератора Suno. Трек, где среди исполнителей есть давний артист, не трогается.
- Новый исполнитель считается ИИ-проектом, если звук его 30-секундного превью распознан как синтезированный (порог 0,5).
- Или если у него нет ни одного трека ни на Deezer, ни в iTunes: живого новичка дистрибьютор обычно выпускает на всех площадках, а Deezer, по собственным данным, исключает полностью сгенерированные треки из рекомендаций и удаляет неслушаемые и накрученные. Из 1609 новых исполнителей, прошедших проверку звука, 559 распознаны как ИИ, 908 звучат как живые, а превью не нашлось у 142.
- Или если он выпускает релизы потоком: от 5 релизов, для русских исполнителей – от 10. Встречались проекты с 349 и 292 релизами меньше чем за два года.
- Видео с обычного канала без карточки исполнителя считается ИИ, если канал создан в 2024 году или позже.
- Если звук чистый и релизов мало, исполнитель считается живым новичком и не трогается.
Отпечаток вокодера – периодические пики в спектре 1–8 кГц, которые оставляют слои транспонированной свёртки в нейросетевых генераторах звука вроде Suno и Udio. У живой записи таких пиков нет, поэтому признак зависит от устройства генератора, а не от стиля музыки.
Звук проверяет открытый детектор lofcz/ai-music-detector – небольшая ONNX-модель около 15 КБ, рассчитанная на Suno до v5 и Udio до 1.5. Файл модели и обработку 30-секундных превью мы взяли из проекта Prototypr/ai-music-classifier (обе работы под лицензией MIT) и переписали без PyTorch, чтобы проверка быстро работала на сервере GitHub. Превью берутся из открытых API Deezer и iTunes.
Перед включением автоматики детектор проверили на размеченных треках:
| Группа | Треков с превью | Признано ИИ (оценка от 0,5) | Оценки |
|---|---|---|---|
| Живые исполнители из лайков: Einaudi, Armin van Buuren, Scorpions и другие | 27 | 0 | 0,00 |
| Живой русский шансон: Наговицын, Дюмин, Круг, Лепс, хит-парад Радио Шансон | 52 | 0 | не выше 0,02 |
| Русский ИИ, найденный правилом по возрасту | 9 | 8 | 0,98–1,00 у распознанных |
| Иностранный ИИ, найденный правилом по возрасту (случайная выборка) | 21 | 12 | большинство 0,99–1,00 |
На 79 живых треках не было ни одной ложной тревоги. Часть «иностранного ИИ», который нашло правило по возрасту, детектор посчитал живой музыкой: это либо живые новички, либо генераторы, которых модель не знает. Поэтому вывод «живой новичок, не трогаем» делается только при сочетании чистого звука и небольшого числа релизов.
Сколько ИИ нашли и удалили
Скрипт ставит ИИ-трекам дизлайк – прямой сигнал рекомендациям «такое не предлагать» – и убирает их из истории прослушиваний. Правила ужесточались по ходу работы, поэтому прогоны отличаются охватом.
| Дата | Что проверялось | Дизлайков |
|---|---|---|
| 16 октября | Лайки, библиотека и свои плейлисты | 9 |
| 17 октября | Миксы главной, первые правила (с 2025 года, от 5 релизов) | 150 |
| 17 октября | Облачный прогон на GitHub | 98 |
| 17 октября | Плюс русские треки | 113 |
| 17 октября | Плюс проверка звука | 170 |
| 17 октября | Облачный прогон на GitHub | 115 |
| 17 октября | Все миксы «Mixed for you», одиночные треки главной, правила «нет превью» и «новый канал» | 458 |
| 17 октября | Исполнители с 2024 года, по 200 треков на микс | 622 |
| 17 октября | Ночная чистка истории | 1 |
| Итого действий / уникальных треков | 1736 / 1407 | |
| 17 октября | Сняты ошибочные дизлайки после исправления декодирования превью iTunes | - 34 |
| Остаётся с дизлайком | 1373 | |
Оставшиеся 1373 трека принадлежат 990 исполнителям и каналам; 343 из них на русском языке. Из истории прослушиваний удалено 25 ИИ-треков. В последнем полном прогоне, ещё до исправления ошибки с iTunes, 622 трека от 507 исполнителей распределились по причинам так: поток релизов – 236 исполнителей, нет ни на Deezer, ни в iTunes – 157, звук – 96, новый канал – 18.
Доля ИИ в персональных миксах по 200 треков на момент этого прогона:
| Микс | ИИ-треков | Доля |
|---|---|---|
| Душевные откровения и ритмы жизни | 56 | 28% |
| Спокойствие и меланхолия | 47 | 23% |
| Атмосфера клубного вайба | 35 | 17% |
| My Supermix | 24 | 12% |
| Элегантный синтез классики и хауса | 20 | 10% |
| Энергия ночного танцпола | 10 | 5% |
| Заряд бодрости и драйва | 9 | 4% |
| Классика для глубоких раздумий | 8 | 4% |
Победить мусор в миксах YouTube одними дизлайками не удалось: сервис каждый день собирает новые миксы и подмешивает исполнителей, которых накануне ещё не существовало. В тот же день появился новый микс «Ритмы городских улиц», где из 200 треков 43 были ИИ, причём 16 из них уже имели дизлайк, а ещё 38 оказались самодельными загрузками с обычных каналов. Поэтому основным способом слушать стал собственный «Мой микс без ИИ»: он берёт персонализацию из миксов YouTube, но пропускает в плейлист только официальные аудио живых исполнителей и дополнительно проверяет звук каждого трека.
Ограничения и ошибки
- Первая версия правил ошибочно отнесла к ИИ David Guetta, Khalid и Франца Шуберта: страница исполнителя иногда отдаёт только свежие переиздания, а полную дискографию YouTube загружал не с первого раза. Ошибку нашли на пробном прогоне до каких-либо изменений в аккаунте; теперь неудачная загрузка дискографии означает «проверить не удалось», а не «ИИ».
- Превью iTunes в формате M4A скрипт сначала не мог декодировать, поэтому правило «нет ни на Deezer, ни в iTunes» фактически проверяло только Deezer. После исправления 84 из прежней группы «без превью» оказались живыми исполнителями, с 34 их треков дизлайки сняты, а 274 подтверждены как ИИ по звуку.
- Ложные срабатывания возможны и сейчас: правило «нет превью» может задеть живого новичка, которого не нашли на Deezer и в iTunes, а правило потока релизов – плодовитого молодого продюсера. Каждое действие записывается в журнал, по которому дизлайк можно снять.
- Не ловятся перезаливы со старых каналов, созданных до 2024 года, и ИИ-треки под профилями давних исполнителей.
- Русские песни из «Понравилось» и все их исполнители исключены из любых проверок по договорённости с владельцем аккаунта, даже если детектор считает трек синтезированным.
- Обычные прослушивания из истории не удаляются. Скрипт не видит, дослушан трек или пропущен, а для рекомендаций прослушивание – главный сигнал вкуса, особенно если лайки ставятся редко.
- ytmusicapi – неофициальная библиотека: она имитирует запросы веб-версии, и Google её не поддерживает и не одобряет. Изменение интерфейса YouTube Music может на время сломать скрипт.
- Обложку плейлиста через API поставить нельзя: обложки загружаются вручную в приложении.
ytmusicapi – неофициальная Python-библиотека для YouTube Music. Она повторяет запросы веб-версии сервиса и позволяет читать библиотеку, искать треки, создавать и менять плейлисты, ставить оценки и изменять историю прослушиваний.
Beatport: почему скрипт не ходит на сайт
Сайт Beatport защищён Cloudflare. Серверы GitHub он перестал пускать уже на второй день, а после частых запросов во время отладки стал отказывать скрипту и на домашнем адресе. Обходить защиту мы не стали. Чарты Beatport раз в неделю собирает задача в приложении Claude: в пятницу в 13:07 расширение Claude in Chrome открывает пять страниц Top 100 в обычном Chrome владельца аккаунта с паузами по 10 секунд и сохраняет снимок в репозиторий. Облачный запуск в 19:00 берёт Beatport из снимка, если ему не больше 4 дней; иначе электронные плейлисты собираются только из iTunes. Если Cloudflare попросит подтвердить, что пользователь человек, задача останавливается и просит сделать это вручную.
Как сделать такой проект: устройство
Проект состоит из трёх частей, и ИИ-фильтр – общая для них середина. Без него чартовые плейлисты наполнялись бы ИИ-хитами (BAD TIMES стоял первым сразу в трёх чартах), а личный микс повторял бы мусор из миксов YouTube.
| Часть проекта | Что делает | Где работает ИИ-фильтр | Что происходит с ИИ-треком |
|---|---|---|---|
| Чартовые плейлисты | Берёт чарты сайтов и ищет треки в YouTube Music | На входе: каждый найденный трек | Пропускается, его место занимает следующая позиция чарта |
| Чистка рекомендаций | Обходит миксы и подборки главной (около 100 штук по 200 треков) и историю | Каждый трек миксов и истории | Дизлайк; из истории – удаление |
| Личный микс | Собирает 100 треков из персональных миксов, лайков и чартов | Каждый кандидат плюс проверка звука каждого трека | Не попадает в микс |
Ниже – порядок сборки. Команды рассчитаны на Linux; на Windows и macOS отличаются только пути к Python.
Шаг 1. Окружение и доступ к YouTube Music
Понадобятся Python 3.12 или новее, ffmpeg для декодирования превью, аккаунт GitHub и YouTube Music.
python3 -m venv .venv .venv/bin/pip install ytmusicapi requests beautifulsoup4 librosa onnxruntime scipy
Файл авторизации создаётся из заголовков запроса браузера. Откройте music.youtube.com в браузере, где вы вошли в аккаунт, в инструментах разработчика (F12) на вкладке «Сеть» найдите POST-запрос browse и скопируйте его заголовки (в Firefox: «Копировать значение» – «Копировать заголовки запроса»). Затем выполните команду, вставьте заголовки и нажмите Enter и Ctrl+D:
.venv/bin/ytmusicapi browser
Появится файл browser.json с cookie вашего аккаунта Google. Его нельзя никому передавать, публиковать и добавлять в репозиторий; если выйти из аккаунта в этом браузере, файл перестанет работать. Firefox копирует заголовок Content-Encoding: gzip, из-за которого запросы ломаются, – удалите его из файла.
Шаг 2. Чарт в плейлист
Ищите только среди официальных аудио (filter="songs") и сверяйте и исполнителя, и название. Без сверки названия скрипт при отсутствии нужной песни молча подставит другую песню того же артиста – так у нас вместо «Разлетелись как птицы» Александра Новикова оказалась его «Птица с дробью».
from ytmusicapi import YTMusic
yt = YTMusic("browser.json")
def find_song(artist, title):
for r in yt.search(f"{artist} {title}", filter="songs", limit=5):
names = " ".join(a["name"] for a in r.get("artists") or []).lower()
if artist.lower().split()[0] in names and title.lower() in r["title"].lower():
return r
return None
ids = [t["videoId"] for t in (find_song(a, s) for a, s in chart) if t]
yt.create_playlist("Мой чарт", "Описание", privacy_status="PUBLIC", video_ids=ids)
Чарты берите из открытых источников: CSV Shazam, RSS iTunes, страницы Billboard и радиостанций. Опрашивайте их редко и не обходите защиту сайтов.
Шаг 3. ИИ-фильтр: возраст исполнителя
Первый и самый дешёвый признак – год первого релиза. У трека в YouTube Music есть идентификаторы исполнителей; по ним загружается страница артиста. На ней видны только последние релизы, поэтому, если все они свежие, нужна полная дискография: иначе давний артист с потоком новых синглов будет выглядеть новичком.
def first_release(artist_id):
info = yt.get_artist(artist_id)
blocks = [info.get(k) or {} for k in ("albums", "singles")]
years = [int(r["year"]) for b in blocks for r in b.get("results", []) if str(r.get("year", "")).isdigit()]
if years and min(years) >= 2024: # видны только свежие релизы - нужна полная дискография
for b in blocks:
if b.get("params"):
full = yt.get_artist_albums(b["browseId"], b["params"], limit=None)
years += [int(r["year"]) for r in full if str(r.get("year", "")).isdigit()]
releases = sum(len(b.get("results", [])) for b in blocks)
return (min(years) if years else None), releases
Две ошибки, которые мы сделали и исправили: загрузка полной дискографии иногда не удаётся с первого раза – её нужно повторять, а неудачу считать «проверить не удалось», а не «ИИ»; и на старте мы проверяли только исполнителей с 2025 года, хотя массовая генерация шла с 2024-го. Результат храните в кэше – к концу второго дня в нашем было 11 597 исполнителей, и без кэша каждый прогон заново запрашивал бы тысячи страниц.
Шаг 4. ИИ-фильтр: превью и детектор по звуку
Для нового исполнителя нужен звук. Скрипт ищет 30-секундное превью трека в открытых API Deezer и iTunes; если трека там нет – превью популярных треков исполнителя на Deezer. У найденного превью обязательно сверяйте исполнителя, иначе детектор оценит чужую песню.
import requests
def deezer_preview(artist, title):
# точный запрос часто пуст (диакритика, «feat.» в названии) - тогда свободный
for q in (f'artist:"{artist}" track:"{title}"', f"{artist} {title}"):
data = requests.get("https://api.deezer.com/search", params={"q": q, "limit": 3}).json()
for item in data.get("data", []):
if item.get("preview") and artist.lower().split()[0] in item["artist"]["name"].lower():
return item["preview"] # ссылка на MP3, 30 секунд
def itunes_preview(artist, title):
data = requests.get("https://itunes.apple.com/search",
params={"term": f"{artist} {title}", "entity": "song", "limit": 3}).json()
for item in data.get("results", []):
if artist.lower().split()[0] in item.get("artistName", "").lower():
return item.get("previewUrl") # ссылка на M4A (AAC), 30 секунд
Модель детектора скачивается одним файлом, к ней нужны librosa, onnxruntime и scipy:
mkdir -p models curl -L -o models/ai_music_detector.onnx \ https://raw.githubusercontent.com/Prototypr/ai-music-classifier/main/models/ai_music_detector.onnx
Детектор не слушает музыку целиком: он усредняет спектр 30 секунд, оставляет полосу 1–8 кГц, вычитает нижнюю огибающую, чтобы убрать мелодию, и передаёт оставшиеся пики модели. Обработка повторяет код lofcz/ai-music-detector, но без PyTorch:
import subprocess, requests, librosa, numpy as np, onnxruntime as ort
from scipy.ndimage import minimum_filter1d
SR, NFFT = 16000, 8192
model = ort.InferenceSession("models/ai_music_detector.onnx")
inp = model.get_inputs()[0]
band = (np.linspace(0, SR / 2, NFFT // 2 + 1) >= 1000) & (np.linspace(0, SR / 2, NFFT // 2 + 1) <= 8000)
def decode(url):
"""MP3 Deezer и M4A iTunes -> моно 16 кГц через ffmpeg (librosa сама M4A не откроет)."""
audio = requests.get(url).content
out = subprocess.run(["ffmpeg", "-v", "error", "-i", "pipe:0", "-t", "30", "-ac", "1",
"-ar", str(SR), "-f", "f32le", "pipe:1"], input=audio, capture_output=True, check=True)
return np.frombuffer(out.stdout, dtype=np.float32)
def ai_probability(url):
y = decode(url)
spec = np.abs(librosa.stft(y, n_fft=NFFT, hop_length=NFFT // 2, window="hann")) ** 2
mean_db = (10 * np.log10(np.clip(spec, 1e-10, 1e6))).mean(axis=1)[band]
hull = np.clip(minimum_filter1d(mean_db, size=10, mode="nearest"), -45, None)
peaks = np.clip(mean_db - hull, 0, 5.0)
fp = (peaks / (peaks.max() + 1e-6)).astype(np.float32)
fp = np.interp(np.linspace(0, 1, inp.shape[1]), np.linspace(0, 1, len(fp)), fp).astype(np.float32)
return float(model.run(None, {inp.name: fp.reshape(1, -1)})[0][0, 0])
Оценка 0,5 и выше означает синтезированный звук. Для треков давних исполнителей, где цена ошибки выше, мы используем порог 0,9.
Декодируйте превью через ffmpeg, а не только через librosa: Deezer отдаёт MP3, а iTunes – M4A, который librosa без внешнего декодера не открывает. Мы на этом ошиблись: функция молча возвращала «звука нет», и правило «нет ни на Deezer, ни в iTunes» фактически проверяло только Deezer. Ошибку нашли при проверке кода для этой статьи, исправили и сняли дизлайки с исполнителей, которые нашлись в iTunes и оказались живыми.
Шаг 5. ИИ-фильтр: правила решения
Ни один признак сам по себе не надёжен, поэтому решение принимается по сочетанию:
| Ситуация | Решение | Почему |
|---|---|---|
| Среди исполнителей трека есть артист с первым релизом до 2024 года | Живой | Возраст не подделать; совместные треки с давними артистами не трогаем |
| Новый исполнитель, звук превью от 0,5 | ИИ | Детектор слышит артефакты генератора |
| Новый исполнитель, превью нет ни на Deezer, ни в iTunes | ИИ | Живых новичков дистрибьюторы обычно выпускают на всех площадках; у 142 из 1609 новых исполнителей превью не нашлось |
| Новый исполнитель, звук чистый, но от 5 релизов (для русских от 10) | ИИ | Генераторы, которых модель не знает, выдаёт темп выпуска |
| Новый исполнитель, звук чистый, релизов мало | Живой новичок | Защита от ложных срабатываний |
| Видео с обычного канала без карточки исполнителя, канал создан в 2024 году или позже | ИИ | Дата создания канала видна на странице «О канале» |
| Трек или исполнитель из ваших лайков | Не трогать | Решение владельца аккаунта важнее детектора |
Шаг 6. Проверка фильтра до первого запуска
Прежде чем ставить дизлайки, проверьте фильтр на треках, про которые вы точно знаете ответ: на лайкнутых песнях давних артистов он не должен срабатывать ни разу. Мы проверили детектор на 79 живых треках, включая 52 трека русского шансона, – ложных тревог не было. Затем делайте пробный прогон без изменений в аккаунте и просматривайте список: именно так мы поймали ошибку первой версии, которая отнесла к ИИ David Guetta, Khalid и Шуберта.
python ai_cleanup.py # пробный прогон: только список найденного python ai_cleanup.py --apply # дизлайки и удаление ИИ из истории
Каждое действие записывайте в журнал с идентификатором трека: по нему любой ошибочный дизлайк можно найти и снять. Обычные прослушивания из истории не удаляйте – для рекомендаций это главный сигнал вкуса.
Шаг 7. Расписание на GitHub Actions
Создайте приватный репозиторий и добавьте содержимое browser.json в секрет Settings – Secrets and variables – Actions, например YTMUSIC_BROWSER_JSON. Workflow с расписанием в нашем проекте выглядит так:
on:
schedule:
- cron: "0 16 * * 5" # пятница 19:00 МСК: чарты и чистка миксов
- cron: "30 1 * * *" # каждую ночь: ИИ из истории и личный микс
workflow_dispatch:
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- run: printf '%s' "$AUTH" > browser.json
env:
AUTH: ${{ secrets.YTMUSIC_BROWSER_JSON }}
- run: python sync.py
- run: python ai_cleanup.py --apply
В конце каждого запуска workflow сохраняет в репозиторий кэш исполнителей, журнал и историю чартов: без этого следующий запуск начинал бы с нуля. Наши запуски занимали от 3 до 16 минут в зависимости от того, включена ли чистка миксов.
Как помочь рекомендациям
- Слушайте собственные плейлисты, а не «радио» от случайного трека: одно ИИ-радио на час перевешивает много хороших сигналов.
- Ставьте лайк понравившимся трекам – это обучает YouTube и пополняет «знакомое» в личном миксе.
- ИИ-трек сразу пропускайте и отмечайте дизлайком или «Не интересует».
- Очистите давнюю историю в «Моих действиях» Google и включите автоудаление записей старше 3 месяцев: тогда случайные прослушивания прошлых лет перестанут влиять на миксы. История общая для YouTube и YouTube Music.
Как в проекте участвовала Claude Opus 5.5
Весь код – пять Python-скриптов (чарты, ИИ-фильтр, детектор звука, умный микс и генератор обложек) и workflow GitHub Actions – написан в диалоге с моделью Claude Opus 5.5 в Claude Code. Модель проверяла источники чартов на живых сайтах, сравнивала признаки ИИ на размеченных треках, делала пробные прогоны перед изменениями в аккаунте и находила собственные ошибки, например подмену песни при отсутствии нужного трека. Владелец аккаунта задавал требования, проверял результат в приложении и сам выполнял действия, которые модель не делает: вход в аккаунты, ввод секретов и подтверждение проверки Cloudflare.
Вывод
Полностью очистить миксы YouTube Music от ИИ дизлайками нельзя: сервис ежедневно добавляет новых исполнителей, а метки Made with AI только начали распространяться. Надёжнее собирать собственные плейлисты из проверенных чартов и персональных миксов, отсекая новых исполнителей по возрасту, звуку и присутствию на Deezer и iTunes. Такой проект можно повторить на открытых инструментах и бесплатном GitHub Actions, но cookie аккаунта нужно хранить только в секретах, а сайты чартов опрашивать редко.