◂ Этап HandbookRYA.AEMachine Stack · Models, Profiles, Queues — стек машины: модели, профили, очередикаталог · 3 окт 2026
Всё, на чём стоит трек, в одном месте: какие модели и каких версий, где они работают (мак или Memex), где лежат веса (почти всё вне git), какие замки и очереди не дают им мешать друг другу, какие файлы каналов и проектов читает код и кто их пишет. Если чего-то нет на диске — машина отказывает с именем файла, а не подменяет тихо.
📌 Три замка. ~/.cache/ytai/mlx.lock — одна локальная модель за раз (mlx_queue.py: свободной памяти ≥ 30 %, потолок ожидания 3 ч, код 75). ~/.cache/ytai/render.lock = RENDER.lock — на APFS без учёта регистра это один файл — один тяжёлый рендер (render_queue.py / render_gate.py). Рендер запускать системным python3: процесс с .venv_transcribe в командной строке держит mlx_queue часами.
Одним взглядом
≥ 30%
свободной памяти — иначе модель и рендер ждут
mlx_queue · render_queue: потолок 3 ч и 6 ч, код 75
1рендер
тяжёлый за раз — замок render.lock
чужой ffmpeg от 150 % CPU — ждём
38ГБ
свопа — мак ушёл в панику ядра
при «36 % свободно» → --par 1, RENDERQ_MAX_SWAP_GB
≈99M токенов
сожгли четыре облачных круга без системы
теперь — один текстовый проход на фильм
1Схема2Модели3Движки4Очереди5Профили6Файлы проекта7Проверки8Знания9Грабли10Команды11Где лежит

22.4 · 1Схема стека: где что работает

Тяжёлое на маке идёт через замки: модели — mlx.lock, рендер — render.lock.

Облако Claudeагенты: Draper → picks.json, помощники по BRIEF_edl.md; Workflow ≤ 10 агентоводин проход на фильм
Сервисы по сетиYouTube API · Telethon · rclone · Epidemic MCP · Sheets · Trello~/.config · channels.json
Замки макаmlx.lock — модель по одной · render.lock — рендер по одному~/.cache/ytai/
Модели на макеWhisper · CTC-выравниватели · pyannote · YuNet + SFace · Qwen3-8B.venv_*
Движки на макеffmpeg · HyperFrames · Remotion · Chrome · voice_isolateтяжёлое — через render.lock
Memex по sshWhisper (align_worker.py), VLM и LLM ревью; HF офлайнPATH без brew
Веса на дискеmodel.pt 1,26 ГБ · sface.onnx 38 МБ · yunet.onnx 232 КБ · xlsr-russianвне git: нет файла — отказ
сверху — облако и сетьснизу — веса на диске

Версии, пути весов и время — в таблицах «Модели» и «Движки» ниже.

22.4 · 2Модели

ЗадачаМодель · версияГде идётВеса, замок, время
Распознавание речиmlx-community/whisper-large-v3-mlx (mlx_whisper 0.4.3, mlx 0.31.2), word_timestamps, condition_on_previous_text=Falseмак, .venv_transcribe; Memex — тот же venv по ssh (align_worker.py, HF_HUB_OFFLINE=1)HF-кэш ~/YTAI/models/huggingface (HF_HOME) и ~/.cache/huggingface; mlx.lock; DC: 84 куска за 6 мин на Memex
Распознавание речи, быстроmlx-community/whisper-large-v3-turboмакsc_qc asr (приёмка речи YTCR), камеры в разборе дня; через mlx_queue.py
Выравнивание слов по звукуtorchaudio MMS_FA (CTC, with_star)мак, процессор~/.cache/torch/hub/checkpoints/model.pt — 1,26 ГБ; ≈ 1 с на край; flock mlx.lock, ждёт до 1800 с
Выравнивание, английскийtorchaudio WAV2VEC2_ASR_BASE_960H: align = forced align по тексту листа, letters = жадное CTC без языковой моделимакwav2vec2_fairseq_base_ls960_asr_ls960.pth; solo.py align · letters
Выравнивание, русскийwav2vec2-xlsr-russian (на основе xlsr-53), transformers Wav2Vec2ForCTC; окна ≈ 25 с, слова без кириллицы — «звезда»мак, .venv_whisperx (torch 2.13, transformers 5.13.1; пакета WhisperX нет — только имя venv)~/YTAI/environment/models/wav2vec2-xlsr-russian — вне git
Роли по голосамpyannote/speaker-diarization-3.1 (pyannote.audio 4.0.3)мак, MPS, иначе процессортокен ~/.cache/huggingface/token; torchcodec сломан — звук подаётся через soundfile
Лица: детекцияYuNet cv2.FaceDetectorYN (score 0,6 · NMS 0,3 · top_k 50)мак~/YTAI/environment/models/face/yunet.onnx, 232 КБ, OpenCV Zoo — вне git
Лица: узнавание герояSFace cv2.FaceRecognizerSF (128-D), HERO_SIM 0,30макsface.onnx 38 МБ; эталоны 999_extra/face_finder/refs_khalid_ali.npy (69), refs_kamran_sharaf.npy (21) — вне git; ложные 0,42–0,54 на похожих типажах — глазами
Что в кадре (VLM)mlx-community/Qwen2.5-VL-7B-Instruct-4bit (mlx_vlm 0.6.10); запасная Qwen2-VL-2B-Instruct-4bitMemex (ревью), мак (.venv_vlm, разбор дня)VLM ≈ 60–70 мин на фильм, пробы ≈ 50 мин; движки фильмов VLM сами не зовут — каталог перебивок готовится выше по течению и путал лица
Локальная LLMmlx-community/Qwen3-8B-4bit (mlx_lm 0.31.3)мак и Memex, .venv_llmсцены разбора дня, суждения ревью (≈ 20 мин), сжатие актов; mlx.lock
Облачные агентыrya-draper (отбор шортсов → picks.json), помощники по BRIEF_edl.md и BRIEF_trims_screens.md, rya-murch (сюжет); модель в frontmatter не задана — модель сессииоблако Claudeу помощников общий scratchpad — одноимённые черновики затирают друг друга: писать только в agents/edl/
Облачные проходы Workflow0509 cloud/wf_judge.js (судья · факты · кропы · скептик, ≤ 10 агентов), wf_verdict_doc.js, story_map/workflowsоблакоодин текстовый проход на фильм — четыре круга без системы сожгли ≈ 99 M токенов

22.4 · 3Движки и сервисы

ДвижокДля чегоПараметрыКлючи и грабли
HyperFramesэкраны и выноски: HTML/GSAP → ProRes 4444 с альфойnpx [email protected] (screens2 — 0.8.103), Node 22+, --workers 1; HYPERFRAMES_NO_TELEMETRY=1 HYPERFRAMES_SKIP_SKILLS=1 PRODUCER_BROWSER_GPU_MODE=hardwareдве версии в коде — свести; альфа только в mov и в один поток
Remotionвторой движок графики: кусок с камерами и экранами за один проход, шаблон из JSON, альфа с метками4.0.532 в 999_extra/remotion; npm run film (4K H.264 40M, PNG) · alpha (ProRes 4444); setColorSpace bt709; через очередь рендера8 бит sRGB — лог и кубы заранее в ffmpeg; ~4 к/с на 4K; лицензия: бесплатно до 3 сотрудников, ключ не задан; сравнение — Экраны кодом
chrome-headless-shell · GUI Chromeкадры экранов без рендера; плашки шортсов~/.cache/puppeteer; GUI Chrome --headless=new, прозрачный фонGUI Chrome в headless виснет на занятом маке; после --screenshot не выходит сам
ffmpeg — промежуточноекусок = файлprores_videotoolbox -profile:v standard (autocut); части x264 40 Мбит/с, закрытый GOP 12, затем -c copyProRes теги цвета берёт с кадра — ставить setparams
ffmpeg — фильмвыдача 4Klibx264 [email protected], 40M (maxrate 80M/60M), GOP 12, bf 2, stitchable; aac_at 320k (паспорт ждёт 384 — жёлтая строка)M3 Max ≈ 19 кадров/с одной частью, ≈ 21 двумя (--par 2)
ffmpeg — шортсывертикаль 1080×1920libx264 -preset slow -crf 12 -maxrate 40M, yuv420p, AAC 320k 48 кГц, +faststart; склейки читать -fps_mode passthroughсубтитры — поток PNG: libass и drawtext в сборке нет
ffmpeg — лёгкие копииLoom, телефон, Telegramh264_videotoolbox 8–10M; light.py: 1080p · 4K H.264 ≈ 27 Мбит/с · HEVC libx265 ≈ 12 (hvc1)-r 25 дублирует хвостовые кадры — -fps_mode passthrough
ebur128 · 17_audio/standard.pyгромкость−14 LUFS ±1, пик −1 dBTP, потолок лимитера −1,5, LRA ≤ 8autocut без loudnorm: усиление → alimiter → линейная подстройка
AUSoundIsolationизоляция голоса999_extra/bin/voice_isolate --wet 100 --quality high (HighQualityVoice, macOS 15+); EQ «рецепт C» из adobe_podcast_enhanceбинарь вне git: swiftc -O voice_isolate.swift -o bin/voice_isolate
video_tech_qc.pyпаспорт YouTube и VMAFrun F --profile yt_4k25 | yt_1080p25 | yt_short1080; --ref OLD.mp4 → VMAF ok 93 / bad 85целиком медленнее реального времени — в приёмке --no-scan; с --ref ни один этап пока не вызывает
Epidemic Sound MCPмузыка под длинуJSON-RPC https://www.epidemicsound.com/a/mcp-service/mcp: SearchRecordings, EditRecording (forceDuration ≤ 300 с), Poll, Downloadключ в двух местах: ~/.config/epidemic/api_key (autocut) и ~/.config/ytai/epidemic_sound.env (шортсы); CDN ≈ 18 КБ/с на поток — качать кусками Range; канал в safelist
YouTube Data API v3заливка, видимость, публикация08_youtube/upload_youtube.py --sni-bypass (resumable, куски 8 МиБ, дедуп по названию); scheduled_publish.py → publicтокен канала в 08_youtube/channels.json, scope youtube.upload + youtube.force-ssl; лимит ~10 заливок в сутки; Related video в API нет
Telethon · бот Telegramмастера в «Избранное», статусыtg_send.py: SaveBigFilePart 512 КБ × 8 потоков, до 2 ГБ, /opt/homebrew/bin/python3; статусы ~/bin/tg.py text rya 155880671бот шлёт до 50 МБ — поэтому Telethon от своего аккаунта; сессия бывает занята (database is locked) — повторить
rcloneDrive: оригиналы вниз, мастера и исходники вверхremote gdrive_rscore; --bind $(ipconfig getifaddr en0) мимо VPN; --drive-chunk-size 64M; cat --offset для докачки--include и --exclude вперемешку — правила одним --filter
Sheets v4 · Trello REST · Docsучёт: ContentList, карточка, документыledger.py, sheets_chip_links.py --verify, story_to_gdoc.py~/.config/rscore/token.json, ~/.config/rya/trello.env
qrencode + zbarimg · Natural Earth · OSMQR на экранах, картыdoc_cut проверяет QR чтением; карты sc_geo.py / ytcg_geo.py prepytcg QR без проверки
Скорость рендера 4K, кадров в секунду
ffmpeg x264 · две части--par 2 · M3 Max≈ 21 к/с
ffmpeg x264 · одна частьфильм 4K · M3 Max≈ 19 к/с
Remotion 44K, кадры PNG~ 4 к/с

Две части дают ≈ +2 к/с, а своп 38 ГБ увёл мак в панику ядра — в «Граблях»: --par 1.

22.4 · 4Очереди, замки, задачи на маке

1mlx.lock — модели по одной
  • mlx_queue.py <who> -- cmd: ждёт чужие процессы с моделями (шаблон PAT) и свободную память ≥ 30 %
  • потолок 3 ч, код выхода 75; тот же flock берут verify.mlx_lock, common_day.MLXLock, sc_align.py, edges.py
  • wordrole_transcribe.py замок сам не берёт — запускать под очередью
2render.lock — рендер по одному
  • render_queue.py <who> [--max-wait] [--idle-pass 240] -- cmd: чужой рендер = ffmpeg > 150 % CPU, x264, AME, Premiere > 300 %, chrome-headless-shell/hyperframes > 100 %, aerender
  • пороги RENDERQ_MAX_SWAP_GB и RENDERQ_MAX_PRESSURE; потолок 6 ч
  • render_gate.py --label --max-wait 30 (autocut): через 30 мин идёт дальше под nice
  • как очередь устроена, что считается занятостью и что строить — Очередь рендера
3launchd — автоматы шортсов
  • com.romansergeev.ytai-publish-schedule: каждые 300 с, ~/Library/Logs/ytai_publish_schedule.log
  • com.romansergeev.ytai-shorts-pending: каждые 7200 с, pending.py run, ~/Library/Logs/ytai_shorts_pending.log
  • мак спит в час выхода — шортс выйдет при пробуждении; диск проекта должен быть подключён
4Memex
  • ssh memex: Whisper для местной расшифровки (align_worker.py), VLM и LLM ревью, HF офлайн
  • PATH по ssh без brew — пути бинарей явно
  • правило Романа «Memex — когда макбук забит» сказано про рендер; для моделей — уточнить
5Окружения
  • .venv_transcribe — mlx_whisper, torchaudio, OpenCV, всё основное
  • .venv_whisperx — wav2vec2-xlsr-russian; .venv_vlm — mlx_vlm; .venv_llm — mlx_lm
  • системный python3 (/opt/homebrew) — Telethon и оркестровка рендера (PY_LIGHT); Node 22+ — HyperFrames
6Снимок кода этапа
  • длинная сборка — из ~/.cache/ytai/stage_snapshots/, а не из живого этапа
  • после перезагрузки /private/tmp пуст и сторожа мертвы — сверить части по кадрам и повторить ту же команду
  • сменился способ рендера — поднять RECIPE, иначе части не пересчитаются
Рендер через замок — по коду

Порядок проверок render_queue.py (999_extra): одна команда — один захват замка.

1
Запускагентсистемный python3, не .venv_transcribe⇒ render_queue.py <who> -- cmd
2
Чужой рендер?машинаffmpeg от 150 % CPU · Premiere от 300 % · hyperframes от 100 %✓ нет — идём дальше
3
Замок render.lockмашинаflock в ~/.cache/ytai/; второй рендер встаёт за первым⇒ не FIFO: зависимые шаги — по очереди
4
Памятьмашинасвободно ≥ 30 %; своп и давление — по желанию✓ ≥ 30 % свободно
5
Рендермашиназамок держится до конца команды⇒ длинную работу — частями
↺ ждёт до 6 ч, затем код 75 · --idle-pass 240: замок держит лёгкая задача — идёт без замка
машинаагент

Модели — так же через mlx_queue.py: чужие mlx-процессы → mlx.lock → память ≥ 30 % → потолок 3 ч, код 75. autocut — render_gate.py: замок RENDER.lock, через 30 мин идёт дальше под nice.

22.4 · 5Профили канала, которые читает код

Файл YTs/{CH}/Кто читаетВажные ключиКто и когда пишет
shorts_profile.json (YTTRBM, YTFP, YTEVO)07_shorts job.py: сливается с DEFAULTS, ключи задания перекрываютgfx · accent · brand · captions · plate · hosts.<Имя>.seat · youtube.slug · cadence_hours · hashtags · rules · forbid · sheet · trello · edges.strict · broll.fromкопия у YTTRBM при новом канале; решения Романа с *_note (YTFP: broll 2,5, edges.strict, plate 3,6 с)
shorts_gfx.htmlgfx.py шортсов (поле профиля gfx)#brand, .plate(.lead), <!--PLATES-->руками, по бренду канала
color_profile.json (YTEVO, YTUVIE), color-profile-v1autocut/color.py (путь YTEVO зашит), 15_color, препрод, project_checkdevelop{гамма → lut, cameras, decided_by} · look.id · exposure.target_face_luma (YTEVO 134, YTUVIE 149,3)15_color/1502_lut_pick/color_plan.py save_choice по выбору Романа в витрине, с бэкапом
review_profile.json (YTCH, YTCR, YTEVO, YTUVI, YTUVIE)0509_review_cycle; doc_cut/story.py → structure_rulesstructure_rules: fund_block_gap_sec 30, fund_piece_max_sec 90, fund_entry_min 34, fund_rx, money_rx · rules_text · tz_classes · style · verdictруками после решения Романа, с пометкой («Роман, 26.09.2026 (YTCH11 v5)»)
preprod_profile.json (YTEVO, YTUVIE)13_preprod → lesson_plan, который нужен autocutvocabulary · mech_allow · design · people · links · legal_rfруками или агентом; рядом .bak_*
{CH}_voices.json + {CODE}_cast.jsonразбор дня: s13–s16groups A/B/C · people[id, name, aliases, voiceprints]voice_registry.py --enroll — только после того, как человек подтвердил имя
{CH}.mdревью (раздел Story-arc template); подсказка Draperправила канала текстомруками
brand_profile.json + brand/ (YTCH) · gfx/ (YTCG) · BRAND.md (YTCR, на T9)bdd_plates, doc_cut/gfx.py (шрифты, логотип), ytcg.py, sc_gfxpalette · fonts · rules · logo · mapsпо брендбуку; палитры движков пока зашиты в коде

22.4 · 6Файлы проекта: кто что пишет

ДвижокПишет человек или агентПишет код
Шортсы · 00_Setup/07_Shorts/{CODE}_shorts_job.json (мастер, cues, people, keep_out, masters, drive); picks.json — Draper, broll — человек; frame_legend.jsonpicks_prompt.md, transcript_roles.txt, edges.json, out/manifest.json, master_ref.m4a, viz/S{NN}/brief.json, music/S{NN}.json, broll/cuts.json
autocut · 02_Assembly/autocut_v4/directives_v4.json (edges · trims · framing · choice · screens_off · screens_time · facts, поля _why); notes_text.jsoncut_v4.json, screens_final.json, faces_v4.json, color_v4.json, qc/, PROGRESS.md, design/*.md
headless мультикам · 08_Cut/{CODE}_cut_job.json; помощники — {CODE}_trims_v1.json, {CODE}_screens_v1.json (гейт brief.py lint); ТЗ 02_Assembly/{CODE}_Assembly_v{N}_in.jsonsync_model.json, words_aligned.json, edl_audio_<tag>.json, edl_<tag>.json, verify_<tag>.json, qc_<tag>.json, status.json
headless solo{CODE}_cut_job.json (mode solo, cta.qr_url, gfx.theme); {CODE}_takes_v1.json; {CODE}_screens_v1.jsonedges_v1, listen_v1, letters_v1, words_v1, edl_v1
doc_cut{CODE}_montage_v1.json — единственное, что правится руками; {CODE}_gfx_v1.json; {CODE}_music_v1.json; {CODE}_preview_notes.json (ask, fund)edl_audio_v1, paper_v1.md, words_local_v1, check/verify_v1, edl_v1, color.json, conform_v1, PROGRESS.md
story_cut{CODE}_storycut_job.json (tag, look, target_face, gamma_override, dedup.pools); agents/edl/B<N>.json — помощники (гейт sc_edl check); {CODE}_gfx_overrides.json; EDL_NOTES.md; карта сцен scene_maps/agents/{blocks/, broll_catalog.md, speech_angles.md}, align_v1.json, media_index.json, {CODE}_cut_<tag>.json, {CODE}_color_<tag>.json, {CODE}_music_plan.json, dedup_log.md
story_map · ревьюedge_overrides_vN.json — края, выверенные по звуку (берётся последний N); review_card.json — создаёт review.py init, дальше человекstory_vN.json, _analysis/*

22.4 · 7Проверки готовности стека

ПроверкаКакНормаОткуда взялась
Веса на местеls model.pt · yunet.onnx · sface.onnx · wav2vec2-xlsr-russian; HF-кэшкаждый файл есть; нет — отказ с именемновый мак или чистый venv: ничего из этого не в git
Офлайн-моделиHF_HOME и HF_HUB_OFFLINE=1 на Memexмодель грузится без сетиMemex без доступа к HF
Токены и ключиchannels.json (scope upload + force-ssl), tg_user.session, epidemic key, token.json, trello.envвсе есть, права 600заливка падала на неаудированном scope; ключ Epidemic — в двух местах
Задачи launchdlaunchctl list | grep ytaiобе задачи загруженыschedule пишет ⛔, если публикатор не загружен
Память перед модельюmlx_queue.pyсвободно ≥ 30 %kernel panic при свопе 38 ГБ и «36 % свободно» — ещё и RENDERQ_MAX_SWAP_GB
Замок рендера свободенrender_queue.py / render_gate.pyодин тяжёлый процессзамок не FIFO — зависимые шаги по очереди
Memex доступенssh memex …Whisper и VLM отвечаютPATH без brew; VLM 60–70 мин на фильм
Версии движковhyperframes 0.8.103 vs 0.8.106; mlx_whisper 0.4.3; pyannote 4.0.3одна версия на трекдве версии HyperFrames в коде одновременно

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

ФайлЧто хранитКто и когда пишет
YTs/{CH}/*_profile.jsonрешения Романа по каналу с причинами в *_noteсессия сразу после решения; без причины правило откатят
{CH}_voices.json · refs_*.npyголоса и лица, которым машина веритvoice_registry --enroll и face_finder — только после подтверждения человеком
color_profile.jsonгамма → куб, look, цель экспозиции по лицуcolor_plan.py save_choice по выбору Романа в витрине
08_youtube/channels.jsonтокен и флаги канала YouTubeпри запуске канала; scope проверять до первой заливки
~/.config/ytai/publish_schedule.json · shorts_pending.jsonграфик выхода и очередь доливкиshorts.py schedule, pending.py add; читают задачи launchd
README этапов · CLAUDE.md «Shorts»каноны и грабли; у фильмов кодом раздела в CLAUDE.md ещё нетсессия после ошибки, тем же коммитом
память: reference_memex_mlx_stack · reference_hub_auto_montageгде стоят модели, как к ним ходитьсессия в конце работы

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

Процесс с .venv_transcribe в командной строкеmlx_queue считает его моделью и ждёт часами — рендер и оркестровку запускать системным python3 (PY_LIGHT)story_cut
Своп 38 ГБ при «36 % свободно»kernel panic — --par 1 и RENDERQ_MAX_SWAP_GBheadless
Замок рендера не FIFOзависимые шаги запускать по очереди, --idle-pass 240autocut
/private/tmp стирается при перезагрузкескрипты, без которых результат не пересобрать, — в _session_tools/ проекта; кэш — на T9YTEVO02
ssh на Memex без brew в PATHбинарям явные пути; HF_HUB_OFFLINE=1doc_cut
torchcodec сломанpyannote получает звук через soundfilewordrole
SFace даёт 0,42–0,54 на похожих типажахпорог 0,30 — только отсев; лицо героя смотреть глазамиYTCR04
Ключ Epidemic в двух местах~/.config/epidemic/api_key и ~/.config/ytai/epidemic_sound.env — свести в одинautocut · шортсы
CDN Epidemic ≈ 18 КБ/с на потоккачать параллельными кусками Range (40 потоков: 81 МБ за 2 мин)YTCG37
youtube.googleapis.com из РФ рвётся--sni-bypass через www.googleapis.com, IPv4; первый запрос висит 60 с — повторышортсы
Бот Telegram шлёт до 50 МБмастера — Telethon от своего аккаунта; сессия занята (database is locked) — повторитьшортсы
Google Fonts без сетишрифт плашек молча подменяется — держать сеть или встроить шрифт (YTEVO: 90 КБ)шортсы
Две версии HyperFrames0.8.103 в screens2, 0.8.106 везде ещё — свестибиблиотека
video_tech_qc медленнее реального временив приёмке --no-scan; VMAF к прошлой версии — отдельным прогономheadless
Веса не в gitсписок выше — чек-лист для нового мака; нет файла — отказ с именемвсе этапы
wordrole имена по времени речи--speaker-names раздаются по убыванию времени — сверять по transcript_roles.txt, при ошибке --rebuild-onlyYTTRBM01

22.4 · 10Команды

Очереди и проверка стека
X=~/YTAI/scripts/999_extra; V=~/YTAI/environment/.venv_transcribe/bin/python

python3 $X/mlx_queue.py <who> -- $V script.py …  # модель под замком mlx.lock
python3 $X/render_queue.py <who> --idle-pass 240 -- ffmpeg …  # рендер под замком render.lock
python3 ~/YTAI/scripts/05_editing/0510_autocut/render_gate.py --label <tag> --max-wait 30 -- …  # то же для autocut
ls -la ~/.cache/torch/hub/checkpoints/model.pt ~/YTAI/environment/models/face/ ~/YTAI/environment/models/  # веса на месте
launchctl list | grep ytai  # публикатор и доливка загружены
ssh memex 'ls ~/YTAI/models/huggingface'  # Memex и офлайн-кэш
python3 $X/video_tech_qc.py run FILM.mp4 --profile yt_4k25 --no-scan  # паспорт YouTube

22.4 · 11Где лежит

Веса и кэши (вне git)
~/.cache/torch/hub/checkpoints/model.ptMMS_FA, 1,26 ГБ
~/YTAI/environment/models/face/yunet.onnx · sface.onnxлица
~/YTAI/environment/models/wav2vec2-xlsr-russian/CTC русский
~/YTAI/models/huggingface · ~/.cache/huggingfaceWhisper, pyannote (токен в token)
~/YTAI/scripts/999_extra/face_finder/refs_*.npyэталоны лиц героев
~/YTAI/scripts/999_extra/bin/voice_isolateAUSoundIsolation
Замки и задачи
~/.cache/ytai/mlx.lock · ~/.cache/ytai/render.lock (= RENDER.lock)flock-замки
~/.cache/ytai/stage_snapshots/снимки кода этапов на время сборки
~/Library/LaunchAgents/com.romansergeev.ytai-publish-schedule.plist · …-shorts-pending.plistавтоматы шортсов (plist в 08_youtube/)
Ключи
~/YTAI/scripts/08_youtube/channels.jsonтокены каналов YouTube
~/.config/ytai/tg_user.session · ~/.config/ytai/epidemic_sound.env · ~/.config/epidemic/api_keyTelethon, Epidemic
~/.config/rscore/token.json · ~/.config/rya/trello.envDrive, Sheets, Trello
Стек машины · сверено 02.10.2026 по коду этапов · примеры: YTCR04 · YTFP01