База знаний · KB

📊 ContentList — таблица канала

Мастер-таблица каждого канала: одна строка = один проект. Полный стандарт: раскладка колонок A–P «что и где», статусы, спринты и палитра, валидации, смарт-чипы, автозаполнение Duration/Last modified и как завести таблицу нового канала.

📐 Канон v2 (2026-07-03). Новый лист = копия шаблона, не сборка с нуля. Все листы каналов держим побитово одинаковыми по формату — расходится только контент.

1 Листы и шаблон

У каждого канала свой Google Sheet «<Канал> ContentList». Реестр — web/_data/channels.json (резолв по spreadsheet-id, не по имени: таб можно переименовывать). Один Trello-борд = один Shared Drive = один ContentList = одна страница-хаб.

🧬 Шаблон — источник формата
Всё форматирование (поворот меток, палитра, валидации, CF-правила) живёт в шаблоне и наследуется файловой копией files.copy. Держим его эталонно чистым: без данных, без лишних валидаций — копия наследует и грязь.
📊 Листы каналов (канон v2)

Запись в листы — Sheets API под rscore-токеном (~/.config/rscore/token.json, [email protected]; scope drive покрывает Sheets v4). Чтение — Drive MCP (read-only).

2 Колонки A–P — что и где

Ровно 16 колонок, правее P — пусто (сетка обрезана). ⚠️ Кодом адресуем колонки по тексту заголовка в строке 1, не по букве.

A№ (Sprint)
BVideo Project
CNote
DDoc
EYouTube
FThumbnail
GVideo link
HLight link
IFile name
JLast modified
KSource Material
LStatus
MVideo ETA
NShorts
OShorts folder
PDuration

🟡 рукой — заполняет человек · 🟦 кодом — пишет автоматика (rscore-токен) · 🟪 шаблон — часть вёрстки листа, данные не пишутся.

КолонкаЧто лежитКто пишет
AВертикальная метка Sprint 1…11, merge на весь блок спринта. Заголовок A1 = «№» — горизонтально. Данных в колонке нет.шаблон
BVideo ProjectКод и имя проекта: YTXX01_Имя_Гостя — как папка на Drive и карточка в Trello.рукой
CNoteСвободные заметки по проекту: кто монтирует, договорённости, особые условия. Обычный текст, без валидаций.рукой
DDocGoogle Doc проекта (сценарий / описание) — чип с прямой ссылкой docs.google.com/document/d/…/edit (не file-URL — иначе открывается вьюер Диска, §6).рукой
EYouTubeСсылка на ролик. Кодом пишется plain https://youtu.be/<id>; смарт-чипом её делает человек в UI (Tab → «заменить чипом») — API для YouTube-чипов не существует.кодом
FThumbnailDrive-чип обложки из 05_Thumbnail/.кодом
GVideo linkDrive-чип мастера (файл, залитый на YouTube) из 06_YouTube/.кодом
HLight linkDrive-чип 4K-копии с YouTube (yt-dlp, легче мастера) из 06_YouTube/.кодом
IFile nameИмя мастер-файла (как в 06_YouTube).кодом
JLast modifiedДата файла, формат yyyy-mm-dd. Кодом — только пустые ячейки (из Drive modifiedTime); заполненные руками даты не перезаписывать (§7).кодом
KSource MaterialDrive-чип папки проекта YTXX… на Shared Drive канала.кодом
LStatusЭтап проекта — строгий дропдаун 11 токенов 01Created…11Archived, ячейка красится CF-правилом (§3).рукой
MVideo ETAПлановая дата выхода, yyyy-mm-dd (DATE-валидация).рукой
NShortsЧекбокс «шортсы есть»: ✓ = в папке O лежат готовые шортсы. Видно без клика по папке.рукой
OShorts folderDrive-чип папки шортсов проекта (04_Shorts) — туда заливают готовые шортсы, оттуда же публикуют на YouTube. Файлы внутри: <код проекта>_1.mp4, _2… — префикс показывает, из какого видео шортс.кодом
PDurationДлительность мастера, формат [m]:ss (37:31). Из Drive-метаданных видео (§7).кодом

Удалены в v2 (2026-07-03): Stage # (дублировал первые 2 символа Status), Hold (не использовался), Pcs (не нужна). Если видишь их в каком-то листе — лист отстал от канона, прогнать реформатор (§9).

3 Status — 11 статусов и цвета

Колонка L: строгий дропдаун + ровно 11 CF-правил (TEXT_EQ), по одному на статус. Никаких других CF-правил на листе нет. Что статусы значат по процессу — Project Ops §2.

01Created 02Script 03Shooting 04PreEditing 05Editing 06Review 07Revisions 08Gate 09Ready 10Published 11Archived

4 Спринты и палитра

Проекты сгруппированы в спринты. Колонка A — вертикальная метка Sprint N (merge на блок), весь блок A–O залит цветом спринта. Заливка статическая по ячейкам — не conditional и не banding. Пустые слоты спринта держим заранее.

🎨 Палитра v2 · мягкая насыщенная · HSL S=0.48 L=0.82
S1 CBBBE7 лаванда S2 BBD1E7 небо S3 E7C2BB роза S4 E7DCBB масло S5 BBE7C5 мята S6 BBC5E7 перванш S7 E7D1BB абрикос S8 BBE2E7 аква S9 E7BBD7 орхидея S10 BBE7D7 пена S11 DCBBE7 сирень header FCE5CD

5 Валидации — где какие и где никаких

DV-канон — ровно три правила, только в зоне спринтов (строка 2 … конец последнего блока). Валидация где попало = красные «Invalid»-треугольники по всему листу.

ДиапазонПравилоДетали
L (Status)ONE_OF_LIST11 токенов, strict, с дропдауном (showCustomUi).
M (Video ETA)DATE_IS_VALIDДата, не строгая (подсветит, не отобьёт).
N (Shorts)BOOLEANЧекбокс «шортсы есть», strict. Значения — только boolean, не текст «FALSE».
всё остальноеНикаких валидаций: ни на шапке, ни на A–K, ни на O/P, ни правее/ниже зоны.
☣️ Анти-паттерны (реальный кейс-бардак YTAZ, до реформы)

6 Смарт-чипы — что можно кодом, что нельзя

Rich-чип (карточка-превью в ячейке) API умеет ставить только для Drive-файлов. Матрица по колонкам:

КолонкаЧипКак
D Doc · F Thumbnail · G Video · H Light · K Source · O Shorts folderкодом ✓Sheets API: ячейка = "@" (плейсхолдер) + chipRuns[].chip.richLinkProperties.uri, fields "chipRuns,userEnteredValue". Сервер сам резолвит имя и mime. Готовый CLI: scripts/999_extra/sheets_chip_links.py.
⚠️ Google-нативные файлы (Doc/Sheet/Slides) — uri строго ПРЯМОЙ editor-URL docs.google.com/document/d/<id>/edit, не drive.google.com/file/d/…: файловый URL открывает вьюер Диска, и документ приходится открывать вторым кликом. CLI сам определяет mimeType и строит верный URL; бинарные (mp4/jpg) — file/d/<id>/view.
E YouTubeрукамиПрограммного пути не существует (ни API, ни Apps Script). Кодом кладём plain https://youtu.be/<id>, человек в UI: курсор на URL → Tab → «заменить смарт-чипом» (есть батч-конверт по диапазону).
TrelloникакGoogle резолвит чипы только для своих сервисов; Trello-URL API отбивает (400). Если нужна ссылка — обычный =HYPERLINK().
python3 ~/YTAI/scripts/999_extra/sheets_chip_links.py \
  --sheet <SPREADSHEET_ID> --tab "<таб>" \
  --chip "G12=<fileId|url>" --chip "H12=…" --chip "F12=…" \
  --dry-run   # сначала посмотреть, потом без флага; --verify для контроля

Грабли: плейсхолдер именно @; перезапись userEnteredValue стирает старые chipRuns — слать вместе; на чтении чип виден как chipRuns (форма ≠ записи).

7 Duration и Last modified — автозаполнение

Обе колонки заполняются кодом из метаданных мастер-файла на Drive. File id берём из чипа G Video link.

⏱ O Duration
files.get(fileId, fields="videoMediaMetadata")durationMillis. В ячейку — serial: millis/1000/86400, формат [m]:ss.
⚠️ У свежезалитого файла Drive мог ещё не обсчитать видео — videoMediaMetadata пустой. Fallback: длительность с YouTube:
yt-dlp --force-ipv4 --skip-download \
  --print duration "https://youtu.be/<id>"
📅 J Last modified
files.get(fileId, fields="modifiedTime") → дата yyyy-mm-dd.
⚠️ Заполнять только пустые ячейки. Drive modifiedTime = дата заливки на Drive, а не дата монтажа: у файлов, залитых пачкой, она одинаковая и врёт. Даты, поставленные рукой, — не перезаписывать.

8 Новый канал — завести таблицу

Таблица = четвёртый слой запуска канала (Trello → Drive → ContentList → хаб). Полный процесс запуска — Channel Launch §4.

1
Копия шаблона Template ↗ → Файл → Создать копию (или Drive files.copy) — наследует поворот меток, палитру, DV и CF 1:1. Не строить лист с нуля через API — поворот 90° программно не ставится. Если spreadsheet-id должен остаться прежним (легаси-таблица канала) — sheets.copyTo таба шаблона внутрь неё: тоже сохраняет поворот; данные перелить, старый таб скрыть (кейс YTCH).
2
Назвать и положить <Канал> ContentList → на Shared Drive канала, доступ anyone-with-link reader.
3
Прописать в реестр spreadsheet-id → web/_data/channels.json (поле sheet). Резолв всех автоматик — по id.
4
Первый проект строка 2 (блок Sprint 1): B Video Project + K Source Material (чип папки) + L Status.

9 Гигиена и тулинг

🧹 Правила гигиены листа
  • Колонок ровно 16 (A–P), строк — до конца последнего спринт-блока. Правее и ниже — сетка обрезана.
  • Booleans — только галками, статусы — только токенами из списка.
  • Кодом адресуем колонки по заголовку, строки — по коду проекта в B.
  • Явных рамок нет; заливка — только спринт-полосы и шапка.
  • Один формат дат везде: yyyy-mm-dd.
🧰 Тулинг
scripts/999_extra/contentlist_reform_v2.py — привести лист к канону v2 (структура, DV, CF, палитра)
scripts/999_extra/sheets_chip_links.py — поставить Drive-чипы
scripts/08_youtube/upload_youtube.py — заливка ролика (пишет строку после аплоада)
~/.config/rscore/token.json — токен записи ([email protected], scope drive)
База знаний yt.rya.ae · родитель: 3.2 YouTube Upload & Table · смежное: Channel Launch · Project Ops · канон v2 · обновлено 2026-07-03.
скопировано ✓