cards_n, а не «карточки с текстом». Вкладки ниже — библиотеки семи каналов: три поколения 3 (YTUVIE и YTUVI — своя модель, «когда НЕ → возьми такой-то»; YTCH — предложение по брендбуку фонда) и четыре поколения 2 (каталог типов и общий язык RYA).YTs/{CH}/preprod_profile.json → design) плюс раскладки и схемы в коде. Выход — страница-библиотека и её машинное зеркало screen_kinds.json, из которых сценарий (1.3 Narrator Script) и визуальное ТЗ берут виды по имени. Полные библиотеки каналов — /ytuvie/s1/screens/ и /ytuvi/screens/, палитра YTUVIE — /ytuvie/s1/design/, старое поколение — 8.2 Design DNA (архив). Дальше по флоу — 1.2 Animation Templates.framed_shot, и он заперт списком разрешённых id: FRAMED_OK = {I08, I09, I10, I00} в apply_redraw.py — четыре кадра записи с реальными интерфейсами. Новые framed_shot код отклоняет; расширить список — решение Романа, не сессии.#FFC03A — единственный цвет помимо светлой основы и графита. Две работы: например, кромка панели и подсветка одного пункта. Лимит accent_max_per_screen = 2 живёт в профиле канала.ts_common.mech_hit; apply_redraw.py при первом попадании отклоняет весь экран, а не одну строку.viz_audit.py — локальный детектор, 0 токенов: сравнивает текст схемы с цитатой абзаца-хозяина, вердикт выносит облачный проход. Исключение — крупная фраза и крупный вопрос: повтор речи и есть их работа.mech_hit ловит на экране только механику сценария; «урок» и «модуль» он не ловит — это правило редактора.Категории — по редакторской работе экрана, а не по модулю, где живёт код: тогда указатель «не применять → возьми X» чаще ведёт внутрь той же категории.
0509_review_cycle/stages/bdd_plates.py, числа — YTs/YTCH/brand_profile.json. Наборы разные законно: у канала до съёмки видов больше, потому что их ещё предстоит выбрать; у канала с готовым фильмом виды уже отобраны им самим.titles · text · diagrams · data · rich · ui) и одну схему записи: id · name · category · description · when · max_text · keywords. Полей «когда НЕ применять» и «контракт данных» в ней нет — они появились только в поколении 3, и это главное, чем поколения отличаются.| Кат. | Что делает экран | Видов | Виды (id) |
|---|---|---|---|
| A Заголовки | как называется то, что зритель сейчас смотрит; мало текста, крупный кегль | 5 | topic_title title chapter_steps chapter_card chapter_bar |
| B Структурные элементы | кто в кадре, чем всё кончается и что дальше | 3 | lower_third cta ctv |
| C Крупная мысль | один тезис на весь экран — он бьёт, а не объясняет | 3 | big_phrase question_card formula |
| D Перечисления | несколько равноправных пунктов, порядок неважен | 4 | cards_n cards list side_panel |
| E Последовательности | порядок и есть смысл: следующее возможно после предыдущего | 5 | chain steps flow pipeline_tools staircase |
| F Сравнения и числа | две стороны, величины, доли, счёт попыток | 5 | two_sides compare bars_compare retention_bar attempts_grid |
| G Реальные интерфейсы и записи | чужой пиксель на экране — и правила, по которым он туда попадает | 4 | framed_shot heygen_mock pip_speaker shoot_request |
pip_speaker — приём (модификатор pip к любой схеме, окно спикера 960×540 в правом нижнем углу), shoot_request — «не картинка», а задание эксперту из inserts_<M>.json. Пометки «новое» / «приём» / «не картинка» стоят на карточках. Виды рисуют два модуля: layouts_uvie.py — шаблонные раскладки, infographics_uvie.py — схемы.dark / light / alpha поверх спикера), модуль, сколько раз применён в занятии 01.big_phrase»), потому что именно он и случается. --check падает, если замена ссылается на неизвестный вид.big_phrase: автора не подписываем; фраза — слова эксперта, аудит сверяет её с речью).apply_redraw.REQUIRED.plan_from_script.LIMITS (по умолчанию title 48 · item 60 · items 6 · caption 90 · eyebrow 40) и LIMITS_BY[вид]; отдельная строка «рендер режет после N» — по полю cut описания вида (вписано руками по коду рендера; расхождения с LIMITS_BY попадают в «Находки»).pip_speaker превью не получает).YTs/YTUVIE/site/screen_kinds.json (схема ytuvie-screen-kinds-v1): версия, время сборки, категории, по каждому виду те же поля плюс limits, required, examples, список находок и результат сверки палитры. Читать его кодом, а не парсить HTML.Все виды рисуются в одном кадре. Числа ниже — не рекомендация, а то, по чему считаются лимиты знаков в каждой карточке.
| Что | px | Зачем |
|---|---|---|
| кадр | 3840 × 2160 | нативное 4K, текст вёрсткой, а не картинкой |
| title-safe | 192 / 108 | DOM-QC не принимает экран, вылезший за это поле |
| поле контента | 252 / 238 / 3336 | левый край, верх, ширина — от них считаются лимиты |
| минимальный кегль | 48 | ниже текст не читается с плеера на телефоне |
| радиусы | 36 / 27 | токены 12 / 9 px × 3 |
YTs/YTUVIE/preprod_profile.json → design: 37 цветов, шрифты Onest (заголовки и текст) и JetBrains Mono (метки, цифры, служебное), радиусы, accent_max_per_screen. Рендер 4K читает зеркало YTs/YTUVIE/review_profile.json → style.mockup.palette, которое держится руками, — поэтому сборщик сверяет их по значениям, а не по именам ключей (имена в зеркале другие: text→ink, accent→amber, graphite→g). Расхождение = --check падает.
#FFC03A, не больше двух работ на экран. Остальное — светлая основа и графит; единственный цветной кадр канала — heygen_mock. Маркеры списков — ромбы. Живая палитра для команды — /ytuvie/s1/design/.screen_kinds_uvie.py, факты build_dna_page.py читает из кода рендера. Виды, которых ещё нет в материале, показываются живым превью.shared/screen_kinds_ytuvi.py, а stages/screens_library.py меряет по исходнику рендера и по папке mockups/ готового проекта: сколько плашек каждого вида нарисовано и какие файлы лежат на диске. Поэтому у видов есть «где в фильме» с таймкодами — это не задумка, а замер.scripts/site/gen_kb_screens.py читает опубликованные модели YTUVIE и YTUVI, плиты YTCH и каталоги поколения 2, врезает панели между маркерами и пишет сводную модель. Проза «Метода» правится руками, галерея — никогда. --scan приносит то, чего в репозитории сайта нет (каталоги из ~/YTAI, 37 референсов базовой ДНК, разметку плит YTCH из bdd_plates.py; картинки плит — --ytch-plates <папка>), --check падает на расхождении, --dry-run собирает и печатает вес, ничего не записывая.~/YTAI/scripts/13_preprod/1304_visual_tz/screen_kinds_uvie.py. Факты о видах сборщик читает из кода: infographics_uvie.KINDS, layouts_uvie.LAYOUTS, apply_redraw.REQUIRED, plan_from_script.LIMITS / LIMITS_BY; срезы рендера (cut) — числа в описании вида, вписанные руками по коду. Так лечится жалоба «виды живут только в коде» — чтением кода, а не переписыванием его в HTML руками.
--check ничего не пишет и возвращает exit 1 при расхождении: вид есть в коде, но не описан (и наоборот); обязательные ключи в описании ≠ REQUIRED; «не применять» ссылается на неизвестный вид; палитра разошлась с зеркалом; битые якоря; на странице нашёлся fetch / XMLHttpRequest / type="module".<тема>/00_Setup/00_Preprod/visual/montage_plan.json + mockups/manifest.json; привязка к строке сценария через script_ref.para → sections[].rows[].para_ids. Превью в два тира: 720 px для сетки, 1600 px для лайтбокса → site/examples/. Занятие 01 сегодня — 142 экрана.LAYOUTS или KINDS) — живое превью: раскладка отдаёт самодостаточный HTML 3840×2160, страница вставляет его как есть и масштабирует CSS. Ни Chrome, ни PNG; полтора десятка таких превью весят вместе около 25 КБ. Под alpha-виды подкладывается кадр со спикером 03_Design/speaker_frame.jpg (для side_panel и ctv — speaker_frame_right.jpg).site/fonts/ (7 файлов Onest / JetBrains Mono) теми же алиасами, что у рендера 4K, — превью совпадает с боевой картинкой, страница не ходит в интернет.version.json рядом со страницей: {v, built, human}; номер растёт на каждой настоящей сборке, --check его не трогает; номер и время стоят в шапке страницы. Сейчас — v12, 20 сентября 2026, 22:36.~/YTAI/YTs/YTUVIE/site/dna.html · screen_kinds.json · отчёт по находкам screens_library_findings.md (тот же список, что на странице) в 03_Design/ папки спринта — /Volumes/T7-Beige-RYA/YTUVIE-Folder/YTUVIE-Уроки/YTUVIE-S1_Preprod/03_Design/. Тему примеров передавать явно: --topic /Volumes/T7-Beige-RYA/YTUVIE-Folder/YTUVIE-Уроки/YTUVIE-Projects/YTUVIE01_Kickoff_Setup (почему — в граблях). Копия на Drive — gdrive:YTUVIE/YTUVIE-S1_Preprod/03_Design/screens_library/ (кладётся отдельно, сборщик её не пишет); портал — /ytuvie/s1/screens/.Шаг 0 — про эту страницу. Шаги 1–4 — про полную библиотеку канала: правки по конкретным примерам живут там, где эти примеры лежат, а не в сводном справочнике.
Вкладки сверху — каналы, кнопки под шапкой — категории, поиск ищет по имени, id и описанию внутри открытой вкладки. На карточке две кнопки: id-чип кладёт в буфер голый id (cards_n, M) — его вставляют в промпт и в screen {type} сценария; 🔗 кладёт готовую строку для ТЗ — YTUVI · M · Титр подтемы — <url>. Ссылка открывает нужную вкладку сама. Машинное зеркало всех семи каналов — одним файлом:
Фильтр A–G в липкой панели или ☰ оглавление. Читать «когда применять» и «когда НЕ применять»: второй список, как правило, называет вид-замену — из карточки есть выход в правильную; у 16 пунктов из 90 замены нет: экран там просто не нужен.
Кнопка 🔗 на карточке вида и на каждом примере кладёт ссылку в буфер — #s-<вид> или #e-<id экрана>. В чате и в ТЗ говорим адресом строки сценария и id вида, а не «та синяя картинка».
Галочка на примере или на карточке вида целиком → внизу открывается панель «Правки» → заметка к каждой отметке. Нужен вид, которого нет, — «+ нужен новый вид»: заметка уйдёт отдельной строкой. Черновик отметок живёт в localStorage и переживает перезагрузку.
В буфер попадают сразу две вещи: список словами — его вставляют в чат, и ссылка вида …dna.html#fb=<base64url {v, ts, items}> — по ней новая сессия открывает страницу ровно с этими отметками. Потолок задаёт не браузер, а Telegram: 4096 знаков на сообщение (в коде запас: TOTAL_MAX 3900, URL_CAP 2800), иначе разрыв попадает в середину ссылки — поэтому лестница деградации full → cut → bare → trim и предупреждение в тексте, если заметки в ссылку не поместились. Работает с file://: буфер берётся синхронным execCommand, резерв — окно «скопируйте вручную».
Библиотека — словарь; предложения на нём пишет сценарий, а код превращает их в картинки и ТЗ. Все команды — ~/YTAI/scripts/13_preprod/1304_visual_tz/, кроме рендера.
В таблице занятия (1.3 Narrator Script) столбец 7 — визуализация для зрителя: объясняет, а не пересказывает, и не показывает механику сценария (стоп-лист: обещание / хук / призыв / итог / переход / тизер). Скриншот слайда эксперта сюда не вставляем — перерисовываем видами библиотеки; слайды деки остаются в столбце 6 как референс монтажёру. Каждый абзац несёт screen {type, text}, где type — id вида.
Берёт последнюю версию каждого блока темы, рендерит тело экрана раскладкой и пишет в <тема>/00_Setup/00_Preprod/visual/: montage_plan.json (каталог графики gfx_catalog, ссылка на абзац и цитата), review_card.json (карточка для рендера), screens_lint.json (проверка текстов по лимитам).
YTAI_CARD=<visual>/review_card.json python3 ~/YTAI/scripts/05_editing/0509_review_cycle/montage/build_mockups.py. PNG 3840×2160 и mockups/manifest.json; DOM-QC заворачивает экран, вылезший за title-safe или не влезший в блок.
viz_audit.py --topic <тема> считает, насколько текст схемы повторяет цитату абзаца-хозяина, и помечает подозреваемых; вердикт — облачный проход. apply_redraw.py --topic … --in <out/> --meeting M01 [--apply] принимает вердикты в infographics_<M>.json, но каноны держит код: вид известен и обязательные ключи на месте; длины в пределах раскладки; нет mech_hit; новые framed_shot отклоняются; id, t, section схемы сохраняются — по ним она привязана к абзацу и строке.
build_tz_page.py --topic <тема> [--tg] → visual/<CODE>_visual_tz.html (по блокам и секциям: цитата сценария → тип экрана → превью → текст экрана; скринкасты — шот-лист; замечания DOM-QC и lint) и visual/<CODE>_visual_brief.html — лёгкий бриф ≤ 1 МБ для телефона, --tg отправляет. Дальше — 6.6 Montage TZ и 6.4 Review Timeline.
shoot_request — не экран, а задание эксперту из <тема>/00_Setup/00_Preprod/scripts/inserts_<M>.json (схема v2, ключ family: show — снять своим экраном · footage — материал уже есть · rights — чужой, нужны права, владелец PM · graphic — нарисовать видом библиотеки). Заявка готова, когда отвечает на пять вопросов: кто и что делает (глагол первым словом) · что именно в кадре · сколько планов и секунд · откуда берём и что, если не выйдет · чей это. Одна заявка — одно действие одного владельца. В занятии 01: 24 строки на 5:30, из них 14 заданий эксперту на 3:28 уходят в план съёмки.
Сначала развилка: словарь ДО съёмки (канал запускается, кадров ещё нет — виды рождаются раскладками в коде, маршрут YTUVIE) или замер ПО кату (фильм уже смонтирован, у него есть свои приёмы — их надо замерить и назвать, маршрут YTUVI). Шаги ниже общие для обоих, различается только сборщик в пункте 4.
YTs/<CH>/preprod_profile.json → design — источник истины: цвета, fonts.sans / fonts.mono, radius_px, accent_max_per_screen. Зеркало для рендера — YTs/<CH>/review_profile.json → style.mockup.palette: значения те же, имена ключей могут отличаться, сверка по значениям. Страница палитры для команды — как /ytuvie/s1/design/.
Виды должны рендериться: шаблонные раскладки — по образцу layouts_uvie.py, схемы — infographics_uvie.py; у схем — запись в REQUIRED (обязательные ключи) и при необходимости в LIMITS_BY; структурные элементы (topic_title, chapter_steps, ctv, lower_third, cta) в REQUIRED не добавляются — они живут только в LAYOUTS, чтобы «переделай схему в заставку» получало отказ. Без рендера --check сочтёт вид «описан, но не рендерится».
Свой файл с CATEGORIES (буква, имя, что делает экран), KIND (одной строкой ≤ 110 знаков · 2–4 условия «когда» · «когда не» с заменой · контракт данных · срез рендера · каноны), CANONS канала и FINDINGS. Категории — по работе экрана, не по модулю. Словарь зрителя канала — в тексте карточек, а не только в голове.
Сборщика два, и копировать надо тот, что подходит дорожке: build_dna_page.py (привязан к YTUVIE: CH = 'YTUVIE', импорты *_uvie) — для словаря до съёмки; stages/screens_library.py — для замера по кату, он разбирает докстринг рендера и папку mockups/ проекта, и YTUVI пошёл именно этим путём, а не копией первого. Гонять --check, пока не сойдутся: каждый вид кода описан, каждое описание рендерится, обязательные ключи совпадают, замены ведут на существующие виды, палитра равна зеркалу.
Страница — в YTs/<CH>/site/ с fonts/, examples/, screen_kinds.json, version.json рядом; на портал — /<канал>/screens/ или, если у канала есть сезоны, /<канал>/<сезон>/screens/ рядом с design/; плюс вкладка на этой странице — запись в CHANNELS сборщика gen_kb_screens.py. Примеры появятся после первого plan_from_script + build_mockups темы — до этого все виды показываются живыми превью.
| Симптом | Причина | Лечение |
|---|---|---|
| Вид есть в коде, на странице нет (или наоборот) | Текст и код разошлись: новый вид добавили в layouts_uvie / infographics_uvie, а описания в screen_kinds_uvie.py нет | build_dna_page.py --check называет вид; описать — и только потом собирать |
| «Библиотека должна быть тёмной» / «а почему светлая?» | Общего правила нет, и это не дефект: страница библиотеки одевается в бренд своего канала | У YTUVIE светлая (витрина светлого бренда), у YTUVI тёмная, у этой сводной — всегда портальная тёмная: она справочник для работы, а не витрина. Цвет канала здесь живёт только в свотчах палитры и в точке на вкладке |
| «Нарисовано 62», а картинок на карточке две | У YTUVI счётчик считает плашки в проекте, а не примеры на странице | Это замер: сколько раз вид нарисован в фильме. Кадров показываем два, остальные — в библиотеке канала по ссылке с карточки |
| Референс YTCG выглядит как битая картинка в шашку | Часть экспортов базовой ДНК снята из инструмента с включённой прозрачностью, и шашка запечена в пиксели | Убрать нельзя — можно не ставить первой: сборщик меряет долю светло-серого и уводит такие кадры в конец, подписывая «экспорт с прозрачностью». Порог 35 %, отрыв от честных кадров втрое |
| Заменил тумбу тем же именем — на проде старая | Cloudflare отдаёт картинки как immutable на год | Новое имя файла либо ?v=; для базовой ДНК это не страшно — она архив и не пересобирается |
| Номера секций «Метода» разъехались после правки галереи | В панель канала протекла разметка с классом sec/cat/section или заголовок <h2 id=> — gen_kb считает их секциями страницы | Панели несут только gpane/gcat/gcard, заголовки категорий — <h3>. Сторожит gen_kb_screens.py --check: он импортирует сам gen_kb и сверяет список секций с восемью якорями |
| Превью на странице не похоже на PNG из рендера | Шрифт подменился системным: страница ходила за шрифтом в интернет или fonts/ не скопирован | Шрифты лежат рядом в site/fonts/ — те же .ttf, что у рендера 4K; пересобрать без --no-examples |
| В доке занятия старые картинки после пересборки | Google Doc кэширует картинки по имени файла — по имени приезжали прошлые версии («артефакты» v5) | Кэш картинок — по md5, не по имени |
В .rules жирный и code встали колонками | .rules>li — flex; инлайновые дети становятся флекс-элементами | Содержимое каждого <li> — в <span class="ptn"> + <div> |
Кнопка «Сохранить и скопировать» ничего не кладёт в буфер с file:// | navigator.clipboard на file:// отказывает (origin opaque), а резерв из отклонённого промиса уже вне окна жеста; location.origin там — строка "null" | Синхронный execCommand('copy') первым, navigator.clipboard вторым, окно «скопируйте вручную» третьим; ссылку строить от location.href |
| Плашка поверх кадра «показывает ничего» | Кадры записи занятия — вебинар: в главной области слайд, эксперт мелким окном в углу | Подложка под alpha-виды — 03_Design/speaker_frame.jpg из Zoom-записи, где эксперт в кадре целиком; ⚠️ перепроверить кадрирование на первой студийной съёмке |
build_dna_page.py без флагов не находит тему, превью alpha-видов без спикера, а находки пишутся в ~/Desktop/YTUVIE/… | Папку ~/Desktop/YTUVIE убрали 24.09 при переезде на T7-Beige, а константы сборщика (DEF_TOPIC, FONT_DIRS, SPEAKER_FRAME, FINDINGS_MD) всё ещё смотрят туда; mkdir(parents=True) молча создаёт прежнюю папку заново | --topic — всегда явно, путь на T7; найденный отчёт забрать в 03_Design/ спринта. Настоящее лечение — перевести константы на /Volumes/T7-Beige-RYA/YTUVIE-Folder/YTUVIE-Уроки/ в коде |
Семейство экрана определили по manifest.json → kind или по одному layout | В манифесте у всех "new"; заставка главы и карточка пути — обе chapter_card | Семейство — по ключам chapter / path / src в montage_plan.json → gfx_catalog |
--dump-dom требует --virtual-time-budget, иначе таймеры не сработают. localStorage на file:// общий для всех локальных страниц машины — ключи с жёстким неймспейсом.
titlechapter_stepstitlebig_phrase| ключ | тип | что это |
|---|---|---|
title* | строка | тема урока, два-три слова |
accent | строка | фрагмент темы янтарём; должен быть подстрокой title |
eyebrow | строка | моно-метка над темой: «Урок 01» |
sub | строка | одна строка — о чём урок |
size | число | потолок кегля, по умолчанию 300; вниз шагает сам |
scripts/13_preprod/1304_visual_tz/layouts_uvie.py
topic_titlechapter_stepschapter_barquestion_cardbig_phrase| ключ | тип | что это |
|---|---|---|
title* | строка | название главы |
accent | строка | фрагмент заголовка янтарём |
eyebrow | строка | моно-метка; системные коды блоков сюда не пишем |
sub | строка | одна строка пояснения |
theme | «light» | светлый вариант вместо графитового |
size | число | потолок кегля, по умолчанию 250 |
scripts/13_preprod/1304_visual_tz/layouts_uvie.py
chapter_cardchapter_cardstepschapter_bar| ключ | тип | что это |
|---|---|---|
items* | список строк | имена глав, от трёх до семи, по два-три слова |
active | число | индекс текущей главы, считая с нуля; по умолчанию первая |
title | строка | заголовок над рядом карточек |
eyebrow | строка | моно-метка |
size | число | кегль заголовка, по умолчанию 150 |
items после 7scripts/13_preprod/1304_visual_tz/layouts_uvie.py

chapter_bartitle| ключ | тип | что это |
|---|---|---|
title* | строка | название главы |
items | список строк | подпункты главы, до пяти в окне; пустой список — режим перехода между главами |
eyebrow | строка | моно-метка: «Глава 5 · 01A-05» |
active | число или пусто | индекс текущего подпункта — включает режим «путь» |
progress | строка | «3 / 11» — дописывается к метке через · |
more_after | число | сколько подпунктов осталось за окном — рисует «… ещё N» |
more_before | число | ⚠️ план его пишет, рендер не читает — см. находку 7 |
size | число | кегль заголовка, по умолчанию 176 |
items после 5plan_from_script.py · infographics_uvie.py → chapter_cardinfographics_uvie.py → chapter_cardscripts/13_preprod/1304_visual_tz/infographics_uvie.py
chapter_cardchapter_cardlower_third| ключ | тип | что это |
|---|---|---|
title* | строка | название главы, в одну строку |
eyebrow | строка | моно-метка: «03A · 2 из 5» |
scripts/13_preprod/1304_visual_tz/layouts_uvie.py
chapter_bar| ключ | тип | что это |
|---|---|---|
name* | строка | имя; принимается и title |
role | строка | роль моно-капсом; принимается и eyebrow |
note | строка | одна строка регалий под ролью — чем он это заслужил |
scripts/13_preprod/1304_visual_tz/layouts_uvie.py
ctv| ключ | тип | что это |
|---|---|---|
title* | строка | что зритель делает |
accent | строка | фрагмент заголовка янтарём |
eyebrow | строка | моно-метка |
sub | строка | одна поясняющая строка |
button | строка | надпись на кнопке, по умолчанию «Написать в директ» |
size | число | потолок кегля, по умолчанию 240 |
scripts/13_preprod/1304_visual_tz/layouts_uvie.py
ctactatitleside_panel| ключ | тип | что это |
|---|---|---|
title* | строка | название следующего урока, коротко |
items* | список строк | тезисы следующего урока, два-четыре |
eyebrow | строка | моно-метка, по умолчанию «Следующий урок» |
note | строка | сноска внизу: условие, при котором открывается следующий урок |
accent | строка | фрагмент заголовка янтарём |
size | число | кегль заголовка, по умолчанию 124 |
items после 4scripts/13_preprod/1304_visual_tz/layouts_uvie.py

question_cardtitleformulacards_n| ключ | тип | что это |
|---|---|---|
title* | строка | сама фраза; без вопросительного знака на конце |
accent | строка | фрагмент фразы, который станет янтарным; должен быть подстрокой title |
plate | «full» или «over» | full — графит на весь кадр; over — плашка поверх кадра со спикером |
size | число | потолок кегля; вниз 280 → 240 → 200 → 160 шагает сам |
viz_audit.py:99, 101scripts/13_preprod/1304_visual_tz/layouts_uvie.py

chapter_cardcards_n| ключ | тип | что это |
|---|---|---|
title* | строка | сам вопрос, коротко — кегль максимальный в канале |
accent | строка | фрагмент вопроса янтарём |
sub | строка | одна поясняющая строка под чертой |
eyebrow | строка | моно-метка, по умолчанию «Вопрос» |
size | число | потолок кегля, по умолчанию 300; вниз шагает сам |
plan_from_script.py:244scripts/13_preprod/1304_visual_tz/infographics_uvie.py
big_phrasebars_comparecards_n| ключ | тип | что это |
|---|---|---|
title* | строка | сама формула |
accent | строка | фрагмент формулы янтарём |
eyebrow | строка | моно-метка над формулой |
size | число | кегль, по умолчанию 150 |
scripts/13_preprod/1304_visual_tz/layouts_uvie.py

chainpipeline_toolslisttwo_sidesbig_phrase| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
items* | список строк | «Заголовок — пояснение», от трёх до пяти |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод под карточками |
size | число | кегль заголовка, по умолчанию 140 |
items после 5infographics_uvie.py:239 · layouts_uvie.py:75scripts/13_preprod/1304_visual_tz/infographics_uvie.py
cards_nstepslist| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
items* | список строк | «Заголовок — пояснение», до шести |
eyebrow | строка | моно-метка |
size | число | кегль заголовка, по умолчанию 130 |
items после 6scripts/13_preprod/1304_visual_tz/layouts_uvie.py
cards_nside_panelchain| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
items* | список строк | пункты, до шести |
eyebrow | строка | моно-метка |
size | число | кегль заголовка, по умолчанию 160 |
items после 6scripts/13_preprod/1304_visual_tz/layouts_uvie.py
listcards_ncomparectv| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок панели |
items* | список строк | пункты, до пяти |
accent | строка | фрагмент заголовка янтарём |
eyebrow | строка | моно-метка янтарём |
note | строка | сноска внизу панели |
size | число | кегль заголовка, по умолчанию 116 |
items после 5scripts/13_preprod/1304_visual_tz/layouts_uvie.py

cards_npipeline_toolsstaircasestepsbig_phrase| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
items* | список строк | звенья слева направо, от трёх до шести |
hi_last | число 1 или 2 | сколько последних звеньев подсветить графитом, по умолчанию 1 |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод под схемой |
size | число | кегль заголовка, по умолчанию 150 |
items после 6scripts/13_preprod/1304_visual_tz/infographics_uvie.py
flowpipeline_toolschain| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
items* | список строк | «Шаг — пояснение», до четырёх |
eyebrow | строка | моно-метка |
size | число | кегль заголовка, по умолчанию 150 |
items после 4scripts/13_preprod/1304_visual_tz/layouts_uvie.py
stepschainpipeline_tools| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
items* | список строк | звенья, до пяти |
eyebrow | строка | моно-метка |
size | число | кегль заголовка, по умолчанию 150 |
items после 5scripts/13_preprod/1304_visual_tz/layouts_uvie.py
chainchainsteps| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
stages* | список словарей | {name — этап, tool — сервис, who — кто или что делает}, до пяти |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод под конвейером |
size | число | кегль заголовка, по умолчанию 140 |
stages после 5infographics_uvie.py:279 · plan_from_script.py:42scripts/13_preprod/1304_visual_tz/infographics_uvie.py
| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
steps* | список словарей | {value — число, sub — подпись}, до шести |
marker | словарь | {label} — янтарная точка на первой ступени |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод под лестницей |
size | число | кегль заголовка, по умолчанию 140 |
steps после 6scripts/13_preprod/1304_visual_tz/infographics_uvie.py

cards_nbars_comparecomparecards_n| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
left* | словарь | {h — заголовок стороны, items — до четырёх пунктов} |
right* | словарь | то же; правая сторона рисуется графитом |
verdict | словарь | {yes, no} — вывод под панелями |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод |
size | число | кегль заголовка, по умолчанию 136 |
items на сторону после 4scripts/13_preprod/1304_visual_tz/infographics_uvie.py
two_sidesbars_compare| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
left* | словарь | {h — заголовок колонки, items — до пяти пунктов} |
right* | словарь | то же; правая колонка графитовая |
eyebrow | строка | моно-метка |
size | число | кегль заголовка, по умолчанию 130 |
items на сторону после 5scripts/13_preprod/1304_visual_tz/layouts_uvie.py

staircasetwo_sidesretention_bar| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
bars* | список словарей | {label — подпись, value — значение, h — высота 0…1, hi — подсветить}, два-три |
note | строка | подпись у пунктирной линии-ориентира |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод |
size | число | кегль заголовка, по умолчанию 140 |
bars после 3infographics_uvie.py:146 · plan_from_script.py:37scripts/13_preprod/1304_visual_tz/infographics_uvie.py
bars_compareattempts_gridbig_phrase| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
total_sec* | число | вся длина шкалы в секундах |
hot_sec* | число | янтарная часть в секундах |
labels | словарь | {hot, rest} — подписи частей |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод |
size | число | кегль заголовка, по умолчанию 150 |
scripts/13_preprod/1304_visual_tz/infographics_uvie.py
bars_comparestaircaseretention_bar| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
n* | число | сколько всего клеток, по умолчанию 48 |
hi* | список чисел | индексы янтарных клеток, считая с нуля |
cols | число | клеток в ряду, по умолчанию 12 |
label_hi | строка | подпись янтарных, по умолчанию «залетели» |
label_rest | строка | подпись остальных |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод |
scripts/13_preprod/1304_visual_tz/infographics_uvie.py

cards_nbars_compareheygen_mockshoot_request| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок экрана |
frame* | строка | путь к кадру вида «M01/frames/f_00798.jpg» |
facts* | список строк | «Значение — пояснение», три-четыре |
crop | четыре числа 0…1 | ручной кроп [x0, y0, x1, y1]; без него работает авто-кроп панелей |
eyebrow | строка | моно-метка |
caption | строка | строка-вывод под кадром |
size | число | кегль заголовка, по умолчанию 136 |
frame_path | строка | служебное: подставляет план из --frames-root, руками не пишем |
source | строка | ⚠️ описан в докстринге, рендером не читается — см. находку 6 |
facts после 4infographics_uvie.py:326scripts/13_preprod/1304_visual_tz/infographics_uvie.py
framed_shotshoot_requesttitle| ключ | тип | что это |
|---|---|---|
title* | строка | заголовок |
eyebrow | строка | моно-метка, по умолчанию «HeyGen» |
sub | строка | подпись рендера, по умолчанию «Рендер аватара · 72%» |
size | число | кегль заголовка, по умолчанию 150 |
layouts_uvie.py:266-268scripts/13_preprod/1304_visual_tz/layouts_uvie.pytopic_titleside_panelframed_shot| ключ | тип | что это |
|---|---|---|
pip* | да/нет | включить окно спикера в правом нижнем углу |
pip_path | строка | служебное: путь к кадру, подставляет план — руками не пишем |
scripts/13_preprod/1304_visual_tz/infographics_uvie.pychapter_card| ключ | тип | что это |
|---|---|---|
family* | «show» / «footage» / «rights» / «graphic» | какая это работа — из неё выводятся shoot, status и владелец |
anchor* | строка | строка урока, к которой привязана вставка: «01B-01-r1» |
where* | «before» или «after» | до или после строки |
dur* | число | секунд на экране, 2–60 |
gist* | строка | смысл одной строкой — попадёт в столбец 3 таблицы урока |
action* | строка | что именно делаем: глагол первым словом, объект в кадре, число планов |
source* | список строк | откуда берём и что делаем, если не выйдет |
owner* | строка | кто исполняет: эксперт, съёмка, PM |
takes | число | сколько планов внутри задания |
screen_kind | строка | для family graphic — каким видом рисуем |
why | строка | почему без этого строка не работает |
inserts_M01.json · INS-19, INS-25 (до перенумерации)inserts_M01.json · INS-18 и INS-24 (до перенумерации)scripts/13_preprod/1304_visual_tz/inserts_*.json.py

MMВариант A «ПОЛОТНО» выбран Романом 22.09.2026: кадр уходит в затемнение 72 %, имя главы по центру, кегль считается по самому длинному слову. Шторка B переделана 22.09.2026 — она больше не растушёвывает край, а делит кадр нацело (правило Романа 20.09: «если делишь экран на две части — надо делить»).
ch_plate_variantscripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('J'), имена ch_ov_{i + 1:02d} ch_demo_{v} ch_real_{_i + 1:02d}

JDСобственный приём фильма — 1:33 «НАЗАД В ПРОШЛОЕ», 32:09 «ЗАПОЛНЕНИЕ ТРЕЩИН». Мы его не придумали, а замерили и повторили: левая колонка, нижняя треть, кегль 132, под текстом черта канона. Номер главы титр не печатает — он уже стоит в кадре собственным титром ката.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('M'), имена subt_{_i:02d}

MOС 22.09.2026 панель делит кадр так же, как шторка заставки — ровно пополам: плита от верхнего края до нижнего, по шву черта канала, справа чистый кадр с ведущей (правка Романа «здесь экран должен быть как B — ШТОРКА»). Раз панель накрыла собственный титр главы ката — печатает главу сама, в своей шапке. Кегль пункта считается под колонку: при шве 1500 это 69 px, потолок 88. Тема «z» (тёмная) принята Романом 22.09.2026, светлая «h» оставлена для примера. Список накапливается, а не подсвечивается: свежий пункт всегда последняя строка, будущих не видно. В фильме — главы 08 (три способа вырастить рубин) и 09 (шесть способов обработки).
prog_variantscripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('D'), имена prog_{ch}_{k} prog_demo_{v}
DMПриём фильма: 29:47 «90–95 % РУБИНОВ / ПРОШЛИ ТЕРМООБРАБОТКУ» и 30:21 «ТЕРМООБРАБОТКА / НОРМА ДЛЯ ЦВЕТНЫХ КАМНЕЙ». Единственный вид, который НЕ стоит в левой колонке: обе строки центрированы и прижаты к верху кадра.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('N'), имена claim_{_j:02d}
DMДвенадцать мест ката. Замер по 25:14: «1892–1902 гг.» рубином по центру, портрет вырезкой, справа графитовая плашка с подписью костью. Именно на этот приём опирается весь канон — и именно с ним панель спорит в трёх окнах (25:14–25:22, 26:54–26:56, 33:42–33:46).
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('O'), имена page_{_j:02d}

NJПриём взят из библиотеки YTUVIE (там он graphite + янтарная черта, кегль 300) и переведён на язык канала: плита #141110, рубиновая черта канона, кегль по замеру. Сам фильм его уже пробует на 1:06 («НАСТОЯЩИЙ … НЕТ»), но без подложки и без канона. Тексты берутся из карточки `questions`, их правит Роман.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('Q'), имена question_{_j:02d}
NWПриём взят у YTCH (категория D «Визуализация из самого текста фильма», вид `d_debts`): суммы из речи горизонтальными столбиками, каждая подписана. У рубина это рекорды аукционов и доля облагороженных камней — фильм называет их голосом, но на экране их нет.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('V'), имена figures_{_j:02d}
NVТот же приём YTCH (`d_life`, хронология жизни), переведённый на язык канала: линия, точки, подписи столбиком. У рубина это 1892–1902 (Вернейль), 2008 (санкции на бирманский камень) и далее — в фильме они звучат вразбивку.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('W'), имена timeline_{_j:02d}
MAСтоит в нижней трети слева — под человеком, а не по диагонали от него. Портрет прямоугольный: круглых форм у фильма нет, а вырезка-портрет в прямоугольной карточке у него своя (страница 25:14). Эталон приёма для сравнения — YTCG P03 · 1.3 в каталоге шаблонов.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('L'), имена lower_tz{_i:02d}

BПравый борт, середина: верх кадра занят собственными титрами ката. Два-три термина подряд собираются в одну групповую плашку.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('A'), имена term_{key}

ANatural Earth 50m. Страна подписывается современным именем, старое — в скобках: «МЬЯНМА (БИРМА)». Полноэкранная карта пояса — три шага.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('B'), имена map_{key} map_{key}_note mapfull_burma

MОстаётся в коде, пока на неё завязан таймлайн ревью прошлых кругов. Новые экраны рисуются титром подтемы.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('C'), имена sub_{i + 1:02d}

BDТехническая: это рабочая схема для Романа и монтажёра, в фильм не идёт. Зрительская «карта видео» из того же блока — отдельный разговор, её в кате нет.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('H'), имена info_structure_map info_videomap_ch%02d

KРисуется по bbox из OCR: стрелка встаёт на секунду дописанного титра, цвет заплатки подбирается пипеткой с самого кадра.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('G'), имена ann_tz{num[3:]} fix_tz{num[3:]} fix_tz{num[3:]}_A fix_tz{num[3:]}_B tz_lt_{i + 1:02d}

GИсточник — поле ТЗ `wasnow`. ⚠️ Текст карточки обязан совпадать с блоком «▶ СДЕЛАТЬ» той же ТЗ: разошлись — монтажёр увидит два разных требования.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('K'), имена wasnow_tz{_i:02d}

OТри схемы этого фильма: шкала Мооса, список синтеза, схема обработок.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('E'), имена info_mohs_what_t info_synthesis_list_t info_treatments_scheme_t

HСчитается по индексу упоминаний — сколько раз слово прозвучало и как оно написано в графике.
scripts/05_editing/0509_review_cycle/stages/make_infographics_v6.py → блок want('I'), имена 
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_ch(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_sub(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_claim(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция lower_a(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция lower_e(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция name_loc(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция name_split(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция name_strip(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция c_note(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция c_full(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция d_debts(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция d_calendar(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция d_life(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция d_date(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_stat(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_money(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_question(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_steps(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_term(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_place(); числа — YTs/YTCH/brand_profile.json
scripts/05_editing/0509_review_cycle/stages/bdd_plates.py → функция q_list(); числа — YTs/YTCH/brand_profile.json
YTs/ytrya-dna/index.html → #s-section_title; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-lower_third_title; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-step_cards; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-timeline_steps; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-talking_head; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-side_slide_text; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-side_slide_pills; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-numbered_list; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-speaker_intro; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-icon_grid; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-progress_bar; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-circle_diagram; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-flow_process; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-chart_curve; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-chart_bars; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-comparison; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-math_equation; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-metaphor_pip; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-video_map; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-cta_link; каталог канала — YTs/YTRF/ytrf_screen_types.json

YTs/ytrya-dna/index.html → #s-cta_qr; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-ctv; каталог канала — YTs/YTRF/ytrf_screen_types.json
YTs/ytrya-dna/index.html → #s-section_title; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.jsonYTs/ytrya-dna/index.html → #s-section_title_centered; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-lower_third_title; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-step_cards; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-talking_head; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-side_slide_text; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-side_slide_pills; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-numbered_list; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-speaker_intro; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-icon_grid; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.jsonYTs/ytrya-dna/index.html → #s-disclaimer; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-circle_diagram; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-flow_process; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-chart_curve; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-chart_bars; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-comparison; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-math_equation; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-video_map; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json

YTs/ytrya-dna/index.html → #s-cta_qr; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-ctv; каталог канала — YTs/YTCR/ytcr-dna/ytcr_screen_types.json
YTs/ytrya-dna/index.html → #s-section_title; каталог канала — YTs/YTFP/site/screen_types.json

YTs/ytrya-dna/index.html → #s-lower_third_title; каталог канала — YTs/YTFP/site/screen_types.json

YTs/ytrya-dna/index.html → #s-step_cards; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-talking_head; каталог канала — YTs/YTFP/site/screen_types.json

YTs/ytrya-dna/index.html → #s-side_slide_text; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-side_slide_pills; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-numbered_list; каталог канала — YTs/YTFP/site/screen_types.json

YTs/ytrya-dna/index.html → #s-speaker_intro; каталог канала — YTs/YTFP/site/screen_types.json

YTs/ytrya-dna/index.html → #s-flow_process; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-comparison; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-chart_bars; каталог канала — YTs/YTFP/site/screen_types.jsonYTs/ytrya-dna/index.html → #s-stat_highlight; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-video_map; каталог канала — YTs/YTFP/site/screen_types.jsonYTs/ytrya-dna/index.html → #s-cta_donate; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-ctv; каталог канала — YTs/YTFP/site/screen_types.json
YTs/ytrya-dna/index.html → #s-section_title

YTs/ytrya-dna/index.html → #s-lower_third_title


YTs/ytrya-dna/index.html → #s-step_cards
YTs/ytrya-dna/index.html → #s-timeline_steps
YTs/ytrya-dna/index.html → #s-talking_head


YTs/ytrya-dna/index.html → #s-side_slide_text
YTs/ytrya-dna/index.html → #s-side_slide_pills
YTs/ytrya-dna/index.html → #s-numbered_list


YTs/ytrya-dna/index.html → #s-speaker_intro


YTs/ytrya-dna/index.html → #s-icon_grid

YTs/ytrya-dna/index.html → #s-progress_bar


YTs/ytrya-dna/index.html → #s-circle_diagram


YTs/ytrya-dna/index.html → #s-flow_process
YTs/ytrya-dna/index.html → #s-chart_curve
YTs/ytrya-dna/index.html → #s-chart_bars
YTs/ytrya-dna/index.html → #s-comparison
YTs/ytrya-dna/index.html → #s-math_equation
YTs/ytrya-dna/index.html → #s-metaphor_pip
YTs/ytrya-dna/index.html → #s-video_map

YTs/ytrya-dna/index.html → #s-cta_link

YTs/ytrya-dna/index.html → #s-cta_qr
YTs/ytrya-dna/index.html → #s-ctv