◂ Этап ThumbnailRYA.AEThumbnail · From Emotions to YouTube — от эмоций героев до «стоит на YouTube»: фразы, вырезки из 4K, ChatGPT рисует, Claude проверяетэтап · 5 окт 2026
Роман 04.10.2026: «а где моя обложка? ты тз делал чтобы сделать». Этап сдаёт готовые картинки, а не задание генератору: 3–4 обложки 1280×720 до 2 МБ, выбор заказчика, выбранная стоит на ролике, ссылки на Drive, чип в таблице, весть в Telegram. Вход — готовый фильм (смысл, фразы, кадры) и ДНК канала. Отличие от метода vidIQ: там генератор рисует людей заново по листу поз; здесь — настоящие вырезки из 4K в цвете фильма, ChatGPT их переосвещает и собирает сцену, а Claude сверяет лица и буквы до показа. Первый кейс — YTLAB01 «Лаборатория» (Павел Биленко × Роман), 04–05.10.2026: три раунда за ночь, выбрана B.
📌 Правило. Фраза — в боль ЦА с маркером темы и цитатой фильма; на обложке не больше четырёх элементов: два лица крупно, одно огромное слово без плашки, один предмет, логотип; эксперт справа, взгляды сходятся. Рисует ChatGPT по команде Claude, но показывать можно только после проверки: лица против настоящих кадров, каждая буква, вид в ленте 168 px. Если ИИ усилил эмоцию — сказать заказчику прямо.
Одним взглядом
≤ 4
элементов на обложке
два лица · слово · предмет · логотип
33–37%
высоты кадра — лицо в v5 (рамка Vision)
сборка из кадров 23–28 % · ChatGPT с плашкой 27–31 %
2–4мин
рисует ChatGPT одну картинку
11 прогонов по журналам: 1:19–4:32, медиана 2:51 · варианты параллельно
168px
лента — последняя проверка перед показом
главная строка читается, лица видны · файл < 2 МБ
1Схема2Цепочка3Кейс4Правила5ТЗ6Проверка7Выбор8Инструменты9Модели10Знания11Грабли12Вопросы13vidIQ14Команды15Где лежит

24.1 · 1Схема: восемь шагов от фильма до ролика

Вход — фильм vN после «ок» и ЦА канала. Шаги 1, 2 и 6 — сессия Claude, 3–5 и 8 — машина, 7 — Роман.

1
Фразыагент3–4 фразы в боль ЦА, каждая — цитата фильма с таймкодом; маркер темы в каждой⇒ варианты A–D в задании✓ PROMISE CHECK: цитата с tc
2
Эмоцииагентмоменты с сильной эмоцией каждого героя → 4K-кадр крупной камеры в цвете фильма (frames4k.py)⇒ f4k/R_C.png + маски
3
Нарезкамашина«поднять объект» (Apple Vision): человек вместе с микрофоном → PNG без фона + рамки лиц (faces)⇒ cut/*.png, faces.txt✓ рассадка ≠ «эксперт справа» → зеркалить
4
Образецмашинакомпоновка из вырезок: где лица, предмет, текст — make_sample.py, HTML ×2 → 1280×720⇒ первая картинка для ChatGPT
5
ОтрисовкамашинаChatGPT рисует сам по команде Claude: codex exec -i образец -i вырезки, ТЗ «сначала дизайн»⇒ gpt/*_gpt2.png✓ 2–4 мин на картинку
6
Проверкаагентcheck.py: файл 1280×720 до 2 МБ, лица кропами рядом с кадрами, лента 168 px; буквы — глазами; ИИ усилил эмоцию — сказать✓ иначе не показываем
7
Выборчеловекстраница: обложки 2×2 крупно, «🔗 ссылка», «в тест» / «главная» → строка ответа⇒ «Выбираю B … ставь её»
8
Поставитьмашинаthumbnails.set (канал из channels.json) · Drive 05_Thumbnail · чип F в ContentList · Telegram✓ Test & compare — руками в Studio
↺ правка Романа («перегруз», «слабо») — новый раунд с шага 4 или 5, фразы остаются
машиначеловекагент

В YTLAB01 три раунда за ночь: сборка из кадров (v1–v3) → ChatGPT «минимум элементов» (v4) → ChatGPT «сначала дизайн» (v5, выбрана B, стоит на ролике 05.10 01:08). Старый путь vidIQ — /kb/thumbnail/: когда исходников 4K нет.

24.1 · 2Цепочка на одном варианте: B «ПОМОЙКА?»

Четыре картинки одного варианта — от кадра исходника до рисунка ChatGPT. Лица на рисунке — те же вырезки, переосвещённые.

4K-кадр в цвете фильма
4K-кадр в цвете фильма
момент 32:07 фильма → номер кадра исходника cam2 → conform.grade
frames4k.pyffmpeg
$V frames4k.py --job $JOB --only R_C
Вырезка без фона
Вырезка без фона
маска «поднять объект»: человек вместе с микрофоном; края рамки гаснут
segment · Apple Visioncutouts.py
segment f4k/R_C.png R_C_person.png R_C_subject.png
Образец компоновки (v3)
Образец компоновки (v3)
вырезки зеркально, логотип в ведре, фраза Unbounded на лаймовой плашке
make_sample.pyChrome ×2
$V make_sample.py --job $JOB --only B --tag v3
Рисунок ChatGPT (v5)
Рисунок ChatGPT (v5)
образец + две вырезки → крупные лица, слово без плашки, один предмет; лица сверены
codex exec -iгенерация изображений
gpt_draw.sh $GPT $GPT/prompt_B_design.txt @$GPT/in/B/inputs.txt

Время фильма — v6 (с хуком «Тизер», сдвиг +5,04 с от v5). Исходник Романа — cam2, Павла — cam3; номер кадра общий, потому что три камеры пишет один рекордер синхронно.

24.1 · 3Кейс YTLAB01: было → стало, одни и те же фразы

Рамка лица — Apple Vision (faces) по готовым файлам, % высоты кадра 720, варианты A–C с двумя лицами (у портрета D — 36–38 % во всех раундах). В ТЗ просим голову ≈ 45 %; рамка лица меньше головы.

былоСборка из кадров · v1–v3
23–28%
лицо
6+
элементов
  • лицо 23–28 % высоты кадра
  • две строки, лаймовая плашка на всю ширину тяжелее лиц
  • 2 лица + логотип + паутина, облачка, смайлы + текст
  • в ленте 168 px белая строка не читается
  • Роман: «перегруз… не видна общая превью»
сталоChatGPT «сначала дизайн» · v5
33–37%
лицо
4
элемента
  • лицо 33–37 % (в ТЗ — голова ≈ 45 %)
  • маленькая строка + огромное слово без плашки
  • 2 лица + 1 предмет + логотип + текст
  • в ленте 168 px главная строка и эмоции читаются
  • Роман выбрал B — стоит на ролике 05.10 01:08

Промежуточный раунд v4 — ChatGPT по ТЗ «минимум элементов», с плашкой: лицо 27–31 %, Роман: «почему так слабо с точки зрения дизайна?».

v1–v3 · сборка из кадров (make_sample.py): v1 без «компании», v2 смотрели врозь, v3 — зеркально и с маркером темы
A · КАНАЛ КОМПАНИИ — 10 ПРОСМОТРОВ?
A · КАНАЛ КОМПАНИИ — 10 ПРОСМОТРОВ?
пыльный логотип в паутине · Роман, 44:04: «…10 просмотров, 20 просмотров»
v3из кадров
$V make_sample.py --job $JOB --tag v3
B · КАНАЛ КОМПАНИИ — ПОМОЙКА?
B · КАНАЛ КОМПАНИИ — ПОМОЙКА?
логотип в мусорном ведре · Роман, 32:03: «и получается помойка»
v3из кадров
$V make_sample.py --job $JOB --tag v3
C · КАНАЛ КОМПАНИИ: О ЧЁМ СНИМАТЬ?
C · КАНАЛ КОМПАНИИ: О ЧЁМ СНИМАТЬ?
облачка вопросов · Роман, 7:42: вопросы зрителей — темы видео
v3из кадров
$V make_sample.py --job $JOB --tag v3
D · 5 ОШИБОК КАНАЛА КОМПАНИИ
D · 5 ОШИБОК КАНАЛА КОМПАНИИ
портрет, логотип крупно · Павел, 31:26: «5 ошибок лидера…»
v3из кадров
$V make_sample.py --job $JOB --tag v3
v4 · ChatGPT, ТЗ «минимум элементов» — два лица, логотип, фраза на плашке
A · КАНАЛ КОМПАНИИ — 10 ПРОСМОТРОВ?
A · КАНАЛ КОМПАНИИ — 10 ПРОСМОТРОВ?
пыльный логотип в паутине · Роман, 44:04: «…10 просмотров, 20 просмотров»
v4ChatGPT · раунд 1
gpt_draw.sh $GPT prompt_X_simple.txt …
B · КАНАЛ КОМПАНИИ — ПОМОЙКА?
B · КАНАЛ КОМПАНИИ — ПОМОЙКА?
логотип в мусорном ведре · Роман, 32:03: «и получается помойка»
v4ChatGPT · раунд 1
gpt_draw.sh $GPT prompt_X_simple.txt …
C · КАНАЛ КОМПАНИИ: О ЧЁМ СНИМАТЬ?
C · КАНАЛ КОМПАНИИ: О ЧЁМ СНИМАТЬ?
облачка вопросов · Роман, 7:42: вопросы зрителей — темы видео
v4ChatGPT · раунд 1
gpt_draw.sh $GPT prompt_X_simple.txt …
D · 5 ОШИБОК КАНАЛА КОМПАНИИ
D · 5 ОШИБОК КАНАЛА КОМПАНИИ
портрет, логотип крупно · Павел, 31:26: «5 ошибок лидера…»
v4ChatGPT · раунд 1
gpt_draw.sh $GPT prompt_X_simple.txt …
v5 · ChatGPT, ТЗ «сначала дизайн» — выбрана B
A · КАНАЛ КОМПАНИИ — 10 ПРОСМОТРОВ?
A · КАНАЛ КОМПАНИИ — 10 ПРОСМОТРОВ?
⚠ ChatGPT повернул взгляд Павла и открыл глаза Роману — сказано Роману
v5ChatGPT · раунд 2
gpt_draw.sh $GPT prompt_X_design.txt …
B · КАНАЛ КОМПАНИИ — ПОМОЙКА?
B · КАНАЛ КОМПАНИИ — ПОМОЙКА?
★ выбрана Романом («ставь её»), стоит на ролике 05.10 01:08 · логотип в ведре
v5ChatGPT · раунд 2
gpt_draw.sh $GPT prompt_X_design.txt …
C · КАНАЛ КОМПАНИИ: О ЧЁМ СНИМАТЬ?
C · КАНАЛ КОМПАНИИ: О ЧЁМ СНИМАТЬ?
⚠ ChatGPT раскрыл смех Роману — сказано Роману
v5ChatGPT · раунд 2
gpt_draw.sh $GPT prompt_X_design.txt …
D · 5 ОШИБОК КАНАЛА КОМПАНИИ
D · 5 ОШИБОК КАНАЛА КОМПАНИИ
портрет, логотип крупно · Павел, 31:26: «5 ошибок лидера…»
v5ChatGPT · раунд 2
gpt_draw.sh $GPT prompt_X_design.txt …

24.1 · 4Слова Романа → правило этапа

Каждое правило стоило круга в кейсе YTLAB01 (04–05.10.2026).

РоманЧто это значит для этапа
«а где моя обложка? ты тз делал чтобы сделать»этап сдаёт готовые картинки, ТЗ — внутренний шаг
«нужен больше фокус на ЦА — компании, у которых есть свои ютуб-каналы и они не знают, что с ними делать»фраза — в боль ЦА, а не про тему вообще: «КАНАЛ ЕСТЬ — 10 ПРОСМОТРОВ?», «ВАШ КАНАЛ — ПОМОЙКА?»
«должно быть понятно, что мы про ютуб-каналы для компаний»маркер темы в каждой фразе: «КАНАЛ КОМПАНИИ» + логотип YouTube
«гости смотрят в разные стороны… они должны смотреть друг на друга»взгляды сходятся; не совпало с рассадкой в студии — зеркалить вырезки
«перегруз… не видна общая превью»на обложке ≤ 4 элементов; на странице выбора первый экран — только обложки
«почему так слабо с точки зрения дизайна? должна быть чистая, эмоции, легко считываться»раунд «сначала дизайн» — по умолчанию (ТЗ ниже)
«ты можешь здесь напрямую юзать чат гпт? пусть делает картинки, ты проверять будешь»отрисовка — Codex CLI по команде Claude; проверка — Claude, до показа
(17.08.2026) эксперт справа или по центру, слева никогдаправило канона обложек; в YTLAB01 Роман справа, Павел слева

24.1 · 5ТЗ «сначала дизайн»: раскладка и промпт

Схемы кадра 1280×720: что было в сборке из кадров и что просим у ChatGPT. Пунктир — зоны текста и предмета, силуэты — головы героев.

белая строка — в 168 px не читаетсяПОМОЙКА? — на плашке во всю ширинулоготип + 3–4 предметалицо 23–28 % · элементов 6+
Было: сборка из кадров v1–v3всё одного веса — нет фокуса; плашка тяжелее лиц, предметов много
лицо 23–28 %плашка во всю ширину6+ элементов
КАНАЛ КОМПАНИИ — строка-маркерПОМОЙКА? — огромное слово, без плашкиодин предмет ≤ головы◄ взгляды сходятся ►
Стало: «сначала дизайн» v5иерархия «лица → фраза → предмет»; головы ≈ 45 % высоты (рамка лица 33–37 %), эксперт справа, фон #0A0D16, свет: ключевой тёплый + контровой
2 лица1 слово без плашки1 предметлоготип

Эксперт справа или в центре — правило канона с 17.08.2026; в YTLAB01 рассадка в студии была обратной, поэтому обе вырезки зеркальные.

Промпт, который сработал (вариант B, раунд 2) — шаблон этапа prompt_design_template.txt заполняет make_prompt.py
prompt_B_design.txt — скопировать и подставить своё
Нарисуй обложку YouTube инструментом генерации изображений.

ЭТО ДОЛЖНА БЫТЬ СИЛЬНАЯ, ЧИСТАЯ ОБЛОЖКА УРОВНЯ ТОП-КАНАЛОВ YOUTUBE (как у Diary of a CEO, MrBeast):
считывается за полсекунды даже в маленькой миниатюре. Фокус один — лица и эмоции. Ничего мелкого и лишнего.

ИЕРАРХИЯ: 1) лица и эмоции — главное, крупно; 2) фраза — коротко и крупно; 3) логотип YouTube — один предмет.
Больше воздуха, тёмный чистый фон, премиальный свет: тёплый ключевой свет на лицах, контровой контур, глубина резкости.

1-я картинка — образец компоновки. Повтори расстановку, но сделай чище, крупнее и качественнее.

ЛИЦА — приложенные вырезки, это настоящие люди из выпуска: лица, очки, причёски, одежду не меняй.
Крупно: головы занимают почти всю высоту под текстом (каждая голова ≈ 45 % высоты кадра), обрезка по плечи/грудь.
— 2-я картинка (Павел) — слева: ироничная усмешка;
— 3-я картинка (Роман) — справа, чуть крупнее: энергичный жест рукой, убеждает.
Они смотрят друг на друга.

ТЕКСТ — сверху, кириллица точно так, буква в букву:
маленькая строка «КАНАЛ КОМПАНИИ —» — белым, над главной;
главная — «ПОМОЙКА?»: огромные лаймовые буквы #E4FF6E с тонкой тёмной тенью.
Шрифт — широкий очень жирный гротеск, заглавные. Никакой плашки на всю ширину. Текст не закрывает лица. Других надписей нет.

ПРЕДМЕТ — между лицами, внизу: металлическое мусорное ведро, из него торчит логотип YouTube; небольшое — не больше головы.

ЦВЕТ — фон глубокий тёмно-синий #0A0D16, лайм #E4FF6E — только для ключевого слова, красный — только логотип YouTube.
ФОРМАТ — 1280×720. Сохрани файлом YTLAB01_thumb_B_gpt2.png в текущую папку и ответь путём.

«Сохрани файлом в текущую папку» — так Codex сам копирует PNG из ~/.codex/generated_images/ рядом и отвечает путём. Раунд 1 («минимум элементов», с плашкой) — prompt_X_simple.txt в кейсе: слабее.

24.1 · 6Проверка — обязательная, иначе не показываем

Одна команда на раунд: check.py --job $JOB --round 2 --version 5 — готовые файлы 1280×720, листы лиц и ленты, отчёт; код выхода 1, если не прошли техника или число лиц. Машина меряет, глазами смотрит сессия: лица, буквы, лента, угол, число элементов.

ЧтоКакНормаОткуда
Лицалист check_X.jpg: кроп лица из рисунка рядом с кропом настоящего кадра (образец уже зеркальный)узнаётся; выражение как в кадреYTLAB01 v5: в A ChatGPT повернул взгляд Павла, в C раскрыл смех Роману — сказано Роману
Буквыкаждая: Й, Ё, тире, двоеточие, «?»буква в букву с ТЗChatGPT кириллицу держит (v4, v5 без ошибок), но смотреть обязательно
Ленталист feed_v5.png: каждая обложка в 360 и 168 pxглавная строка читается, лица видны168 px — карточка в колонке «Далее»; «считывается за полсекунды»
Техникаfinalize.py внутри check.py: 1280×720 PNG; правый нижний угол свободен — там длительность< 2 МБ (лимит thumbnails.set)«лимит — это максимум, а не цель»: сжимать ровно до лимита, оригинал оставить
Композицияу портрета check.py меряет центр лица (x ≥ 0,40); у пары — глазамиэксперт справа или в центре; взгляды сходятсяканон 17.08.2026; YTLAB01 v5: центр лица Романа x = 0,71–0,77
Высота лицарамка Apple Vision, % высоты кадраориентир у пары ≥ 32 %; в ТЗ — голова ≈ 45 %YTLAB01: раунд 33–37 % принят, 27–31 % — «слабо»; проба 05.10 по тому же ТЗ дала 29–30 %. Предупреждение, не сбой
Элементыпересчитать≤ 4: два лица, слово, предмет (+ логотип)Роман 05.10: «перегруз… не видна общая превью»
Чек-лист перед показом
✓ лица узнаются✓ эмоция как в кадре — или сказано заказчику✓ каждая буква на месте✓ в 168 px читается главная строка✓ 1280×720, меньше 2 МБ✓ правый нижний угол свободен✓ эксперт справа или в центре✓ взгляды сходятся✓ элементов не больше четырёх
Листы проверки на кейсе
Лица: кадр ↔ ChatGPT (A и B)
Лица: кадр ↔ ChatGPT (A и B)
слева кадр (сборка v3), справа рисунок ChatGPT v5. A — взгляд Павла повёрнут, у Романа открыты глаза; B — как в кадре. Лица узнаются везде. Такой лист на каждый вариант пишет check.py
check_faces.pyfaces · Apple Vision
$V check.py --job $JOB --round 2 --version 5
Лента: 360 и 168 px (B v3 · v4 · v5)
Лента: 360 и 168 px (B v3 · v4 · v5)
сверху 360 px, снизу 168 px (пиксели ×2): у v5 читаются и слово, и лица; у v3 белая строка пропадает
feed_check.py
$V feed_check.py --out feed_B.png YTLAB01_thumb_B_v3.png YTLAB01_thumb_B_v4.png YTLAB01_thumb_B_v5.png

24.1 · 7Страница выбора и сдача

Первый экран — только обложки 2×2 и выбор; лента, прошлые раунды и вырезки свёрнуты. Строка ответа копируется одной кнопкой.

Первый экран: обложки и выбор
Первый экран: обложки и выбор
сверху «✅ На YouTube стоит B», у каждой обложки «🔗 ссылка» · «в тест» · «главная»; внизу строка ответа «YTLAB01 обложка: в тест — … · главная — B»
pick_page.pydrive_links.json
$V pick_page.py --job $JOB --version 5 --prev 4,3
Свёрнуто: как смотрится в ленте
Свёрнуто: как смотрится в ленте
те же обложки карточками YouTube — лента на компьютере и на телефоне, с названием ролика и длительностью
pick_page.pyлента YouTube
название, канал и длительность — из задания: title · channel_name · duration
Поставить и сдать — после слова Романа («ставь её»)
1Поставить на роликthumb_set.py
  • thumbnails.set через API: канал и токен из 08_youtube/channels.json, файл < 2 МБ
  • запись в 06_YouTube/{CODE}_v{N}_youtube.json: thumbnail · thumbnail_set · thumbnail_url
  • «Тестирование и сравнение» (Test & compare) — только руками в Studio, в API его нет
2СдатьDrive · чип · Telegram
  • обложки → Drive 05_Thumbnail с доступом по ссылке → drive_links.json (кнопки «🔗 ссылка»)
  • чип F в ContentList: sheets_chip_links.py --chip "F3=<ID файла>" (YTLAB01 — F3)
  • весть Роману в Telegram: что стоит на ролике и ссылки (YTLAB01: обложки v5 — TG 2655–2658, итог — TG 2666)

24.1 · 8Инструменты этапа: что делает и из чего вырос

Инструменты кейса вынесены из проекта в этап и переведены на задание thumb_job.json. Последний столбец — что именно проверено 05.10.2026 на данных YTLAB01 и что не запускалось (на ролик ничего не ставилось). Выход шёл во временную папку; в папку кейса добавлено задание thumb_job.json.

ИнструментЧто делаетИз чего вырос (кейс)Проверено 05.10
thumb_job.jsonзадание: фразы с цитатами, герои и камеры, моменты эмоций, раскладки образца, выбор Романаконстанты в make_tz.py, make_tz_v3.py, make_thumbs.pyобразец — кейс YTLAB01; цитаты сверены с субтитрами v6
frames4k.pyмомент фильма → 4K-кадр героя в цвете фильма + маскиcompose/frames4k.pyимпорт движка и листа версии; готовые кадры пропущены, новые не снимались
segment (Swift)маски «только человек» и «поднять объект»compose/segment.swift, без изменениймаски совпали с кейсом пиксель в пиксель
cutouts.pyвырезка по габаритам человека, края гаснут; рамки лиц в faces.txtcompose/cutouts.py + ручной прогон facesвырезка и рамка лица R_C совпали с кейсом
make_sample.pyобразец компоновки HTML ×2 → 1280×720; раскладки и предметы — в заданииcompose/make_thumbs.pyобразцы B и D совпали с v3 кейса пиксель в пиксель
make_prompt.py + prompt_design_template.txtТЗ «сначала дизайн» и картинки к нему в порядке промптаgpt/prompt_X_design.txt, писались рукамипромпты A–D; B повторяет промпт кейса по смыслу
gpt_draw.shChatGPT рисует: Codex CLI, картинки флагом -igpt/run_gpt.sh, run_gpt2.shпроба B с тремя вложениями: 4:32, буквы и лица в норме, лица 29–30 % — ниже ориентира, в работу не пошла; до того им же соседняя сессия — три картинки визуализации параллельно
check.py = finalize.py + check_faces.py + feed_check.pyготовые файлы 1280×720 до 2 МБ, листы лиц и ленты, отчётfinals() в make_tz_v5.py + проверка рукамираунд 2 чистый; раунд 1 помечен «мелко»; B v5 побайтно совпала с файлом кейса
pick_page.pyстраница выбора: обложки 2×2, ссылки, «в тест» / «главная», строка ответаbrief/make_tz_v5.py (и v3, v4 под ним)страница собрана — снимки выше
thumb_set.pythumbnails.set, канал и токен из channels.json, запись в JSON выпуска08_Cut/hooks/set_thumb_v6.pyтолько --dry-run: обложка B стоит на ролике с 05.10 01:08
999_extra/sheets_chip_links.pyсмарт-чип обложки в ContentListкак естьне запускался: чип F3 стоит с 05.10

Инструменты кейса в проекте (05_Thumbnail/brief/compose/, gpt/run_gpt*.sh, brief/make_tz_v5.py, 08_Cut/hooks/set_thumb_v6.py) оставлены как есть; первый прогон образца пересобрал промежуточные compose/html/thumb_B.* — итог тот же, что v3. Не обобщено: предметы образца — набор SVG из кейса (логотип, ведро, паутина, пыль, облачко); новый предмет — новый ключ PROPS в make_sample.py.

24.1 · 9Модели и движки

ЧтоЧемГдеЗаметка
Маска человекаApple Vision VNGeneratePersonSegmentationRequest (accurate)segment.swift, локальнотолько человек: волосы аккуратно, микрофон перед грудью вырезается — поэтому рамка, а не прозрачность
«Поднять объект»VNGenerateForegroundInstanceMaskRequest (macOS 14+)segment.swiftчеловек вместе с микрофоном и стаканом — прозрачность вырезки
Рамки лицVNDetectFaceRectanglesRequestfaces.swiftцентр и высота лица для компоновки; те же рамки — для проверки и замера
Цвет кадраconform.grade движка фильма (ffmpeg: проявка и look сцены)frames4k.pyвырезка в цвете выпуска, не в логе; номер кадра общий для трёх камер
ОбразецHTML ×2 в безголовом Chrome → 1280×720make_sample.pyтекст ужимается по ширине шрифтом канала (Unbounded); предметы — SVG
ОтрисовкаChatGPT, генерация изображений — через Codex CLI расширения VS Code (openai.chatgpt 26.930)gpt_draw.shcodex exec -i … ; 1:19–4:32 на картинку (11 прогонов по журналам), обложки 1280×720 PNG 1,0–1,3 МБ; в журнале — Codex 0.160.0, модель gpt-6.1-sol; вход — аккаунт ChatGPT Романа. Тем же способом — предметы и фоны для экранов: навык «Иллюстрации ChatGPT»
Запасные путиGemini в YouTube Studio (промпт ≤ 650 знаков) · vidIQрукамикогда вырезок нет или ChatGPT недоступен — метод vidIQ
ПоставитьYouTube Data API thumbnails.setthumb_set.pyканал и токен из 08_youtube/channels.json; обход DPI как в upload_youtube.py
СдачаDrive (rclone мимо VPN) · Sheets смарт-чипы · Telegramrclone · sheets_chip_links.py · tg.pyчип F в ContentList; drive_links.json — для кнопок «🔗 ссылка»; одной командой пока нет

24.1 · 10Что обновляет базу знаний

ФайлЧто в нёмКто пишетКогда
YTs/{CH}/dna.jsonфон, акцент, шрифт, маркер темы — ДНК канала для фразы и образцасессия, раз на каналновый канал
{проект}/05_Thumbnail/thumb_job.jsonфразы с цитатами, моменты эмоций, герои и камеры, раскладки образца, выбор Романасессияпо ходу этапа
05_Thumbnail/gpt/prompt_X_design.txtТЗ ChatGPT раунда; шаблон этапа — prompt_design_template.txtmake_prompt.py + правкикаждый раунд
05_Thumbnail/drive_links.json · 06_YouTube/{CODE}_v{N}_youtube.jsonссылки Drive; thumbnail, thumbnail_set, thumbnail_urlскрипты сдачипосле выбора
память: reference_hub_thumbnails · feedback_ytlab_packaging_channel_owners · reference_codex_cli_image_generationправила Романа, ЦА канала, как рисует ChatGPTсессияпосле круга с Романом
эта страница и /kb/thumbnail/два метода: вырезки + ChatGPT и vidIQсессиясмена поколения — переписать, не дописывать

24.1 · 11Ошибки и грабли

ТЗ вместо картинки«а где моя обложка? ты тз делал чтобы сделать» — этап сдаёт готовые обложки; ТЗ — внутренний шагYTLAB01, 04.10
Фраза про тему, а не в боль ЦА«500 000 ₽ в месяц» говорит с теми, кто только думает о YouTube; клиент — владелец канала с 10 просмотрамиРоман 04.10
Герои смотрят врозьв студии Роман слева смотрел вправо, Павел справа — влево; на обложке эксперт справа → без зеркала оба смотрят за крайv2 → v3
Перегрузпаутина + облачка + смайлы + плашка + логотип: «не видна общая превью»; ≤ 4 элементовv1–v3
Плашка во всю ширину тяжелее лицвсё одного веса — нет фокуса; маленькая строка + огромное слово без плашкиv4 → v5
ИИ усиливает эмоциюв A ChatGPT повернул взгляд Павла, в C раскрыл смех Роману; лица узнаются — сказать заказчику, решение за нимv5
Микрофон срезан ножоммаска «только человек» режет штангу; рамка — по человеку с запасом, прозрачность — по «поднять объект», края гаснут 6 %cutouts.py
Путь к codex меняетсябинарь лежит в версии расширения VS Code; за ночь 05.10 оно обновилось 26.930.41038 → 26.930.51102, путь из run_gpt.sh устарел; gpt_draw.sh берёт старшую версиюrun_gpt.sh → gpt_draw.sh
ERROR в журнале codex — ещё не сбой«failed to refresh available models: request timed out» в начале журнала — рисунок всё равно приходит; смотреть код выхода и файлcodex2_B.log
Файл тяжелее 2 МБthumbnails.set отклоняет; привести к 1280×720 PNG, сжимать ровно до лимита, оригинал оставитьрисунки ChatGPT 1,0–1,3 МБ — влезают
Test & compare не из API«Тестирование и сравнение» обложек включается только руками в Studio; API ставит одну05.10
Страница выбора — перегрузпервый экран — только обложки 2×2 и выбор, остальное свёрнуто; у каждой «🔗 ссылка»make_tz_v5 → pick_page.py
Шрифт ChatGPT ≠ Unboundedрисует свой жирный гротеск; в YTLAB01 принято как есть, правило на будущее — открытый вопросv5

24.1 · 12Открытые вопросы — к Роману

1Можно ли ИИ усиливать эмоцию, если лицо узнаётсяждёт решения
  • YTLAB01 v5: в A — взгляд Павла и открытые глаза Романа, в C — смех Романа
  • сказано прямо, решения не было; B и D — как в кадре
2Шрифт: Unbounded поверх или как естьждёт решения
  • ChatGPT рисует свой жирный гротеск, у канала Unbounded
  • в YTLAB01 принято как есть: B стоит на ролике со шрифтом ChatGPT
  • правило на будущее не задано: накладывать текст своим шрифтом (образец умеет) или принимать рисунок целиком
3Сколько вариантов на ролик: 4 или 3ждёт решения
  • в кейсе — 4 (A–D), в тест — не больше трёх (Test & compare)
  • три сразу под тест — дешевле на раунд
4ДНК канала для обложекрешено частично
  • код живёт в scripts/06_thumbnails/0601_ai_thumbnail (слой обложек уже был)
  • цвет и маркер темы пока дублируются в задании проекта; отдельные ключи в YTs/{CH}/dna.json — на выбор Романа

24.1 · 13Чем отличается от метода vidIQ

vidIQ · /kb/thumbnail/Этап Thumbnail · AI Editing
Кто рисует людейгенератор заново по листу позChatGPT вставляет настоящие вырезки из 4K и переосвещает
Входкадры ревью-прогона, лист поз, схема областей, промптфильм vN, лист версии, 4K-исходники, цвет фильма, ДНК канала
Текстгенератор пишет сам (кириллицу держит)ChatGPT пишет буква в букву; проверка каждой
Проверкаглазами перед загрузкойClaude до показа: лица кропами, буквы, лента 168 px
Кто запускаетРоман в vidIQ / StudioClaude сам (Codex CLI); Роман только выбирает
Когдаисходников 4K нет или доступ только к vidIQфильм собран кодом или есть 4K и лист версии
Результатобложка + загрузка рукамистоит на ролике через API, Drive, чип, Telegram

24.1 · 14Команды

Весь этап по шагам
V=~/YTAI/environment/.venv_transcribe/bin/python; T=~/YTAI/scripts/06_thumbnails/0601_ai_thumbnail
JOB=<проект>/05_Thumbnail/thumb_job.json; GPT=<проект>/05_Thumbnail/gpt

cp $T/thumb_job.example.json $JOB  # задание: код, камеры героев, моменты, фразы с цитатами, раскладки
$V $T/frames4k.py --job $JOB  # 4K-кадры в цвете фильма + маски (segment)
$V $T/cutouts.py --job $JOB  # вырезки RGBA по габаритам человека + рамки лиц faces.txt
$V $T/make_sample.py --job $JOB --tag v3  # образцы компоновки <CODE>_thumb_{A..D}_v3.png
$V $T/make_prompt.py --job $JOB  # ТЗ «сначала дизайн» → $GPT/prompt_{A..D}_design.txt + in/X/inputs.txt
$T/gpt_draw.sh $GPT $GPT/prompt_B_design.txt @$GPT/in/B/inputs.txt &  # ChatGPT рисует; варианты — параллельно
$V $T/check.py --job $JOB --round 2 --version 5  # готовые v5 + листы check_X.jpg и feed_v5.png + отчёт
$V $T/pick_page.py --job $JOB --version 5 --prev 4,3  # страница выбора → строка ответа Романа
$V $T/thumb_set.py --job $JOB --file <проект>/05_Thumbnail/<CODE>_thumb_B_v5.png  # стоит на ролике — после «ставь её»

Бинари Apple Vision один раз: cd $T && swiftc -O -o segment segment.swift && swiftc -O -o faces faces.swift. Движок фильма для frames4k — scripts/05_editing/0510_headless_cut (старая версия — копия из ~/.cache/ytai/stage_snapshots, флаг --stage).

Проверка по частям и сухие прогоны
$V $T/finalize.py --job $JOB --round 2 --version 5  # рисунки раунда → готовые 1280×720 до 2 МБ; прежнюю версию не затирает
$V $T/check_faces.py --sample $GPT/in/B/01_образец_B.png --drawn $GPT/<CODE>_thumb_B_gpt2.png --out check_B.jpg  # лица рядом: кадр ↔ ChatGPT
$V $T/feed_check.py --out feed.png <обложки…>  # 360 и 168 px
$T/gpt_draw.sh --dry-run $GPT $GPT/prompt_B_design.txt @$GPT/in/B/inputs.txt  # показать вызов codex, не рисуя
$V $T/thumb_set.py --job $JOB --file <обложка> --dry-run  # что и куда будет поставлено, без YouTube
Сдача
DST="<remote Drive проекта>:<папка проекта>/05_Thumbnail"; EN0=$(ipconfig getifaddr en0)

rclone copy <проект>/05_Thumbnail "$DST" --include "<CODE>_thumb_?_v5.png" --bind $EN0  # обложки на Drive мимо VPN
rclone lsjson "$DST" --files-only --include "*_v5.png" --bind $EN0  # ID файлов → drive_links.json: https://drive.google.com/file/d/<ID>/view
python3 ~/YTAI/scripts/999_extra/sheets_chip_links.py --sheet <id таблицы> --tab "<лист>" --chip "F3=<ID>" --verify  # чип обложки в ContentList
python3 ~/bin/tg.py photo rya $CHAT <обложка> "<b><CODE> · обложка</b> B стоит на ролике"  # весть Роману; подпись — HTML

Образец — сдача фильма в кейсе (08_Cut/hooks/light_v6.sh): тот же remote, чип и сообщение. Команда чтения ID проверена 05.10 на обложках v5 YTLAB01: четыре ссылки совпали с drive_links.json. Сдачи одной командой у этапа пока нет — надо построить.

24.1 · 15Где лежит

Код этапа
~/YTAI/scripts/06_thumbnails/0601_ai_thumbnail/README · thumb_job.example.json · frames4k · cutouts · make_sample · make_prompt + prompt_design_template · gpt_draw · check (finalize + check_faces + feed_check) · pick_page · thumb_set · segment.swift · faces.swift
Проект
{проект}/05_Thumbnail/готовые обложки {CODE}_thumb_{X}_v{N}.png · Archive/ прежние версии · drive_links.json · thumb_job.json
{проект}/05_Thumbnail/brief/compose/f4k/ кадры и маски · cut/ вырезки · faces.txt · html/ образцы
{проект}/05_Thumbnail/gpt/prompt_X_design.txt · in/X/ картинки к промпту · {CODE}_thumb_X_gptN.png · codex_X.log · check_X.jpg · feed_vN.png
{проект}/05_Thumbnail/brief/TZ_thumbnail.htmlстраница выбора (pick_page.py); прежние — brief/Archive/
{проект}/06_YouTube/{CODE}_v{N}_youtube.jsonthumbnail · thumbnail_set · thumbnail_url
Кейс YTLAB01
/Volumes/T9-Black-RYA/YTLAB/YTLAB01_Pavel_Bilenko/05_Thumbnail/v1–v2 в Archive/, v3–v5 в корне, gpt/, brief/ (make_tz_v5.py, compose/ — исходные инструменты кейса), thumb_job.json — задание кейса
…/YTLAB01_Pavel_Bilenko/00_Setup/00_Handoff/хроника раундов обложки — _archive/HANDOFF_2026-10-04_YTLAB01_v6_shorts_thumb.md, раздел 5; текущий — HANDOFF_2026-10-05_YTLAB01_delivery_next.md
Знания
~/YTAI/YTs/{CH}/dna.jsonДНК канала
память: reference_hub_thumbnails · reference_codex_cli_image_generation · feedback_ytlab_packaging_channel_owners · feedback_thumbnail_expert_right_or_center · feedback_youtube_thumbnail_2mbправила
~/YTAI/scripts/05_editing/TICKET_ai_editing_thumbnail.mdтикет этапа (05.10.2026)
/kb/claude-editing/#c-visual-chatgpt-imagesнавык «Иллюстрации ChatGPT» в каталоге: обложки и визуализация тем же gpt_draw.sh — открыть

Apple Vision работает локально, без токенов; Codex CLI входит аккаунтом ChatGPT Романа (~/.codex/auth.json) — ключей в KB нет.

Обложка · сверено 05.10.2026 по кейсу YTLAB01 (04.10 23:00 – 05.10 01:10) и коду этапа 06_thumbnails/0601_ai_thumbnail · пример: YTLAB01 · предыдущий: — (первый кейс этапа; метод vidIQ — на /kb/thumbnail/)