◂ Этап LibraryRYA.AEScreens by Code — экраны кодом: тома HyperFrames по каналамбиблиотека · 3 окт 2026
Графика фильмов и шортсов, собранных кодом, рисуется без After Effects: каждый экран — мини-проект HyperFrames (HTML + GSAP), он рендерится в ProRes 4444 с альфой 3840×2160 и накладывается конформом; быстрые кадры для проверки снимает headless Chrome. У каждого канала свой том шаблонов. Второй движок — Remotion (React): им собран один пример, когда какой — в разделе «Два движка». Готовые экраны в движении, с навыком и вызовом, — в галерее примеров. Это библиотека трека AI Editing; у трека Premiere своя — Premiere Library: AE-пресеты (Animation Templates) и общий словарь видов (Screen Kinds).
📌 Правило. Экран рисуется в языке канала или клиента, не «как у нас»: YTEVO — чёрно-белый с красным по брендбуку Bounded, YTCH — плиты «ПОЛОТНО» по БДД фонда, YTCR — лайм на чёрном по BRAND.md, YTLAB — стиль RYA.AE, YTCG — navy и оранжевый. Том собирается раз на канал, дальше фильм берёт готовые виды по словам листа.
Одним взглядом
6
томов экранов на HyperFrames
YTEVO · YTCR · YTCH · YTLAB · YTCG · шортсы
4444ProRes
экран — клип с альфой 3840×2160, 25p
кадр камеры кладёт конформ ffmpeg
≥ 3:1
контраст крупного текста; обычного ≥ 4,5:1
#F08010 по белому — 2,69 (YTCG37)
≤ 0,5%
разница последнего кадра с макетом
edge ≤ 2 px · красный ±2 · screens_verify
1Схема2Два движка3Сводка томов4Тома5Движки6Ворота7Проверки8Добавить9Знания10Грабли11Команды12Где лежит

11.1 · 1Схема: от листа экранов до кадра фильма

📥 Вход
Лист экрановвид · текст · момент по словам
+
Том каналафункции t_<вид>, палитра, шрифты
+
БрендYTs/{CH}/brand, BRAND.md, карты
🧱 Сборка
buildHTML-проект на каждый экран
→
checklint · layout · motion · контраст
→
shot · mock · previewкадры Chrome без рендера
🎞 Рендер
renderProRes 4444 с альфой, один поток
→
manifest.jsonкадры = build, хэш html
→
Конформbt601 → bt709, overlay
✅ Проверка
screens_verifyпоследний кадр = макет
→
Лист экрановsc_sheet gfx · sheet
→
«ок» Романаязык, факты
📚 В KB
screens2 kbпревью 640×360 + hf_volumes.json
→
gen_templates_gallery--from-manifest
→
Animation Templatesлист тома без AE
машиначеловек решает или смотритагент Claudeитог дорожки

Видео в экран не идёт: HyperFrames рисует только графику, кадр камеры кладёт конформ. Поэтому экран с окном спикера — это альфа-клип с дыркой, а положение окна записано в теме канала.

11.1 · 2Два движка: HyperFrames и Remotion

Оба делают одно и то же: вёрстка → кадры в Chrome → видео. Все тома экранов стоят на HyperFrames; Remotion поставлен 02.10.2026 вторым движком и проверен на одном куске. Числа — из проверки на M3 Max, 4K 25p.

Что сравниваемHyperFramesRemotion
Чем пишется экранHTML + CSS + GSAP, время — атрибуты data-* на элементахReact-компоненты, анимация от номера кадра (useCurrentFrame + interpolate); CSS-переходы в рендер не попадают
Вход для Claudeнавык hyperframes — сам выбирает процесс: general-video, motion-graphics, talking-head-recutнавык remotion-best-practices — вход в 12 навыков remotion-*
Что на нём сделановсе тома: YTEVO, YTCR, YTCH, YTLAB, YTCG, выноски шортсоводин пример: 40 с фильма YTLAB01 с теми же экранами и титр LowerThird
Видео в кадрев наших томах — только графика с альфой, кадр камеры кладёт конформ ffmpegпланы камер, окно холста, графика и звук собираются за один проход по props.json
ПрозрачностьProRes 4444, только mov и --workers 1ProRes 4444 yuva444p12le с метками bt709; работает и с --scale
Цветклип без цветовых меток — в конформе декодировать как BT.601 limited8 бит sRGB; setColorSpace("bt709") обязателен; кадры только PNG; проявка, куб и 10 бит — заранее в ffmpeg
Просмотр до рендеракадры chrome-headless-shell: shot · mock · preview · sheetStudio в браузере: композиция с таймлайном (npm run dev)
Скорость 4Kэкран рендерится отдельно, сводит ffmpeg (путь этапа 19–21 к/с)1014 кадров с видео за 4 мин 10 с — 4 к/с при двух потоках; фильм 52 мин — около пяти часов
Версия, где стоитnpx [email protected] (screens2 — 0.8.103), Node 22+; Apache 2.0Remotion 4.0.532, ~/YTAI/scripts/999_extra/remotion/, свой Chrome в node_modules/.remotion; бесплатно до 3 сотрудников, дальше Company License — ключ не задан

Пример Remotion сдан Роману 02.10.2026, ответа «куда применять» нет. Шаблон экрана с параметрами из JSON, кусок с камерами за один проход и превью в Studio — то, ради чего Remotion стоит брать; цвет, конформ и длинный фильм целиком остаются за ffmpeg (Фильм кодом).

Скорость 4K одним взглядом
HyperFrames + ffmpegэкран отдельно, сводит ffmpeg19–21 к/с
Remotion, кусок с видео2 потока: 1014 кадров за 4 мин 10 с4 к/с

Фильм 52 мин на Remotion — около пяти часов; длинный фильм целиком сводит ffmpeg.

Когда какой
1HyperFrames — по умолчаниюсегодня
  • экраны, титры, схемы, карты, выноски шортсов — все тома уже на нём
  • кадр для проверки за секунды, без рендера
  • альфа в один поток, клип без цветовых меток
2Remotion — есликогда брать
  • серия однотипных экранов из JSON: компонент с параметрами (schema.ts)
  • кусок с камерами, графикой и звуком за один проход и его превью с таймлайном
  • прозрачный клип с метками bt709 в любом масштабе
3Ни тот, ни другойffmpeg
  • проявка, кубы, лог, 10 бит, конформ, длинный фильм целиком, паспорт YouTube
4💬 Моё мнение · решает Романоткрыто
  • в заметке сравнения предложено оформлять шортсы на Remotion; сегодня плашки и выноски делают gfx.py и shorts.py viz на HyperFrames — переводить ли, не решено
  • пока правило простое: новый вид — в том канала на HyperFrames; Remotion — для куска целиком и для шаблона из данных

11.1 · 3Тома одним взглядом

Сколько готовых видов в томе: фильм берёт их по словам листа, новый вид — функция t_<вид> в томе.

YTCR · sc_gfx.py10 поверх кадра + 12 холст с окном22
YTLAB · headless gfx.pyраскладки + конструкции6 + 10
YTEVO · screens2.pyв KB — 11 шаблонов, 16 превью14
YTCH · doc_cut/gfx.py«ПОЛОТНО», split — «шторка»10
YTCG · ytcg.pyобразец темы для нового канала7
Шортсы · viz.pynumber и phrase, ≤ 2 на шортс2
Окно и проверки по томам
ТомОкно спикераhf checkКадр = макетQRКарты
YTEVOОкно спикера: 690×1180 от x 3054690×1180 от x 3054✗✓✗✗
YTCRОкно спикера: PIP 1180×664PIP 1180×664✓✗✗✓
YTCHОкно спикера: панель split 1723 pxпанель split 1723 px✓✗✓✗
YTLABОкно спикера: 1160×15601160×1560✓✗✗✗
YTCGОкно спикера: шаблон windowшаблон window✓✗!✓
ШортсыОкно спикера: весь кадр 1080×1920весь кадр 1080×1920!✗✗✗
✓есть!частично✗нет

hf check — hyperframes check: screens2 его не вызывает, выноски шортсов проходят только lint (viz.py). Кадр = макет — screens_verify, только autocut. QR: doc_cut читает обратно zbarimg, ytcg — без проверки. Карты — Natural Earth: YTCR (+ берег Дубая из OSM), YTCG.

11.1 · 4Тома по каналам

1YTEVO · screens2.pyautocut
  • 14 видов: S01 hero, chapter_card, topic_title, title, side_panel, lower_third, formula, big_phrase, chain, cards_n, list, cards, two_sides, compare
  • язык клиента: Bounded + Inter; INK #0F0F11, PAPER #F1F1EE, RED #EE3227, BLUE #33439B; окно спикера 690×1180 от x = 3054
  • тексты — lesson_plan_1.built.json, моменты — cues.json, решения — directives_v4.json (choice · screens_off · screens_time · facts)
  • без свечений, частиц, 3D и отскоков — так в брендбуке
{P}/02_Edit/HyperFrames/<CODE>-v4-screens2/ · в KB 11 шаблонов P01–P11, 16 превью
2YTCR · sc_gfx.pystory_cut
  • 22 типа: поверх кадра — number, year, chapter, name, place, statement, term, range, counter, list; холст с окном — map_route, map_place, map_world, map_dubai, timeline, compare, bars, ladder, formula, ui_email, ui_social, quote
  • лайм #D6FA4A на #0C0C0D; Noto Serif Display XCn + Barlow Condensed; поля 170/130, окно PIP 1180×664
  • карты: Natural Earth 1:50m + берег Дубая из OSM Overpass (на экране «© OpenStreetMap»)
  • правки редактора — {CODE}_gfx_overrides.json: data · drop · pos · pip
{P}/02_Edit/HyperFrames/ytcr04-graphics-v6/clips/<id>/ (имя проекта пока зашито в коде)
3YTCH «ПОЛОТНО» · doc_cut/gfx.pydoc_cut
  • 10 видов: title, chapter, lower_hero, lower_fund, term, list, money, claim, end, split
  • Montserrat из YTs/YTCH/brand/fonts; красный #EC1F26 — только черта, коралл #F37769 — акцент героя; насыщенность кадра под экраном задаёт LOOK
  • split — «шторка»: кремовая панель 1723 px, фигуры брендбука, логотип, QR, фазы по словам; кадр уезжает вправо в конформе — кодовая версия пресета YTFP P11
  • QR: qrencode → zbarimg читает обратно, не совпало — ⛔; ни QR, ни сайта, ни «идёт сбор» без письма фонда; claim — только слова героя
08_Cut/{CODE}_gfx_<tag>.json + edl_audio_<tag>.json
4YTLAB и YTCG · headless gfx.py, ytcg.pyheadless
  • YTLAB, стиль RYA.AE: 6 раскладок lower, caption, chapter, window, ident, end_card + 10 конструкций rows, steps, cards, versus, number, bars, funnel, stairs, pair, formula; окно 1160×1560; Unbounded + Manrope + JetBrains Mono
  • YTCG v2: 7 шаблонов plate, lower, stats, pill, side, window, ring; navy #0B1347 и оранжевый #FFA95A; Plus Jakarta Sans; карты world/uae из YTs/YTCG/gfx/maps (Natural Earth 1:10m)
  • новый канал — отдельный файл темы по образцу ytcg.py; solo.py пока зовёт ytcg напрямую (gfx.theme не подключён)
{CODE}_screens_v1.json: tpl · from/to/at · ring
5Шортсы · gfx.py + viz.pyshorts
  • знак канала и плашки: HTML YTs/{CH}/shorts_gfx.html → GUI Chrome снимает блоки .box по одному → PNG с альфой (brand.png, p_<имя>.png)
  • .plate и .plate.lead: строки крупно, строка со * — цветом канала, имя подписью; метка <!--PLATES--> — куда встают плашки людей
  • выноски viz: number (счётчик за 0,8 с) и phrase, не больше двух на шортс, низ карточки на 1215 px; ProRes 4444 1080×1920
  • шрифт страницы грузится с Google Fonts — без сети молча подменится
каналы с шаблоном: YTTRBM, YTFP, YTEVO
6Инфографика для Premiere · /infographicсоседний трек
  • скилл /infographic: HTML → PNG 4K через render.py (chrome-headless-shell) для таймлайна монтажёра
  • макеты экранов для ТЗ — build_mockups.py с DOM-QC: текст за title-safe 5 % и переполнения пишутся в body[data-qc]
~/YTAI/scripts/999_extra/infographic/render.py page.html out.png --alpha --size 3840x2160

11.1 · 5Движки: чем рисуется и чем проверяется

ДвижокЧто делаетВерсия, где идётГрабли
HyperFramesкомпозиция HTML/GSAP → render --format mov --workers 1: ProRes 4444 с альфой, 3840×2160, 25pnpx [email protected] (screens2 — 0.8.103), Node 22+; через очередь рендераальфа только в mov и в один поток; цвет клипа BT.601 limited без меток
Remotionкомпозиция React → кадры Chrome → ffmpeg: 4K H.264 40 Мбит/с + AAC 320 или ProRes 4444 с альфой4.0.532 в ~/YTAI/scripts/999_extra/remotion, Node; npm run film · alpha, через очередь рендеракадры только PNG; setColorSpace bt709; 8 бит sRGB — лог и кубы заранее; ~4 к/с на 4K
hyperframes checklint · runtime · layout · motion · контраст WCAG 4,5:1 (крупный текст 3:1)sc_gfx check пропускает по хэшу .checked; screens2 не вызывает вовсеошибка lint выключает layout и контраст: «0 samples» не значит чисто
chrome-headless-shellкадры без рендера: shot · mock · preview · sheet (?t= + virtual-time-budget)~/.cache/puppeteer (npx hyperframes browser ensure)GUI Chrome в headless на маке виснет; 3 повтора, не больше 3 параллельно
GUI Chromeплашки и знак шортсов: --headless=new, прозрачный фон, обрезка по альфеgfx.py шортсовпосле --screenshot сам не выходит — гасить по пути профиля
screens_verify.pyпоследний кадр = PNG макета: edge 2 px, diff 0,5 %, mean 2,0; красный (208,2,27) ±2; движение только в окнах твиновautocut, первый набормакеты сняты на процессоре, рендер на GPU — края букв расходятся до 1 px
qrencode + zbarimgQR в SVG/PNG и чтение обратноdoc_cut (с проверкой), ytcg (без)без zbarimg QR может не читаться с экрана
Natural Earth · OSM Overpassкарты стран и береговых линийsc_geo.py prep · ytcg_geo.py prepгород, которого герой не называл, на карту не ставить
ffmpeg overlay в конформеscale in_color_matrix=bt601 → bt709, in_range=tv, затем overlaycomposite.py · conform.py · sc_conform.py · doc_cut/conform.pyв шортсах viz.mov накладывается без явного bt601→bt709 — цвет выносок проверить

11.1 · 6Ворота экрана: до и после рендера

Шесть ворот от кода экрана до «ок»: два — до рендера, три — по готовому клипу, последнее — глазами.

1
lint и checkмашинаruntime · layout · motion · контраст✓ 0 ошибок; крупный текст ≥ 3:1
2
Плашка живётмашинаcheck motion в середине срока✓ sweep_static нет
3
РендермашинаProRes 4444, --workers 1✓ кадров = build.json
4
Кадр = макетмашинаscreens_verify, autocut✓ edge ≤ 2 px · diff ≤ 0,5 %
5
Красный после кодекамашинаqc фильма✓ (238,50,39) ±10
6
Лист экрановчеловекфакты и язык клиента✓ каждый экран просмотрен
машиначеловек

Ошибка lint выключает layout и контраст: «0 samples» не значит чисто. Подробно — таблица «Проверки» ниже.

11.1 · 7Проверки

ПроверкаКогдаНормаОткуда взялась
lint и checkдо рендера0 ошибок; контраст ≥ 3 для крупного текста#F08010 по белому дал 2,69 (YTCG37)
Статичная плашкаcheck motionsweep_static нетплашка без движения в середине срока — добавить строку, встающую на слове
Последний кадр = макетпосле рендера, screens_verifyedge ≤ 2 px, diff ≤ 0,5 %, красный ±2первый набор YTEVO: макеты утверждал клиент
Красный бренда после кодированияqc фильма(238,50,39) ±10кодек уводил цвет бренда
Число кадров экранаrender.json · manifest= build.jsonэкран через границу части резался
QR читаетсяgfx build (doc_cut)zbarimg вернул ту же ссылкуQR фонда без проверки нельзя
Часть без графикиsc_rungfx_lack → часть не рендеритсячасть уходила в рендер без экранов
Моменты по звуку текущего листаscreens2 rendercues от dialogue.wav этой версииYTEVO02 v6: 12 экранов встали по звуку прошлой версии
Лист экранов глазамиsc_sheet gfx · mock · sheetкаждый экран просмотренфакты и язык клиента машина не оценит

11.1 · 8Как добавить вид или канал

1Новый вид в томе
  • функция t_<вид>(ctx, info) → ключ в TEMPLATES / TYPES / MAKE
  • образец в DEMO → demo → shot → check
  • для KB: строка в KB_TEMPLATES и прогон screens2 kb
2Новый канал
  • файл темы по образцу ytcg.py: палитра, шрифты, GEO / LAYOUT / SLOT / Z
  • бренд — из YTs/{CH}/brand/ или BRAND.md, не из памяти
  • hyperframes.json → authoringSkill: general-video или talking-head-recut
3Превью в KB
  • screens2.py kb → templates/media/{N}.mp4 + .jpg + hf_volumes.json
  • gen_templates_gallery.py --from-manifest → gen_kb.py
  • прозрачное закрыто серым 0x565B63, кадров клиента нет

11.1 · 9Что обновляет базу знаний

ФайлЧто хранитКто пишет
YTs/{CH}/brand/ · BRAND.md · brand_profile.jsonшрифты, палитра, правила брендапо брендбуку клиента; палитры пока зашиты в gfx.py — перенос в профиль открыт
TEMPLATES · TYPES · MAKE в коде томавиды экранов каналасессия при новом виде; вид описывается здесь и в словаре видов
{CODE}_gfx_overrides.jsonправки редактора к экранам фильмаредактор или сессия после листа gfx
hf_volumes.json + templates/media/превью шаблонов для страницы Animation Templatesscreens2.py kb, затем генератор галереи
README движка, раздел «Графика»грабли вида: контраст, sweep_static, data-layout-allow-overlapсессия сразу после ошибки
Screen Kinds Libraryкогда ставить вид и чем заменить — общий словарь обоих путейgen_kb_screens.py --scan из YTs

11.1 · 10Ошибки и грабли

Контраст 2,69 вместо 3#F08010 по белому не проходит — на белой плашке #C95F06YTCG37
Плавная смена цвета номерапроходит через серый, контраст ловит ошибку — менять мгновенно, tl.setYTLAB01
Нет знаков ↔ ↘ ✓ ✕ в Manropeрисовать SVGYTLAB01
Плотный сериф читается как наложениеhf check: помечать data-layout-allow-overlap; настоящие наложения подписей карт — чинитьYTCR04
Модуль файлом и импортом — два объектаsys.modules.setdefault('sc_gfx')story_cut
Клип HyperFrames без цветовых метокдекодировать как BT.601 limited, иначе цвет бренда уезжаетвсе конформы
Альфа в несколько потоковпервый кадр куска пустой — --workers 1viz шортсов
inset:0 у мелкого элементаlint читает как полноэкранный оверлей; letterSpacing твинить нельзяautocut
Экран через границу части-ss на входе клипа + trim=start_pts: ProRes — интра, перемотка точнаяsolo
Выноска кончается за 0,05 с до концапоследний кадр без панели — окно выноски растянуть до длины корня (viz_all.py FULL)YTEVO02 шортсы
Пробел в начале span в flexсъедается («$4млн») — white-space: preшортсы
Город, которого герой не назывална карту не ставить; Khartoum → SudanYTCR04
Кадры Chrome виснут на занятой машине3 повтора, не больше 3 параллельноheadless
Макеты на процессоре, рендер на GPUкрая букв расходятся до 1 px — допуски screens_verify, а не точное равенствоYTEVO02
Remotion: JPEG-кадры мылят цветной текст36 дБ при качестве 80 и 38 при 100 на лаймовом тексте — итог только --image-format=pngRemotion, YTLAB01
Файл Remotion без цветовых метокsetColorSpace("bt709") в remotion.config.ts; сверять кадры по номеру (select), не перемоткой -ssRemotion, YTLAB01

11.1 · 11Команды

YTEVO · screens2.py (autocut)
V=~/YTAI/environment/.venv_transcribe/bin/python
AC=~/YTAI/scripts/05_editing/0510_autocut

$V $AC/screens2.py --project $P build  # HTML-проект на каждый экран листа
$V $AC/screens2.py --project $P preview --at 12:34  # кадр через Chrome, без рендера
$V $AC/screens2.py --project $P sheet  # лист всех экранов
$V $AC/screens2.py --project $P render --parallel 3  # ProRes 4444 с альфой, через очередь
$V $AC/screens2.py --project $P kb --web ~/RYA/wt/<worktree>/web  # превью тома в KB → hf_volumes.json
YTCR · sc_gfx.py (story_cut)
SC=~/YTAI/scripts/05_editing/0511_story_cut

$V $SC/sc_gfx.py build --project $P  # клипы экранов по листу
$V $SC/sc_gfx.py demo · shot --bg кадр.png  # образцы и кадр поверх фона
$V $SC/sc_gfx.py check  # lint + check, пропуск по хэшу .checked
$V $SC/sc_gfx.py render  # через render_queue.py
$V $SC/sc_sheet.py gfx  # лист экранов глазами
YTCH · doc_cut/gfx.py и YTLAB/YTCG · headless
DC=~/YTAI/scripts/05_editing/0511_doc_cut; HC=~/YTAI/scripts/05_editing/0510_headless_cut

$V $DC/gfx.py build · mock · lint · check · render --job $J  # check и render — только через очередь
$V $HC/gfx.py build --edl … · shot · mock · motion · check --jobs 2 · snap · render  # YTLAB
$V $HC/solo.py gfx build · gfx check · mock --job $J  # YTCG через тему ytcg.py
Шортсы
S=~/YTAI/scripts/07_shorts/0701_finished/shorts.py

$V $S gfx --job $JOB  # знак и плашки → gfx/*.png
$V $S viz --init --job $JOB && $V $S viz --render --job $JOB  # выноски HyperFrames → viz/S{NN}.mov
Remotion — второй движок
cd ~/YTAI/scripts/999_extra/remotion
npm run dev  # Studio: превью с таймлайном в браузере
npx remotion still LowerThird out/f.png --frame=50  # один кадр, мимо очереди
python3 ~/YTAI/scripts/999_extra/render_queue.py remotion -- npm run film -- <композиция> <файл> --concurrency=3  # 4K H.264 + AAC, кадры PNG — через очередь
npm run alpha -- LowerThird out/lower_third.mov  # ProRes 4444 с прозрачностью

Навыки: ~/.claude/skills/remotion-*, вход remotion-best-practices; API менялся — писать по навыкам, не по памяти.

11.1 · 12Где лежит

Код
~/YTAI/scripts/05_editing/0510_autocut/screens2.py · screens_hf.py · screens_verify.pyYTEVO
~/YTAI/scripts/05_editing/0511_story_cut/sc_gfx.py · sc_gfx_types.py · sc_gfx_full.py · sc_geo.pyYTCR
~/YTAI/scripts/05_editing/0511_doc_cut/gfx.pyYTCH «ПОЛОТНО»
~/YTAI/scripts/05_editing/0510_headless_cut/gfx.py · ytcg.py · ytcg_geo.pyYTLAB · YTCG
~/YTAI/scripts/07_shorts/0701_finished/gfx.py · viz.pyшортсы
~/YTAI/scripts/999_extra/infographic/render.py · ~/YTAI/.claude/skills/infographic/PNG для Premiere
~/YTAI/scripts/999_extra/remotion/ · src/film/ · examples/ytlab01/Remotion: README, стиль RYA.AE, пример куска YTLAB01 (материалы public/_local не в git)
~/YTAI/docs/hyperframes_remotion_comparison.mdисходная заметка сравнения двух движков
Бренд и данные
~/YTAI/YTs/YTCH/brand/ · ~/YTAI/YTs/YTCG/gfx/ · YTAI_Templates/YTCR/_brand/BRAND.md (T9)шрифты, палитры, карты
~/YTAI/YTs/{CH}/shorts_gfx.htmlзнак и плашки шортсов
Проекты HyperFrames
{P}/02_Edit/HyperFrames/<CODE>-v4-screens2/ · ytcr04-graphics-v6/clips/<id>/мини-проекты экранов, renders/manifest.json
{проект}/00_Setup/07_Shorts/viz/S{NN}/выноски шортсов
KB
web/kb/templates/media/hf_volumes.jsonреестр превью тома YTEVO: 11 шаблонов, 16 превью
Экраны кодом · сверено 03.10.2026 · примеры: YTCR04 (22 типа) · YTEVO02 (том в KB) · Remotion — YTLAB01 (кусок 40 с)