◂ Этап LibraryRYA.AEMusic & Sounds · Epidemic Sound — подход к музыке и звукам: настроение по блокам, Epidemic Sound, библиотека каналабиблиотека · 3 окт 2026
Страница библиотеки трека: подход к музыке и звукам — один на все фильмы и шортсы кодом, применяется на этапе Sound (шаг «Музыка и звуки»). Музыка — настроение и динамика блока структуры, не фон; звуки — показ события на экране. Здесь: как описать блок словами, что искать в Epidemic Sound через MCP и чего не брать, подгонка под длину и укладка под речь, движки, как Роман слушает варианты до рендера, и библиотека канала — что уже выбрано и почему. Цепочка голоса — Звук, страница версии с плеерами — План экранов, адрес и параметры MCP — каталог стека. Роман 03.10.2026: «в библиотеке отдельную страницу про музыку надо и звуки и подход к музыке».
📌 Правило. Музыка — настроение и динамика блока, не фон на весь фильм: у каждого блока структуры свой трек или своя энергия, под речью она на 20–22 дБ тише речи и поднимается только там, где слов нет — заставка, карта, финальная карточка. Варианты треков и звуков Роман слушает на странице версии до рендера; на YouTube трек идёт только с канала, подключённого в Epidemic Sound (safelist).
Одним взглядом
−20…−22дБ
музыка под речью — тише речи
поднимается только там, где слов нет
1–4
энергия блока: −26 / −20 / −11 / −2 дБ
палитра монтажёра, story_cut
3
кандидата на блок — выбирает Роман на слух
страница версии, до рендера
−14LUFS
мастер ±1, пик ≤ −1 dBTP
LRA ≤ 8 · 17_audio/standard.py
1Схема2Настроение3Отбор4Звуки5Движки6Показ7Проверки8Знания9Грабли10Команды11Где лежит

11.3 · 1Схема: от структуры фильма до музыки в мастере

🧭 Структура
Блоки фильмалист: главы, заставки, карты, финал
→
Настроение блокаслова речи → теги mood
→
Динамикатемп речи, пик, паузы → энергия 1–4
🔎 Подбор
SearchRecordingsterm · mood · жанр · BPM · без вокала
→
Замеры превьюLUFS, LRA, атаки, доля голоса
→
Похожее и референсSimilarToRecording · Spotify
→
3 кандидата на блокscout.json → choice.json
✂️ Подгонка и укладка
EditRecordingровно под блок, ≤ 300 с, WAV
→
Под речь−20…−22 дБ к речи, провал 2–4 кГц
→
Стыкивход 0,3–2,5 с, уход до слова
🔔 Звуки
События листазаставка, карта, цифра, плашка
→
SearchSoundEffects≤ 3 с, WAV
→
Отбивка на кадрудар −2…−12 дБ к речи
👂 Выбор
Страница версииварианты с плеером, «выбрать»
→
Выбор → заданиеchoice.json · music.track · план
→
Мастер −14 LUFSмузыка в стеме, учёт лицензий
машиначеловек решает или смотритагент Claudeитог дорожки

Так работают тема и подложка autocut, трек на блок story_cut и подложка шортсов. Дорожка «Звуки» есть только для заставки главы и входа в карту в двух движках — остальное надо построить (раздел «Звуки»).

11.3 · 2Настроение и динамика блока

Роман, 03.10.2026: «ещё не забудь отдельно подбор музыки в MCP Эпидемик Саунд. Музыка это супер важно! Настроение, динамика, какие-то звуки чего (кроме музыки же надо звуки ещё отображать или показывать)». Канон этапа: музыка — настроение и динамика блока, не фон.

1Описать блок словами
  • настроение — из слов речи и места блока: хук — эмоция, глава — вопрос, финал — выход; в коде — теги mood с весами (hopeful +2, dark −3)
  • динамика — темп речи и роль блока: энергия 1–4, как в палитре монтажёра (1 едва слышно … 4 почти в голос: −26 / −20 / −11 / −2 дБ к файлу)
  • где пик и где пауза: заставка, карта, финальная карточка — там музыка поднимается; под словами — ровная
  • блок описывает сессия по его тексту, не по жанру канала
YTCR04: 21 блок с треком, местом входа и энергией — 08_Cut/music_palette.json
2Что ищем в Epidemic
  • term словами («hopeful piano strings slow build») + фильтры: moodSlugs, taxonomySlugs (жанр), featuredInstrumentSlugs, bpm, duration, vocals=false
  • SearchSimilarToRecording — похожее на понравившийся трек; SearchExternalReferences — референс из Spotify
  • превью меряются: громкость, LRA, нарастание, где пик, атаки в минуту, доля 2–4 кГц, доля голоса
  • стемы FULL · INSTRUMENTS · BASS · DRUMS; под речью звучит INSTRUMENTS — без ударных, баса и мелодии
autocut: 10 запросов → 37 тем и 43 подложки в scout.json
3Чего не берём
  • вокал под речью: vocals=false в поиске, −10 за вокал в тегах, −4, если изолятор слышит голос (доля > −8 дБ)
  • трек громче речи и «дышащий» на паузах: вне заставок пауза даёт не больше 30 % подъёма
  • много резких ударов (> 60 атак/мин), неровная подложка (LRA > 10), тема вне 140–300 с, жанр «медитация»
  • название, которое спорит с посылом фильма (см. грабли)
YTEVO · music/choice.json, поле why
4Музыка меняется со структурой
  • тема — открытие, карточки глав, финал; подложка — блоки других дней; под разговором музыки нет (autocut, headless)
  • трек на блок по палитре монтажёра: 45 кусков и 23 отбивки на 27 минут (story_cut)
  • внутри блока: тихий вход, «тело» записи и дроп — на заставку, уход под первые слова; нарастание — на название; финальный удар — на финальную карточку
  • один трек на всю программу — только короткий ролик канала (solo, 4:42); подложка одним уровнем на весь фильм — фон, которого канон не хочет
5💬 Моё мнение · решает РоманРешает Роман
  • один трек на фильм или по блокам: для ролика до 5 минут один трек нормален — где граница, решает Роман
  • вокал: сегодня запрещён везде; допустить ли на финальной карточке и в шортсе без речи
  • какие события озвучивать — список в разделе «Звуки» ждёт его слова

11.3 · 3Отбор трека: от слов блока до укладки

Один блок крупно. Штрафы — из оценки audio_music.py (autocut): они не выкидывают трек, а опускают его в списке.

1
Запрос словамиагентсессия по тексту блока: term, mood, жанр, BPM⇒ vocals=false в поиске
2
Замер превьюмашинагромкость, LRA, атаки, доля 2–4 кГц, доля голоса
3
Без вокаламашинатеги и изолятор речи✓ вокал в тегах −10; голос > −8 дБ −4
4
Ровно, без ударовмашинатема — 140–300 с✓ LRA ≤ 10 · ≤ 60 атак/мин
5
3 кандидатаагентназвание не спорит с посылом⇒ choice.json, поле why
6
Роман слушаетчеловекстраница версии, «выбрать»
7
Подгонка и укладкамашинаEditRecording ровно под блок, ≤ 300 с✓ −20…−22 дБ к речи
машиначеловекагент

11.3 · 4Звуки, которые показываем

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

СобытиеГде в фильмеСегодня в кодеНадо
Заставка главыкарточка или плашка главыstory_cut: Ping Boom −12 дБ из палитры монтажёра; headless: stinger Epidemic −2 дБ RMS к речи с главы 2solo, doc_cut, autocut — построить
Вход в картуmap_route, map_place, map_worldstory_cut: свист whoosh −20 дБ, удар за 0,48 с до кадраостальные — построить
Цифра всталаэкраны number, counter; выноска viz считает 0,8 снетклик или тик на остановке счётчика — 💬 моё мнение
Плашка появиласьlower third, имя, плашка шортсовнеткороткий мягкий свист на кадр появления
Карта рисуетсялиния маршрута, точкинет (только вход)шелест на длину рисования, тише отбивки
Смена куска в шортсестык двух репликнет; клиент music.py умеет sfx(), команды неткоманда shorts.py sfx — открыто

Откуда: SearchSoundEffects (term, ≤ 3 с) → DownloadSoundEffect WAV (02.10 пришёл 96 кГц); похожее — SearchSimilarToSoundEffect. Уровни как у отбивок: удар −2…−12 дБ к речи, клик тише; звук — на кадр события, не в слово. Список событий утверждает Роман.

Звуки по движкам: есть и надо
Событиеstory_cutheadlesssolodoc_cutautocutшортсы
Заставка главы✓✓✗✗✗·
Вход в карту✓✗✗✗✗·
Цифра встала✗✗✗✗✗✗
Плашка появилась✗✗✗✗✗✗
Карта рисуется✗✗✗✗✗·
Смена куска·····!
✓есть в коде!частично✗надо построить·не про этот движок

Шортсы: клиент music.py умеет sfx(), команды нет. Какие события озвучивать — решает Роман.

11.3 · 5Движки: откуда трек, как выбран, как лежит

ДвижокОткуда трек и как выбранУкладка и уровниСостояние
autocut (YTEVO)scout по 10 запросам: теги + замеры превью → music/choice.json; тема и подложка, WAV FULL + INSTRUMENTSстем INSTRUMENTS под речью ≤ −20 (тема) / −21 (подложка) дБ к речи, провал 2–4 кГц −3,5 дБ; без речи подъём до −9, не выше −6; пол −26…−28лестница из 3 тем; report меряет музыку к речи
headless (YTLAB)трек и stinger из задания: music.track (file, id, drop_s, outro_card_at_s), music.stingоткрытие −21 → −15 → 0 (заставка) → −15 дБ RMS к речи; финал на outro_card_at_s; отбивка −2 дБ на плашке глав со 2-йжурнал music_ledger.json; под разговором музыки нет
solo (YTCG37)один трек, подрезан сервисом ровно под длину программы (282 с)level_bed подтягивает тихие места до 10 дБ; подложка −21 дБ RMS к речи, хвост без слов −7«Brighter», журналы v1–v3; ждёт safelist канала
doc_cut (YTCH)план руками или агентом {CODE}_music_v1.json: 8 треков, 12 кусков с at в трекеbed −22 / lift −9 дБ к речи, вход 1,5 с, уход 3 с; речь ловится с упреждением 0,2 сжурнал music_v1_ledger.json; канал фонда подключён к Epidemic 02.10
story_cut (YTCR04)палитра монтажёра music_palette.json: 8 треков, 7 звуков, энергия на блок → sc_music.py planэнергия 1–4 = −26 / −20 / −11 / −2 дБ при программе −16 LUFS + поправка на речь; паузы > 1 с: +7 дБ для энергий 1–2; уход за 0,35 с до слова45 кусков, 23 отбивки → sc_sound.py music → мастер
шортсыmusic --find → --track id: EditRecording ровно под длину куска; поиск ≥ 45 с без вокалаbelow_db 21 LUFS к речи по замерам обоих, вход 0,3 с, уход 0,8 с; замер: речь −13,0, подложка −33,9 LUFSmusic/S{NN}.wav + .json; рендер берёт по файлу, чужой пропускает с ⚠

11.3 · 6Показ Роману до рендера

1Варианты треков на странице версииесть в генераторе
  • группа music плана screen-plan-v1: title, text, variants[id, title, note, audio], default; у варианта можно указать at — где в фильме
  • карточка = плеер (preload=none), «выбрать», «# ссылка» — как у голоса; звук ≤ 700 КБ на вариант
  • в файле — кусок фильма на уровне мастера с треком (autocut: открытие 0:00–0:40), не трек сам по себе
  • фильм через группу music ещё не показывали; лестница autocut (audio.py ladder --what music) пока локальная, в ~/Downloads — Роману нужна ссылка на yt.rya.ae
2Звуки — там же; Telegram — файлом
  • вариант с моментом: «звук: счётчик встал · 0:37» — кусок с событием и звуком; по одному звуку на тип события
  • без ответа — объявленное умолчание: тема и подложка по оценке, отбивки как в коде
  • в Telegram — короткий кусок с треком: бот до 50 МБ, своя сессия до 2 ГБ (shorts.py telegram); рядом ссылка на страницу версии
3Выбор → задание
  • autocut: music/choice.json — theme, bed, theme_candidates, why; руками --theme / --bed
  • headless и solo: music.track, music.sting в {CODE}_cut_job.json; журнал — 08_Cut/music_v{N}.json
  • doc_cut: план {CODE}_music_v1.json; story_cut: палитра → {CODE}_music_plan.json; шортсы: music/S{NN}.json
  • поля music.version нет — версия живёт в теге файла
4Лицензия до показа
  • канал YouTube подключить в Epidemic (safelist) до выхода; через MCP не видно — подтверждает Роман («канал фонда подключён — скачивай и используй», 02.10)

11.3 · 7Проверки

ПроверкаКогдаНормаОткуда взялась
Музыка ниже речиreport · renderautocut ≤ −20 (тема) / −21 (подложка) дБ к речи в окнах 3 с с речью ≥ 70 %; headless, solo −21 RMS; doc_cut −22; шортсы 21 LUFSзапас к «не ближе 18 дБ»: окно с паузой читает речь на 1–2 дБ тише
Подъём без речикарточки, финалсамое громкое место −9 дБ к речи, не выше −6; подъём ≤ 15 дБудар на карточке приходил приглушённым
Нет вокалаscout · поискvocals=false; теги без «no vocals» −10; доля голоса > −8 дБ −4в инструментале изолятор речи почти ничего не находит
Длина = блокmusic шортсов · soloEditRecording forceDuration, ≤ 300 с; шортс: разница > 0,5 с → ⚠ и пропускотбор меняли — музыка ложилась на чужой шортс
Подложка не пропадаетsolo level_bed · autocut floorsolo: тихие места не ниже «обычный − 3 дБ», подъём ≤ 10 дБ; autocut: пол −26…−28YTCG37: вступление на 7–11 дБ тише — музыка пропадала на полминуты
Лицензиядо upload и выходаканал в safelist Epidemic; запись в журнале лицензийбез safelist — претензия Content ID
Музыка в шортсеupload≤ 90 с музыки при Content ID (шортсы 1–3 мин)правило YouTube с 24.09.2026 — по памяти qc 28.09, кодом не сверено
Мастерmaster−14 ±1 LUFS, пик ≤ −1 dBTP, LRA ≤ 8; autocut ±0,517_audio/standard.py — одно место чисел
Уровни одним взглядом
Музыка под речьюдБ к речи
−21 подложка−18 не ближе
−32−28−26−20−14

autocut: тема ≤ −20, подложка ≤ −21, пол −26…−28; headless и solo −21 RMS; doc_cut −22; шортсы — на 21 LUFS ниже речи.

МастерLUFS integrated
−14 цель
−18−15−14−13−10

пик ≤ −1 dBTP, LRA ≤ 8; autocut держит ±0,5 — числа в 17_audio/standard.py.

нормана гранибрак

11.3 · 8Что обновляет базу знаний

ФайлЧто хранитКто пишет
music/choice.json (кэш autocut)тема, подложка, 3 кандидата, whyисполнитель «звук» по лестнице; Роман — «Скопировать выбор»
music.track, music.sting в {CODE}_cut_job.jsonтрек, дроп, карточка финала, stingerсессия после выбора Романа
08_Cut/{CODE}_music_v1.json (doc_cut)треки и куски: at, bed, lift, in, out, noteчеловек или агент по структуре
08_Cut/music_palette.json + .md (story_cut)как монтажёр ставил музыку: треки, звуки, энергия по блокамсессия по проекту монтажёра; план — sc_music.py
_licenses.json · music_ledger.json · music_v{N}.json · sound_music_<tag>.jsonчто скачано, где звучит, уровнидвижки сами
профиль канала: треки, настроения, music.below_dbполя нет: shorts_profile.json читает ключ music, но он не задан ни у одного канала (умолчание 21); в color_profile.json музыки нет; запросы зашиты в audio_music.pyнадо построить — YTs/{CH}/music_profile.json (предложение)
память reference_epidemic_sound_mcpадрес, инструменты, лицензия, где ключсессия после проверки

11.3 · 9Ошибки и грабли

CDN отдаёт 5–25 кБ/с и рвёт соединениедокачка Range в .part, свежий адрес (подпись истекает: 401/403/404), до 10 попытокautocut epidemic.py
forceDuration ≤ 300 сдлиннее — отказ: запись целиком с src_s или делить; нарезка умеет --require, --prefer, --avoid, --loopableepidemic.py edit
Ключ в двух местахapi_key (autocut) и epidemic_sound.env (шортсы) — свести; в git, KB, память, чат — никогдастек
Трек без safelistпретензия Content ID; подключён ли канал — через MCP не видно, подтверждает Романпамять
Подложка пропадала на полминутывступление и брейки трека на 7–11 дБ тише тела → level_bed подтягивает до 10 дБYTCG37
Название трека спорит с посылом«Theme of Uncertainty» под манифест не взяли и при высокой оценкеYTEVO choice.json
Музыка легла на чужой шортсотбор поменяли, S{NN} сдвинулся → slug и длина ±0,5 с в S{NN}.json, иначе ⚠ и пропускшортсы

11.3 · 10Команды

Шортсы и story_cut
V=~/YTAI/environment/.venv_transcribe/bin/python
S=~/YTAI/scripts/07_shorts/0701_finished/shorts.py; SC=~/YTAI/scripts/05_editing/0511_story_cut

$V $S music --job $JOB --find "light minimal background for a business talk" --n 8  # кандидаты с превью
$V $S music --job $JOB --track <id> --only S02  # music/S02.wav + S02.json ровно под длину куска; render подхватит сам, --plain — без музыки
$V $SC/sc_music.py plan $P  # палитра → {CODE}_music_plan.json: куски, отбивки глав и карт
$V $SC/sc_sound.py music $P && $V $SC/sc_sound.py master $P  # укладка по энергии → music_<tag>.wav → мастер −14
autocut · тема и подложка
AC=~/YTAI/scripts/05_editing/0510_autocut

$V $AC/audio_music.py scout --cache $CACHE --first 10  # поиск → превью → замеры → music/scout.json; show — таблица с оценками
$V $AC/audio_music.py fetch --cache $CACHE --ids <id> --dest $P/02_Edit/Sound/Epidemic  # WAV FULL + INSTRUMENTS, запись в _licenses.json
$V $AC/audio.py ladder --what music  # лестница трёх тем → ~/Downloads/<CODE>_v4_choices/music/_chooser.html
$V $AC/audio.py assemble --theme <id> --bed <id>  # укладка под речь, сведение, мастер; выбор запоминается в music/choice.json
$V $AC/epidemic.py search "hopeful piano strings" --no-vocals --mood hopeful --min-dur 120 --max-dur 300  # прямой клиент: tools · search · similar · preview · download · edit
headless · solo · doc_cut
HC=~/YTAI/scripts/05_editing/0510_headless_cut; DC=~/YTAI/scripts/05_editing/0511_doc_cut

$V $HC/music.py build --job $J --edl edl.json --tag v1  # открытие, финал, отбивки → music_v1.wav, mix_v1.wav, music_ledger.json
$V $HC/solo.py music --job $J  # один трек под длину программы: подложка −21, финал −7
$V $DC/sound.py music --job $J --tag v1  # по плану {CODE}_music_v1.json → music_v1.wav + ledger
MCP в Claude Code
~/.local/bin/claude mcp list  # epidemic-sound ✔ Connected
SearchRecordings · SearchSimilarToRecording · SearchExternalReferences · EditRecording → PollEditRecordingJob → DownloadRecordingEdit · DownloadRecording (FULL / INSTRUMENTS / BASS / DRUMS) · SearchSoundEffects · SearchSimilarToSoundEffect · DownloadSoundEffect · ListVoices · GenerateVoiceover

Ключ — в ~/.config/ytai/epidemic_sound.env (права 600), в ~/.claude.json — ссылка на переменную, не ключ. Действует год; новый — в кабинете Epidemic Sound.

11.3 · 11Где лежит

Код
~/YTAI/scripts/07_shorts/0701_finished/music.py · shorts.py (music) · render.py (mix_music)шортсы
~/YTAI/scripts/05_editing/0510_autocut/audio_music.py · epidemic.py · audio_mix.py · audio_page.pyautocut
~/YTAI/scripts/05_editing/0510_headless_cut/music.py · solo.py (cmd_music)headless · solo
~/YTAI/scripts/05_editing/0511_doc_cut/sound.py (music)doc_cut
~/YTAI/scripts/05_editing/0511_story_cut/sc_music.py · sc_sound.py (music)story_cut
~/RYA/wt/kb-claude-editing/scripts/site/gen_screen_plan.pyстраница версии: группа music
Проект
{P}/02_Edit/Sound/Epidemic/ · _licenses.jsonWAV FULL и INSTRUMENTS (autocut)
{P}/02_Edit/Sound/music/ · sfx/ · music_ledger.jsonтреки и stinger (headless, solo, doc_cut)
{P}/00_Setup/08_Cut/{CODE}_music_v1.json · music_v{N}.json · music_palette.json · {CODE}_music_plan.json · sound_music_<tag>.jsonпланы и журналы
{P}/00_Setup/07_Shorts/music/S{NN}.wav · S{NN}.jsonподложки шортсов
<кэш autocut>/audio/music/scout.json · choice.json · previews/подбор и выбор; лестница — ~/Downloads/<CODE>_v4_choices/music/
Ключи и доступ
~/.config/ytai/epidemic_sound.env · ~/.config/epidemic/api_keyключ Epidemic Sound: права 600; не в git, KB, память; в ~/.claude.json — ссылка на переменную
Музыка и звуки · сверено 03.10.2026 · примеры: YTCG37 (один трек под длину программы) · YTCR04 (палитра монтажёра: 45 кусков, 23 отбивки)