◂ Этап SoundRYA.AESound · Fix the Float Source — звук фильмов кодом: исходник петлички 32-bit floatзвук · 3 окт 2026
Петлички DJI пишут 32-bit float: пик штатно выше 0 dBFS, речь тихая, запас берут на обработке. Поэтому звук фильма кодом начинается не со звука камеры и не со среза, а с целого *_orig.wav — и работает от него до мастера. Роман, 03.10.2026: «Петли у нас пишутся на 32 bit float и оч важно править именно исходник и работать с ним, он позволяет больше работы делать». Этап обязательный до сборки: голос чинят и выбирают на слух раньше экранов и рендера. Движки целиком — Фильм кодом, оригиналы и синхрон — Исходники машине, варианты голоса на странице версии — План экранов.
📌 Правило. Источник голоса — целый TX##_MIC###_*_orig.wav из 99_Pipeline/DJI_Audio/: float 32, 48 кГц, моно. Уровень ставят по речи, не по пику; до лимитера всё держится в float (alimiter level=disabled). Оригинал не перезаписывать — правка живёт копией рядом; где она лежит и как называется, решает Роман (плитка «Решает Роман»).
Одним взглядом
32-bitfloat
исходник — целый _orig.wav петлички
pcm_f32le · 48 кГц · моно · ≈ 30 мин
+31,9dBFS
пик в float — не брак (YTEVO03)
речь −45…−50 дБ — уровень ставят по речи, не по пику
−30LUFS
речь на входе изолятора
alimiter level=disabled · сдвиг ≤ 48 сэмплов
−14LUFS
мастер, допуск ±1
пик ≤ −1 dBTP · LRA ≤ 8 · standard.py
1Схема2Исходник3Почему float4Движки5Чистка6Проверки7Пробел8Знания9Грабли10Команды11Где лежит

18.1 · 1Схема: от исходника петлички до мастера

📥 Исходник
TX##_MIC###_orig.wavfloat 32 · 48 кГц · моно · ~30 мин
→
99_Pipeline/DJI_Audioцелый файл, не срез __S##
→
sync.py measureсдвиг к камере, MAD ≤ 12 мс
→
Источник на говорящегоне _edit · _timeline · камера
🎚 Уровень по речи
speech_levelK-взвешивание, удары не ломают
→
Речь к −30 LUFSне по пику: пик до +31,9 dBFS
→
alimiter −1 dBFSlevel=disabled · latency=1
→
Стем float32вся длина, пики целы
🧹 Чистка
voice_isolateAUSoundIsolation · wet 100 · ×80
→
Срез 30 Гц, сдвиг ≤ 48постоянная составляющая, 1 мс
→
Четыре вариантаraw · soft 60 % · clean · warm
👂 На слух
Лестницаодин кусок, −16 LUFS, m4a
→
Страница версииварианты голоса, «# ссылка»
→
Выбор Романаsound.speech в задании; wet 0,9
🔊 Сборка
Речь по сэмпламкадр = 1920 сэмплов, стыки в тишине
→
Тон комнаты · nat«источник − голос», −50 LUFS
→
Музыкапод речью −20…−21 дБ, ducking
✅ Мастер
Мастер −14 ±1 LUFSпик ≤ −1 dBTP · LRA ≤ 8
→
Синхрон≤ 20 мс · ≤ 40 мс · 0 ± 2 мс
→
Сверка речиverify · asr: речь = лист
→
«ок» Романаголос слушали до рендера
машиначеловек решает или смотритагент Claudeитог дорожки

Дорожка «На слух» стоит до сборки: на YTCG37 «голос — эхо» всплыл на готовом фильме и стоил пересборки речи, экранов по звуку и рендера.

18.1 · 2Что считать исходником

Источник

  • целый TX##_MIC###_ГГГГММДД_ЧЧММСС_orig.wav — float 32, 48 кГц, моно; файл ≈ 30 мин, у спаренных TX вшит таймкод
  • лежит в {проект}/99_Pipeline/DJI_Audio/; на карте — папка TX_MIC001_*/
  • пики штатно выше 0 dBFS, речь −45…−50 дБ — запас берут на обработке
  • рекордер с петличками (headless): WAV в 01_Source/Audio/; время фильма — по нему
  • срезы …_orig__S08.wav — симлинки на тот же файл; целого они не заменяют

Не источник

  • _edit.wav — обработан рекордером, на части дублей короче; к картинке не подходит
  • *_timeline.wav — сжатое время секвенции Premiere, паузы выброшены; точность среза ≤ 0,67 с
  • звук камеры — 24 бита через MI-адаптер: больше комнаты, слышит обе стороны и героиню громче автора за кадром
  • AAC камер DJI записан «в потолок»; -ac 1 сливает двух людей — L и R часто разные микрофоны
  • 4 дискретных дорожки камера пишет только при TC Off, режиме Q и пустом мик-джеке — иначе CH2 = TX1 + TX2

Правило записано в dc.py doc_cut («*_timeline.wav сюда не годятся… звук берётся из *_orig*.wav»), на странице съёмочного дня («в разбор и в 01_Source идёт только _orig») и в CLAUDE.md.

18.1 · 3Почему float и почему уровень по речи

1Пик выше 0 dBFS — не брак
  • YTEVO03: от +10 до +31,9 dBFS; в float ничего не срезается
  • один удар по капсюлю задаёт пик всему получасовому файлу
  • нормировка «пик → −1 dBFS» глушит файл целиком: срез −33 дБ, речь на −54 dBFS; pyannote — 0 реплик при живом тексте
память reference_float_lav_level_rms
2Уровень ставят по речи
  • ингест лент (трек Premiere): −23 LUFS ±1 с гейтингом, поправка −10…+15 дБ
  • копии для распознавания: RMS −20 dBFS, усиление −6…+20, alimiter=limit=0.85:level=disabled:attack=1
  • вход изолятора −30 LUFS (autocut, solo); doc_cut — петличка +20 дБ
  • speech_level autocut: K-блоки 0,4 с, выбросы срезаны на P99,5 — удар до +30 дБ над речью ломает гейты BS.1770, этот замер нет
standard.py · s2_audio.py · audio_dsp.py
3До лимитера — только f32
  • чтение soundfile float32, декод pcm_f32le; alimiter везде level=disabled
  • мастера headless, solo, story_cut — f32; autocut (PCM 24) и doc_cut (s24) переводят после лимитера
  • s16 и s24 до лимитера срезают всё выше 0 dBFS: «во float это законный сигнал» (relav2)
  • старые триммеры 0103 и 0105 пишут s24, 0104 — s16; спека 0103 зовёт DJI «24-bit» и обещает «без потерь» — для float неверно
audio_io.py · relav2.py · lavcut.py
Нормировка по пику → по речи · YTEVO03

Копии для распознавания с float-петличек: пик задаёт один удар по капсюлю, речь — нет.

былопик → −1 dBFS
−33дБ
срез всего файла
−54dBFS
речь после
  • один удар по капсюлю задаёт пик всему получасовому файлу
  • pyannote — 0 реплик при живом тексте
сталоуровень по речи, float до лимитера
−20dBFS RMS
речь в копии
−6…+20дБ
усиление по RMS
  • alimiter limit 0,85 · attack 1 · level=disabled — пик не тянется в потолок
  • гейт: копия не тише источника на 6 дБ (источник громче −40)

18.1 · 4Движки: откуда звук и как идёт цепочка

Пять движков — на странице Фильм кодом; здесь только их звук. Числа мастера у всех из 17_audio/standard.py; речь читается из источника теми же сэмплами, что стоят в листе (кадр = 1920 сэмплов).

ДвижокИсточник сегодняЦепочка
autocutстемы из прокси AAC; оригинал PCM сменяет его после сверки корреляциейstems → clean (речь −30 LUFS, изолятор, 4 варианта) → автовыбор наименее обработанного → клип −26 LUFS, компрессор −22 дБ 2,5:1 → тон сада −50 LUFS → Epidemic под речью −20 / −21 дБ → мастер: усиление → alimiter −1,5 → подстройка до −14 ±0,03
headless мультикамWAV рекордера в 01_Source/Audio/, две петличкирезы только в тишине → обе петлички одними сэмплами, кроссфейд 20 мс (6 в провале) → автомикс Дугана, доля ≥ −15 дБ → сумма −20 LUFS, компрессор −21 дБ 2,5:1 → подложка −21 / заставка −15 дБ RMS к речи → мастер volume → 192k → alimiter → 48k
soloпетличка по source.lav задания, синхронна клипуedges по звуку → clean: isolate: речь −30, запас 2 с, изолятор → 30 Гц → сдвиг ≤ 48; wet 0,9, EQ lav_warm или recipe_c, компрессор −24 дБ 2:1 (или denoise: afftdn, задержка 25 мс снята) → подложка −21 / финал −7 дБ → мастер + снятие задержки лимитера
doc_cuttx_strips_source ингеста — целые _origsync measure (окна 10 с через 45 с, MAD ≤ 12 мс) → stems: петличка +20 дБ, __raw + __iso → dialog: wet 0,72 петличка / 0,86 камера, герой −24 / автор −26,5 дБFS, второй источник −16 дБ пока говорит первый → подложка −22 → мастер −14, s24
story_cut⚠ звук клипа Transcription/<клип>_AUDIO.wav (0102: s16, −ac 2), не _orig.wavгруппа к −20 дБFS RMS, кроссфейд 12 мс, стемы по микрофону lav / car / cam / pub → nat: перебивки −30, укрытия −38 → музыка по энергии 1–4 = −26 / −20 / −11 / −2 дБ, в паузах +7, уход за 0,35 с до слова → мастер

18.1 · 5Чистка и лестница на слух

1voice_isolate — изолятор голоса
  • системный AUSoundIsolation, офлайн, ×80 реального времени; выход float32 той же длины
  • --wet 0…100 --quality high|standard --pregain --delay-comp --info; high — macOS 15+
  • вход −30 LUFS (громкую речь модель роняет), выход через срез 30 Гц; сдвиг > 48 сэмплов — стоп
  • сборка swiftc -O voice_isolate.swift -o bin/voice_isolate; бинарь вне git
999_extra/voice_isolate.swift → bin/voice_isolate
2Четыре варианта на одной сетке
  • raw — только ВЧ-фильтр; soft — 60 % голоса; clean — 100 %; warm — clean + рецепт C
  • рецепт C «тёплый с телом»: +4 дБ на 120 Гц, +1,5 на 240, +1,5 на 3,5 кГц, −1,5 на 9,5 кГц
  • имена лестницы _v1_Orig · _v2_Soft · _v3_Clean · _v4_Warm — по порядку, без букв-рецептов
  • wet 0,9: чистый изолятор без живой петлички даёт цифровую тишину в паузах и речь «в вате» — solo 90 % + 10 %, doc_cut 0,72 / 0,86
audio_stems.py VARIANTS · audio_dsp.py RECIPE_C
3Лестница: что слышит Роман
  • solo sound_ab: пять вариантов куска 24 с на −16 LUFS, m4a → ~/Downloads/<CODE>_sound_choice/
  • autocut ladder: sound / music / edges на −20 LUFS и страница с плеерами и «Скопировать выбор»
  • на странице версии — «Голос: было эхо», «# ссылка» у каждого варианта; мерило — хвост комнаты после фразы (YTCG37: 24 / 28 / 31 дБ → 32 / 35 / 42)
  • в фильм идёт выбранный: sound.speech задания (clean, wet, eq, comp) или --variant день=warm; менять одной строкой
solo.py sound_ab · audio_mix.py ladder_sound · audio_page.py
4Adobe Podcast Enhance — только камера
  • накамерный звук пачкой через приватный REST; рецепт C по умолчанию, A / B / D под настроение
  • выход Audio_Enhanced/<stem>_enhanced.wav, 16 бит; loudnorm не ставится, если файл тише −40
  • петличке float не нужен: выход 16 бит, уровень ставит loudnorm; лимит 4 ч в день
  • рецепты и боевой случай — Чистка звука через Adobe Podcast
adobe_podcast_enhance/enhance.py RECIPES
Хвост комнаты после фразы · YTCG37

На сколько дБ падает уровень через 100 / 200 / 300 мс после конца фразы: больше — суше.

100 мс · как записано24 дБ
100 мс · после чистки32 дБ
200 мс · как записано28 дБ
200 мс · после чистки35 дБ
300 мс · как записано31 дБ
300 мс · после чистки42 дБ

Мерка — solo.py tail_db, медиана по концам фраз; сухая речь — 35…50 дБ. Чистка: изолятор 90 % + 10 % живой петлички.

18.1 · 6Проверки

ПроверкаКогдаНормаОткуда взялась
Формат исходникадо всегоpcm_f32le, 48 кГц, моно, целый файлсрезы и s24-копии теряли пики
Петля ингеста (трек Premiere)17_audio, план лент−23 LUFS ±1; дрожание < 0,3 LU не правится; отрезок ≥ 3 сцель Auto-Match и EBU R128; 9 LU запаса до мастера
Копии для распознаванияday_ingest, s2_audioRMS −20 dBFS; копия не тише источника на 6 дБ при источнике громче −40YTEVO03: нормировка по пику — pyannote пуст при живом тексте
Вход и сдвиг изолятораclean · dialogвход −30 LUFS, потолок −1; сдвиг ≤ 48 сэмплов (1 мс), иначе стопмодель роняет громкую речь; обработка задерживает звук
Речь после чистки целаяпосле dialog: ASR и слухрасшифровка заново = лист (YTCG37: 951 слово, 100 %); шипящие на местеизолятор может съесть согласные
Мастерmaster · qc−14 ±1 LUFS, пик ≤ −1 dBTP, лимитер −1,5, LRA ≤ 8; autocut ±0,5; doc_cut TP ≤ −0,9; паспорт YouTube −14 ±217_audio/standard.py — одно место чисел
Синхрон звук–картинкаqcautocut ≤ 20 мс на планах ≥ 3 с; headless ≤ 40 мс; doc_cut 0 ± 2 мс к WAV мастераподрезка в плеере дала рассинхрон 30 мс
Собранная речь = листverify · asr · verify.pyheadless: 3 + 3 слова у стыка, < 5 из 6 → флаг; solo: вся программа; doc_cut и story_cut: края реплик; autocut — ASR сборки нетвырезанные слова нашёл клиент
Тишина и мёртвые каналыqc · listen · 17_audiosilencedetect −55 дБ / 2 с; −91 дБ = цифровой ноль; канал тише −50 мёртв; полоса тише −45 LUFS — не петличка говорящегоFX3 утром писал ноль в L; TX02 на −49…−51 — шум зала
Нормы одним взглядом
Громкость мастераLUFS integrated
−14 цель
−20−16−14−12−8

±1 — standard.py; ±2 — паспорт YouTube («на грани»); autocut сверяет ±0,5

Пик мастераdBTP
лимитер −1,5предел −1
−4−3−201

doc_cut допускает TP ≤ −0,9

Синхрон звук–картинкамс, |сдвиг|
autocut ≤ 20подрезка 30 ✗headless ≤ 40
010204050

autocut — на планах ≥ 3 с; doc_cut — 0 ± 2 мс к WAV мастера

Сдвиг изоляторасэмплов при 48 кГц
48 = 1 мс — стоп
0247296
нормана гранибрак

18.1 · 7Пробел: единая исправленная копия

1Решает Роман: где лежит исправленная float-копиянадо построить
  • Роман 03.10.2026: «оч важно править именно исходник и работать с ним»
  • код говорит обратное. 17_audio/standard.py, строка 14: «одна поправка на полосу сцены, эффектом на клипе (исходник 32 float не трогаем)»; README 17_audio: «базово выравниваем в Premiere, не трогая исходник (петлички пишутся в 32 float — запас есть в обе стороны)»; audio_level_plan.py: «Исходники не трогаются никогда»
  • ни один шаг не пишет исправленную float-копию источника: autocut чинит в _autocut_cache/…/audio/clean/, doc_cut — в stems/{key}__raw|__iso.wav, solo — заново на каждом прогоне; story_cut берёт звук клипа
  • предложение: оригинал не перезаписывать; исправленную копию класть рядом — float 32, 48 кГц, моно, та же длина и сетка сэмплов, уровень по речи, чистка выбранная на слух; все движки берут её, а не чинят заново
  • место и имя файла — решение Романа; после него правило в standard.py меняется явно
вопрос Роману № 4 в хэндоффе 03.10
2Что уже есть сегодняесть
  • копии с именами: Audio_Enhanced/<stem>_enhanced.wav; лестница _v1_Orig … _v4_Warm; doc_cut __raw / __iso; autocut <кэш>/stems/<имя>__orig.wav
  • оригиналы хранятся рядом: 0113 держит их в tx_strips_source и пишет бэкап ингеста; relav2: «пишем в стейджинг, подмена — отдельным шагом»
  • ближе всего к тезису — Роман 02.10 о YTCG37: «нужно исходник подтянуть, если есть, обработать»
3💬 Моё мнение
  • чинить копию, а не оригинал: оригинал — единственный носитель пиков выше 0 dBFS, замена необратима
  • копия на одной сетке сэмплов с оригиналом — тогда синхрон, края по словам и листы не пересчитываются
  • варианты места: рядом в 99_Pipeline/DJI_Audio/ с суффиксом в имени · папка-сосед с теми же именами · только в проекте фильма, но одна на все движки

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

ФайлЧто хранитКто пишет
17_audio/standard.py + READMEединственное место чисел: ингест −23, мастер −14 / −16, потолки, гейты речи; VERSION и UPDATEDсессия после решения Романа; движки импортируют, копий не заводят
sound.speech и music в {CODE}_cut_job.jsonвыбранная чистка: clean, wet, eq, comp; трек и уровни музыкисессия после выбора Романа на слух
autocut: clean/<стем>.json, variant_choice.json, music/choice.json, audio_report.jsonуровень речи, усиление, пик, сдвиг изолятора; выбор варианта и музыки (запоминается); громкость, LRA, источники стемовaudio.py; руками — --variant, --theme, --bed
08_Cut/sound_dialog_<tag>.json, sound_master_<tag>.json, verify_<tag>.json, sync.jsonусиления по дублям, хвост комнаты до и после, мастер и ok, сверка речи, сдвиг к камереheadless, solo, doc_cut, story_cut — имена свои, смысл один
рецепты в коде: RECIPES, RECIPE_C, SPEECH_EQ, CHAINSрецепт C, тембр lav_warm, цепочки lav / car / cam / pubсессия после A/B Романа; умолчание — только его выбор
память: feedback_sound_fix_float_source, reference_float_lav_level_rms, feedback_lav_room_echo_isolate, хаб reference_hub_audio_syncправило источника, уровень по RMS, эхо и изолятор, рецепт C и процесс выборасессия сразу после слов Романа

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

Нормировка float по пикуречь на −54 dBFS, pyannote слышит ноль — усиление по RMS и alimiter; гейт: копия не тише источника на 6 дБYTEVO03 · s2_audio.py
alimiter сам тянет выход в потолоквсегда level=disabled; limit 0,95 при attack 5 мало — пик снова в 0 dBFS, нужно 0,85 и attack 1s2_audio.py · audio_io.py
Лимитер и afftdn сдвигают звукautocut: latency=1; solo denoise: 1199 сэмплов (25 мс) сняты корреляцией; мастер solo — снятие задержки лимитераYTCG37 · solo.py unlag
s16 или s24 до лимитерасрезают всё выше 0 dBFS; старые триммеры 0103 и 0105 пишут s24, 0104 — s16; спека 0103 обещает «без потерь»relav2.py · 01_prepare
Файл TX кончился посреди клипазаписи по ~30 мин: клип на стыке не сходится ни с одним файлом — склейка двух (MIC026 + MIC027); finesync распадается на островасборки по звуку
Петличка пишет комнату («голос — эхо»)изолятор 90 % + 10 % живой петлички, тембр под петличку; компрессор поднимает хвост на 2–3 дБ — чистить до негоYTCG37 v1
Чистый изолятор — цифровая тишинав паузах ноль, речь «в вате» — подмешивать сырой: wet 0,9 (solo), 0,72 (doc_cut), soft 60 % (autocut)doc_cut · solo
Изолятор роняет громкую речьвход −30 LUFS с потолком −1; на выходе постоянная составляющая (−82 dBFS) — срез 30 Гц; сдвиг > 48 сэмплов — стопautocut audio_stems.py
story_cut слушает звук клипаTranscription/<клип>_AUDIO.wav от 0102 — s16, -ac 2, первый поток; 4 дорожки адаптера свелись бы в две; _orig.wav не берётсяпо коду sc_listen.py; на фильме не проверено

18.1 · 10Команды

Шаги этапа Sound
V=~/YTAI/environment/.venv_transcribe/bin/python; X=~/YTAI/scripts/999_extra
E=~/YTAI/scripts/05_editing; AC=$E/0510_autocut; HC=$E/0510_headless_cut; DC=$E/0511_doc_cut; SC=$E/0511_story_cut

$V $DC/sync.py measure --job $J  # сдвиг петличек к звуку камеры: окна 10 с через 45 с → 08_Cut/sync.json
$V $AC/audio.py stems --cut … --cache …  # источники → моно float32 48 кГц во всю длину; оригинал PCM вместо прокси после сверки
$V $AC/audio.py clean  # речь к −30 LUFS, alimiter level=disabled, изолятор → raw · soft · clean · warm
$X/bin/voice_isolate in.wav out.wav --wet 100 --quality high  # AUSoundIsolation; последняя строка stdout — JSON с задержкой и скоростью
$V $HC/solo.py dialog --job $J  # clean: isolate — голос без комнаты + 10 % живой петлички → dialog_<tag>.wav
$V $AC/audio.py assemble  # речь по листу + тон сада + музыка → сведение → мастер mix_v4.wav и стемы
$V $SC/sc_sound.py dialog $P · nat $P · music $P · master $P  # story_cut: стемы по микрофону, живой звук, музыка по энергии, мастер
$V $HC/solo.py verify --job $J  # Whisper слушает собранную речь целиком, сверка с листом
$V $SC/sc_qc.py asr $P  # сверка речи с листом по краям кусков — через mlx_queue.py

Тяжёлые стадии сами встают в очередь рендеров (render_gate.py); распознавание — только через mlx_queue.py: одна локальная модель за раз.

Лестница на слух
$V $AC/audio.py ladder --what sound,music,edges  # → ~/Downloads/<CODE>_v4_choices/{sound,music,edges}/ + страница выбора
$V $AC/audio.py assemble --variant garden=warm --theme ID --bed ID  # выбор руками; запоминается в variant_choice.json и music/choice.json
$V $HC/solo.py sound_ab --job $J --take E  # пять вариантов куска 24 с на −16 LUFS → ~/Downloads/<CODE>_sound_choice/
# выбор Романа → задание, ключ sound.speech: {"clean": "isolate", "wet": 0.9, "eq": "lav_warm", "comp": "soft"}
doc_cut и формат исходника
$V $DC/sound.py stems --job $J · dialog · music · master  # петличка +20 дБ → __raw + __iso; wet 0,72 / 0,86; мастер −14, s24
ffprobe -v error -show_streams файл.wav | grep codec_name  # источник обязан быть pcm_f32le

18.1 · 11Где лежит

Код
~/YTAI/scripts/17_audio/standard.py · README.md · 1701_level/audio_level_plan.pyчисла громкости и план уровней лент
~/YTAI/scripts/999_extra/voice_isolate.swift · bin/voice_isolate · adobe_podcast_enhance/enhance.pyизолятор голоса; чистка камеры
~/YTAI/scripts/05_editing/0510_autocut/audio.py · audio_stems.py · audio_dsp.py · audio_io.py · audio_mix.py · audio_music.pyautocut: стемы, чистка, лестницы, сведение, мастер
~/YTAI/scripts/05_editing/0510_headless_cut/sound.py · solo.py · music.py · verify.pyheadless и solo
~/YTAI/scripts/05_editing/0511_doc_cut/sync.py · sound.py · verify.py · dc.pydoc_cut
~/YTAI/scripts/05_editing/0511_story_cut/sc_sound.py · sc_listen.py · sc_music.py · sc_qc.pystory_cut
Проект
{проект}/99_Pipeline/DJI_Audio/TX##_MIC###_*_orig.wavцелые исходники петличек — источник
{проект}/01_Source/Audio/ · 01_Source/…/Sound/*_timeline.wavрекордер (headless); срезы во времени секвенции — не источник
{проект}/00_Setup/08_Cut/{CODE}_cut_job.json · sync.json · sound_*_<tag>.json · verify_<tag>.jsonзадание (sound.speech), сдвиги, отчёты звука
{проект}/02_Edit/_cut/audio/ · 02_Edit/_cut/<tag>/audio/dialog, mix, master; doc_cut: stems/{key}__raw|__iso.wav
/Volumes/T9-Black-RYA/YTEVO/_autocut_cache/<CODE>_v4/audio/{stems,clean}/autocut: стемы и варианты чистки
~/Downloads/<CODE>_v4_choices/{sound,music,edges}/ · ~/Downloads/<CODE>_sound_choice/лестницы для Романа
Память и база знаний
~/.claude/projects/-Users-romansergeev-YTAI/memory/feedback_sound_fix_float_source.md · reference_hub_audio_sync.mdправило источника; хаб «Звук/синк» со ссылками на остальные заметки
/kb/audio-enhance/ · /kb/shootday/рецепты Enhance; настройки DJI Mic 3 и камер на съёмке
Звук фильмов кодом · сверено 03.10.2026 · примеры: YTCG37 (эхо, изолятор) · YTEVO03 (пики float +31,9)