web/_data/kb_dna.json (там же библиотека: строка src — ролик рендера, строка tpl — образец в ДНК). Пополнять после каждого фильма: новый вид тома — ролик 640×360 без звука до 600 КБ, без людей и кадров клиента; QR — с UTM по коду ролика.Connect Group · движок — ytcg.py через solo.py (0510_headless_cut) · навык talking-head-recut. Вызов: $V $HC/solo.py run --job $J --tag vN --from gfx. В библиотеке 20: роликов фильма 18, образцов в ДНК 2.
~/YTAI/scripts/05_editing/0510_headless_cut/ytcg.py (тема v7) · знаки и карты YTs/YTCG/gfx/ · тексты — 08_Cut/YTCG37_screens_v7.json$V $HC/solo.py gfx build --job $J --tag v7 # tpl: plate, style: title · YTCG37: H_titlescreens_v7: C_lower$V $HC/solo.py gfx build --job $J --tag v7 # tpl: stats, kind: nums · YTCG37: C_stats$V $HC/solo.py gfx build --job $J --tag v7 # rings: ring · YTCG37: ring$V $HC/solo.py gfx build --job $J --tag v7 # tpl: side, kind: docs, pack · YTCG37: E_side$V $HC/solo.py gfx build --job $J --tag v7 # tpl: side, kind: doc · YTCG37: H_side$V $HC/solo.py gfx build --job $J --tag v7 # tpl: chain · YTCG37: K_chain$V $HC/solo.py gfx build --job $J --tag v7 # tpl: window, kind: cards, fork · YTCG37: K_window$V $HC/solo.py gfx build --job $J --tag v7 # tpl: window, kind: tiles, ui: edit · YTCG37: O2_window$V $HC/solo.py gfx build --job $J --tag v7 # tpl: window, kind: tiles, scan · YTCG37: N_window$V $HC/solo.py gfx build --job $J --tag v7 # tpl: window, kind: roadmap · YTCG37: D_roadmap$V $HC/solo.py gfx build --job $J --tag v7 # tpl: side, kind: map · YTCG37: B1_map$V $HC/solo.py gfx build --job $J --tag v7 # tpl: window, kind: uae · YTCG37: B2_uae$V $HC/solo.py gfx build --job $J --tag v7 # tpl: plate, style: caption · YTCG37: D_plate$V $HC/solo.py gfx build --job $J --tag v7 # tpl: plate, style: warn · YTCG37: H_warn$V $HC/solo.py gfx build --job $J --tag v7 # tpl: plate, style: ok, kinetic · YTCG37: J_ok$V $HC/solo.py gfx build --job $J --tag v7 # tpl: window, kind: tiles, arrows · YTCG37: FG_window$V $HC/solo.py gfx build --job $J --tag v7 # tpl: window, kind: tiles, token · YTCG37: FG_window$V $HC/solo.py gfx build --job $J --tag v7 # tpl: side, kind: cta, clean · YTCG37: L_ctaYTCR · движок — sc_gfx.py (0511_story_cut) · навык talking-head-recut. Вызов: $V $SC/sc_gfx.py render $P --only <id экрана> (виды v7 — sc_gfx_v7.py). В библиотеке 33: роликов фильма 32, образцов в ДНК 1.
~/YTAI/scripts/05_editing/0511_story_cut/sc_gfx.py (+ sc_gfx_types.py, sc_gfx_full.py) · рендеры YTCR04 v7 (виды v7 — sc_gfx_v7.py)$V $SC/sc_gfx.py render $P --only B6.g01$V $SC/sc_gfx.py render $P --only B20.g01$V $SC/sc_gfx.py render $P --only B2.g01$V $SC/sc_gfx.py render $P --only B3.g02$V $SC/sc_gfx.py render $P --only B3.g03$V $SC/sc_gfx.py render $P --only B18.g04$V $SC/sc_gfx.py render $P --only B11.g02$V $SC/sc_gfx.py render $P --only B15.g07$V $SC/sc_gfx.py render $P --only B19.g05$V $SC/sc_gfx.py render $P --only B12.g14$V $SC/sc_gfx.py render $P --only B16.g01$V $SC/sc_gfx.py render $P --only B7.g03$V $SC/sc_gfx.py render $P --only B5.g06$V $SC/sc_gfx.py render $P --only B7.g10$V $SC/sc_gfx.py render $P --only B8.g06$V $SC/sc_gfx.py render $P --only B14.g02$V $SC/sc_gfx.py render $P --only B12.g04$V $SC/sc_gfx.py render $P --only B19.g04$V $SC/sc_gfx.py render $P --only B9.g02$V $SC/sc_gfx.py render $P --only B7.g07$V $SC/sc_gfx.py render $P --only B7.g04$V $SC/sc_gfx.py demo $P --only demo_map_world$V $SC/sc_gfx.py render $P --only B5.g03$V $SC/sc_gfx.py render $P --only B21.g05$V $SC/sc_gfx.py render $P --only B8.g08$V $SC/sc_gfx.py render $P --only B4.g01$V $SC/sc_gfx.py render $P --only B1.g01$V $SC/sc_gfx.py render $P --only B8.g03
$V $SC/sc_gfx.py demo $P --only demo_quote$V $SC/sc_gfx.py render $P --only B9.g03$V $SC/sc_gfx.py render $P --only B15.g02$V $SC/sc_gfx.py render $P --only B14.g07вида в sc_gfx нетБюро добрых дел · движок — doc_cut/gfx.py (0511_doc_cut) · навык talking-head-recut. Вызов: $V $DC/gfx.py build --job $J. В библиотеке 14: роликов фильма 14, образцов в ДНК 0.
~/YTAI/scripts/05_editing/0511_doc_cut/gfx.py · брендбук YTs/YTCH/brand_profile.json, brand/canon_vs_brandbook.md · тексты — YTCH12, YTCH14 (без героя-ребёнка)doc_cut gfx: title · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: titledoc_cut gfx: chapter · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: ch1doc_cut gfx: lower_hero · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: lt_katya_1doc_cut gfx: lower_fund · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: lt_gulya_1doc_cut gfx: split big · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: split_50doc_cut gfx: term · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: term_kdndoc_cut gfx: quote big · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: quote_feardoc_cut gfx: quote quiet · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: quote_askdoc_cut gfx: quote silence · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: quote_returndoc_cut gfx: strike · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: strike_askeddoc_cut gfx: claim · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: claim_enddoc_cut gfx: qr_card · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: split_beds_qrdoc_cut gfx: split + chips · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: split_ctadoc_cut gfx: end · $V $DC/gfx.py build --job $J · YTCH14_gfx_v3: end_cardЭволюция · движок — screens2.py (0510_autocut) · фильм кодом — story_screens_vN.py (HyperFrames) · навык general-video. Вызов: $V $AC/screens2.py --project $P build --only <id>. В библиотеке 41: роликов фильма 40, образцов в ДНК 1.
~/YTAI/scripts/05_editing/0510_autocut/screens2.py · шрифт Bounded (OFL) — web/kb/claude-visuals/fonts/ · KB-превью screens2.py kb🧱 Кейс YTEVO03 — как сделан фильм кодом → 🧱 Комната ревью фильма → 🧱 Лайт 4K 10 бит v10 на Google Drive →
V=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v6.py build --only V6.title_a && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v6.py render --only V6.title_a # → ytevo03-graphics-v6/renders/V6.title_a.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens.py build --project /Volumes/T9-Black-2-RYA/YTEVO/YTEVO03_Plechko_day --only B12.g01 && python3 $RQ ytevo03-gfx -- $V $SM/story_screens.py render --project /Volumes/T9-Black-2-RYA/YTEVO/YTEVO03_Plechko_day --only B12.g01 # → ytevo03-graphics-v3/renders/B12.g01.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.q2 && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.q2 # → ytevo03-graphics-v7/renders/V7.q2.webm$V $AC/screens2.py --project $P build # kind: topic_title · title → t_title$V $AC/screens2.py --project $P build # kind: title → t_title$V $AC/screens2.py --project $P build # kind: chapter_card → t_chapterV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.plate_arkady && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.plate_arkady # → ytevo03-graphics-v7/renders/V7.plate_arkady.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.ctx_now && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.ctx_now # → ytevo03-graphics-v7/renders/V7.ctx_now.webm$V $AC/screens2.py --project $P build # kind: lower_third → t_lowerV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v6.py build --only V6.marathon_b && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v6.py render --only V6.marathon_b # → ytevo03-graphics-v6/renders/V6.marathon_b.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.pace && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.pace # → ytevo03-graphics-v7/renders/V7.pace.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.media_exit && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.media_exit # → ytevo03-graphics-v7/renders/V7.media_exit.webm$V $AC/screens2.py --project $P build --only S01 # id S01 → t_hero60$V $AC/screens2.py --project $P build # kind: side_panel → t_panel$V $AC/screens2.py --project $P build # kind: list → t_steps$V $AC/screens2.py --project $P build # kind: list → t_steps$V $AC/screens2.py --project $P build # kind: chain → t_steps$V $AC/screens2.py --project $P build # kind: cards · cards_n → t_steps$V $AC/screens2.py --project $P build # kind: list · chain → t_stepsV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.rebrand && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.rebrand # → ytevo03-graphics-v7/renders/V7.rebrand.webm$V $AC/screens2.py --project $P build # kind: two_sides · compare → t_versus$V $AC/screens2.py --project $P build # kind: compare → t_versus$V $AC/screens2.py --project $P build # kind: formula · big_phrase → t_phraseV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.fights && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.fights # → ytevo03-graphics-v7/renders/V7.fights.webm$V $AC/screens2.py --project $P build # kind: chain · cards_n · list · cards → t_stepsV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v7.py build --only V7.flight && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v7.py render --only V7.flight # → ytevo03-graphics-v7/renders/V7.flight.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v8.py build --only V8.afon_first && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v8.py render --only V8.afon_first # → ytevo03-graphics-v8/renders/V8.afon_first.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v8.py build --only V8.plot && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v8.py render --only V8.plot # → ytevo03-graphics-v8/renders/V8.plot.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v9.py build --only V9.mammon && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v9.py render --only V9.mammon # → ytevo03-graphics-v9/renders/V9.mammon.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v10.py build --only V10.basil && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v10.py render --only V10.basil # → ytevo03-graphics-v10/renders/V10.basil.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v9.py build --only V9.optina && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v9.py render --only V9.optina # → ytevo03-graphics-v9/renders/V9.optina.webmV=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py; $V $SM/story_screens_v9.py build --only V9.light && python3 $RQ ytevo03-gfx -- $V $SM/story_screens_v9.py render --only V9.light # → ytevo03-graphics-v9/renders/V9.light.webm$V $AC/screens2.py --project $P build # kind: big_phrase → t_phraseвида в screens2 нет — надо построить$V $S viz --job $JOB --only S01 --init # своя сцена в viz/S01/compositions/c0.html, затем --render$V $S viz --job $JOB --only S03 --init # своя сцена в viz/S03/compositions/c0.html, затем --render$V $S viz --job $JOB --only S04 --init && $V $S viz --job $JOB --only S04 --render # viz из picks.json$V $S viz --job $JOB --only S02 --render # viz из picks.json$V $S viz --job $JOB --only S04 --init # плашка — своя сцена c0.html
$V $S gfx --job $JOB # gfx/p_<имя>.png
$V $S gfx --job $JOB # gfx/brand.pngОдин день Ростислава Плечко (18.09) → 41:23, 10 версий за 10 дней, 132 правки Романа в четырёх кругах. Подробно, с путями и решениями, — кейс /ytevo/03/case/ (текст — YTs/YTEVO/YTEVO03_case.md).
Скрипт на круг правок: ~/YTAI/scripts/999_extra/story_map/story_screens_vN.py (v10 берёт шаблоны v8, v8 — v7…; карты — _geo, заставки глав — базовый story_screens.py по шаблонам клиента screens2). Композиции — 02_Edit/HyperFrames/ytevo03-cut-screens-vN/, рендеры — ytevo03-graphics-vN/renders/. Переменные строк вызова: V=~/YTAI/environment/.venv_transcribe/bin/python; SM=~/YTAI/scripts/999_extra/story_map; RQ=~/YTAI/scripts/999_extra/render_queue.py. Скрипты vN знают проект сами, базовому story_screens.py нужен --project.
| Шаг | Команда | Что делает |
|---|---|---|
| 1 · якорь | story_screens_v10.py align | где на самом деле звучит слово-якорь: выравнивание по звуку петлички (edges.py) → anchor_tape {сцена, секунда ленты} |
| 2 · сборка | story_screens_v10.py build --only V10.basil | index.html композиции HyperFrames на экран: шаблон вида (term8, quote, question, name, map…) + текст экрана |
| 3 · кадры | story_screens_v10.py preview | кадры поверх чистого черновика → snapshots/; лист, линт и проверка — sheet · lint · verify |
| 4 · рендер | render_queue.py ytevo03-gfx-v10 -- … render --only V10.basil | WebM VP9 с альфой 3840×2160 25p (hyperframes 0.8.103); только через очередь, на Memex HyperFrames не запускать — виснет |
| 5 · проверка | story_screens_v10.py check | начало, середина и конец рендера поверх серого → snapshots/_check/ |
| 6 · в лист | story_screens_v10.py list → make_v10_cut.py | gfx_v10_new.json и manifest → лист версии: экран встаёт на кусок речи с якорем, держится 0,35 с на слово, ≥ 4 с, до склейки − 2 кадра |
| 7 · наложение | make_v10_overlay.py · v10f_master.py | черновик 720p — одним проходом поверх чистой картинки; лайт 4K — на каждую часть отдельно, потом склейка без перекодирования |
Лаборатория · движок — gfx.py (0510_headless_cut) · навык talking-head-recut. Вызов: $V $HC/gfx.py render --job $J --only <id>. В библиотеке 22: роликов фильма 22, образцов в ДНК 0.
~/YTAI/scripts/05_editing/0510_headless_cut/gfx.py · YTs/YTLAB/dna.json · YTs/YTLAB/screen_kinds.json$V $HC/gfx.py build --job $J --edl edl_v6.json # type: ident · YTLAB01: ident$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: chapter · YTLAB01: ch01$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: lower · YTLAB01: lt_pavel$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: side · YTLAB01: in_bio (и in_club)$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: number · dots: 47 · YTLAB01: scr_081$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: side · big: 2025 · YTLAB01: ai_note_6$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: caption · series: {n, of} · YTLAB01: scr_076$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: steps · YTLAB01: scr_108$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: rows · ordered: false · YTLAB01: x11_1$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: cards · YTLAB01: scr_100$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: caption · series.names · mode: chain · YTLAB01: scr_084$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: versus · left/right: ok + at · YTLAB01: x07_1$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: pair · YTLAB01: scr_101$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: funnel · follow · loop · YTLAB01: scr_070$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: stairs · YTLAB01: scr_105$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: flow · YTLAB01: scr_102$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: board · YTLAB01: scr_020$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: window · viz: formula · YTLAB01: scr_113$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: caption · punch: true · hl: YouTube · YTLAB01: hD2$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: caption · viz: quote · YTLAB01: scr_018$V $HC/gfx.py build --job $J --edl edl_v6.json # layout: caption · YTLAB01: x10_1$V $HC/gfx.py build --job $J --edl edl_v6.json # type: end_card · YTLAB01: end_cardФонд «Правмир» · движок — AE-пресеты P01–P12 (трек Premiere) · фильм кодом — ytfp02_screen_plan_build.py · навык general-video. Вызов: пресет по составному id: YTFP P11 · 3.11 — /kb/templates/. В библиотеке 7: роликов фильма 2, образцов в ДНК 5.
YTs/YTFP/YTFP.md (палитра бренда) · YTs/YTFP/site/dna.json · пресеты P01–P12 — Animation Templates · фильм кодом — 999_extra/ytfp02_screen_plan_build.pyпресеты YTFP P02 · 3.2 и P04 · 3.4пресет YTFP P05 · 3.5пресет YTFP P03 · 3.3пресет YTFP P12 · 3.12пресет YTFP P11 · 3.11 · QR — UTM ytfp02
$V $S gfx --job $JOB # gfx/p_<имя>.png
$V $S gfx --job $JOB # gfx/brand.pngТараборим · движок — фильм — 0510_headless_cut (gfx.py: экраны HyperFrames по монтажному листу, тема канала gfx.theme) + заставка/название/термин — HyperFrames yttrbm02-ident; шортсы — gfx.py + viz.py (07_shorts/0701_finished), моушн motion.py · навык motion-graphics. Вызов: $V cut.py run --job {CODE}_cut_job_v1.json --tag v1 (экраны — {CODE}_screens_v1.json; шаблоны YTs/YTTRBM/templates/). В библиотеке 91: роликов фильма 87, образцов в ДНК 4.
00_Setup/08_Cut/{CODE}_cut_job_v*.json (gfx.theme) · {CODE}_screens_v*.json · 05_editing/0510_headless_cut/gfx.py · 02_Edit/HyperFrames/yttrbm02-ident · шаблоны YTs/YTTRBM/templates/ · шортсы: YTs/YTTRBM/shorts_gfx.html · shorts_profile.json · 07_shorts/0701_finished/gfx.py, viz.py{"id":"ident","type":"ident","sec":"insert_after_hook","video":"renders/ident_v4.mp4"} · HyperFrames yttrbm02-ident{"id":"name_reveal","type":"strip","video":"renders/name_reveal.mov","anchor":544,"until":551}{"id":"ch01","type":"chapter_bar","n":1,"title":"Кто сегодня в гостях?","anchor":519}{"id":"llama1","type":"strip","video":"renders/llama_1.mov","anchor":1572,"until":1577,"tail":0.6}


















{"id":"lt_tatiana","type":"lower_third","speaker":"Татьяна","title":"Татьяна Тарасенко","subtitle":"ведущая","anchor":590,"until":608}
shorts_gfx.html .plate · gfx.py
$V $S gfx --job $JOB # gfx/p_<имя>.png{"type":"half_overlay","kind":"number","kicker":"ОПРОС ВЦИОМ, 2025","title":"51 %","unit":"россиян","subtitle":"…"}{"type":"three_fifths_overlay","kind":"number","kicker":"ФАКТ № 1","title":"$900 тыс.",…}{"type":"three_fifths_overlay","kind":"list","viz":"bars","items":[{"text":"…","v":…,"anchor":…}]}{"type":"strip","series":{"label":"Приём","of":9,"n":1},"title":"…","scale":{"label":"МАНИПУЛЯЦИЯ","value":5,"max":5,"verdict":"СИЛЬНАЯ"},"items":[{"text":"СИЛЬНАЯ","anchor":9194}],"tail":0.45}




















viz_gen.py (v5){"type":"half_overlay","kind":"list","viz":"cards","kicker":"ТЕРМИН","title":"…","items":[{"text":"…","anchor":…}]}{"type":"three_fifths_overlay","kind":"list","viz":"steps","items":[…]}
{"type":"three_fifths_overlay","kind":"list","viz":"rows","items":[…]}




{"type":"three_fifths_overlay","kind":"compare","viz":"versus","left":{"title":"Прячет","text":"…","ok":true,"at":0.6},"right":{…}}



{"type":"three_fifths_overlay","kind":"list","viz":"graph","items":[{"text":"…","icon":"person","anchor":…}],"graph":{"center":"Один профиль","icon":"id","note":"…","note_at":8.36}}{"type":"half_overlay","kind":"formula","kicker":"МЕТРИКА","title":"ROMI","items":[…]}{"type":"three_fifths_overlay","kind":"statement","series":{"label":"Компонент","names":["Данные","Мозг","Руки"],"mode":"chain","n":1,"of":3},"title":"Данные","subtitle":"…"}

{"type":"strip","kind":"quote","viz":"quote","layout":"caption","compact":true,"kicker":"ЦИФРОВОЙ СЛЕД","title":"«…»","hl":"цифровые следы","anchor":1029,"until":1037}
{"type":"half_overlay","kind":"quote","viz":"quote","layout":"caption","kicker":"…","title":"«Половина денег на рекламу — впустую»"}{"type":"half_overlay","kind":"statement","layout":"caption","kicker":"…","title":"Цифровой паспорт","subtitle":"…"}{"id":"term_bern","type":"strip","video":"renders/term_bern.mov","anchor":7108,"until":7123} · HyperFrames yttrbm02-ident/term_bern







motion_gen.py (v6){"type":"three_fifths_overlay","kind":"statement","viz":"ui","ui":{"kind":"address","good":"mybank.example","bad":"rnybank.example","letter":"rn","bad_at":3.34}}{"type":"half_overlay","viz":"ui","ui":{"kind":"cookie",…}}
{"type":"three_fifths_overlay","kind":"list","viz":"ui","ui":{"kind":"pay",…}}правило канала: без ссылок
$V $S gfx --job $JOB # gfx/brand.pngВыпуск собирается кодом за одну ночь, если идти по этой дорожке. Константы канала — в шаблонах YTs/YTTRBM/templates/ (задание фильма и образцы экранов, выжатые из выпуска 02); меняются только гость, его речь и экраны-объяснения.
Дорожка выпуска 02 (08–09.10.2026): съёмка 07.10 → v1 ночью → правки Романа v2, v3, v4 → на YouTube 09.10 02:43. Что тормозило: правки структуры после рендера (три факта, глава про миллион) — их лучше решать на этапе Story.
Хронометраж выпуска 02 (39:33) как эталон. Время — ориентир: у нового выпуска своё, порядок и приёмы — те же.
| Время | Что | Экран · правило |
|---|---|---|
| 0:00–0:15 | Крючок: 6 фраз гостя из разных глав, по 1–2 предложения | полоса-цитата под каждой (strip · quote · compact), метка темы, выделенное слово; лица не закрывать |
| 0:15–0:22 | Заставка на дропе музыки, под ней фишка голосом («Андата, Андата, Андата») | ident 216 кадров: старая заставка 2,7 с → вспышка → неон «ТАРАБОРИМ», слоган 132 px, «ВЫПУСК NN · ГОСТЬ» 96 px, проход гостя |
| 0:22–2:35 | Глава 1 «Кто сегодня в гостях?»: Татьяна представляет гостя — три факта, Ксения объясняет название шоу | плашка главы · титр ведущей на первых словах · «ФАКТ № 1–3» (three_fifths · number) · name_reveal 6 с на словах о названии · титр гостя на первом ответе |
| 2:35–34:40 | 16 глав-вопросов по 1–4 минуты: от «следит ли телефон» до «как не поддаться рекламе» | плашка главы 3,2 с + общий план 75 кадров; на речь гостя — цифра · список · сравнение · схема · интерфейс (окно говорящего рядом); цитаты полосой; отсылка → «КТО ЭТО» |
| 5:28 · 14:00 · 39:09 | Лама — перебивка-фишка на иронии или «чуде» | наезд с общего плана (кам. 3), 3 с, 1–3 раза; как у Леонида в выпуске 1 |
| 34:40–35:23 | Блиц: Татьяна называет 9 приёмов маркетинга, Алексей оценивает | полоса на каждый: «ПРИЁМ N ИЗ 9» + тезис + шкала «МАНИПУЛЯЦИЯ x/5» заливается на слове гостя (tail 0,45) |
| 36:23–38:07 | «Что о нём скажут друзья?» — 5 качеств, затем «А анекдот будет?» | плашки глав; экранов минимум — лицо гостя |
| 38:07–39:33 | Призыв Ксении на прошлый выпуск (RapidBio, 600 млн) — органично, голосом | без финальной карточки и конечных заставок — их ставят в Studio; музыка — тихая подложка, гаснет с программой |
Главы в описании YouTube — те же вопросы (19 таймкодов). Названия глав пишутся как вопросы зрителя, а не темы: «Можно ли удалить себя из интернета?», а не «Удаление данных».
Экран — запись в {CODE}_screens_v1.json: type (раскладка), kind/viz (конструкция), anchor/until — номера слов расшифровки, пункты — на своих словах. Движок — gfx.py (докстринг — полный словарь).
| Раскладка (type) | Что это | Конструкции (viz / kind) | Поля |
|---|---|---|---|
| half_overlay · three_fifths_overlay | холст во весь кадр, говорящий в окне (кадр сдвигается лицом в окно) | rows · steps · cards · versus · number · bars · formula · graph · ui | kicker, title, subtitle, items[{text, anchor, icon}], hl, left/right{ok, at}, ui{kind…}, graph{center, note, note_at} |
| layout: caption (strip · half_overlay) | крупная подпись внизу поверх съёмки | quote · statement · series (chain|set) | kicker, title, hl, compact (хук), series{label, names, mode, n, of}, scale{label, value, max, verdict} |
| chapter_bar | затемнённый кадр с номером главы, 3,2 с | — | n, title, anchor; за ней общий план wide_open |
| lower_third | титр с именем на крупном плане | — | speaker, title, subtitle, anchor, until |
| strip + video | готовый рендер поверх кадра (альфа) или вставка | ident · name_reveal · term · llama | video: renders/….mov, anchor, until, tail; ident — sec insert_after_hook |
| layout: side | боковая панель на половину кадра, человек остаётся крупно | список | включается полем layout; в выпуске 02 не использован |
Длительность экрана — срок по словам (anchor → until) + tail (0,9 с, у блица 0,45). Пункты появляются на items[].anchor. Число считает от нуля только на экране ≥ 6 с. asof: '2025' — пометка «по состоянию на год».
cp ~/YTAI/YTs/YTTRBM/templates/cut_job.template.json $P/00_Setup/08_Cut/${CODE}_cut_job_v1.json # заменить {CODE} {PROJECT} {GUEST} {GUEST_ROLE} {COMPANY} {NN}
cp ~/YTAI/YTs/YTTRBM/templates/screens.template.json $P/00_Setup/08_Cut/${CODE}_screens_v1.json # якоря — номера слов нового выпуска; экраны на речь гостя — дописать
V=~/YTAI/environment/.venv_transcribe/bin/python; cd ~/YTAI/scripts/05_editing/0510_headless_cut
$V cut.py run --job $J --tag v1 --to edl # сюжет, вырезы, камеры
$V gfx.py mock --job $J --edl edl_v1.json # кадр фильма с экраном: проверить окно говорящего и текст
RENDERQ_BLOCK=1 $V cut.py run --job $J --tag v1 --from gfx --to join --par 6 --out $P/03_Exports/${CODE}_v1_4K.mp4 # экраны → картинка → склейка; очередь рендера общая$V upload_youtube.py --video … --privacy unlisted --sni-bypass --skip-dedup --expect-channel UCq2_llZGxDM3Tpao2k2T9Jw # лимит ~10 заливок в сутки: фильм первым python3 subs_words.py film --job-dir $P/00_Setup/08_Cut --audio edl_audio_v1.json --out … --json cues.json # фразы по смыслу → вычитка ru/en агентами → subs_apply.py → subs_upload.py $V shorts.py render --job $P/00_Setup/07_Shorts/${CODE}_shorts_job_motion.json # 16 шортсов моушном; --insta через reelcaps.py
UVI · драгоценные камни · движок — монтаж Сони — Premiere + After Effects (подписи.aep · названия глав_1 выпуск.aep · плашки для 7 и 8 глав.aep); v5–v7 — перерендер её проекта на 4K-оригиналах и правки кодом (08_Cut/v7_review: v7_docs · v7_color · v7_audio · v7_final). Вызов: python3 ~/YTAI/scripts/999_extra/ytuvi_kb_tab.py all (источник — YTs/YTUVI/templates/ytuvi_screens_v7.json). Updated 15 Oct 2026, 01:24. В библиотеке 238: 35 видов (34 роликами из финала YTUVI01 v7) и все 203 экрана фильма кадрами — по типам, в порядке фильма. Метка «AI image» — у исходника есть метка нейросети (C2PA/SynthID) или имя файла генератора; «AI image?» — признаки генератора без метки (имя md5_uuid, размер 1152×2048, ролик 5 с) — перед повтором проверить; «our code» — карты, документы, хвост. Ссылки Drive открываются участникам Shared Drive «YTUVI».


03_Exports/YTUVI01_v7_Corundum_Ruby.mp4 (13.10.2026) · шрифты — отчёты AE Сони 02_Edit/AE_Projects/*/…Report.txt · источник вкладки — YTs/YTUVI/templates/ytuvi_screens_v7.json🧱 Screens — the channel page /ytuvi/screens/ → 🧱 Screens kit on Google Drive — by kind: sources and 4K pieces (open to YTUVI Shared Drive members) → 🧱 Reference: YTUVI01 — editing and pre-edit → 🧱 Channel hub — /ytuvi/ → 🧱 Library — facts and pictures: 20 sources + book scans →
AE Сони «названия глав_1 выпуск.aep» → «глава NN <имя>.mov» поверх ролика украшений C5239.mp4 (5 планов)Drive: sources and 4K pieces ↗
глава 01 король самоцветов_новая.movDrive: 4K piece ↗
глава 2_анатомия цвета_новая.movDrive: 4K piece ↗
глава 3 техпаспорт рубина.movDrive: 4K piece ↗
глава 04 кому подходит рубин.movDrive: 4K piece ↗
глава 5 происхождение рубина.movDrive: 4K piece ↗
глава 6 рекорды аукционов.movDrive: 4K piece ↗
глава 7 искусственный рубин.movDrive: 4K piece ↗
глава 8 способы обработки.movDrive: 4K piece ↗
финал.movDrive: 4K piece ↗Premiere Сони: вложение «<подтема>» из 4–5 слоёв Graphic (Geologica SemiBold/Bold), вход по буквамDrive: sources and 4K pieces ↗
назад в прошлоеDrive: 4K piece ↗
символ властиDrive: 4K piece ↗
долина могокDrive: 4K piece ↗
легенды о рубинеDrive: 4K piece ↗
рубин правителейDrive: 4K piece ↗
двойники рубинаDrive: 4K piece ↗
рубины звездDrive: 4K piece ↗
что такое рубинDrive: 4K piece ↗
редкость рубинаDrive: 4K piece ↗
сеты из рубиновDrive: 4K piece ↗
потери при огранкеDrive: 4K piece ↗
свойства камняDrive: 4K piece ↗
как отличить подделкуDrive: 4K piece ↗
камень солнцаDrive: 4K piece ↗
кому не подходятDrive: 4K piece ↗
выбор камняDrive: 4K piece ↗
цвет и ценаDrive: 4K piece ↗
сертификат рубинаDrive: 4K piece ↗
могок и монг суDrive: 4K piece ↗
новые месторожденияDrive: 4K piece ↗
главное красотаDrive: 4K piece ↗
легендарные рубиныDrive: 4K piece ↗
астеризмDrive: 4K piece ↗
как создают рубинDrive: 4K piece ↗
натуральны/ искусственныйDrive: 4K piece ↗
где используютDrive: 4K piece ↗
6 способовDrive: 4K piece ↗
как сохарнить ценностьDrive: 4K piece ↗AE Сони «подписи.aep» (Chiron Sung HK Bold, сжат по горизонтали ~70 %) → «<слова>.mov»Drive: sources and 4K pieces ↗
2_!.movDrive: 4K piece ↗
тысячи лет.movDrive: 4K piece ↗
защищает.movDrive: 4K piece ↗
делает сильнее.movDrive: 4K piece ↗
дает власть.movDrive: 4K piece ↗
красная шпинель 2.movDrive: 4K piece ↗
редкие.movDrive: 4K piece ↗AE Сони «подписи.aep» → «<слова>.mov»Drive: sources and 4K pieces ↗
историческая ценность.movDrive: 4K piece ↗AE Сони «подписи.aep» → «<фраза>.mov»Drive: sources and 4K pieces ↗
геологическое чудо.movDrive: 4K piece ↗
fixx Linked Comp 47.movDrive: 4K piece ↗
растут в цене.movDrive: 4K piece ↗
заменителей нет.movDrive: 4K piece ↗
самое главное красота.movDrive: 4K piece ↗
вау.movDrive: 4K piece ↗
не биржевой товар.movDrive: 4K piece ↗
gpt_image_image_2026_08_22_15_57_53.png · искусственный рубин.movDrive: 4K piece ↗
в маленьких камнях ценности нет.movDrive: 4K piece ↗AE Сони «подписи.aep» + подпись GeologicaDrive: sources and 4K pieces ↗
не такой уж и обычный.movDrive: 4K piece ↗
путали рубин.movDrive: 4K piece ↗
разновидность корунда.movDrive: 4K piece ↗
кристаллический.movDrive: 4K piece ↗
цвет.movDrive: 4K piece ↗
маркетинг.movDrive: 4K piece ↗
рубин из мьянмы.mov · бирманский рубин.movDrive: 4K piece ↗
мозамбийский рубин.movDrive: 4K piece ↗
термообработка для цветных камней.movDrive: 4K piece ↗AE Сони «рубин_2.mov», «король самоцветов.mov»Drive: sources and 4K pieces ↗
рубин_2.movDrive: 4K piece ↗
король самоцветов.movDrive: 4K piece ↗AE Сони «голубиная кровь.mov»Drive: sources and 4K pieces ↗
голубиная кровь.movDrive: 4K piece ↗наш код 08_Cut/v7_review/v7_final.py: хвост +10 сDrive: sources and 4K pieces ↗
v7_final.py: хвостDrive: 4K piece ↗AE Сони «плашка Наталья», «плашка Алена» (названия глав_1 выпуск.aep)Drive: sources and 4K pieces ↗
плашка наталья.movDrive: 4K piece ↗
плашка наталья.movDrive: 4K piece ↗
исправленная плашка Алена.movDrive: 4K piece ↗Premiere Сони: вырезки Photoroom на бумаге + вложение-плашка (Graphic)Drive: sources and 4K pieces ↗
джулия робертсDrive: 4K piece ↗
эмили ратаковскиDrive: 4K piece ↗
Снимок экрана — 2026-08-20 в 20.04.53.png · пенелопа крусDrive: 4K piece ↗AE Сони «30 млн.mov», «35000000.mov», «34 млн_2.mov»Drive: sources and 4K pieces ↗
30 млн.movDrive: 4K piece ↗
Запись экрана — 2026-08-22 в 13.41.44.mov · 35000000.mov · 34 млн_2.movDrive: 4K piece ↗AE Сони «стрелка.mov» + числаDrive: sources and 4K pieces ↗
стрелка.movDrive: 4K piece ↗AE Сони «90-95.mov»Drive: sources and 4K pieces ↗
90-95.movDrive: 4K piece ↗MOGRT «Social Media 01» + «3.mov»; титр в кадре — малиновая сжатая антиква (заданный в MOGRT Bebas Neue Bold кириллицы не имеет)Drive: sources and 4K pieces ↗
Social Media 01Drive: 4K piece ↗
у Сони — картинка Codex / ChatGPT целиком (нейросеть). Для следующих фильмов — данные с источником, график кодом по ДНКDrive: sources and 4K pieces ↗
Изображение Codex 20 сент. 2026 г., 22_24_00.pngDrive: 4K piece ↗
ChatGPT Image 29 сент. 2026 г., 16_09_37.pngDrive: 4K piece ↗AE Сони «плашки для 7 и 8 глав.aep» → «N способ обработки.mov», «N искусственный рубин.mov»Drive: sources and 4K pieces ↗
1 искусственный рубин.movDrive: 4K piece ↗
дублет искусственный рубин.mov · дублетDrive: 4K piece ↗
2 искусственный рубин_новый.movDrive: 4K piece ↗
3 искусственный рубин_новый.movDrive: 4K piece ↗
1 способ обработки.movDrive: 4K piece ↗
2 способ обработки.movDrive: 4K piece ↗
3 способ обработки.movDrive: 4K piece ↗
4 способ обработки.movDrive: 4K piece ↗
исправленный_5 способ обработки.movDrive: 4K piece ↗
исправленное_6 способ обработки.movDrive: 4K piece ↗Premiere Сони: вложение «техпаспорт» (Graphic)Drive: sources and 4K pieces ↗
техпаспортDrive: 4K piece ↗AE Сони «описание.mov», «колокол свободы.mov»Drive: sources and 4K pieces ↗
описание.mov · Запись экрана — 2026-08-22 в 13.15.56.movDrive: 4K piece ↗
gpt_image_image_2026_08_22_13_42_11.png · колокол свободы.mov · колокол правки.movDrive: 4K piece ↗AE Сони «настояший.mov», «грели или нет.mov», «могок или.mov»Drive: sources and 4K pieces ↗
настояший.movDrive: 4K piece ↗
могок или.movDrive: 4K piece ↗
грели или нет.mov · разница в цене в разы.movDrive: 4K piece ↗AE Сони «рубин и красная шпинель.mov» + вырезки Photoroom; схемы — картинки CodexDrive: sources and 4K pieces ↗
gpt_image_image_2026_08_14_07_14_33-Photoroom.png · стрелка.movDrive: 4K piece ↗
рубин и красная шпинель.mov · gpt_image_image_2026_08_14_07_14_33-Photoroom.pngDrive: 4K piece ↗
Изображение Codex 20 сент. 2026 г., 23_13_28.pngDrive: 4K piece ↗
gpt_image_image_2026_08_22_08_08_14.pngDrive: 4K piece ↗
gpt_image_image_2026_08_22_17_08_18.pngDrive: 4K piece ↗
Изображение Codex 21 сент. 2026 г., 11_48_22.pngDrive: 4K piece ↗AE Сони «шпинель.mov», «натуральный.mov» / «искусственный.mov»Drive: sources and 4K pieces ↗
шпинель.movDrive: 4K piece ↗
искусственный.mov · натуральный.movDrive: 4K piece ↗у Сони — картинка ChatGPT (нейросеть), кружки — вырезки Photoroom. Для следующих фильмов — только настоящие фото с источником, как s161 (SSEF 27:15)Drive: sources and 4K pieces ↗
ChatGPT Image 29 сент. 2026 г., 08_35_55.pngDrive: 4K piece ↗
gpt_image_image_2026_08_22_17_49_44-Photoroom.png · GraphicDrive: 4K piece ↗
02_Edit/YTUVI01_v5_27-15_flux_synthetic_SSEF.pngDrive: 4K piece ↗AE Сони «новая формула.mov», «Cr_2 вариант.mov»Drive: sources and 4K pieces ↗
новая формула.movDrive: 4K piece ↗
Cr_2 вариант.movDrive: 4K piece ↗картинка ChatGPT/Codex + AE «стрелка.mov», «красный крест.mov», «давление-температура.mov»Drive: sources and 4K pieces ↗
ChatGPT Image 21 авг. 2026 г., 09_18_11-Photoroom.png · стрелка.movDrive: 4K piece ↗
ChatGPT Image 21 авг. 2026 г., 09_18_11-Photoroom.png · давление-температура.mov · красный крест.movDrive: 4K piece ↗
Изображение Codex 20 сент. 2026 г., 21_20_16.pngDrive: 4K piece ↗
Изображение Codex 20 сент. 2026 г., 21_22_31.pngDrive: 4K piece ↗
Изображение Codex 20 сент. 2026 г., 21_30_47.pngDrive: 4K piece ↗
gpt_image_image_2026_08_22_17_33_23.pngDrive: 4K piece ↗AE Сони «18 век.mov», «огюст вернель.mov» + вложение «огюст»Drive: sources and 4K pieces ↗
18 век.movDrive: 4K piece ↗
огюст вернель.movDrive: 4K piece ↗наш код: YTUVI01_karta_0N_*.mp4 (Natural Earth) + плашки-термины Сони поверхDrive: sources and 4K pieces ↗
YTUVI01_karta_02_mogok_i_mong_su_animatsiya_10s.mp4 · мьянмаDrive: 4K piece ↗
шахты.png · YTUVI01_karta_07_dolina_mogok_animatsiya_8s.mp4Drive: 4K piece ↗
YTUVI01_karta_02_mogok_i_mong_su_animatsiya_10s.mp4 · монг суDrive: 4K piece ↗
YTUVI01_karta_03_myanma_i_mozambik_animatsiya_9s.mp4 · мозамбик · мьянмаDrive: 4K piece ↗
YTUVI01_karta_05_vostochnaya_afrika_animatsiya_11s.mp4 · мозамбик · монтепуэзDrive: 4K piece ↗
YTUVI01_karta_04_tailand_kambodzha_vietnam_spisok_animatsiya_21s.mp4 · общая карта с отметками.png · таиландDrive: 4K piece ↗
YTUVI01_karta_04_tailand_kambodzha_vietnam_spisok_animatsiya_21s.mp4Drive: 4K piece ↗
YTUVI01_karta_06_birma_rubiny_kashmir_sapfiry_animatsiya_8.5s.mp4 · кашмирDrive: 4K piece ↗
YTUVI01_karta_05_vostochnaya_afrika_s_nadpisyami_8K.pngDrive: 4K piece ↗
YTUVI01_karta_01_obshchaya_karta_animatsiya_12s.mp4Drive: 4K piece ↗Premiere Сони: вложение «<термин>» из Graphic (Geologica Bold + Chiron Sung HK ExtraLight)Drive: sources and 4K pieces ↗
la-2p11fhczogvrzktggmuhkpfi.jpeg · лазер на рубине · mlrxyjcoh2uqbd2trnbdocu0tic.jpegDrive: 4K piece ↗
геммологическая лабораторияDrive: 4K piece ↗
плашка красныйDrive: 4K piece ↗
kling_3_turbo_video_2026_08_19_11_50_15.mp4 · корундDrive: 4K piece ↗
хромDrive: 4K piece ↗
титанDrive: 4K piece ↗
железоDrive: 4K piece ↗
сапфирDrive: 4K piece ↗
падпараджаDrive: 4K piece ↗
ШПИНЕЛЬDrive: 4K piece ↗
РУБЕЛЛИТDrive: 4K piece ↗
шкала моосаDrive: 4K piece ↗
хромDrive: 4K piece ↗
каратDrive: 4K piece ↗
флуористенцияDrive: 4K piece ↗
шелк · seedream5_image_2026_08_21_16_59_57.pngDrive: 4K piece ↗
нагревDrive: 4K piece ↗
синтетический рубинDrive: 4K piece ↗
шкалаDrive: 4K piece ↗
голубьDrive: 4K piece ↗
сотбисDrive: 4K piece ↗
астеризмDrive: 4K piece ↗
огюстDrive: 4K piece ↗
Запись экрана — 2026-08-22 в 21.33.48.mov · лазер на рубинеDrive: 4K piece ↗
improve_photo_image_2026_08_22_22_55_39.png · 17Drive: 4K piece ↗
гарри · Запись экрана — 2026-08-23 в 00.08.36.mov · картьеDrive: 4K piece ↗
Запись экрана — 2026-08-23 в 00.08.36.mov · картье · высокое искусствоDrive: 4K piece ↗AE Сони «помните загадку.mov» + MOGRT Call Out 01R/01L (задан Bebas Neue Bold, кириллицы нет — в кадре гротеск-замена)Drive: sources and 4K pieces ↗
помните загадку.movDrive: 4K piece ↗
Call Out 01R · Call Out 01LDrive: 4K piece ↗наш код 08_Cut/v7_review/v7_docs.py (время слова — words.json); документы v5 — 02_Edit/YTUVI01_v5_*.pngDrive: sources and 4K pieces ↗
02_Edit/YTUVI01_v5_10-58_GemTrack_SSEF_specimen.pngDrive: 4K piece ↗02_Edit/YTUVI01_v5_16-18_SSEF_ruby_report_specimen.pngDrive: 4K piece ↗02_Edit/YTUVI01_v5_16-59_SSEF_Gubelin_press_release_2015.pngDrive: 4K piece ↗
02_Edit/YTUVI01_v5_17-57_SSEF_report_specimens.pngDrive: 4K piece ↗Premiere Сони: эффект Crumple Fold Maker + записи экрана статейDrive: sources and 4K pieces ↗
Запись экрана — 2026-08-22 в 11.42.32.mov · Crumple Fold Maker · Запись экрана — 2026-08-22 в 11.46.43.movDrive: 4K piece ↗Premiere Сони: «новый призыв.mov» + YTUVI01_QR_uvi.ru_kartochka.png (QR → uvi.ru, utm_campaign=ytuvi01, проверен zbarimg)Drive: sources and 4K pieces ↗
новый призыв.mov · YTUVI01_QR_uvi.ru_kartochka.pngDrive: 4K piece ↗AE Сони «ста канала.mov»Drive: sources and 4K pieces ↗
ста канала.movDrive: 4K piece ↗Premiere Сони: кремовая подложка + кадр ~90 % кадраDrive: sources and 4K pieces ↗
videogen_video_2026_08_13_16_02_58.mp4Drive: 4K piece ↗
1.movDrive: 4K piece ↗
Запись экрана — 2026-08-14 в 06.56.43.movDrive: 4K piece ↗
ChatGPT Image 13 авг. 2026 г., 15_38_00-Photoroom.pngDrive: 4K piece ↗
seedream5_image_2026_08_19_21_25_29.pngDrive: 4K piece ↗
Снимок экрана — 2026-08-19 в 18.28.37.pngDrive: 4K piece ↗
seedream5_image_2026_08_19_21_31_39.pngDrive: 4K piece ↗
Запись экрана — 2026-08-19 в 18.36.46.movDrive: 4K piece ↗
Запись экрана — 2026-08-20 в 21.51.46.movDrive: 4K piece ↗
Graphic · REACH FOR THE STARS – CHANEL High Jewelry.mp4Drive: 4K piece ↗
GraphicDrive: 4K piece ↗
gpt_image_image_2026_08_23_20_19_18.pngDrive: 4K piece ↗
Gemfields_DDLondon_MRM_Headline-e1619792636599-scaled.jpgDrive: 4K piece ↗
Gems-Mozambique-1280x720-MAIN-20250129154647.jpgDrive: 4K piece ↗
gpt_image_image_2026_08_22_15_57_53.pngDrive: 4K piece ↗
Изображение Codex 21 сент. 2026 г., 10_37_33.png · GraphicDrive: 4K piece ↗
improve_photo_image_2026_08_22_23_10_46.png · improve_photo_image_2026_08_22_23_00_06.png · improve_photo_image_2026_08_22_22_58_22.pngDrive: 4K piece ↗
gpt_image_image_2026_08_23_08_42_52.pngDrive: 4K piece ↗
gpt_image_image_2026_08_23_10_32_13.pngDrive: 4K piece ↗
gpt_image_image_2026_08_23_10_49_04.png · gpt_image_image_2026_08_23_10_53_09.pngDrive: 4K piece ↗
simon_g_-_rubellite_diamond_necklace_(cinematic_frame) (2160p).mp4Drive: 4K piece ↗
16.23ct_rubellite_tourmaline_gemstone (1080p).mp4Drive: 4K piece ↗
Запись экрана — 2026-08-19 в 18.36.46.mov · Запись экрана — 2026-08-22 в 13.15.56.mov · Запись экрана — 2026-08-22 в 13.41.44.movDrive: 4K piece ↗Premiere Сони: PNG/JPG с маской-скруглением, влёт сбокуDrive: sources and 4K pieces ↗
Dronning_victoria.jpgDrive: 4K piece ↗
gpt_image_image_2026_08_19_15_50_11.png · 348365_600.jpgDrive: 4K piece ↗

ChatGPT Image 29 сент. 2026 г., 00_59_55.pngDrive: 4K piece ↗




gpt_image_image_2026_08_22_09_27_55.pngDrive: 4K piece ↗
gpt_image_image_2026_08_22_09_38_55.pngDrive: 4K piece ↗
Снимок экрана — 2026-08-22 в 09.20.20.pngDrive: 4K piece ↗
gpt_image_image_2026_08_22_19_49_28.pngDrive: 4K piece ↗
Изображение Codex 21 сент. 2026 г., 10_29_52.pngDrive: 4K piece ↗
gpt_image_image_2026_08_23_08_22_43.pngDrive: 4K piece ↗
Снимок экрана — 2026-08-23 в 00.27.01.png · Снимок экрана — 2026-08-23 в 00.27.22.pngDrive: 4K piece ↗
gpt_image_image_2026_08_23_09_42_06.png · gpt_image_image_2026_08_23_09_44_19.pngDrive: 4K piece ↗
Изображение Codex 21 сент. 2026 г., 10_59_58.pngDrive: 4K piece ↗Фильм смонтировала Соня (Premiere + After Effects), дальше мы перерендерили её проект на 4K-оригиналах и сделали правки Романа кодом. Подробно, с путями и кодом, — эталон /ytuvi/01/reference/ (файл YTs/YTUVI/YTUVI01_reference.md).
Хронометраж v7 (37:12) как образец. Порядок приёмов внутри глав — тот же у следующих камней, время — своё.
| Время | Глава | Экраны |
|---|---|---|
| 0:00–2:15 | Рубин или шпинель? — крючок в машине: загадка «где рубин, где шпинель», ответ — в самом конце | малиновые титры поверх головы · линия рынка · «РУБИН — а может, не такой уж и обычный» · «НАСТОЯЩИЙ / НЕТ» · плашки терминов · плашка «ВСТУПЛЕНИЕ · РУБИН › НАЗАД В ПРОШЛОЕ» |
| 2:15 | 01 · Король самоцветов | заставка главы · плашка Натальи · «ЗАЩИЩАЕТ ОТ ЗЛА / ДЕЛАЕТ СИЛЬНЕЕ / ДАЁТ ВЛАСТЬ» · карта Могока · карточки по бокам · звёзды и украшения UVI |
| 6:23 | 02 · Анатомия цвета | титры с подписью · схема «белый свет → хром» · «ДАВЛЕНИЕ + ТЕМПЕРАТУРА + ВРЕМЯ» · сеты в машине · огранка · GemTrack с наездом и подчёркиванием (10:58) |
| 11:17 | 03 · Техпаспорт рубина | список-карточка · термины: флуоресценция, шёлк, нагрев, синтетика |
| 12:57 | 04 · Кому подходит рубин | шкала Мооса · магазин и плашка Алёны · призыв с QR на 15:22 |
| 15:33 | 05 · Происхождение рубина | «ЦВЕТ» · «ЧТО ТАКОЕ ГОЛУБИНАЯ КРОВЬ?» · SSEF с линией (16:18) · пресс-релиз (16:59) · карты: Мьянма, Мозамбик, Восточная Африка, Таиланд, Кашмир · новости о санкциях · кафе «САМОЕ ГЛАВНОЕ — КРАСОТА» |
| 22:08 | 06 · Рекорды аукционов | суммы крупно ($30 300 000 · $34 800 000) · паспорт камня · Sotheby’s · астеризм |
| 25:00 | 07 · Искусственный рубин | панель «3 способа» n/3 · 1892–1902 и Вернейль · дублет · натуральный | искусственный · лазер Маймана · 17 jewels |
| 29:48 | 08 · Способы обработки | панель «6 способов» n/6 · 90–95 % · диффузия Ti | Be · Harry Winston, Cartier · «В МАЛЕНЬКИХ КАМНЯХ ЦЕННОСТИ НЕТ» |
| 34:54–37:12 | Финал | заставка «ФИНАЛ» · итог по местам на карте · призыв UVI.RU · «ПОМНИТЕ ЗАГАДКУ?» + выноски РУБИН · ШПИНЕЛЬ · 10 с макро рубина под «Fable» |
Главы на YouTube — короткие, без «Вступления»: 00:00 Рубин или шпинель? · 02:15 Король самоцветов · 06:23 Анатомия цвета · 11:17 Техпаспорт рубина · 12:57 Кому подходит рубин · 15:33 Происхождение рубина · 22:08 Рекорды аукционов · 25:00 Искусственный рубин · 29:48 Способы обработки.
Тот же список — §9 эталона /ytuvi/01/reference/ и задача премонтажа в хэндоффе YTUVI03.
cd ~/YTAI/scripts/05_editing/0515_editor_rerender python3 prgraph.py <prproj> <секвенция> <out.json> # лента → дорожки → клипы, вложения раскрыты, время на ленте и в источнике python3 avail.py # каждое медиа → где взять: папка монтажёра, наш оригинал или нигде python3 relink_v5.py plan | clone | write # перелинковка на 4K-оригиналы, сборка {CODE}_v{N}.prproj python3 cmp_versions.py OLD NEW OUT --fps 2 # кадр в кадр: где новая версия отличается
python3 v7_docs.py gem|ssef|press|all [--preview t] # документ из исходного PNG, наезд, линия на слове → заплатки ProRes python3 v7_color.py plan | preview <t> | render # окно на лицо: треки YuNet, Gain на план, ключ титров по цветам python3 v7_audio.py df | check | build | ab # замена речи в готовом миксе: микс + g·(чистая − речь Сони) python3 v7_final.py concat | final | light | verify # ffconcat → VT CBR 50M кусками → лайт HEVC 12M → проверка
subs_words.build → subs_apply.py → subs_qc.py → subs_upload.py # субтитры ru + en (08_Cut/v7_review/subs/) python3 05_Thumbnail/gpt/thumb_r1.py compose2 # обложки A/B/C: подложка ChatGPT + ведущая из кадра, ярче YT_BIND_IP=en0 python3 ~/YTAI/scripts/08_youtube/upload_youtube.py --video … --privacy unlisted --sni-bypass # по ссылке; публично — по слову Романа
python3 ~/YTAI/scripts/999_extra/ytuvi_kb_tab.py media | data | all # ролики и кадры из финала v7 + запись channels.YTUVI в kb_dna.json python3 scripts/site/gen_kb_claude.py && python3 scripts/site/gen_kb.py # пересобрать /kb/claude-visuals/ (в коммит — только её) python3 scripts/site/gen_ytuvi_screens.py && python3 scripts/site/gen_ytuvi_hub.py # /ytuvi/screens/ и главная /ytuvi/ из той же записи
Курс YTUVIE · «Лаборатория AI-контента» · движок — экраны — том HyperFrames uvie_hf (15 видов, 28 образцов на текстах курса), уроки — 0513_lesson_cut. Вызов: python3 screens_uvie_hf.py alpha --only ID (том 13_preprod/1304_visual_tz/uvie_hf, рендер — через очередь). В библиотеке 31: образцов тома v2 — 28 (ролики HyperFrames на настоящих текстах курса, 03.10), кадров «было v12» — 3. Ролики собранных уроков — в комнатах ревью курса.
13_preprod/1304_visual_tz/uvie_hf/kinds_v2.json — 15 видов, бренд, движение · том screens_uvie_hf.py · токены YTUVIE-S1_Preprod/03_Design/design_tokens.json🧱 Библиотека видов v1 (20.09, графитовые слайды) — архив; действующая система v2 — на этой вкладке →
{"kind": "title", "variant": "lesson", "layout": "over"} · screens_uvie_hf.py alpha --only title_lesson{"kind": "title", "variant": "block", "layout": "window"} · screens_uvie_hf.py alpha --only title_block{"kind": "legal", "variant": "meta", "layout": "lower"} · screens_uvie_hf.py alpha --only legal_meta
{"kind": "lower", "variant": "expert", "layout": "lower"} · screens_uvie_hf.py alpha --only lower_expert{"kind": "number", "variant": "count", "layout": "over"} · screens_uvie_hf.py alpha --only number_count{"kind": "number", "variant": "calc", "layout": "window"} · screens_uvie_hf.py alpha --only number_calc{"kind": "number", "variant": "limit", "layout": "window"} · screens_uvie_hf.py alpha --only number_limit{"kind": "chart", "variant": "ladder", "layout": "window"} · screens_uvie_hf.py alpha --only chart_ladder{"kind": "chart", "variant": "bars", "layout": "window"} · screens_uvie_hf.py alpha --only chart_bars

{"kind": "list", "variant": "numbered", "layout": "side"} · screens_uvie_hf.py alpha --only list_numbered{"kind": "list", "variant": "checklist", "layout": "side"} · screens_uvie_hf.py alpha --only list_checklist{"kind": "compare", "variant": "frames", "layout": "window"} · screens_uvie_hf.py alpha --only compare_frames{"kind": "compare", "variant": "before_after", "layout": "window"} · screens_uvie_hf.py alpha --only compare_before_after{"kind": "chain", "variant": "process", "layout": "window"} · screens_uvie_hf.py alpha --only chain_process{"kind": "chain", "variant": "path", "layout": "lower"} · screens_uvie_hf.py alpha --only chain_path{"kind": "chart", "variant": "curve", "layout": "window"} · screens_uvie_hf.py alpha --only chart_curve{"kind": "factory", "variant": "map", "layout": "window"} · screens_uvie_hf.py alpha --only factory_map{"kind": "factory", "variant": "route", "layout": "window"} · screens_uvie_hf.py alpha --only factory_route{"kind": "phrase", "variant": "quote", "layout": "over"} · screens_uvie_hf.py alpha --only phrase_quote{"kind": "phrase", "variant": "term", "layout": "over"} · screens_uvie_hf.py alpha --only phrase_term{"kind": "app", "variant": "chat", "layout": "window"} · screens_uvie_hf.py alpha --only app_chat{"kind": "app", "variant": "voice", "layout": "window"} · screens_uvie_hf.py alpha --only app_voice{"kind": "app", "variant": "avatar", "layout": "window"} · screens_uvie_hf.py alpha --only app_avatar{"kind": "app", "variant": "form", "layout": "window"} · screens_uvie_hf.py alpha --only app_form{"kind": "screen", "variant": "zoom", "layout": "window"} · screens_uvie_hf.py alpha --only screen_zoom{"kind": "doc", "variant": "blocks", "layout": "window"} · screens_uvie_hf.py alpha --only doc_blocks{"kind": "phones", "variant": "game", "layout": "window"} · screens_uvie_hf.py alpha --only phones_game{"kind": "homework", "variant": "task", "layout": "over"} · screens_uvie_hf.py alpha --only homework_taskСистема v2 (03.10.2026) — «сайт курса в движении» вместо статичных графитовых слайдов v12: 15 видов вместо 29, пять раскладок, у каждого вида — функция тома k_<вид>, поля данных и лимиты текста. Последний столбец — сколько экранов этого вида в карте всех 63 уроков.
| Вид | Что делает | Когда ставим | Когда — нет | Раскладки | В карте |
|---|---|---|---|---|---|
| ◆ Заставка урока | Открывает урок: номер, блок и название — как герой-блок сайта, с янтарным маркером под ключевым словом. | в начале каждого урока, на первых словах по теме (после приветствия); один раз на урок | середина урока — для смены темы внутри урока брать phrase или factory | поверх кадра · холст без спикера | 63 |
| ▦ Карта цеха | Сквозная навигация курса: контент-завод как цех из станций; текущая станция загорается, пройденные — с галочкой. Зритель всегда понимает, где он в курсе. | первый урок каждого блока; момент, когда эксперт объясняет устройство завода (1.1.1, 1.1.2); итог курса (8.2.1 — горят все) | любая другая цепочка (охваты → заявки…) — это chain | холст с окном спикера · холст без спикера | 15 |
| ▭ Плашка имени | Кто говорит: имя и дело эксперта. | 1.1.1 — первое появление; по решению — в первом уроке каждого блока | регалии и биография — их нет в 1.1.1 по карточке («подробно о себе — не здесь») | нижняя полоса | 8 |
| ❝ Фраза или термин | Главная мысль дословно или новое слово с короткой расшифровкой — кинетическая типографика. | дословная формулировка эксперта, которую нужно запомнить; новый термин (песочница, CPF, паспорт, «Конституция», GPTs) | цифра — number; перечисление — list; служебные слова (итог, переход, анонс) — не выносить | поверх кадра · нижняя полоса · панель 2 : 3 | 38 |
| № Цифра | Цифра, которую видно: счётчик, доля «N из M», шкала до лимита или расчёт по шагам. Сильная цифра — всегда инфографика, а не строка в списке. | любая цифра в речи: результат, лимит знаков, цена, количество; расчёт вслух | несколько ступеней роста — chart ladder; две цифры рядом для сравнения — chart bars или compare | поверх кадра · холст с окном спикера · панель 2 : 3 | 59 |
| ◇ Список и правила | Набор пунктов, которые эксперт перечисляет: каждый встаёт на своём слове, текущий выделен. | перечисление 3–6 пунктов: правила, требования, состав, ошибки | последовательность со связями — chain; документ по блокам — doc; задание участнику — homework | панель 2 : 3 · поверх кадра · холст с окном спикера | 56 |
| → Цепочка и путь | Как одно ведёт к другому: процесс со связями или путь по меню сервиса. | процесс из 3–5 звеньев (охваты → заявки → клиенты → прибыль); путь по меню, который эксперт проговаривает (Voices › Create Voice › Professional Voice Clone) | устройство всего завода — factory; ступени роста с числами — chart ladder | нижняя полоса · холст с окном спикера · поверх кадра | 45 |
| ▟ График | Рост, сравнение величин или удержание — данные, которые рисуются на глазах. | ступени (песочницы 200 → 500 000), сравнение 2–6 величин (просмотры, цены моделей), кривая удержания и пропуски первых 3 секунд | одна цифра — number | холст с окном спикера · холст без спикера | 9 |
| ⇄ Две стороны | Сравнение двух вариантов или «до → после». | два ролика (не пошёл / разлетелся), две настройки (Avatar IV / Avatar V, стабильность 100 / рабочая), текст до и после чек-листа, сырая генерация и смонтированный ролик | больше двух вариантов — chart bars или list | холст с окном спикера · холст без спикера | 47 |
| ◳ Живой интерфейс | Сервис в движении — мини-окно как на лендинге курса: печатается промпт, приходит ответ, жмётся кнопка, растёт волна голоса, идёт генерация аватара. Показывает суть действия, когда запись экрана мелкая, длинная или её нет. | эксперт рассказывает, что происходит в сервисе (ChatGPT, GPT-агент, ElevenLabs, HeyGen, Captions, NotebookLM, Threads, статистика Reels/YouTube/Telegram) | есть хорошая запись экрана и важны настоящие детали — screen; точные цифры чужого кабинета без записи — не выдумывать | холст с окном спикера · холст без спикера | 20 |
| ▣ Запись экрана в окне | Настоящая запись экрана эксперта в окне с шапкой сервиса, рядом окно спикера; рамка-лупа ведёт к месту, о котором речь, приватное размыто. | уроки-демо со скринкастом: эксперт показывает работу в сервисе | запись нечитаемая или её нет — app; одна кнопка или путь — chain path поверх | холст с окном спикера | 81 |
| ≣ Документ по блокам | Документ или промпт как устройство: блоки подсвечиваются по очереди, рядом — счётчик знаков до лимита. | паспорт проекта / продукта, «Конституция» (7 блоков), системный промпт (роль · паспорт · требования · примеры · язык), промпт сценариста, файл англицизмов | просто список — list | холст с окном спикера · панель 2 : 3 | 15 |
| ▯ Телефоны | Вертикальные ролики в телефонах: игра «где живой человек», форматы (видео сверху, в кружке), готовый ролик ученика. | показ рилсов и форматов; сравнение вертикальных роликов | один горизонтальный кадр — screen или compare frames | холст с окном спикера · холст без спикера | 4 |
| ✓ Задание | Домашнее задание узнаётся сразу: тёплая карточка «Подарок» из бренда, пункты отмечаются галочками. | уроки с заданием (ДЗ) — в момент, когда эксперт формулирует задание, и/или в конце | правила и требования внутри темы — list checklist | поверх кадра · панель 2 : 3 · холст с окном спикера | 17 |
| * Сноска РФ | Обязательная сноска при первом упоминании продуктов Meta в уроке. | первое упоминание Instagram, Reels, Facebook, Threads, Edits, Meta в речи урока или в кадре записи | повторные упоминания в том же уроке | нижняя полоса | 18 |
Поправки Романа после 03.10 (разбор урока 1.1.1, 05.10): сноска Meta — на всё время, пока Meta на экране, а не только при первом упоминании; в конце урока — карточка «Следующий урок» вместо «конца без графики»; музыки нет — только звуки экранов.
Кадр 4K (3840×2160). Экран рисует только графику: кадр камеры, окно спикера, запись экрана и ролики — дырки в альфе, их кладёт сборка урока.
| Раскладка | Что в кадре | Спикер | Виды |
|---|---|---|---|
| поверх кадра (over) | графика на свободной части кадра FX3 — слева, над стеной и ноутбуком (x 192…1700); спикер не двигается. На крупном ZV-E1 — только нижняя полоса | виден целиком | Заставка урока · Фраза или термин · Цифра · Список и правила · Цепочка и путь · Задание |
| нижняя полоса (lower) | полоса в нижней трети (y ≥ 1520) поверх кадра — плашка имени, путь по меню, короткая цепочка, сноска | виден целиком | Плашка имени · Фраза или термин · Цепочка и путь · Сноска РФ |
| панель 2 : 3 (side) | светлая панель #F2F3F1 на левые 40 % кадра (1536 px), кадр спикера сдвинут в правые 60 % (решение 26.09) | виден, по центру своей части | Фраза или термин · Цифра · Список и правила · Документ по блокам · Задание |
| холст с окном спикера (window) | светлый холст #F2F3F1 во весь кадр, спикер — в скруглённом окне справа (x 2928, y 300, 720 × 1260, радиус 48), содержимое — слева на 2544 px | виден в окне | Карта цеха · Цифра · Список и правила · Цепочка и путь · График · Две стороны · Живой интерфейс · Запись экрана в окне · Документ по блокам · Телефоны · Задание |
| холст без спикера (full) | только когда спикер не нужен 2–4 с: заставка блока, карта цеха, игра на телефонах | не виден — держать коротко | Заставка урока · Карта цеха · График · Две стороны · Живой интерфейс · Телефоны |
Разметка 03.10.2026 по реальной речи дублей (снятые уроки) и по карточкам (день 4): каждый якорь сверен дословно с речью, сводка course_map.py — ошибок 0. 495 экранов: A 392 обязательных, B 103 по желанию; ≈ 262 мин чистовика. «В черновике» — сколько экранов в собранном уроке дня 1 (комнаты ревью, 13.10): при сборке их стало больше плана. Каждый экран с якорем, раскладкой, содержимым и «зачем» — в course_screen_map.json (см. «Где лежит»).
| Урок | Название | Экранов · A | В черновике | Чистовик | Виды экранов |
|---|---|---|---|---|---|
| 1.1.1 | Зачем нужен контент-завод | 27 · A 18 | 47 (v1.6) | 17,4 мин | цифра 5 · список 4 · цепочка 3 · две стороны 3 · телефоны 2 · фраза 2 · график 2 · запись экрана 2 · плашка 1 · заставка 1 · сноска 1 · карта цеха 1 |
| 1.1.2 | Как собирается ролик и сколько стоит | 13 · A 9 | 20 (v1.3) | 7,7 мин | цифра 4 · карта цеха 4 · заставка 1 · сноска 1 · цепочка 1 · две стороны 1 · список 1 |
| 1.1.3 | Регистрации, оплата и думающая модель | 3 · A 3 | 4 (v1.3) | 1,3 мин | заставка 1 · задание 1 · цифра 1 |
| 2.1.1 | Три документа для всех агентов | 4 · A 3 | 7 (v1.2) | 1,6 мин | заставка 1 · плашка 1 · карта цеха 1 · список 1 |
| 2.1.2 | Паспорт проекта за одно интервью | 16 · A 13 | 23 (v1.2) | 8,6 мин | запись экрана 9 · заставка 1 · цепочка 1 · две стороны 1 · сноска 1 · цифра 1 · список 1 · документ 1 |
| 2.1.3 | Паспорт продукта: одна услуга | 11 · A 8 | 16 (v1.2) | 6,1 мин | запись экрана 4 · список 2 · цифра 2 · заставка 1 · две стороны 1 · документ 1 |
| 2.1.4 | Конституция: кто говорит в кадре | 14 · A 10 | 21 (v1.2) | 7,5 мин | запись экрана 7 · заставка 1 · цепочка 1 · список 1 · сноска 1 · фраза 1 · две стороны 1 · документ 1 |
| 2.1.5 | Лимит промпта и домашнее задание | 2 · A 2 | 3 (v1.2) | 0,7 мин | заставка 1 · задание 1 |
| 3.1.1 | Почему идея решает всё | 5 · A 3 | 9 (v1.2) | 1,8 мин | заставка 1 · плашка 1 · фраза 1 · карта цеха 1 · цифра 1 |
| 3.1.2 | Агент вместо чата: системный промпт | 23 · A 18 | 32 (v1.2) | 14,7 мин | цифра 5 · список 5 · две стороны 3 · запись экрана 2 · фраза 2 · документ 2 · заставка 1 · сноска 1 · интерфейс 1 · карта цеха 1 |
| 3.1.3 | Собираем агента в ChatGPT | 13 · A 12 | 21 (v1.2) | 7,2 мин | запись экрана 4 · цепочка 2 · заставка 1 · сноска 1 · две стороны 1 · интерфейс 1 · список 1 · документ 1 · цифра 1 |
| 3.1.4 | Докрутка агента: сто тем | 3 · A 3 | 4 (v1.2) | 0,7 мин | заставка 1 · задание 1 · цифра 1 |
| 3.2.1 | Темы из споров в Threads | 29 · A 19 | — | 17,9 мин | запись экрана 7 · цифра 5 · фраза 3 · цепочка 3 · две стороны 3 · документ 3 · список 3 · заставка 1 · сноска 1 |
| 3.2.2 | Задание: своё исследование Threads | 3 · A 3 | — | 0,6 мин | заставка 1 · сноска 1 · задание 1 |
| 3.3.1 | Сто тем из чужих подкастов | 15 · A 13 | — | 7,5 мин | запись экрана 6 · цифра 3 · заставка 1 · фраза 1 · сноска 1 · две стороны 1 · цепочка 1 · документ 1 |
| 3.3.2 | Пятьдесят подкастов своей ниши | 2 · A 2 | — | 0,5 мин | заставка 1 · задание 1 |
| 3.4.1 | Чужой хит как готовая логика | 5 · A 5 | — | 1,6 мин | заставка 1 · сноска 1 · цепочка 1 · запись экрана 1 · цифра 1 |
| 3.4.2 | Три задания и банк тем | 3 · A 3 | — | 0,6 мин | заставка 1 · сноска 1 · задание 1 |
| 4.1.1 | Из чего состоит рабочий сценарий | 22 · A 16 | — | 13,1 мин | список 6 · фраза 4 · цепочка 3 · сноска 2 · две стороны 2 · заставка 1 · карта цеха 1 · плашка 1 · интерфейс 1 · график 1 |
| 4.1.2 | Четыре правила текста для клона | 4 · A 4 | — | 2,4 мин | заставка 1 · цифра 1 · две стороны 1 · список 1 |
| 4.1.3 | Как устроен промпт сценариста | 14 · A 12 | — | 9,1 мин | цепочка 3 · документ 3 · запись экрана 2 · цифра 2 · заставка 1 · список 1 · сноска 1 · фраза 1 |
| 4.1.4 | Собираем агента-сценариста в ChatGPT | 6 · A 5 | — | 3,1 мин | цепочка 2 · запись экрана 2 · заставка 1 · две стороны 1 |
| 4.1.5 | Три сценария и разбор по слоям | 3 · A 2 | — | 0,8 мин | заставка 1 · задание 1 · цифра 1 |
| 4.2.1 | Сценарий по чужой расшифровке | 7 · A 7 | — | 4,1 мин | две стороны 2 · заставка 1 · запись экрана 1 · документ 1 · список 1 · цепочка 1 |
| 4.2.2 | Прогон промпта на экране | 6 · A 5 | — | 3,4 мин | запись экрана 3 · заставка 1 · две стороны 1 · цепочка 1 |
| 4.2.3 | Задание: пачка по чужим расшифровкам | 2 · A 2 | — | 0,8 мин | заставка 1 · задание 1 |
| 4.3.1 | Усиление сценария: где теряется зритель | 8 · A 7 | — | 4,2 мин | фраза 2 · список 2 · график 2 · заставка 1 · сноска 1 |
| 4.3.2 | Цифровой двойник аудитории | 4 · A 4 | — | 2,4 мин | запись экрана 2 · заставка 1 · график 1 |
| 4.3.3 | Проверка вслух и типичные ошибки | 2 · A 2 | — | 0,5 мин | заставка 1 · задание 1 |
| 4.4.1 | Англицизмы и ИИ-паттерны | 5 · A 4 | — | 3,1 мин | заставка 1 · цепочка 1 · цифра 1 · список 1 · фраза 1 |
| 4.4.2 | Подключите чек-лист к агенту | 2 · A 2 | — | 0,9 мин | заставка 1 · задание 1 |
| 4.5.1 | Текстовый контент-завод: четыре площадки | 10 · A 6 | — | 5,6 мин | фраза 2 · список 2 · цепочка 2 · две стороны 2 · заставка 1 · карта цеха 1 |
| 4.5.2 | Агент на посты в Telegram | 5 · A 5 | — | 2,4 мин | запись экрана 2 · две стороны 2 · заставка 1 |
| 4.5.3 | Задание: свой агент на посты | 2 · A 2 | — | 0,8 мин | заставка 1 · задание 1 |
| 4.6.1 | Агент на статьи в блог | 6 · A 5 | — | 3,4 мин | запись экрана 3 · заставка 1 · документ 1 · цепочка 1 |
| 4.6.2 | Задание: своя статья в блог | 2 · A 2 | — | 0,4 мин | заставка 1 · задание 1 |
| 5.1.1 | Зачем записывать исходник | 4 · A 3 | — | 1,3 мин | заставка 1 · плашка 1 · карта цеха 1 · две стороны 1 |
| 5.1.2 | Требования к референсам | 20 · A 16 | — | 11,1 мин | цифра 6 · список 6 · две стороны 4 · фраза 3 · заставка 1 |
| 5.1.3 | Порядок работы в студии | 7 · A 5 | — | 4,0 мин | две стороны 2 · список 2 · заставка 1 · фраза 1 · цепочка 1 |
| 5.1.4 | Что требовать от студии | 4 · A 4 | — | 2,2 мин | список 2 · заставка 1 · две стороны 1 |
| 5.1.5 | Задание: записать референсы | 2 · A 2 | — | 0,5 мин | заставка 1 · задание 1 |
| 6.1.1 | Что умеет клон голоса | 5 · A 4 | — | 1,9 мин | заставка 1 · плашка 1 · запись экрана 1 · карта цеха 1 · цепочка 1 |
| 6.1.2 | Загружаем запись и создаём клон | 8 · A 5 | — | 0,8 мин | цифра 2 · цепочка 2 · заставка 1 · список 1 · запись экрана 1 · интерфейс 1 |
| 6.1.3 | Проходим верификацию и отправляем клон | 9 · A 8 | — | 1,7 мин | цифра 2 · цепочка 2 · заставка 1 · интерфейс 1 · список 1 · фраза 1 · запись экрана 1 |
| 6.1.4 | Задание: создать свой голос | 7 · A 4 | — | 0,4 мин | фраза 2 · заставка 1 · запись экрана 1 · задание 1 · цифра 1 · две стороны 1 |
| 6.2.1 | Озвучиваем текст своим голосом | 9 · A 8 | — | 6,1 мин | интерфейс 3 · запись экрана 2 · заставка 1 · список 1 · цифра 1 · фраза 1 |
| 6.2.2 | Паузы и настройки звучания | 5 · A 5 | — | 2,8 мин | запись экрана 2 · заставка 1 · цифра 1 · две стороны 1 |
| 6.2.3 | Задание: серия генераций | 2 · A 2 | — | 0,7 мин | заставка 1 · задание 1 |
| 7.1.1 | Аватар повторяет ваш исходник | 6 · A 4 | — | 2,1 мин | заставка 1 · карта цеха 1 · плашка 1 · запись экрана 1 · фраза 1 · цепочка 1 |
| 7.1.2 | Загружаем дубль, создаём аватар | 9 · A 6 | — | 2,7 мин | список 2 · запись экрана 2 · заставка 1 · две стороны 1 · цифра 1 · цепочка 1 · интерфейс 1 |
| 7.1.3 | Согласие и проверка HeyGen | 6 · A 5 | — | 1,7 мин | интерфейс 2 · цифра 2 · заставка 1 · запись экрана 1 |
| 7.1.4 | Добавляем образы к аватару | 7 · A 6 | — | 2,4 мин | цифра 2 · заставка 1 · цепочка 1 · запись экрана 1 · две стороны 1 · интерфейс 1 |
| 7.1.5 | Быстрая генерация по аудио | 8 · A 8 | — | 4,2 мин | запись экрана 2 · две стороны 2 · заставка 1 · цепочка 1 · интерфейс 1 · сноска 1 |
| 7.1.6 | Настройки генерации и артефакты | 7 · A 7 | — | 5,4 мин | запись экрана 2 · заставка 1 · цепочка 1 · две стороны 1 · интерфейс 1 · телефоны 1 |
| 7.1.7 | Задание: образы и рабочая настройка | 2 · A 2 | — | 0,8 мин | заставка 1 · задание 1 |
| 8.1.1 | Что монтаж делает с аватаром | 7 · A 4 | — | 2,8 мин | фраза 2 · заставка 1 · плашка 1 · карта цеха 1 · две стороны 1 · список 1 |
| 8.1.2 | Сборка ролика в Captions | 11 · A 9 | — | 8,7 мин | интерфейс 5 · цепочка 2 · заставка 1 · список 1 · две стороны 1 · фраза 1 |
| 8.2.1 | Что у вас теперь есть | 6 · A 4 | — | 3,5 мин | заставка 1 · карта цеха 1 · запись экрана 1 · список 1 · фраза 1 · цепочка 1 |
| 8.2.2 | Модели завода и цены | 14 · A 10 | — | 9,6 мин | список 3 · график 2 · цифра 2 · фраза 2 · заставка 1 · телефоны 1 · интерфейс 1 · сноска 1 · две стороны 1 |
| 8.2.3 | Оператор контент-завода | 6 · A 5 | — | 3,1 мин | заставка 1 · две стороны 1 · цепочка 1 · цифра 1 · запись экрана 1 · фраза 1 |
| 8.2.4 | Аналитика рилсов: что чинить | 14 · A 10 | — | 11,4 мин | запись экрана 3 · цепочка 3 · фраза 2 · заставка 1 · сноска 1 · список 1 · график 1 · цифра 1 · две стороны 1 |
| 8.2.5 | Пять задач после курса | 5 · A 4 | — | 3,3 мин | заставка 1 · список 1 · две стороны 1 · запись экрана 1 · цифра 1 |
| 8.2.6 | Как получить сертификат | 4 · A 3 | — | 2,3 мин | заставка 1 · запись экрана 1 · задание 1 · цифра 1 |
Уроки блока 2 (паспорта и «Конституция») целиком про переписку с ChatGPT. По кругам Романа 15–16.10 переписка идёт живой записью экрана крупно и синхронно с речью, в одном окне, как в ChatGPT, и помогает понять, что он вводит и что выходит. Кадры из итога 2.1.2 v6 (4K), клик открывает крупно. Движок: 0513_lesson_cut/sc_live.py (окно, камера, подсветки, текст диктовки) и том screens_uvie_hf.py (плашка, кольцо микрофона).
live_check.py path|sheet; мигание текста — blink_check.pyqc_final.py: вспышки, стыки, звук, каждое слово звучитКаждая ошибка нашлась в комнате ревью или ночной проверкой; исправление стоит в движке, а не в одном уроке.
cd ~/YTAI/scripts/13_preprod/1304_visual_tz/uvie_hf python3 screens_uvie_hf.py list # образцы python3 screens_uvie_hf.py shot --only number_calc # кадры Chrome без рендера (1920×1080) → hf/snapshots/ python3 screens_uvie_hf.py posters --force # постеры в финальном состоянии → media/<id>.jpg python3 screens_uvie_hf.py check # hyperframes lint + check: контраст, раскладка, движение python3 screens_uvie_hf.py render # превью mp4 1280×720 через 999_extra/render_queue.py python3 screens_uvie_hf.py alpha --only title_lesson # боевой клип: ProRes 4444 с альфой, 3840×2160 25p
python3 course_map.py && python3 screens_page.py # сводка 7 групп → course_screen_map.json; страница screens_v2/index.html~/.local/bin/rya-render batch <папка> screens_v2/media/*.mp4 --v="-vf scale=960:-2,fps=25,format=yuv420p -c:v libx264 -preset slow -crf 26 -movflags +faststart" --a="-an" --ext mp4 # ролики для страницы python3 ~/YTAI/_work/ytuvie_kb_tab/build_tab.py media --wt <worktree> --clips <папка> # ролики и постеры → web/kb/claude-visuals/media/ytuvie_* python3 ~/YTAI/_work/ytuvie_kb_tab/build_tab.py data --wt <worktree> # channels.YTUVIE → web/_data/kb_dna.json python3 scripts/site/gen_kb_claude.py && python3 scripts/site/gen_kb.py # из worktree сайта; потом push в main
Multiple Sclerosis (EN) · движок — в v3 — After Effects монтажёра (исходники у него); кодом — overlay-риг + HyperFrames/GSAP · навык talking-head-recut. В библиотеке 26: роликов фильма 20, образцов в ДНК 6.
YTAI_Templates/YTMSEN/YTMSEN_Templates.html (T9) · фильм: YTMSEN01 v3, 9:54, 4K 25pkb_screens: tpl title · s-ytmsen центрирует, <b> — мятнымrecut: overlay-титр · GSAP: вход маской, вспышка-переходHyperFrames: сетка video-окон + GSAP stagger; титул — tpl titlekb_screens: tpl lower · s-ytmsen: капсула по центруrecut: lower-third (фото + имя) · GSAP вход разворотомkb_screens: tpl chapbar · дуга — SVG stroke-dashoffsetSVG-кольцо: дуга по N/M, счёт — GSAP snaprecut: side-panel · добор по словам транскриптаrecut: панель + video-окно в рамке acc, клип слоемSVG лайн-иконки + стрелки, GSAP stagger; статика — /infographickb_screens: tpl comparerecut: compare-таблица · печать ячеек по таймингуSVG path + GSAP draw, легенда слоями; цвет — /datavizSVG-дерево: ветки stroke-draw по одной (GSAP timeline)recut: окно говорящего, 2 позиции, вход слайдом за крайSVG цепочка состояний + календарь; вывод — typewritertpl quote как база; окно стока — video-слой в рамкеtpl term / формула: два поля + «=», цвет второй частиrecut: side-alert · SVG-иконки (сирена, «!», ✓), цвет по роли ДНКSVG шкала + фигурки (/infographic); формула — строки с акцентомkb_screens: tpl disclaimer · blur — backdrop-filterrecut: blur-слой + карточка; текст утверждён — менять целикомHTML-рамки A/B + SVG-стрелки по точкам; снимки — лицензированныесток 3D слоем или Three.js на шкале (адаптер hf-seek); подпись — overlayrecut: стек алертов warn → итог в мятной рамкеkb_screens: tpl end · в фильм — recut end-screen 15–20 сСтарость в радость · движок — 0512_reversion/gfx.py: cta_svr · lower_svr · end_svr · навык talking-head-recut. Вызов: $V $S/screens_page.py (превью) · $V $S/inserts.py video CODE (рендер). В библиотеке 5: роликов фильма 5, образцов в ДНК 0.
YTs/YTAgeFree/brand_profile.json (гид фонда СВР) · логотипы — YTs/YTAgeFree/brand/logo/ · экраны — 0512_reversion/gfx.py: cta_svr · lower_svr · end_svr · шортсы — YTs/YTAgeFree/shorts_gfx.html0512_reversion: plates.P1 в YTAgeFree12_reversion_edl_v1.json0512_reversion gfx.lower_svr(…, 'knock')0512_reversion gfx.cta_svr · QR qrencode → zbarimg
0512_reversion gfx.end_svr
07_shorts/0701_finished · YTs/YTAgeFree/shorts_gfx.htmlOn the Dotted Line · движок — фильм кодом на двух движках: YTUAE02 — 0511_doc_cut (story → picture → gfx.py с темой ytuae и брендом dotted_line → sound → conform), YTUAE01 — 0514 (план реплик → экраны screens_v1.py + визуалы viz_v4.py по меткам слов → основа без экранов + наложение кусками render_v1.py → master.py); вставки и панели обоих — HTML + GSAP + MapLibre (render.mjs). Вызов: YTUAE02: $V gfx.py build --job YTUAE02_cut_job.json --tag v1 · YTUAE01: _tools/screens_v1.py build|render, _tools/viz_v4.py plan|render --only <id> · вставка: node render.mjs inserts/<id>/index.html --dur N [--check-only] [--scale 2]. Обновлено 18 окт 2026, 19:51. В библиотеке 237 экранов из ИТОГОВЫХ версий двух фильмов — YTUAE01 «The $3M lesson» v7 (126) и YTUAE02 «From box boy to Forever 21» v8 (111): по типам, внутри типа — по видам (39: каждый первым роликом с рецептом), внутри вида — все его экраны из обоих фильмов в порядке фильма. Вставки и панели — роликами (110 роликов), экраны темы — кадром. Строка «как» — рецепт повтора. Сборщик — ~/YTAI/_work/ytuae_kb_tab/build_tab_v2.py.
~/YTAI/scripts/05_editing/0511_doc_cut/gfx_ytuae.py (тема экранов, бренд dotted_line) · бренд YTs/YTUAE/brand/brand_motion.md + concept_on_the_dotted_line.md · YTUAE01 — 08_Cut/_tools/screens_v1.py, viz_v4.py, реестры v4_assets/viz/*.json · вставки — 02_Edit/HyperFrames/ytuae0N-v3-inserts/ (lib: runtime.js, base.css, map_world.js, map_city.js)🧱 Комната ревью YTUAE01 — v4…v7, круги правок с кадрами «было / стало» → 🧱 Комната ревью YTUAE02 — v1…v8 → 🧱 Страница фильма YTUAE01 → 🧱 Страница фильма YTUAE02 → 🧱 Канал On the Dotted Line — концепт и правила точек →
08_Cut/YTUAE01_film_v1_screens.json: {"id": "title", "kind": "title", "text": "THE $3M|*LESSON*", "caption": "IGOR KALOSHIN · ANGELSDECK", "at": 0.0, "dur": 4.2, "beat_t": 0.35} → _tools/screens_v1.py build --only title → screens_v1.py render --only title (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE02_gfx_v1.json: {"id": "title", "type": "title", "dur": 5.0, "b": "hook"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch04", "kind": "chapter", "n": 4, "text": "How do you lose $3M on a product everyone loves?", "at": 0.9, "dur": 3.3, "spill": true, "vignette": 0.5, "track": {"i": 4, "n": 14}} → _tools/screens_v1.py build --only ch04 → screens_v1.py render --only ch04 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch01", "kind": "chapter", "n": 1, "text": "Who backs 180 startups?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 1, "n": 14}} → _tools/screens_v1.py build --only ch01 → screens_v1.py render --only ch01 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch02", "kind": "chapter", "n": 2, "text": "What makes a unicorn?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 2, "n": 14}} → _tools/screens_v1.py build --only ch02 → screens_v1.py render --only ch02 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch03", "kind": "chapter", "n": 3, "text": "Why do 9 out of 10 startups fail?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 3, "n": 14}} → _tools/screens_v1.py build --only ch03 → screens_v1.py render --only ch03 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch05", "kind": "chapter", "n": 5, "text": "How do you get in front of an investor?", "at": 1.5, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 5, "n": 14}} → _tools/screens_v1.py build --only ch05 → screens_v1.py render --only ch05 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch06", "kind": "chapter", "n": 6, "text": "Why build it in the UAE?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 6, "n": 14}} → _tools/screens_v1.py build --only ch06 → screens_v1.py render --only ch06 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch07", "kind": "chapter", "n": 7, "text": "What do investors actually want to hear?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 7, "n": 14}} → _tools/screens_v1.py build --only ch07 → screens_v1.py render --only ch07 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch08", "kind": "chapter", "n": 8, "text": "Can a home grow without losing its soul?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 8, "n": 14}} → _tools/screens_v1.py build --only ch08 → screens_v1.py render --only ch08 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch09", "kind": "chapter", "n": 9, "text": "What if your business isn't a startup?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 9, "n": 14}} → _tools/screens_v1.py build --only ch09 → screens_v1.py render --only ch09 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch10", "kind": "chapter", "n": 10, "text": "Does venture capital really pay off?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 10, "n": 14}} → _tools/screens_v1.py build --only ch10 → screens_v1.py render --only ch10 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch11", "kind": "chapter", "n": 11, "text": "Can a startup change the world?", "at": 0.0, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 11, "n": 14}} → _tools/screens_v1.py build --only ch11 → screens_v1.py render --only ch11 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch12", "kind": "chapter", "n": 12, "text": "Where is the money going next?", "at": 1.6, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 12, "n": 14}} → _tools/screens_v1.py build --only ch12 → screens_v1.py render --only ch12 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch13", "kind": "chapter", "n": 13, "text": "Quick-fire", "at": 0.0, "dur": 3.2, "spill": true, "vignette": 0.5, "track": {"i": 13, "n": 14}} → _tools/screens_v1.py build --only ch13 → screens_v1.py render --only ch13 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "ch14", "kind": "chapter", "n": 14, "text": "Islands without AI", "at": 1.5, "dur": 3.6, "spill": true, "vignette": 0.5, "track": {"i": 14, "n": 14}} → _tools/screens_v1.py build --only ch14 → screens_v1.py render --only ch14 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch2", "type": "chapter", "n": 1, "title": "HOW DOES A SUPPLIER BECOME THE PRESIDENT?", "dur": 4.0, "b": "c2"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch1", "type": "chapter", "n": 2, "title": "HOW DO YOU START FROM ZERO IN L.A.?", "dur": 4.0, "b": "c1"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch4", "type": "chapter", "n": 3, "title": "WHY DID PEOPLE KEEP COMING BACK?", "dur": 4.0, "b": "c4"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch5a", "type": "chapter", "title": "WHAT DOES HE LOVE ABOUT RETAIL?", "dur": 4.0, "b": "c5a", "n": 4} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch5", "type": "chapter", "n": 5, "title": "HOW BIG IS TOO BIG?", "dur": 4.0, "b": "c5"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch6", "type": "chapter", "n": 6, "title": "WHY DID HE LEAVE?", "dur": 4.0, "b": "c6"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch7", "type": "chapter", "n": 7, "title": "WHAT DO YOU DO AFTER YOU 'RETIRE'?", "dur": 4.0, "b": "c7"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch8", "type": "chapter", "n": 8, "title": "WHAT DOES HE LOOK FOR IN A FOUNDER?", "dur": 4.0, "b": "c8"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch3", "type": "chapter", "n": 9, "title": "WHY DUBAI AT 3 A.M.?", "dur": 4.0, "b": "c3"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch9", "type": "chapter", "n": 10, "title": "IS THE IMMIGRANT STORY STILL POSSIBLE?", "dur": 4.0, "b": "c9"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "ch10", "type": "chapter", "n": 11, "title": "WHAT MADE HIM HAPPIEST?", "dur": 4.0, "b": "c10"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE01_film_v1_screens.json: {"id": "qf1", "kind": "qf", "n": 1, "of": 6, "q": "The biggest mistake a founder ever made?", "at": 0.0, "dur": 5.0, "spill": false, "split": "left"} → _tools/screens_v1.py build --only qf1 → screens_v1.py render --only qf1 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qf2", "kind": "qf", "n": 2, "of": 6, "q": "Your own money instead of the fund’s — same portfolio?", "at": 1.4, "dur": 6.5, "spill": false, "split": "left"} → _tools/screens_v1.py build --only qf2 → screens_v1.py render --only qf2 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qf3", "kind": "qf", "n": 3, "of": 6, "q": "The most impressive pitch?", "at": 1.65, "dur": 2.65, "spill": true, "split": "left"} → _tools/screens_v1.py build --only qf3 → screens_v1.py render --only qf3 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qf4", "kind": "qf", "n": 4, "of": 6, "q": "Your thesis — without saying “AI” or “scalable”", "at": 0.0, "dur": 11.7, "spill": false, "split": "left"} → _tools/screens_v1.py build --only qf4 → screens_v1.py render --only qf4 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qf5", "kind": "qf", "n": 5, "of": 6, "q": "One portfolio company you’d co-found?", "at": 0.0, "dur": 7.6, "spill": false, "split": "left"} → _tools/screens_v1.py build --only qf5 → screens_v1.py render --only qf5 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qf6", "kind": "qf", "n": 6, "of": 6, "q": "The biggest red flag in a founder?", "at": 1.45, "dur": 5.6, "spill": false, "split": "left"} → _tools/screens_v1.py build --only qf6 → screens_v1.py render --only qf6 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.pyперебивки куска h_reel (11 с) — 7 строк {"on":"h_reel","at":…,"dur":…,"src":…,"t":…,"z","x","y"} в YTUAE02_broll_v1.json: Сибуя 0–4.0 (z1.5) · неон FOREVER 21 4.0–5.5 · Black Friday 2011 · Таймс-сквер 4K · Краков · Дели 2010 (клип берётся с t + 0,2 с) · AdGully 2013; музыка с 4,0 с (до неё — дождь Сибуи, Epidemic SFX); поверх 0,2–3,9 — экран g_hook_first (punch)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_hook_first", "kind": "punch", "on": "h_reel", "at": 0.2, "dur": 3.7, "pos": "low", "big": 380, "small": 210, "scrim": 0.55, "words": [{"t": "THE FIRST LONG-FORM", "s": "small", "_t": 0.15}, {"t": "INTERVIEW ON CAMERA", "s": "big", "br": true, "_t": 0.35}, {"t": "WITH THE FORMER PRESIDENT OF", "s": "small", "br": true, "_t": 0.6}, {"t": "FOREVER 21", "s": "gold", "_t": 0.8}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE02_gfx_v1.json: {"id": "g_low_alex_today", "kind": "lower", "on": "c8_01", "w": "stuff", "off": -0.5, "dur": 3.8, "side": "left", "maxw": 2000, "name": "ALEX OK · TODAY", "role": "Investor · co-founder, *Valex Solutions*"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE01_film_v1_screens.json: {"id": "lw_angela", "kind": "lower", "name": "Angela Brown", "role": "Founder, *House of OHM*", "side": "right", "at": 0.2, "dur": 4.6} → _tools/screens_v1.py build --only lw_angela → screens_v1.py render --only lw_angela (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_low_alex_delhi", "kind": "lower", "on": "h_reel", "at": 8.52, "dur": 1.4, "maxw": 2150, "name": "ALEX OK", "role": "PRESIDENT OF *FOREVER 21*", "name_px": 300, "role_px": 132, "box": {"left": 1640, "top": 1100}, "scrim": 0.45, "scrim_where": "right", "arrow": {"from": [0.43, 0.505], "to": [0.395, 0.27], "t0": 0.12, "t1": 1.1, "bend": 0.25, "bend_x": 0.055}} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_low_angela", "kind": "lower", "on": "i_01", "w": "my", "off": -0.1, "dur": 3.0, "side": "left", "maxw": 1700, "name": "ANGELA BROWN", "role": "Host · social entrepreneur"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_low_oliveyoung", "kind": "lower", "on": "c8_09b", "w": "Korean", "nth": 2, "off": -0.1, "dur": 3.3, "side": "left", "maxw": 1700, "name": "OLIVE YOUNG · SEOUL", "role": "Korea's largest beauty chain"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE02_gfx_v1.json: {"id": "g_q6_01", "kind": "lower", "on": "q6_01a", "at": 0.12, "dur": 7.4, "name": "ROMAN · PRODUCER", "role": "Sorry, guys: ask Alex about his exit, and how he's investing right now.", "name_px": 96, "role_px": 108, "maxw": 2700, "scrim": 0.6} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_q8_06", "kind": "lower", "on": "q8_06", "at": 0.12, "dur": 6.1, "name": "ROMAN · PRODUCER", "role": "Alex, a quick question: in what companies do you invest money after you exit?", "name_px": 96, "role_px": 108, "maxw": 2700, "scrim": 0.6} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE02_gfx_v1.json: {"id": "g_hit_first", "kind": "hit", "on": "h_02", "w": "work", "off": -0.88, "dur": 2.8, "t": "ALEX OK", "label": "PRESIDENT OF *FOREVER 21* · 2002–2020", "px": 560, "label_px": 150, "scrim": 0.8} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)I=$P/02_Edit/HyperFrames/ytuae01-v3-inserts; node $I/render.mjs $I/inserts/who_is_igor_v4/index.html --dur 8.6 --out renders_v4/who_is_igor_v4.mp4 [--scale 2] → перебивка в _tools/broll_v1.py (INSERTS / PAUSES_V) → план · источники — inserts/who_is_igor_v4/NOTES.md08_Cut/v4_assets/viz/b8_round7.json: {"id": "v67_pinscreen_intro", "type": "overlay", "split": "right", "beat": "b102", "at_w": "Pinscreen", "lead": 0.3, "until_w": "completely", "until_off": 1.5, "replaces": ["card_pinscreen"]} · метки слов: pinscreen, changing, film → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v67_pinscreen_intro/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v67_pinscreen_intro [--scale 2 для 4K] → renders_v4/v67_pinscreen_intro → панель справа: build_job переставляет героя в левую половину (split)I=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/chang_1984/index.html --dur 7.2 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/chang_1984.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c2_02", "w": "founder", "off": -0.4, "dur": 7.2, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/chang_1984.mp4", "t": 0.0} · источники — inserts/chang_1984/NOTES.md08_Cut/YTUAE02_gfx_v1.json: {"id": "g_hit_60k", "kind": "hit", "on": "h_03", "w": "60", "off": -0.18, "dur": 1.9, "t": "“60,000”", "label": "EMPLOYEES", "px": 620} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE02_gfx_v1.json: {"id": "g_stat_130m", "kind": "stat", "on": "c2_01", "w": "13", "off": -0.3, "dur": 5.2, "value": 130, "prefix": "$", "suffix": "M", "comma": false, "label": "IN 13 YEARS", "sub": "One Clothing — in his words", "side": "left", "count": {"w": "130"}} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE01_film_v1_screens.json: {"id": "st_10k", "kind": "stat", "value": 10000, "label": "EMIRATI ENTREPRENEURS", "sub": "national goal by *2030*", "side": "left", "split": "left", "at": 0.2, "dur": 11.0, "count": {"w": "10"}, "hard_end": true} → _tools/screens_v1.py build --only st_10k → screens_v1.py render --only st_10k (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_one_clothing", "kind": "stat", "on": "c1_15", "w": "started", "off": -0.8, "value": 1989, "from": 1989, "comma": false, "count_dur": 0.3, "label": "ONE CLOTHING", "sub": "his company starts supplying *Forever 21* — 7 stores", "side": "left", "count": {"w": "started"}, "dur": 3.92} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_stat_14", "kind": "stat", "on": "c5_03", "w": "14", "off": -0.3, "dur": 6.3, "value": 14, "comma": false, "label": "NEW COUNTRIES", "sub": "in one year — by his count · store records: 11 new countries in 2014", "side": "left", "count": {"w": "14"}} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_stat_10y", "kind": "stat", "on": "c8_07", "w": "10", "off": -0.3, "dur": 6.5, "value": 10, "comma": false, "label": "YEARS WITH ONE FUND", "sub": "*longer* than the average marriage, he jokes", "side": "left", "count": {"w": "10"}} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_stat_kbeauty", "kind": "stat", "on": "c8_09b", "w": "skincare", "off": -0.3, "dur": 5.0, "value": 2, "prefix": "$", "suffix": ".2B", "comma": false, "label": "K-BEAUTY → U.S.", "sub": "2025 · the #1 market for Korean cosmetics", "side": "left", "count": {"w": "skincare"}, "count_dur": 0.6} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v16_grid_5_95", "type": "overlay", "split": "right", "beat": "b021", "at_w": "product", "at_nth": 1, "lead": 0.3, "until_w": "scale", "until_off": 2.0, "replaces": ["ratio"]} · метки слов: product, five, m95, sales, scale → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v16_grid_5_95/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v16_grid_5_95 [--scale 2 для 4K] → renders_v4/v16_grid_5_95 → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v01_grid_90", "type": "insert", "beat": "b003", "at_w": "90", "at_nth": 0, "lead": 0.35, "until_w": "zombie", "until_off": 1.8, "replaces": ["h_90"]} · метки слов: n90, startups, fail, or, become, zombie → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v01_grid_90/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v01_grid_90 [--scale 2 для 4K] → renders_v4/v01_grid_90 → вставка на весь кадр08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v08_timeline_180", "type": "overlay", "split": "right", "beat": "b009", "at_w": "business", "lead": 0.35, "until_w": "deals", "until_off": 2.6, "params": {"tail": "hold"}, "replaces": ["pn_club", "st_180"]} · метки слов: club, deck, since, invested, n180, deals → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v08_timeline_180/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v08_timeline_180 [--scale 2 для 4K] → renders_v4/v08_timeline_180 → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v22_grid_legend", "type": "overlay", "split": "right", "beat": "b029", "at": 0.0, "until_w": "zombie", "until_off": 2.6, "replaces": ["pn_29"]} · метки слов: m90, fail, zombie, one → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v22_grid_legend/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v22_grid_legend [--scale 2 для 4K] → renders_v4/v22_grid_legend → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v40_field_10k", "type": "overlay", "split": "left", "beat": "b045", "at_w": "2030", "lead": 0.3, "until_w": "stories", "until_off": 2.0} · метки слов: y2030, ten, success → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v40_field_10k/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v40_field_10k [--scale 2 для 4K] → renders_v4/v40_field_10k → панель справа: build_job переставляет героя в левую половину (split)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_dots_125", "kind": "dots", "on": "c2_01b", "w": "Forever", "off": -0.2, "to_end": true, "n_from": 7, "n_to": 125, "label_from": "STORES", "label_to": "STORES", "grow": {"w": "125"}, "side": "left"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/v4_assets/viz/b5_rework.json: {"id": "hook_3m_v4", "type": "insert", "beat": "b001", "at_w": "spent", "lead": 0.35, "until_w": "$100K", "until_off": 2.3, "replaces_insert": ["hook_3m"]} · метки слов: spent, m3, million, earned, k100 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/hook_3m_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only hook_3m_v4 [--scale 2 для 4K] → renders_v4/hook_3m_v4 → вставка на весь кадр08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v26_bars_30x", "type": "overlay", "split": "right", "beat": "b033", "at": 0.0, "until_w": "30x", "until_off": 3.0, "replaces": ["st_30x"]} · метки слов: one, ten, give, back, x30 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v26_bars_30x/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v26_bars_30x [--scale 2 для 4K] → renders_v4/v26_bars_30x → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b5_rework.json: {"id": "hook_3m_v4_b067", "type": "insert", "beat": "b067", "at_w": "spent", "lead": 0.35, "until_w": "lesson", "until_off": 0.35, "replaces_insert": ["hook_3m"]} · метки слов: spent, m3, million, earned, k100 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/hook_3m_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only hook_3m_v4_b067 [--scale 2 для 4K] → renders_v4/hook_3m_v4_b067 → вставка на весь кадр08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v53_multiples", "type": "insert", "beat": "b081", "at_w": "looking", "at_nth": 0, "lead": 0.5, "until_w": "unicorns", "until_off": 1.4, "replaces": ["st_50x"]} · метки слов: looking, x50, least, star, unicorns → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v53_multiples/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v53_multiples [--scale 2 для 4K] → renders_v4/v53_multiples → вставка на весь кадр
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_chart_growth", "kind": "chart", "on": "c5_01", "w": "many", "off": -0.6, "dur": 8.7, "side": "left", "title": "FOREVER 21 *STORES*", "sub": "court filings · fiscal years", "bars": [{"x": "1989", "v": 7}, {"x": "2001", "v": 122}, {"x": "2005", "v": 370}, {"x": "2010", "v": 496}, {"x": "2015", "v": 769}, {"x": "2017", "v": 832, "c": "gold"}, {"x": "2019", "v": 794, "c": "alarm", "note": "CH. 11"}], "colw": 215} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v63_half_deal", "type": "overlay", "split": "right", "beat": "b110", "at_w": "clearly", "lead": 0.3, "until_w": "deal", "until_off": 1.5, "replaces": ["pn_proof"]} · метки слов: interest, customer, half, deal → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v63_half_deal/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v63_half_deal [--scale 2 для 4K] → renders_v4/v63_half_deal → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v09_whole_part", "type": "overlay", "split": "right", "beat": "b010", "at": 0.0, "until_w": "deal", "until_off": 1.5, "params": {"head": "continue"}, "replaces": ["st_80m"]} · метки слов: m75, m80, not, k300, per, deal → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v09_whole_part/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v09_whole_part [--scale 2 для 4K] → renders_v4/v09_whole_part → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v36_trust_bar", "type": "overlay", "split": "right", "beat": "b037", "at_w": "advise", "lead": 0.1, "until_w": "advice", "until_off": 1.0} · метки слов: one, time1, strong, second, time2, third, time3, not2, trust2 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v36_trust_bar/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v36_trust_bar [--scale 2 для 4K] → renders_v4/v36_trust_bar → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v13_jcurve_here", "type": "overlay", "split": "right", "beat": "b080", "at_w": "six", "lead": 0.25, "until_w": "grow", "until_off": 2.3, "params": {"part": "here"}, "replaces": ["pn_death"]} · метки слов: years, somewhere, middle, venture, cycle, invest, wait, grow → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v13_jcurve_here/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v13_jcurve_here [--scale 2 для 4K] → renders_v4/v13_jcurve_here → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v13b_jcurve_star", "type": "overlay", "split": "right", "beat": "b080", "at_w": "losses", "lead": 0.6, "until_w": "companies", "until_off": 1.5, "params": {"part": "star"}} · метки слов: losses, already, traction, star → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v13_jcurve_here/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v13b_jcurve_star [--scale 2 для 4K] → renders_v4/v13b_jcurve_star → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v18_market_box", "type": "insert", "beat": "b024", "at_w": "strong", "at_nth": 0, "lead": 0.3, "until_w": "growth", "until_off": 0.6, "params": {"variant": "compare"}} · метки слов: ability, scale, market, big, accommodate, growth → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v18_market_box/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v18_market_box [--scale 2 для 4K] → renders_v4/v18_market_box → вставка на весь кадрI=$P/02_Edit/HyperFrames/ytuae01-v3-inserts; node $I/render.mjs $I/inserts/fund_life/index.html --dur 7.2 --out renders_v4/fund_life.mp4 [--scale 2] → перебивка в _tools/broll_v1.py (INSERTS / PAUSES_V) → план · источники — inserts/fund_life/NOTES.md08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v29_market_box_gpu", "type": "insert", "beat": "b066", "at_w": "problem", "at_nth": 0, "lead": 0.3, "until_w": "big", "until_off": 2.4, "params": {"variant": "gpu"}, "replaces": ["pn_loved"]} · метки слов: problem, market, not, big → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v18_market_box/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v29_market_box_gpu [--scale 2 для 4K] → renders_v4/v29_market_box_gpu → вставка на весь кадр08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v61_two_curves_rounds", "type": "insert", "beat": "b105", "at_w": "unicorn", "at_nth": 0, "lead": 0.4, "until_w": "money", "until_off": 0.5, "params": {"variant": "rounds"}, "replaces": ["pn_rounds2"]} · метки слов: unicorn, many, rounds, investments, fuel, exponential, growth, rules, impossible, crazy, own → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v04_two_curves/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v61_two_curves_rounds [--scale 2 для 4K] → renders_v4/v61_two_curves_rounds → вставка на весь кадрI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/vertical_chain/index.html --dur 10.4 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/vertical_chain.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c2_06", "w": "believe", "off": 0.3, "dur": 10.42, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/vertical_chain.mp4", "t": 0.0} · источники — inserts/vertical_chain/NOTES.md08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v41_school_chain", "type": "insert", "beat": "b046", "at_w": "entrepreneurs", "at_nth": 0, "lead": 0.3, "until_w": "us", "until_off": 1.0} · метки слов: school, univ, founder, row → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v41_school_chain/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v41_school_chain [--scale 2 для 4K] → renders_v4/v41_school_chain → вставка на весь кадр08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v48_pay_chain", "type": "overlay", "split": "right", "beat": "b055a", "at_w": "happy", "lead": 0.7, "until_w": "building", "until_off": 1.6, "replaces": ["pn_pay"]} · метки слов: happy, ready, pay, money → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v48_pay_chain/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v48_pay_chain [--scale 2 для 4K] → renders_v4/v48_pay_chain → панель справа: build_job переставляет героя в левую половину (split)I=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/ai_supply_chain/index.html --dur 14.6 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/ai_supply_chain.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c7_08", "w": "AI", "off": 0.1, "dur": 14.6, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/ai_supply_chain.mp4", "t": 0.0} · источники — inserts/ai_supply_chain/NOTES.md08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v58_round_ladder", "type": "overlay", "split": "right", "beat": "b090", "at_w": "proof", "lead": 0.35, "until_w": "exit", "until_off": 3.2, "replaces": ["st_50k", "pn_rounds"]} · метки слов: proof, revenue, k50, follow, rounds, dynamics, five, six, row, exit → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v58_round_ladder/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v58_round_ladder [--scale 2 для 4K] → renders_v4/v58_round_ladder → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v54_funnel", "type": "overlay", "split": "right", "beat": "b082", "at_w": "startups", "lead": 0.0, "until_w": "opportunistic", "until_off": 2.0, "replaces": ["pn_demanding"]} · метки слов: less1, companies, unicorns, demanding, less2, opportunistic → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v54_funnel/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v54_funnel [--scale 2 для 4K] → renders_v4/v54_funnel → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v62_three_keys", "type": "overlay", "split": "right", "beat": "b109", "at_w": "capital", "lead": 0.3, "until_w": "profit", "until_off": 0.5, "params": {"part": 1}, "replaces": ["st_member"]} · метки слов: capital, accredited, m1, k200, annual → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v62_three_keys/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v62_three_keys [--scale 2 для 4K] → renders_v4/v62_three_keys → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v42_photo_tiles", "type": "overlay", "split": "right", "beat": "b048", "at_w": "classical", "lead": 0.6, "until_w": "technology", "until_off": 3.1, "replaces": ["cl_classic"]} · метки слов: classical, cafe, restaurant, warehouse, more, technology, course → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v42_photo_tiles/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v42_photo_tiles [--scale 2 для 4K] → renders_v4/v42_photo_tiles → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v44_scholarship", "type": "overlay", "beat": "b043", "at_w": "scholarship", "lead": 0.2, "until_w": "apartments", "until_off": 1.2} · метки слов: scholarship, provide, apartments → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v44_scholarship/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v44_scholarship [--scale 2 для 4K] → renders_v4/v44_scholarship → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b1_data_panels.json: {"id": "v62_three_keys_b", "type": "overlay", "split": "right", "beat": "b109", "at_w": "passion", "lead": 0.3, "until_w": "values", "until_off": 1.4, "params": {"part": 2}} · метки слов: passion, learning, decision, share, values → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v62_three_keys/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v62_three_keys_b [--scale 2 для 4K] → renders_v4/v62_three_keys_b → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b5_rework.json: {"id": "syndicate_v4", "type": "insert", "beat": "b012", "at_w": "syndicate", "lead": 0.35, "until_w": "fund", "until_off": 2.6, "replaces_insert": ["syndicate"]} · метки слов: syn, members, own, inv, not, unlike, classical, inst, fund → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/syndicate_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only syndicate_v4 [--scale 2 для 4K] → renders_v4/syndicate_v4 → вставка на весь кадр08_Cut/v4_assets/viz/b5_rework.json: {"id": "startup_vs_classic_v4", "type": "insert", "beat": "b022", "at_w": "2x", "lead": 0.3, "until_w": "100x", "until_off": 2.4, "replaces_insert": ["startup_vs_classic"]} · метки слов: rate, rate2, y1, y2, y3, five, x32, seven, x100 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/startup_vs_classic_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only startup_vs_classic_v4 [--scale 2 для 4K] → renders_v4/startup_vs_classic_v4 → вставка на весь кадр08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v46_talk_vs_hear", "type": "insert", "beat": "b052", "at_w": "love", "at_nth": 0, "lead": 0.45, "until_w": "attraction", "until_off": 4.3, "replaces": ["pn_love"], "replaces_insert": ["investors_want"]} · метки слов: love, p1, p2, p3, forget, simple, business, unit, traction → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v46_talk_vs_hear/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v46_talk_vs_hear [--scale 2 для 4K] → renders_v4/v46_talk_vs_hear → вставка на весь кадр08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v50_chef_stars", "type": "overlay", "split": "right", "beat": "b072", "at_w": "restaurant", "lead": -3.3, "until_w": "like", "until_off": 2.6, "replaces": ["pn_chef"]} · метки слов: food, repeat, success, clone, another, clone2, chief2, open, restaurant2, customers, dont, like → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v50_chef_stars/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v50_chef_stars [--scale 2 для 4K] → renders_v4/v50_chef_stars → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b5_rework.json: {"id": "school_cost_v4", "type": "insert", "beat": "b086", "at_w": "send", "lead": 0.3, "until_w": "year", "until_off": 3.0, "replaces_insert": ["school_cost"]} · метки слов: offline, cost, k100, year, online, fly, same, diploma, k5 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/school_cost_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only school_cost_v4 [--scale 2 для 4K] → renders_v4/school_cost_v4 → вставка на весь кадр08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v52_fork", "type": "overlay", "split": "right", "beat": "n08b", "at_w": "looks", "lead": 0.35, "until_w": "business", "until_off": 0.8, "params": {"part": 1}, "replaces": ["pn_classical"]} · метки слов: classical, venture, investors, investing, real, business3 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v52_fork/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v52_fork [--scale 2 для 4K] → renders_v4/v52_fork → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v21_two_outcomes", "type": "overlay", "split": "right", "beat": "n04", "at_w": "startup", "lead": 0.25, "until_w": "money", "until_off": 2.8, "replaces": ["pn_loss"]} · метки слов: startup, regular, business, forvc, venture, almost, loss, foryou, experience, money → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v21_two_outcomes/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v21_two_outcomes [--scale 2 для 4K] → renders_v4/v21_two_outcomes → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v51_two_roads", "type": "overlay", "split": "right", "beat": "b078", "at": 0.0, "until_w": "deserve", "until_off": 2.5, "replaces": ["pn_premium"]} · метки слов: hesitate, charge, premium, keep, environment, deserve → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v51_two_roads/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v51_two_roads [--scale 2 для 4K] → renders_v4/v51_two_roads → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v52_fork_b", "type": "overlay", "split": "right", "beat": "n08c", "at": 0.0, "until_w": "hungry", "until_off": 3.3, "params": {"part": 2}, "replaces": ["pn_hungry"]} · метки слов: investors, hungry, investments → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v52_fork/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v52_fork_b [--scale 2 для 4K] → renders_v4/v52_fork_b → панель справа: build_job переставляет героя в левую половину (split)I=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/fund_of_funds/index.html --dur 13.4 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/fund_of_funds.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c8_06", "at": 2.68, "dur": 13.4, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/fund_of_funds.mp4", "t": 2.68} · источники — inserts/fund_of_funds/NOTES.md08_Cut/v4_assets/viz/b5_rework.json: {"id": "unicorn_def_v4", "type": "insert", "beat": "b008", "at_w": "early", "lead": 0.1, "until_w": "become", "until_off": 0.55, "replaces_insert": ["unicorn_def"]} · метки слов: hope, point, climb, uni → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/unicorn_def_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only unicorn_def_v4 [--scale 2 для 4K] → renders_v4/unicorn_def_v4 → вставка на весь кадр08_Cut/v4_assets/viz/b8_round7.json: {"id": "v65_deep_tech", "type": "overlay", "split": "right", "beat": "b065", "at_w": "really", "lead": 0.3, "until_w": "technology", "until_off": 2.5, "replaces": ["pn_deeptech"]} · метки слов: deep, tech, potential → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v65_deep_tech/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v65_deep_tech [--scale 2 для 4K] → renders_v4/v65_deep_tech → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v33_venn_possible", "type": "overlay", "split": "right", "beat": "b069", "at_w": "product", "lead": 0.35, "until_w": "possible", "until_off": 1.5, "replaces": ["pn_possible", "still_b069_07"]} · метки слов: product, advances, meet, find, important, what2, possible → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v33_venn_possible/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v33_venn_possible [--scale 2 для 4K] → renders_v4/v33_venn_possible → панель справа: build_job переставляет героя в левую половину (split)I=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/never_newness/index.html --dur 20.84 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/never_newness.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c4_01b", "w": "never", "off": -17.14, "dur": 19.0, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/never_newness.mp4", "t": 0.0} · источники — inserts/never_newness/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/fund_of_funds/index.html --dur 3.0 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/fund_of_funds.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "b_fof", "at": 0.0, "dur": 3.0, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/fund_of_funds.mp4", "t": 16.08} · источники — inserts/fund_of_funds/NOTES.md08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v20_tournament", "type": "insert", "beat": "b028", "at_w": "everybody", "at_nth": 0, "lead": 0.35, "until_w": "game", "until_off": 2.4, "replaces": ["pn_math", "pn_kids", "pn_rule"]} · метки слов: everybody, wants, there, one, champion, n100, okay, rule, game → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v20_tournament/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v20_tournament [--scale 2 для 4K] → renders_v4/v20_tournament → вставка на весь кадр08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v11_memo_network", "type": "overlay", "split": "right", "beat": "b013", "at_w": "memo", "lead": 0.1, "until_w": "ever", "until_off": 1.9, "replaces": ["pn_neural"]} · метки слов: avail, review, investors, reviewing, learn, train, neural, faster → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v11_memo_network/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v11_memo_network [--scale 2 для 4K] → renders_v4/v11_memo_network → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b2_process_panels.json: {"id": "v12_school_of_investors", "type": "overlay", "split": "right", "beat": "b014", "at_w": "not", "lead": 0.0, "until_w": "investors", "until_off": 1.0, "replaces": ["pn_school"]} · метки слов: vehicle, school, investors → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v12_school_of_investors/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v12_school_of_investors [--scale 2 для 4K] → renders_v4/v12_school_of_investors → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b5_rework.json: {"id": "venture_math_v4", "type": "insert", "beat": "b030", "at_w": "the", "lead": 0.1, "until_w": "works", "until_off": 1.2, "replaces_insert": ["venture_math"]} · метки слов: ten, star, ret, money, invested, all10, extra, profit → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/venture_math_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only venture_math_v4 [--scale 2 для 4K] → renders_v4/venture_math_v4 → вставка на весь кадр08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v34_inbox", "type": "overlay", "split": "right", "beat": "b035", "at_w": "find", "lead": 0.45, "until_w": "know", "until_off": 2.3, "replaces": ["pn_cold"]} · метки слов: cold, email, linkedin, usually, work, strong, leader, order, strong2, know, closer, need2 → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v34_inbox/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v34_inbox [--scale 2 для 4K] → renders_v4/v34_inbox → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b5_rework.json: {"id": "reference_chain_v4", "type": "insert", "beat": "b036", "at_w": "trust", "lead": 0.35, "until_w": "reference", "until_off": 0.9, "replaces_insert": ["reference_chain"]} · метки слов: trust, advice, look, company, n95, portfolio, ref → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/reference_chain_v4/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only reference_chain_v4 [--scale 2 для 4K] → renders_v4/reference_chain_v4 → вставка на весь кадр08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v47_slide_shuffle", "type": "insert", "beat": "b054", "at_w": "founders", "at_nth": 0, "lead": 0.45, "until_w": "happy", "until_off": 3.0} · метки слов: not, product, all, start, pain, pain2, make, customer, happy → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v47_slide_shuffle/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v47_slide_shuffle [--scale 2 для 4K] → renders_v4/v47_slide_shuffle → вставка на весь кадрI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/supplier_merger/index.html --dur 17.04 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/supplier_merger.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c2_03", "at": 0.0, "dur": 17.04, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/supplier_merger.mp4", "t": 0.0} · источники — inserts/supplier_merger/NOTES.md08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v03_equation_hook", "type": "insert", "beat": "b002", "at_w": "good", "at_nth": 0, "lead": 0.4, "until_w": "fail", "until_off": 2.3, "params": {"variant": "hook"}, "replaces": ["h_market"]} · метки слов: good, product, path, market, might, fail → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v03_equation/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v03_equation_hook [--scale 2 для 4K] → renders_v4/v03_equation_hook → вставка на весь кадр08_Cut/v4_assets/viz/b4_explainers.json: {"id": "v30_equation_gpu", "type": "insert", "beat": "b067", "at_w": "good", "at_nth": 0, "lead": 0.6, "until_w": "fail", "until_off": 1.6, "params": {"variant": "gpu", "kicker": "The lesson"}, "replaces": ["pn_wrongmkt"]} · метки слов: good, product, path, market, might, fail → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v03_equation/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v30_equation_gpu [--scale 2 для 4K] → renders_v4/v30_equation_gpu → вставка на весь кадр08_Cut/YTUAE02_gfx_v1.json: {"id": "g_lockdown", "kind": "date", "on": "c6_03", "w": "last", "off": -0.4, "to_end": true, "side": "left", "steps": [{"top": "FEB 2020", "big": "LAST", "sub": "DAY AT FOREVER 21", "w": "February", "px": 360}, {"top": "MAR 19, 2020", "big": "STAY HOME", "sub": "CALIFORNIA LOCKS DOWN", "alarm": true, "w": "lockdown", "px": 250}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_chatgpt_date", "kind": "date", "on": "c7_01", "w": "check", "off": -0.3, "dur": 3.36, "side": "left", "steps": [{"top": "NOV 30, 2022", "big": "ChatGPT", "sub": "1 MILLION USERS IN 5 DAYS", "w": "check", "px": 250}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_dubai_2003", "kind": "date", "on": "c3_01", "w": "later", "off": -0.3, "dur": 4.0, "side": "left", "steps": [{"top": "NOV 2003", "big": "DUBAI", "sub": "FIRST MARKET OUTSIDE NORTH AMERICA", "w": "later", "px": 330, "sub_px": 100}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_clock", "kind": "date", "on": "c3_02", "w": "midnight", "off": -0.6, "dur": 7.0, "side": "left", "steps": [{"top": "LANDING", "big": "0:00", "sub": "AFTER MIDNIGHT", "w": "midnight"}, {"top": "CITY CENTRE", "big": "3 AM", "sub": "STILL OPEN", "w": "3"}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v15_calendar_a", "type": "overlay", "split": "right", "beat": "b019", "at_w": "work", "lead": 0.3, "until_w": "olympic", "until_off": -0.3, "params": {"part": 1}} · метки слов: work, sport, regular, business, okay → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v15_calendar/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v15_calendar_a [--scale 2 для 4K] → renders_v4/v15_calendar_a → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v15_calendar_b", "type": "overlay", "split": "right", "beat": "b020", "at_w": "startup", "lead": 0.6, "until_w": "training", "until_off": 1.2, "params": {"part": 2}, "replaces": ["pn_years"]} · метки слов: startup, need, five, seven, nine, years, extreme → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v15_calendar/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v15_calendar_b [--scale 2 для 4K] → renders_v4/v15_calendar_b → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v37_months", "type": "overlay", "split": "right", "beat": "b040a", "at_w": "try", "lead": 0.5, "until_w": "essential", "until_off": 0.6, "replaces": ["pn_month"]} · метки слов: try, least, one, time, twice, month → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v37_months/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v37_months [--scale 2 для 4K] → renders_v4/v37_months → панель справа: build_job переставляет героя в левую половину (split)I=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/exit_timeline/index.html --dur 8.0 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/exit_timeline.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "h_05", "at": 0.0, "dur": 8.0, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/exit_timeline.mp4", "t": 0.0} · источники — inserts/exit_timeline/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae01-v3-inserts; node $I/render.mjs $I/inserts/exits/index.html --dur 8.02 --out renders_v4/exits.mp4 [--scale 2] → перебивка в _tools/broll_v1.py (INSERTS / PAUSES_V) → план · источники — inserts/exits/NOTES.md08_Cut/YTUAE02_gfx_v1.json: {"id": "g_end_life", "kind": "life", "on": "end", "at": 0.0, "dur": 12.24, "title": "CONNECT THE DOTS · ALEX OK", "scrim": 0.8, "field": 420, "seed": 21, "next": {"dx": 520, "dy": -500, "label": "next", "ring": true, "ring_r": 54}, "what_px": 96, "when_px": 72, "label_w": 920, "dot_r": 24, "now_r": 38, "line_px": 12, "field_k": 1.15, "title_px": 76, "events": [{"when": "around age 8", "what": "Packs boxes in his|father's business", "x": 560, "y": 1180, "side": "below", "anchor": "l", "ax": 360, "at": 8.72}, {"when": "1987 · age 24", "what": "Box boy in|Los Angeles", "x": 1060, "y": 860, "side": "above", "at": 7.12}, {"when": "1989", "what": "His own company|supplies Forever 21", "x": 1540, "y": 1300, "side": "below", "at": 5.52}, {"when": "2002", "what": "President of|Forever 21", "x": 2000, "y": 900, "side": "above", "at": 3.92}, {"when": "2003 · Dubai", "what": "First store outside|North America", "x": 2420, "y": 1160, "side": "below", "at": 2.32}, {"when": "Today", "what": "Invests in founders|around the world", "x": 2800, "y": 880, "side": "below", "anchor": "l", "ax": -10, "at": 0.7}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)I=$P/02_Edit/HyperFrames/ytuae01-v3-inserts; node $I/render.mjs $I/inserts/v5_connect_dots/index.html --dur 11.0 --out renders_v4/v5_connect_dots.mp4 [--scale 2] → перебивка в _tools/broll_v1.py (INSERTS / PAUSES_V) → план · источники — inserts/v5_connect_dots/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/world_stores/index.html --dur 7.8 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/world_stores.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "h_03", "at": 0.0, "dur": 7.8, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/world_stores.mp4", "t": 0.0} · источники — inserts/world_stores/NOTES.md08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v43_mbzuai_world", "type": "insert", "beat": "b042", "at_w": "brought", "at_nth": 0, "lead": 0.4, "until_w": "globe", "until_off": 0.6, "replaces": ["pn_best"]} · метки слов: prof, globe, mbz, hired, stud → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v43_mbzuai_world/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v43_mbzuai_world [--scale 2 для 4K] → renders_v4/v43_mbzuai_world → вставка на весь кадрI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/brands_map/index.html --dur 10.0 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/brands_map.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c2_04", "w": "first", "off": -0.1, "dur": 10.0, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/brands_map.mp4", "t": 0.0} · источники — inserts/brands_map/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/sourcing_asia/index.html --dur 8.0 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/sourcing_asia.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c2_07", "w": "sourcing", "off": -0.48, "dur": 7.9, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/sourcing_asia.mp4", "t": 0.0} · источники — inserts/sourcing_asia/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/world_stores/index.html --dur 4.0 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/world_stores.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c5_01", "w": "countries", "off": -3.1, "dur": 4.0, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/world_stores.mp4", "t": 3.8} · источники — inserts/world_stores/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/art_basel_miami/index.html --dur 9.8 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/art_basel_miami.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c8_03", "w": "developers", "off": -1.9, "dur": 9.8, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/art_basel_miami.mp4", "t": 0.0} · источники — inserts/art_basel_miami/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/all_in_dubai/index.html --dur 8.56 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/all_in_dubai.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c8_11", "w": "From", "off": -3.17, "dur": 8.56, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/all_in_dubai.mp4", "t": 0.0} · источники — inserts/all_in_dubai/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/korea_la/index.html --dur 6.0 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/korea_la.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c1_01", "w": "Originally", "off": 0.0, "dur": 6.0, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/korea_la.mp4", "t": 0.0} · источники — inserts/korea_la/NOTES.md08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v55_flylane_map", "type": "insert", "beat": "b085", "at_w": "educated", "at_nth": 0, "lead": 0.5, "until_w": "Canada", "until_off": 3.5} · метки слов: lead, us, uk, ca → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v55_flylane_map/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v55_flylane_map [--scale 2 для 4K] → renders_v4/v55_flylane_map → вставка на весь кадрI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/korea_us/index.html --dur 9.52 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/korea_us_v6.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c8_09b", "w": "SaaS", "off": -0.2, "dur": 9.5, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/korea_us_v6.mp4", "t": 0.0} · источники — inserts/korea_us/NOTES.mdI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/dubai_villa/index.html --dur 10.0 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/dubai_villa.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "b_villa", "at": 0.0, "dur": 10.0, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/dubai_villa.mp4", "t": 0.0} · источники — inserts/dubai_villa/NOTES.md08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v39_dubai_then_now", "type": "insert", "beat": "n05", "at_w": "I've", "at_nth": 0, "lead": 0.5, "until_w": "home", "until_off": 1.0} · метки слов: yrs, wipe → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v39_dubai_then_now/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v39_dubai_then_now [--scale 2 для 4K] → renders_v4/v39_dubai_then_now → вставка на весь кадр08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v45_uae_accelerators", "type": "insert", "beat": "b050", "at_w": "accelerators", "at_nth": 0, "lead": 0.4, "until_w": "DIFC", "until_off": 2.0, "replaces": ["map_accel"]} · метки слов: uae, hub, abu, rsa, sandbox, difc → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v45_uae_accelerators/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v45_uae_accelerators [--scale 2 для 4K] → renders_v4/v45_uae_accelerators → вставка на весь кадрготовый рендер YTUAE02 (02_Edit/HyperFrames/ytuae02-v3-inserts/renders/dubai_villa.mp4) → 02_Edit/HyperFrames/ytuae01-v3-inserts/renders_ext/dubai_villa_from_ytuae02.mp4 → перебивка куска villa в плане (YTUAE01_film_v1.json), 10 с08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v64_islands", "type": "insert", "beat": "b113", "at": 0.0, "until_w": "AI", "until_off": 1.35, "replaces": ["pn_humanity"]} · метки слов: leave, hum, isl, without → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v64_islands/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v64_islands [--scale 2 для 4K] → renders_v4/v64_islands → вставка на весь кадрI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/seoul/index.html --dur 6.48 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/seoul.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "c1_05", "at": 0.0, "dur": 6.5, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/seoul.mp4", "t": 0.0} · источники — inserts/seoul/NOTES.md08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c109", "kind": "punch", "on": "c1_09", "w": "14", "off": -0.25, "pos": "low", "words": [{"t": "14 HOURS", "s": "big", "w": "14"}, {"t": "16 HOURS", "s": "big", "w": "16"}, {"t": "SOMETIMES 18", "s": "gold", "w": "18"}, {"t": "INCLUDING WEEKENDS", "s": "small", "w": "weekend"}], "dur": 4.57} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE01_film_v1_screens.json: {"id": "h_money", "kind": "punch", "at_w": "It's", "words": [{"t": "IMPOSSIBLE", "s": "big", "w": "impossible"}, {"t": "TO GROW LIKE CRAZY", "s": "small", "w": "grow"}, {"t": "ON YOUR OWN MONEY", "s": "gold", "w": "having"}], "pos": "mid", "dur": 9.0, "scrim": 0.45} → _tools/screens_v1.py build --only h_money → screens_v1.py render --only h_money (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_olympic", "kind": "punch", "at_w": "regular", "words": [{"t": "NOT A REGULAR BUSINESS", "s": "small", "w": "regular"}, {"t": "AN OLYMPIC", "s": "big", "w": "olympic"}, {"t": "CHAMPION", "s": "gold", "w": "champion", "nth": 1}], "pos": "low", "until_w": "champion", "until_nth": 1, "until_off": 2.2, "spill": true} → _tools/screens_v1.py build --only pn_olympic → screens_v1.py render --only pn_olympic (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_irr", "kind": "punch", "at_w": "three", "words": [{"t": "3–5X", "s": "gold", "w": "three"}, {"t": "ON THE WHOLE FUND", "s": "small", "w": "return"}, {"t": "20–30% IRR", "s": "big", "w": "20"}], "pos": "low", "until_w": "20", "until_off": 2.2} → _tools/screens_v1.py build --only pn_irr → screens_v1.py render --only pn_irr (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_culture", "kind": "punch", "at_w": "more", "words": [{"t": "A MORE", "s": "small", "w": "more"}, {"t": "ENTREPRENEURIAL", "s": "gold", "w": "entrepreneurial"}, {"t": "COUNTRY", "s": "big", "w": "country"}], "pos": "low", "until_w": "country", "until_off": 1.6, "tail": 0.8} → _tools/screens_v1.py build --only pn_culture → screens_v1.py render --only pn_culture (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_train", "kind": "punch", "at_w": "mind", "words": [{"t": "A MIND", "s": "small", "w": "mind"}, {"t": "LIKE A TRAIN", "s": "gold", "w": "train"}, {"t": "THAT NEVER STOPS", "s": "big", "w": "that"}], "pos": "low", "dur": 6.6} → _tools/screens_v1.py build --only pn_train → screens_v1.py render --only pn_train (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_doctor", "kind": "punch", "at_w": "doctor", "words": [{"t": "A DOCTOR", "s": "small", "w": "doctor"}, {"t": "OF ENTREPRENEURS", "s": "gold", "w": "entrepreneurs"}], "pos": "low", "dur": 3.6, "spill": true} → _tools/screens_v1.py build --only pn_doctor → screens_v1.py render --only pn_doctor (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_home", "kind": "punch", "at_w": "psychotherapy", "words": [{"t": "NOT JUST A HOME", "s": "small", "w": "psychotherapy"}, {"t": "A PSYCHOTHERAPY SPACE", "s": "gold", "w": "environment", "nth": 1}], "pos": "low", "dur": 6.0} → _tools/screens_v1.py build --only pn_home → screens_v1.py render --only pn_home (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_ocean", "kind": "punch", "at_w": "dropped", "words": [{"t": "DROPPED INTO", "s": "small", "w": "dropped"}, {"t": "AN OCEAN OF OBSTACLES", "s": "gold", "w": "ocean"}], "pos": "low", "dur": 6.0} → _tools/screens_v1.py build --only pn_ocean → screens_v1.py render --only pn_ocean (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_soul", "kind": "punch", "at_w": "scaling", "words": [{"t": "SCALE", "s": "small", "w": "scaling"}, {"t": "MIGHT COST YOU", "s": "small", "w": "might"}, {"t": "THE SOUL", "s": "gold", "w": "soul"}], "pos": "low", "dur": 8.0, "tail": 1.6, "spill": true} → _tools/screens_v1.py build --only pn_soul → screens_v1.py render --only pn_soul (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_world", "kind": "punch", "at_w": "This", "words": [{"t": "THIS IS HOW STARTUPS", "s": "small", "w": "This"}, {"t": "CHANGE THE WORLD", "s": "gold", "w": "change"}], "pos": "low", "dur": 4.25, "spill": true, "spill_ch": true} → _tools/screens_v1.py build --only pn_world → screens_v1.py render --only pn_world (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qa1", "kind": "punch", "at_w": "Not", "words": [{"t": "NOT LISTENING", "s": "big", "w": "Not"}, {"t": "TO CUSTOMERS", "s": "gold", "w": "Not"}], "pos": "mid", "dur": 2.5, "spill": true} → _tools/screens_v1.py build --only qa1 → screens_v1.py render --only qa1 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qa2", "kind": "punch", "at_w": "Pretty", "words": [{"t": "PRETTY SIMILAR", "s": "gold", "w": "Pretty"}], "pos": "mid", "dur": 2.3, "spill": true} → _tools/screens_v1.py build --only qa2 → screens_v1.py render --only qa2 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_h02", "kind": "punch", "on": "h_02", "w": "want", "off": -0.25, "pos": "low", "words": [{"t": "I WANT TO BE", "s": "small", "w": "want"}, {"t": "NUMBER ONE", "s": "gold", "w": "number"}, {"t": "FASHION RETAILER", "s": "big", "w": "fashion"}, {"t": "IN THE WORLD", "s": "small", "w": "in"}], "dur": 2.97} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_h01", "kind": "punch", "on": "h_01", "w": "kind", "off": -0.25, "pos": "low", "words": [{"t": "A KIND OF A", "s": "small", "w": "kind"}, {"t": "BOX BOY", "s": "gold", "w": "box"}, {"t": "IN DOWNTOWN", "s": "small", "w": "downtown"}, {"t": "LOS ANGELES", "s": "big", "w": "Los"}], "dur": 6.31} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_h06a", "kind": "punch", "on": "h_06a", "w": "10", "off": -0.12, "dur": 2.77, "words": [{"t": "A 10-YEAR", "s": "big", "w": "10"}, {"t": "DEAL", "s": "gold", "w": "deal"}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_h06b", "kind": "punch", "on": "h_06b", "w": "average", "off": -0.1, "dur": 4.24, "words": [{"t": "AVERAGE MARRIAGE", "s": "small", "w": "average"}, {"t": "9 YEARS", "s": "big", "w": "nine"}, {"t": "LONGER THAN MARRIAGE", "s": "gold", "w": "longer", "br": true}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c102a", "kind": "punch", "on": "c1_02", "w": "language", "off": -0.25, "pos": "low", "words": [{"t": "LANGUAGE BARRIER", "s": "big", "w": "language"}, {"t": "CULTURAL DIFFERENCE", "s": "small", "w": "cultural"}, {"t": "NO FRIENDS", "s": "gold", "w": "friends"}], "dur": 6.87} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c102b", "kind": "punch", "on": "c1_02", "w": "first", "off": -0.25, "pos": "low", "words": [{"t": "FIRST GENERATION", "s": "big", "w": "first"}, {"t": "IMMIGRANT", "s": "gold", "w": "of", "off": 0.6}], "dur": 3.23} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c105a", "kind": "punch", "on": "c1_05", "w": "Yellow", "off": -0.25, "pos": "low", "words": [{"t": "YELLOW PAGES", "s": "gold", "w": "Yellow"}, {"t": "ONE PHONE CALL", "s": "small", "w": "phone"}], "dur": 4.69} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c105b", "kind": "punch", "on": "c1_05", "w": "box", "off": -0.25, "pos": "low", "words": [{"t": "BOX BOY", "s": "big", "w": "box"}, {"t": "GARMENT INDUSTRY", "s": "gold", "w": "garment"}, {"t": "DOWNTOWN L.A.", "s": "small", "w": "downtown"}], "dur": 4.79} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c107", "kind": "punch", "on": "c1_07", "w": "own", "off": -0.25, "pos": "low", "words": [{"t": "MY OWN", "s": "small", "w": "own"}, {"t": "MANUFACTURING BUSINESS", "s": "gold", "w": "manufacturing", "nth": 1}], "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c113", "kind": "punch", "on": "c1_13", "w": "made", "off": -0.25, "pos": "low", "words": [{"t": "MADE IN AMERICA", "s": "big", "w": "made"}, {"t": "SELL IN AMERICA", "s": "big", "w": "sell"}, {"t": "CLIENT: MACY'S", "s": "gold", "w": "Macy", "br": true}], "dur": 7.11} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c401a", "kind": "punch", "on": "c4_01", "w": "item", "off": -0.25, "pos": "low", "words": [{"t": "NOT ITEM-DRIVEN", "s": "small", "w": "item"}, {"t": "ASSORTMENT-DRIVEN", "s": "big", "w": "assortment"}], "dur": 4.07} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c401b", "kind": "punch", "on": "c4_01", "w": "tomorrow", "off": -0.25, "pos": "low", "words": [{"t": "COME BACK TOMORROW", "s": "small", "w": "tomorrow"}, {"t": "NEWNESS", "s": "gold", "w": "newness"}], "dur": 2.87} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c503", "kind": "punch", "on": "c5_03", "w": "lower", "off": -0.25, "pos": "low", "words": [{"t": "LOWER STANDARDS", "s": "big", "w": "lower"}, {"t": "OF EXECUTION", "s": "small", "w": "execution"}, {"t": "REPUTATION", "s": "gold", "w": "reputation"}], "dur": 6.09} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c903", "kind": "punch", "on": "c9_03", "w": "worst", "off": -0.1, "dur": 2.4, "words": [{"t": "WORST DECISION", "s": "big", "w": "worst"}, {"t": "IN BUSINESS", "s": "small", "w": "business"}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c903b", "kind": "punch", "on": "c9_03", "w": "best", "off": -0.1, "dur": 2.61, "words": [{"t": "BEST DECISION", "s": "gold", "w": "best"}, {"t": "IN LIFE", "s": "big", "w": "life"}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c904", "kind": "punch", "on": "c9_04", "w": "come", "off": -0.1, "dur": 4.28, "words": [{"t": "COME TO THE STATES", "s": "gold", "w": "come"}, {"t": "BECOME RETAIL", "s": "big", "w": "become"}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c601", "kind": "punch", "on": "c6_01", "w": "retail", "off": -0.25, "pos": "low", "words": [{"t": "RETAIL", "s": "small", "w": "retail"}, {"t": "HAS CHANGED", "s": "big", "w": "changed"}], "nth": 0, "dur": 4.07} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c601_b", "kind": "punch", "on": "c6_01", "w": "next", "off": -0.25, "pos": "low", "words": [{"t": "A NEW CHAPTER", "s": "gold", "w": "next"}], "nth": 0, "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c602", "kind": "punch", "on": "c6_02", "w": "family", "off": -0.25, "pos": "low", "words": [{"t": "LIKE A", "s": "small", "w": "like"}, {"t": "FAMILY", "s": "gold", "w": "family"}], "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c602b", "kind": "punch", "on": "c6_02", "w": "emotional", "off": -0.25, "pos": "low", "words": [{"t": "VERY EMOTIONAL", "s": "gold", "w": "emotional", "nth": 1}], "nth": 1, "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c701a", "kind": "punch", "on": "c7_01", "w": "COVID", "off": -0.25, "pos": "low", "words": [{"t": "COVID-19", "s": "big", "w": "COVID"}, {"t": "18 MONTHS", "s": "small", "w": "18"}, {"t": "FORCED RETIREMENT", "s": "gold", "w": "forced"}], "dur": 6.01} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c701b", "kind": "punch", "on": "c7_01", "w": "something", "off": -0.3, "pos": "low", "words": [{"t": "THIS IS", "s": "small", "w": "something"}, {"t": "SOMETHING BIG", "s": "gold", "w": "big"}], "dur": 2.46} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c704kw", "kind": "punch", "on": "c7_04b", "w": "positive", "off": -0.12, "dur": 5.36, "pos": "top", "words": [{"t": "SO POSITIVE", "s": "gold", "w": "positive"}, {"t": "MORE POSITIVE", "s": "big", "w": "more"}, {"t": "THAN ANYBODY", "s": "small", "w": "anybody"}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c705", "kind": "punch", "on": "c7_05", "w": "hurts", "off": -0.25, "pos": "mid", "words": [{"t": "SOMETIMES", "s": "small", "w": "Sometimes"}, {"t": "IT HURTS", "s": "gold", "w": "hurts"}], "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c707n", "kind": "punch", "on": "c7_07", "w": "350", "off": -0.25, "pos": "low", "words": [{"t": "350 MILLION", "s": "gold", "w": "350"}, {"t": "UNITS", "s": "small", "w": "units"}, {"t": "EVERY YEAR", "s": "big", "w": "every"}], "dur": 3.31} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c707", "kind": "punch", "on": "c7_07", "w": "Excel", "off": -0.25, "pos": "low", "words": [{"t": "EXCEL GENIUSES", "s": "big", "w": "Excel"}], "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c707b", "kind": "punch", "on": "c7_07", "w": "now", "nth": 1, "off": -0.25, "pos": "low", "words": [{"t": "NOW", "s": "small", "w": "now", "nth": 1, "px": 190}, {"t": "AI", "s": "gold", "w": "AI", "nth": 2, "px": 330}, {"t": "VERY QUICK", "s": "big", "w": "quick", "px": 480}], "dur": 3.37} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c708", "kind": "punch", "on": "c7_08", "w": "bridge", "off": -0.25, "pos": "low", "words": [{"t": "THE BRIDGE", "s": "gold", "w": "bridge"}, {"t": "BETWEEN OLD-SCHOOL RETAIL", "s": "small", "w": "between"}, {"t": "AND AI", "s": "big", "w": "versus"}], "dur": 5.61} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c803", "kind": "punch", "on": "c8_03", "w": "Even", "off": -0.25, "pos": "low", "words": [{"t": "5 MINUTES", "s": "big", "w": "5"}, {"t": "15 MINUTES", "s": "big", "w": "15"}, {"t": "DOESN'T MATTER", "s": "gold", "w": "minutes", "br": true, "nth": 1}], "dur": 3.07} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c805", "kind": "punch", "on": "c8_05", "w": "honest", "off": -0.25, "pos": "low", "words": [{"t": "HONEST", "s": "gold", "w": "honest"}, {"t": "FEEDBACK", "s": "big", "w": "feedback"}], "nth": 0, "dur": 2.27} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c805_b", "kind": "punch", "on": "c8_05", "w": "mean", "off": -0.25, "pos": "low", "words": [{"t": "SOMETIMES I'M SO MEAN", "s": "small", "w": "mean", "br": true}], "nth": 0, "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c805c", "kind": "punch", "on": "c8_05", "w": "not", "off": -0.25, "pos": "low", "words": [{"t": "I'M NOT RIGHT", "s": "big", "w": "not"}, {"t": "100%", "s": "gold", "w": "100"}], "dur": 2.39} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c805d", "kind": "punch", "on": "c8_05", "w": "experience", "off": -0.25, "pos": "low", "words": [{"t": "MY OWN EXPERIENCE", "s": "small", "w": "experience"}, {"t": "AND KNOWLEDGE", "s": "gold", "w": "knowledge"}], "dur": 2.77} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c807b", "kind": "punch", "on": "c8_07", "w": "know", "off": -0.25, "pos": "low", "words": [{"t": "KNOW EACH OTHER", "s": "big", "w": "know", "nth": 2}, {"t": "TRUST EACH OTHER", "s": "gold", "w": "trust"}], "nth": 2, "dur": 3.09} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c304", "kind": "punch", "on": "c3_04", "w": "Asian", "off": -0.25, "pos": "low", "words": [{"t": "ASIAN GUY", "s": "big", "w": "Asian"}, {"t": "THE PRESIDENT", "s": "gold", "w": "president", "nth": 1}, {"t": "FROM THE US", "s": "small", "w": "US"}], "dur": 6.17} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c304b", "kind": "punch", "on": "c3_04", "w": "dialogue", "off": -0.25, "pos": "low", "words": [{"t": "DIALOGUE", "s": "big", "w": "dialogue"}, {"t": "AND DISCUSSION", "s": "gold", "w": "discussion"}], "dur": 4.21} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c811", "kind": "punch", "on": "c8_11", "w": "never", "off": -0.25, "pos": "low", "words": [{"t": "I NEVER CAN MEET", "s": "small", "w": "never"}, {"t": "THOSE FOLKS AT ONCE", "s": "small", "w": "folks"}], "nth": 0, "dur": 3.89} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c902", "kind": "punch", "on": "c9_02", "w": "options", "off": -0.25, "pos": "low", "words": [{"t": "NO OTHER OPTIONS", "s": "big", "w": "options"}, {"t": "AS AN IMMIGRANT", "s": "gold", "w": "immigrant"}], "dur": 3.01} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c905b", "kind": "punch", "on": "c9_05", "w": "mindset", "off": -0.25, "pos": "low", "words": [{"t": "MINDSET", "s": "big", "w": "mindset"}, {"t": "COMMITMENT", "s": "gold", "w": "commitment"}, {"t": "DEDICATION", "s": "small", "w": "dedication"}], "dur": 4.07} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c905", "kind": "punch", "on": "c9_05", "w": "best", "off": -0.25, "pos": "low", "words": [{"t": "THE BEST", "s": "small", "w": "best"}, {"t": "BOOT CAMP", "s": "gold", "w": "boot"}, {"t": "OF MY LIFE", "s": "big", "w": "life"}], "dur": 3.45} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c906b", "kind": "punch", "on": "c9_06", "w": "smart", "off": -0.25, "pos": "low", "words": [{"t": "SMART WORK", "s": "gold", "w": "smart"}, {"t": "IS BETTER THAN", "s": "small", "w": "better"}, {"t": "HARD WORK", "s": "big", "w": "hard"}], "dur": 3.25} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c906", "kind": "punch", "on": "c9_06", "w": "AI", "off": -0.25, "pos": "low", "words": [{"t": "AI PEOPLE", "s": "small", "w": "AI"}, {"t": "20 HOURS", "s": "big", "w": "20"}, {"t": "EVERY DAY", "s": "gold", "w": "every"}], "dur": 5.89} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c909b", "kind": "punch", "on": "c9_09", "w": "looking", "off": -0.1, "dur": 3.62, "words": [{"t": "WORKING HARD", "s": "small", "w": "looking"}, {"t": "WORKING SMART", "s": "big", "w": "smart", "nth": 1}, {"t": "WITH A BIG SMILE", "s": "gold", "w": "big"}]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c1003o", "kind": "punch", "on": "c10_03", "w": "October", "off": -0.25, "pos": "low", "words": [{"t": "OCTOBER", "s": "gold", "w": "October"}], "dur": 2.2} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c1003", "kind": "punch", "on": "c10_03", "w": "21", "off": -0.25, "pos": "low", "words": [{"t": "21 NIGHTS", "s": "big", "w": "21", "nth": 1}], "nth": 1, "dur": 1.96} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c1003_b", "kind": "punch", "on": "c10_03", "w": "15", "off": -0.25, "pos": "low", "words": [{"t": "15 HOTELS", "s": "gold", "w": "15"}, {"t": "UNPACK · PACK · UNPACK", "s": "small", "w": "unpack"}], "nth": 0, "dur": 3.71} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_matters", "kind": "stack", "at_w": "most", "words": [{"t": "WHAT MATTERS MOST", "s": "small", "w": "most"}, {"t": "SCALING OPPORTUNITY", "s": "big", "w": "scaling"}, {"t": "THE POWER OF THE FOUNDER", "s": "big", "w": "power"}, {"t": "AND THE TEAM", "s": "gold", "w": "founder", "nth": 1}], "split": "right", "dur": 14.0} → _tools/screens_v1.py build --only pn_matters → screens_v1.py render --only pn_matters (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_classic", "kind": "stack", "at_w": "classical", "words": [{"t": "CLASSICAL BUSINESS", "s": "big", "w": "classical"}, {"t": "VS", "s": "small", "w": "and"}, {"t": "STARTUP", "s": "gold", "w": "startup"}, {"t": "BUILT FOR ENORMOUS SCALE", "s": "small", "w": "built"}], "split": "right", "until_w": "scale", "until_off": 2.5} → _tools/screens_v1.py build --only pn_classic → screens_v1.py render --only pn_classic (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_happen", "kind": "stack", "at_w": "inspiring", "words": [{"t": "IT'S NOT WHAT YOU MAKE", "s": "small", "w": "inspiring"}, {"t": "IT'S WHAT YOU MAKE", "s": "small", "w": "actually"}, {"t": "HAPPEN", "s": "gold", "w": "happen"}], "split": "right", "until_w": "happen", "until_off": 2.0} → _tools/screens_v1.py build --only pn_happen → screens_v1.py render --only pn_happen (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_want", "kind": "stack", "at_w": "investor", "words": [{"t": "WHAT INVESTORS", "s": "big", "w": "investor", "nth": 1}, {"t": "WANT TO HEAR", "s": "gold", "w": "hear"}], "split": "right", "at_nth": 1, "dur": 4.0, "spill": true} → _tools/screens_v1.py build --only pn_want → screens_v1.py render --only pn_want (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qa4", "kind": "stack", "at_w": "invest", "words": [{"t": "INVEST IN", "s": "small", "w": "invest"}, {"t": "REALLY STRONG PEOPLE", "s": "big", "w": "strong"}, {"t": "WHO UNDERSTAND", "s": "small", "w": "understanding"}, {"t": "THEIR CUSTOMERS", "s": "big", "w": "customers"}, {"t": "VISIONARIES", "s": "gold", "w": "visionary"}], "split": "right", "dur": 18.0, "tail": 0.0} → _tools/screens_v1.py build --only qa4 → screens_v1.py render --only qa4 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qa5b", "kind": "stack", "at_w": "AI", "words": [{"t": "“AI PIXAR", "s": "gold", "w": "AI"}, {"t": "OF THE FUTURE”", "s": "big", "w": "Pixar", "nth": 1}], "split": "right", "at_off": 0.05, "dur": 3.6, "spill": true} → _tools/screens_v1.py build --only qa5b → screens_v1.py render --only qa5b (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "qa6", "kind": "stack", "at_w": "need", "words": [{"t": "“WE NEED MONEY NOW”", "s": "big", "w": "money"}, {"t": "“WE WILL NOT NEED ANY FUNDS FROM YOU”", "s": "small", "w": "not"}], "split": "right", "dur": 9.0} → _tools/screens_v1.py build --only qa6 → screens_v1.py render --only qa6 (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "pn_analyst", "kind": "stack", "at_w": "characteristics", "words": [{"t": "THE STRONG FOUNDER", "s": "small", "w": "strong"}, {"t": "IS MUCH BETTER", "s": "big", "w": "better"}, {"t": "THAN YOUR ANALYST", "s": "gold", "w": "than"}], "split": "right", "until_w": "analyst", "until_off": 1.0} → _tools/screens_v1.py build --only pn_analyst → screens_v1.py render --only pn_analyst (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c908", "kind": "hit", "on": "c9_08", "w": "hard", "off": -0.3, "dur": 1.95, "t": "HARD WORK", "label": "STILL WORKS", "px": 440, "color": "ivory"} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_hit_fund", "kind": "hit", "on": "c8_09", "w": "cross", "off": -0.25, "dur": 2.59, "t": "CROSS-BORDER", "label": "FUND · U.S. ↔ *KOREA*", "px": 430} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_hit_dubai", "kind": "hit", "on": "c8_11", "w": "Dubai", "off": -0.3, "dur": 1.71, "t": "DUBAI", "label": "ALL AT *ONCE*", "px": 640} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c909h", "kind": "hit", "on": "c9_09", "w": "smart", "off": -0.3, "dur": 2.6, "t": "WORK SMART", "label": "AS WELL", "px": 440} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE02_gfx_v1.json: {"id": "g_doc_ch11", "kind": "doc", "on": "c6_05", "w": "company", "off": -0.2, "side": "left", "outlet": "Chapter 11 · Delaware", "date": "Sept. 29, 2019", "headline": "Forever 21 files for bankruptcy", "deck": "Plans to close up to 350 stores and exit about 40 countries.", "mark": "exit about 40 countries", "mark_at": {"w": "retailers"}, "dur": 5.72} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_doc_linda", "kind": "doc", "on": "c5_03", "w": "crazy", "off": -0.2, "dur": 6.5, "side": "center", "outlet": "The New York Times", "date": "Sept. 2019", "headline": "“We went from seven countries to 47 countries…”", "deck": "“…within a less-than-six-year time frame and with that came a lot of complexity.” — Linda Chang", "mark": "with that came a lot of complexity", "mark_at": {"w": "crazy"}, "px": 150, "pw": 3000, "scrim": 0.93, "top": 330} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_doc_sale", "kind": "doc", "on": "c6_06", "w": "Chang", "off": -0.4, "dur": 5.6, "side": "left", "outlet": "CNBC", "date": "Feb. 3, 2020", "headline": "Forever 21 reaches deal to sell its retail business for $81 million", "deck": "Buyers: Simon Property Group, Brookfield Property Partners and Authentic Brands Group.", "mark": "$81 million", "px": 96} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)I=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/forbes_quote/index.html --dur 4.12 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/forbes_quote.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "h_02", "at": 0.0, "dur": 4.14, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/forbes_quote.mp4", "t": 0.0} · источники — inserts/forbes_quote/NOTES.md08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v06_jury_highlight", "type": "insert", "beat": "b008", "at": 0.0, "until_w": "early", "until_off": -0.1} → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v06_jury_highlight/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v06_jury_highlight [--scale 2 для 4K] → renders_v4/v06_jury_highlight → вставка на весь кадр08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v24_portfolio_wall", "type": "insert", "beat": "b031", "at": 0.0, "until_w": "companies", "until_off": 1.0, "replaces": ["dots_100", "still_b031_01"]} · метки слов: portfolio, chances, catch, unicorn, hundred → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v24_portfolio_wall/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v24_portfolio_wall [--scale 2 для 4K] → renders_v4/v24_portfolio_wall → вставка на весь кадр08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v28_gpu_press", "type": "insert", "beat": "b065", "at_w": "decided", "lead": 0.6, "until_w": "burn", "until_off": 2.0, "replaces": ["pn_burned", "still_b065_04", "still_b065_05"]} · метки слов: decided, pro, tools, musician, invested, three, successfully, burn → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v28_gpu_press/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v28_gpu_press [--scale 2 для 4K] → renders_v4/v28_gpu_press → вставка на весь кадр08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v31_gpu_pivot_cars", "type": "insert", "beat": "b068", "at_w": "move", "lead": 0.5, "until_w": "guys", "until_off": 2.0, "replaces": ["pn_except"], "replaces_insert": ["gpu_pivot"]} · метки слов: automotive, huge, multi, because, listed, nobody → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v31_gpu_pivot_cars/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v31_gpu_pivot_cars [--scale 2 для 4K] → renders_v4/v31_gpu_pivot_cars → вставка на весь кадр08_Cut/YTUAE02_gfx_v1.json: {"id": "g_c705chat", "kind": "chat", "style": "two_sides", "on": "c7_05", "w": "neutral", "off": -0.4, "dur": 13.3, "side": "left", "ask": {"t": "Give me a neutral answer.\nNot just the positive side.", "w": "neutral"}, "a": {"w": "positive"}, "b": {"w": "other"}, "labels": ["JUST POSITIVE", "THE OTHER SIDE"]} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_chat", "kind": "chat", "on": "c7_04b", "w": "thinks", "off": -0.3, "dur": 5.9, "side": "left", "ask": {"t": "ChatGPT, who is Alex?", "w": "thinks", "nth": 1}, "answer": {"t": "Alex? The guru of supply chain.", "w": "guru", "mark": "guru of supply chain"}, "nth": 1, "scale": 0.78} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v60_pinscreen_wipe", "type": "insert", "beat": "b103", "at_w": "visual", "lead": 0.4, "until_w": "Pixar", "until_off": 1.8, "replaces": ["qa5"]} · метки слов: example, animation, n20a, n20b, pixar, create, cheaper → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v60_pinscreen_wipe/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v60_pinscreen_wipe [--scale 2 для 4K] → renders_v4/v60_pinscreen_wipe → вставка на весь кадр08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v27_gpu_device", "type": "insert", "beat": "b065", "at": 0.0, "until_w": "bake", "until_off": 0.0, "replaces": ["card_gpu"]} → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v27_gpu_device/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v27_gpu_device [--scale 2 для 4K] → renders_v4/v27_gpu_device → вставка на весь кадр08_Cut/v4_assets/viz/b8_round7.json: {"id": "v66_sound_capsules", "type": "insert", "beat": "b061", "at_w": "passenger", "lead": 0.6, "until_w": "other", "until_off": 1.5, "replaces": ["capsule"]} · метки слов: passenger, driver, hands, child, cartoons, hear → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v66_sound_capsules/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v66_sound_capsules [--scale 2 для 4K] → renders_v4/v66_sound_capsules → вставка на весь кадр08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v55b_flylane_name", "type": "insert", "beat": "b085", "at_w": "Educate", "at_nth": 0, "lead": 0.5, "until_w": "lane", "until_off": 3.6, "replaces": ["card_flylane"]} · метки слов: edu, fly → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v55b_flylane_name/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v55b_flylane_name [--scale 2 для 4K] → renders_v4/v55b_flylane_name → вставка на весь кадр08_Cut/v4_assets/viz/b7_maps_space.json: {"id": "v55c_flylane_reach", "type": "insert", "beat": "b085", "at_w": "opportunity", "at_nth": 0, "lead": 0.4, "until_w": "kids", "until_off": 0.3} · метки слов: wider, pop, give → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v55c_flylane_reach/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v55c_flylane_reach [--scale 2 для 4K] → renders_v4/v55c_flylane_reach → вставка на весь кадр08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v57_ai_stack", "type": "overlay", "split": "right", "beat": "b089", "at_w": "late", "lead": 0.6, "until_w": "change", "until_off": -0.3, "replaces": ["pn_openai"]} · метки слов: late, invest, openai, blast, llms, businesses, hunting, startups → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v57_ai_stack/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v57_ai_stack [--scale 2 для 4K] → renders_v4/v57_ai_stack → панель справа: build_job переставляет героя в левую половину (split)08_Cut/v4_assets/viz/b6_real_material.json: {"id": "v57_curio_device", "type": "insert", "beat": "b089", "at_w": "change", "at_nth": 2, "lead": 0.3, "until_w": "business", "until_off": 2.0} → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v57_curio_device/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v57_curio_device [--scale 2 для 4K] → renders_v4/v57_curio_device → вставка на весь кадр08_Cut/v4_assets/viz/b3_story_panels.json: {"id": "v59_rhino", "type": "overlay", "split": "right", "beat": "b098", "at_w": "reiner", "lead": 0.45, "until_w": "brazil", "until_off": 1.2, "replaces": ["ph_rhino"]} · метки слов: reiner, doing, car, armored, brazil → страница 02_Edit/HyperFrames/ytuae01-v3-inserts/inserts/v59_rhino/index.html (+ NOTES.md: источники и итерации) → _tools/viz_v4.py plan (метки по словам после ускорения речи) → viz_v4.py render --only v59_rhino [--scale 2 для 4K] → renders_v4/v59_rhino → панель справа: build_job переставляет героя в левую половину (split)08_Cut/YTUAE01_film_v1_screens.json: {"id": "end", "kind": "end", "text": "Strong people. *Big ideas.*", "cta": "", "cap": "", "at": 11.0, "dur": 9.0} → _tools/screens_v1.py build --only end → screens_v1.py render --only end (Memex, Puppeteer) → renders/<id>.mov ProRes 4444 с альфой → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE02_gfx_v1.json: {"id": "g_end_brand", "kind": "end", "on": "end", "at": 15.24, "dur": 3.56} → $V 0511_doc_cut/gfx.py build --job YTUAE02_cut_job.json --tag v1 (тема ytuae · "brand": "dotted_line") → рендер ProRes 4444 с альфой (999_extra/ytfp02_gfx_pptr.mjs)08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_b042_12", "kind": "photo_full", "at": 11.326, "dur": 3.13, "src": "01_Source/Images/igorkaloshin_linkedin/2025-10-15_7384165015093673984_post_img2_hires.jpg", "move": "in", "caption": "IGOR TEACHES AT *MBZUAI*", "sub": "Abu Dhabi · 2025"} → _tools/screens_v1.py build --only still_b042_12 → screens_v1.py render --only still_b042_12 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_b040b_09", "kind": "photo_full", "at": 0.096, "dur": 2.522, "src": "01_Source/Images/angelsdeck_linkedin/2023-05-27_7068150851923513344_post_img5.jpg", "move": "in", "caption": "ANGELSDECK *MEMBERS*", "sub": "Dubai · 2023"} → _tools/screens_v1.py build --only still_b040b_09 → screens_v1.py render --only still_b040b_09 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_b051_10", "kind": "photo_full", "at": 7.252, "dur": 2.609, "src": "01_Source/Images/compasscoworking-rakez_linkedin/2024-12-09_7271878302204653568_post_img3.jpg", "move": "in", "caption": "HOW TO *RAISE FUNDS*", "sub": "RAKEZ Growth Series · 2024"} → _tools/screens_v1.py build --only still_b051_10 → screens_v1.py render --only still_b051_10 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_b053_11", "kind": "photo_full", "at": 4.778, "dur": 2.783, "src": "01_Source/Images/darialipatova_linkedin/2026-02-16_7429192180474273792_post.jpg", "move": "in", "caption": "THE VENTURES *STARTUP AWARD*", "sub": "UAE · 2026"} → _tools/screens_v1.py build --only still_b053_11 → screens_v1.py render --only still_b053_11 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_n01_13", "kind": "photo_full", "at": 13.93, "dur": 3.2, "src": "02_Edit/Stock/v4/villa_event/villa_P1132980_3840.jpg", "move": "in"} → _tools/screens_v1.py build --only still_n01_13 → screens_v1.py render --only still_n01_13 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_n01_16", "kind": "photo_full", "at": 20.57, "dur": 3.4, "src": "01_Source/Images/villa_event_drive/P1132939.jpg", "move": "in", "caption": "HOUSE OF *OHM*", "sub": "Al Barsha, Dubai"} → _tools/screens_v1.py build --only still_n01_16 → screens_v1.py render --only still_n01_16 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_n03_17", "kind": "photo_full", "at": 4.083, "dur": 2.087, "src": "01_Source/Images/villa_event_drive/P1133080.jpg", "move": "in"} → _tools/screens_v1.py build --only still_n03_17 → screens_v1.py render --only still_n03_17 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_n03_18", "kind": "photo_full", "at": 7.606, "dur": 2.055, "src": "01_Source/Images/villa_event_drive/P1133094.jpg", "move": "in"} → _tools/screens_v1.py build --only still_n03_18 → screens_v1.py render --only still_n03_18 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_b071_14", "kind": "photo_full", "at": 0.9, "dur": 2.8, "src": "02_Edit/Stock/v4/villa_event/villa_P1132966_3840.jpg", "move": "in"} → _tools/screens_v1.py build --only still_b071_14 → screens_v1.py render --only still_b071_14 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.py
08_Cut/YTUAE01_film_v1_screens.json: {"id": "still_n08c_19", "kind": "photo_full", "at": 12.6, "dur": 2.609, "src": "01_Source/Images/villa_event_drive/P1133005.jpg", "move": "in"} → _tools/screens_v1.py build --only still_n08c_19 → screens_v1.py render --only still_n08c_19 (Memex, Puppeteer) → renders/still_….mov — фото с наездом, перебивкой в плане → render_v1.py comp (наложение кусками, ≤ 6 экранов в куске) · тема канала — 0511_doc_cut/gfx_ytuae.py, свои виды фильма — screens_v1.pyI=$P/02_Edit/HyperFrames/ytuae02-v3-inserts; node $I/render.mjs $I/inserts/boxboy_1987/index.html --dur 7.6 --check-only (лист 8 кадров → check/, 2–5 итераций) → без --check-only → renders/boxboy_1987.mp4 (4K — --scale 2) · перебивка в YTUAE02_broll_v1.json: {"on": "h_01", "at": 0.0, "dur": 7.6, "src": "path:02_Edit/HyperFrames/ytuae02-v3-inserts/renders/boxboy_1987.mp4", "t": 0.0} · источники — inserts/boxboy_1987/NOTES.mdОба фильма сняты в один вечер 11.12.2025 на вилле House of OHM (Al Barsha, Дубай), ведущая Angela Brown. YTUAE02 «From box boy to Forever 21» (Alex Ok, 23:08) — движок 0511_doc_cut, восемь версий; YTUAE01 «The $3M lesson» (Igor Kaloshin, 25:53) — движок 0514, семь версий. Оба — 4K на YouTube по ссылке; хэндоффы — 00_Setup/00_Handoff/ проектов.
Решения Романа по ходу — в разделе «Решения» ниже; рецепт каждого вида и экрана — в карточке (строка «как»).
Вставка — отдельная HTML-страница со своим хронометражем: рендерится в видео и встаёт в фильм перебивкой (на весь кадр) или панелью справа (герой переставляется в левую половину). Одна семья для обоих фильмов: lib/base.css (цвета и шрифты канала, без курсива), lib/runtime.js (кадр по времени), lib/map_world.js · map_city.js (карты «night»).
| Шаг | Что | Где · команда |
|---|---|---|
| 1 · Страница | одна вставка = одна страница: GSAP-таймлайн, реальные фото и карты, кредит одной строкой; одна страница — несколько id через params (part, variant) | 02_Edit/HyperFrames/ytuae0N-v3-inserts/inserts/<id>/index.html |
| 2 · Метки слов | шаг встаёт на слово речи: YTUAE01 — реестр с at_w / until_w / marks, метки считает viz_v4.py plan по словам ПОСЛЕ ускорения; YTUAE02 — время слова в NOTES.md | 08_Cut/v4_assets/viz/<builder>.json (YTUAE01) · inserts/<id>/NOTES.md |
| 3 · Лист 8 кадров | глазами: читается ли за взгляд, нет ли наложений и обрезанных краёв; переделывать 2–5 раз; аудиты layout · clip · reading | node render.mjs inserts/<id>/index.html --dur N --check-only → check/<id>_N.jpg · node layout_audit.mjs / clip_audit.mjs / reading_audit.mjs |
| 4 · Рендер | 1920×1080 25p для черновика; 4K — тот же код ×2; панель — с альфой (mov) | YTUAE01: viz_v4.py render --only <id> [--scale 2] · YTUAE02: node render.mjs … (rya-res run --where here) |
| 5 · В фильм | YTUAE02 — перебивка по слову (клип берётся с t + 0,2 с); YTUAE01 — viz_v4 пишет YTUAE01_film_v1_viz4.json, его читают screens_v1 (панели) и broll_v1 (вставки) | YTUAE02_broll_v1.json: {"on", "w", "off", "dur", "src": "path:…/renders/<id>.mp4", "t"} · replaces: экраны, которые вставка снимает |
| 6 · NOTES.md | источник каждого факта и фото (лицензия), журнал итераций по листам, что убрано и почему | inserts/<id>/NOTES.md |
Свой текст во вставке = экраны темы поверх неё запрещены; встык двух вставок — без кадра лица между ними (render_v1 держит последний кадр). После сборки — проверка «вставка × экран» по EDL и сканер вспышек.
V=~/YTAI/environment/.venv_transcribe/bin/python; cd ~/YTAI/scripts/05_editing/0511_doc_cut $V gfx.py build --job $J --tag v1 # лист экранов YTUAE02_gfx_v1.json → проект HyperFrames ytuae02-graphics-v1 ("gfx": {"theme": "ytuae", "brand": "dotted_line"}) PPTR_GL=swiftshader node ~/YTAI/scripts/999_extra/ytfp02_gfx_pptr.mjs $G <ids> # ProRes 4444 с альфой 4K (на Memex — swiftshader, на маке — GPU)
T=$P/00_Setup/08_Cut/_tools; python3 $T/screens_v1.py build|render --only <id> # экраны темы и свои виды фильма (stack, qf, photo_full …) → renders/<id>.mov python3 $T/viz_v4.py plan && python3 $T/viz_v4.py render --only <id> [--scale 2] # панели и вставки по реестрам v4_assets/viz/*.json, метки — по словам после ускорения python3 $T/render_v1.py base · comp --size 1080 --jobs 2 --max-ov 6 # основа без экранов (teaser.py render) + наложение кусками
I=$P/02_Edit/HyperFrames/ytuae0N-v3-inserts; node $I/render.mjs $I/inserts/<id>/index.html --dur N --check-only # лист 8 кадров → check/<id>_N.jpg rya-res run <кто> --kind cpu --where here -- node $I/render.mjs $I/inserts/<id>/index.html --dur N [--scale 2] # рендер → renders/<id>.mp4 (по одному, макбук)
cd ~/YTAI/_work/ytuae_kb_tab && python3 build_tab_v2.py inv · jobs · media · sheets · data # опись экранов обоих фильмов → кадры и ролики из финалов (YTUAE01 режет Memex) → kb_dna.json python3 scripts/site/gen_kb_claude.py && python3 scripts/site/gen_kb.py # в worktree сайта от origin/main; в коммит — только kb_dna.json, kb_claude.json, claude-visuals/
Число — карточек в библиотеке канала: рендер фильма + образец в ДНК. Пусто — вида у канала ещё нет: следующий фильм с таким местом — повод добавить.
| Что показываем | YTCG | YTCR | YTCH | YTEVO | YTLAB | YTFP | YTTRBM | YTUVI | YTUVIE | YTMSEN | YTAgeFree | YTUAE |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Title & chapter | 1 | 3 | 2 | 6 | 2 | 0+1 | 23 | 76 | 4 | 2+1 | 1 | 35 |
| Who speaks | 0+1 | 1 | 2 | 3 | 2 | 0+1 | 3+1 | 8 | 1 | 1+1 | 1 | 11 |
| Number | 2 | 8 | 1 | 4 | 3 | · | 25+1 | 12 | 7 | 1+1 | · | 27 |
| List & steps | 3 | 1 | · | 6 | 4 | 0+1 | 9 | 16 | 2 | 3 | · | 10 |
| Comparison | 1 | 1 | · | 3 | 2 | · | 6 | 18 | 2 | 1+1 | · | 9 |
| Diagram | 2 | 4 | · | 1 | 5 | · | 5 | 10 | 3 | 3 | · | 16 |
| Time | 1 | 1 | · | 2 | · | · | · | 3 | · | 1 | · | 11 |
| Map | 2 | 7 | · | 3 | · | · | · | 11 | 2 | · | · | 16 |
| Quote & term | 3 | 3 | 6 | 5 | 3 | 0+1 | 12+1 | 31 | 2 | 4 | · | 71 |
| Interface & document | 2 | 2 | · | · | · | · | 3 | 7 | 7 | 3+1 | · | 18 |
| Call to action & QR | 1+1 | 1+1 | 3 | 0+1 | 1 | 0+1 | 0+1 | 4 | 1 | 1+1 | 2 | 2 |
| Shorts 9:16 | · | · | · | 7 | · | 2 | 1 | · | · | · | 1 | · |
| Inserts: photo & video in a frame and as cards | · | · | · | · | · | · | · | 42 | · | · | · | 11 |
Первое число — ролики из рендеров фильма, второе — живые образцы в ДНК. Клик по каналу в шапке — его вкладка.
Серый 0x565B63 на карточках — закрытая прозрачность: в фильме там кадр камеры или окно говорящего. Макеты «экран поверх кадра фильма» (mock) в галерею не идут: в кадре человек.
Навыки лежат в ~/.claude/skills/ (HyperFrames — 9, Remotion — 12), infographic — в ~/YTAI/.claude/skills/. Движок пишет навык тома в hyperframes.json → authoringSkill; «в коде не зовётся» — навык для сессии, которая правит экран руками.
| Навык | Когда брать | Какой движок им пишет |
|---|---|---|
| hyperframes | вход для любой задачи «сделать, править, отрендерить»: восстанавливает проект, выбирает рабочий навык | в коде не зовётся: движки ставят HYPERFRAMES_SKIP_SKILLS=1 (doc_cut, headless gfx.py, sc_gfx.py, viz.py) |
| hyperframes-core | контракт композиции: data-* тайминги, class="clip", дорожки, подкомпозиции | все тома: index.html каждого экрана по этому контракту; выноски шортсов — корень + c{k}.html |
| hyperframes-cli | lint · check · snapshot · preview · render; разбор ошибок сборки и рендера | npx [email protected] (screens2.py) и @0.8.106 (остальные): check и render зовут все движки |
| hyperframes-animation | правила движения, blueprints сцен, переходы, GSAP и другие рантаймы | в коде не зовётся: движение томов зашито в функциях видов (rise, draw, count, fade) |
| hyperframes-keyframes | наезд, зум, Ken Burns, движение камеры, маски, SVG morph | в коде не зовётся |
| hyperframes-registry | около 400 готовых блоков: графики, карты, терминал, эффекты — до ручной вёрстки | в коде не зовётся: карты томов свои (Natural Earth, OSM Overpass) |
| hyperframes-audio | микс звука внутри композиции: fade, ducking, эффекты | не нужен: композиции без звука, звук собирает ffmpeg (Звук) |
| hyperframes-creative | дизайн-спек, палитры, типографика, раскадровка storyboard.html | в коде не зовётся: у проектов BRIEF.md с flow: automation, storyboard: no |
| hyperframes-studio | работа с человеком в Studio: план, раскадровка, порядок дорожек | в коде не зовётся: правки идут директивами и листами |
| general-video | своя композиция, когда узкий навык не подходит: многосценовое, статичные петли, титулы | screens2.py и screens_hf.py (YTEVO): authoringSkill |
| motion-graphics | короткий моушн до 10–30 с: счётчик, график, плашка, карта, кинетический текст | выноски шортсов дорисовываются им руками (README 0701_finished) |
| talking-head-recut | карточки-оверлеи поверх нетронутого видео по транскрипту: титры, выноски, панели, PIP | sc_gfx.py (YTCR) и ytcg.py (YTCG): authoringSkill; тот же ключ в проектах YTLAB |
| media-use | музыка, звуки, картинки, иконки, логотипы, LUT, озвучка, субтитры, удаление фона | в коде не зовётся: музыка — Epidemic Sound через shorts.py music |
| remotion-* (12, вход remotion-best-practices) | ролик кодом на React: create, markup, captions, maps, render, studio | 999_extra/remotion: LowerThird и кусок фильма (FilmRange); в движки фильмов не встроен |
| infographic | PNG 4K для таймлайна Premiere: карточки, заставки, схемы, карты, lower-third | 999_extra/infographic/render.py; макеты 0509 build_mockups.py — трек Premiere |
Что делает навык — по его SKILL.md; движки сверены по коду 03.10.2026. Какой навык ставить новому тому — на Экраны кодом, «Как добавить вид или канал».
Тот же предел 600 КБ на ролик — у страницы плана экранов (gen_screen_plan.py). Превью YTEVO весят 13–96 КБ при 2,2–7,8 с.
screens2.py --project $P kb --web $WT/web: показ шаблонов без реплик → templates/media/5.N.M.mp4 + .jpg и hf_volumes.json/kb/templates/media/…, резать не надоKB_TEMPLATES и прогон kbrenders/<id>.mov, у которого .hash = hash в manifest.json<img> и <video>; ffprobe — yuva444p12le; полоса не во весь кадр — x, y из манифестаcut_list.json (name · src · ss · t · alpha · tall · why) → render_queue.py, один потокweb/kb/claude-visuals/media/<name>.mp4 + .jpggfx/p_<имя>.png, gfx/brand.png с альфой — по центру серого холста 16:9, без растяженияsrc — jpg, без posterkb есть только у screens2.py; у sc_gfx.py, gfx.py, ytcg.py, viz.py его нет — примеры режутся рукамиkb_export в screens2.py: показ по образцам, серый, 640×360, реестрweb/kb/claude-visuals/media/| Проверка | Когда | Норма | Откуда взялась |
|---|---|---|---|
| Альфа и размер исходника | до нарезки, ffprobe | yuva444p12le; 3840×2160 или размер и x, y из манифеста | титр 3840×800 и панель 1844×2160 в 640×360 растянулись бы (YTLAB01, YTCG) |
| Людей и кадров клиента нет | до нарезки | в index.html нет <img> и <video>, в assets нет фото; сомнение — открыть кадр | YTCG v1: assets/img/portrait.jpg в клипе C_lower; mock-макеты — на кадре с человеком |
| Рендер = вёрстка | при выборе клипа | renders/<id>.hash = hash в manifest.json | YTLAB01: 26 из 124 клипов правлены после рендера |
| Вес и формат ролика | после нарезки | ≤ 600 КБ, 640×360, без звука, H.264 | лимит страницы плана экранов; превью YTEVO 13–96 КБ |
| Цвет бренда после кодирования | после нарезки, по пикселю постера | красный YTEVO (238,50,39) ±10; лайм Remotion 228/255/110 | кодек уводил цвет бренда; клипы без цветовых меток |
| Файл на месте | до сборки страницы | каждый src и poster лежит в web/; validate_page.py не пишет «файла пока нет» | хэндофф фазы 2: страницы без файлов дают 404 с хаба |
| У карточки навык, движок, вызов | при добавлении | 2–4 метки, how — одна команда, навык из таблицы | слова Романа: «прям со скиллами» |
| Команда шага этапа на странице | gen_kb.py --strict | screens2.py kb --web встречается в тексте | lint kb_stage: команда шага cli должна быть на странице |
| Лист просмотрен глазами | после нарезки | каждый ролик открыт на странице: петля, постер, подпись | правило Романа: всегда скриншоты, смотреть все кадры |
| Файл | Что хранит | Кто пишет |
|---|---|---|
| web/_data/kb_dna.json → channels.{CH} | ДНК канала (палитра, шрифты, правила, кадр) и его библиотека: ролики (src) и образцы в ДНК (tpl) по типам | сессия после сдачи фильма или новой ДНК; затем gen_kb_claude.py и gen_kb.py |
| web/kb/claude-visuals/media/<name>.mp4 + .jpg | ролики и постеры галереи | нарезка через render_queue.py по cut_list.json |
| cut_list.json | задания нарезки: откуда, с какой секунды, сколько, альфа, вертикаль, почему этот | сессия; где хранить — решает Роман |
| web/kb/templates/media/hf_volumes.json + 5.N.M.mp4 | том YTEVO: 11 шаблонов, 16 превью | screens2.py kb → gen_templates_gallery.py --from-manifest |
| hyperframes.json → authoringSkill | каким навыком писался том | код движка при build: screens2.py — general-video; sc_gfx.py, ytcg.py — talking-head-recut |
| ~/.claude/skills/hyperframes*, remotion-* | сами навыки: 9 HyperFrames, 12 Remotion | npx skills update -g (README Remotion); версию CLI закреплять в движке |
| README движков: 0701_finished (выноски), 999_extra/remotion | какими навыками дорисовывать выноски; что проверено в Remotion | сессия сразу после проверки |
V=~/YTAI/environment/.venv_transcribe/bin/python AC=~/YTAI/scripts/05_editing/0510_autocut; X=~/YTAI/scripts/999_extra; WT=~/RYA/wt/kb-claude-editing $V $AC/screens2.py --project $P kb --web $WT/web # том YTEVO → templates/media/5.N.M.mp4 + .jpg + hf_volumes.json; шаг этапа: $V $AC/screens2.py kb --web $WT/web ffprobe -v error -select_streams v -show_entries stream=width,height,pix_fmt,nb_frames -of csv=p=0 renders/B7.g07.mov # yuva444p12le = альфа есть grep -c '<img\|<video' clips/B7.g07/index.html # 0 — картинок в композиции нет python3 $X/render_queue.py kbcut -- ffmpeg -nostdin -v error -ss 0 -t 5.6 -i renders/B7.g07.mov -filter_complex "$FC" -map '[v]' -an -c:v libx264 -preset slow -crf 27 -g 50 -pix_fmt yuv420p -movflags +faststart $WT/web/kb/claude-visuals/media/ytcr04_map_route.mp4 # нарезка через очередь, в один поток # $FC — рецепт screens2.py kb; -ss/-t — отрезок, у полосы overlay=0:1360, у вертикали s=1080x1920 и scale=360:640 FC="color=c=0x565B63:s=3840x2160:r=25,format=yuv444p[bg];[0:v]scale=in_color_matrix=bt601:in_range=tv,format=gbrap12le,scale=out_color_matrix=bt709:out_range=tv,format=yuva444p10le[g];[bg][g]overlay=0:0:format=yuv444p10:alpha=straight:shortest=1,scale=640:360:flags=lanczos,format=yuv420p[v]"
Постер: тот же фильтр, один кадр (-frames:v 1 -q:v 4 name.jpg) на секунде poster_at из cut_list.json. Remotion-клип без меток — in_color_matrix=bt709.
SC=~/YTAI/scripts/05_editing/0511_story_cut; HC=~/YTAI/scripts/05_editing/0510_headless_cut; S=~/YTAI/scripts/07_shorts/0701_finished/shorts.py $V $AC/screens2.py --project $P build --only S34 && $V $AC/screens2.py --project $P preview --only S34 # YTEVO: вид — поле kind экрана плана (side_panel → t_panel) $V $SC/sc_gfx.py demo $P --only demo_map_route && $V $SC/sc_gfx.py shot $P --manifest demo.json # YTCR: образец типа без фильма → snapshots/ $V $HC/gfx.py build --job $J --edl edl_v4.json && $V $HC/gfx.py shot --job $J --only scr_070 # YTLAB: type · viz · layout из {CODE}_screens_v1.json $V $HC/solo.py gfx build --job $J && $V $HC/solo.py mock --job $J # YTCG: tpl из {CODE}_screens_v2.json; mock — на кадре, в галерею нельзя $V $S viz --job $JOB --only S04 --init && $V $S viz --job $JOB --only S04 --render # выноски шортса → viz/S04.mov $V $S gfx --job $JOB # плашки и знак → gfx/brand.png, gfx/p_<имя>.png cd ~/YTAI/scripts/999_extra/remotion && npm run alpha -- LowerThird out/lower_third.mov # Remotion: титр с прозрачным фоном — через render_queue.py
cd ~/RYA/wt/kb-claude-editing python3 scripts/site/gen_kb_claude.py --check # вес страниц трека, без записи python3 scripts/site/gen_kb_claude.py && python3 scripts/site/gen_kb.py --strict # страницы трека → крошки, этапы; lint команд шагов ls -l web/kb/claude-visuals/media | awk '$5 > 600000' # ролики тяжелее 600 КБ