Решили: у Лаборатории появился режим съёмки ?shot=<id> — голая страница из одних канвасов
без шапки, транспорта и карточек, плюс скрипт scripts/lab-shot.ps1 вокруг него. Заодно сцены,
не читающие часы, обёрнуты в still(): считаются один раз, дальше копируются картинкой.
Почему: показать Максу картинку стенда стоило полутора минут, и он это остановил. Разбор показал три независимые траты: браузер поднимал ВЕСЬ раздел (сорок с лишним процедурных сцен) ради одной; профиль браузера создавался новый на каждый запуск и грелся с нуля; пол пересчитывался тридцать раз в секунду, хотя не зависит от времени вообще. Стало 2,5 секунды на снимок без пересборки и 5 — с ней.
Отвергли два варианта. Рисовать стенды второй раз на PIL, как сделано у карты
(scripts/map_shots.py): там это оправдано десятком примитивов, здесь — вторая реализация
живописного пола, которая разойдётся с первой на первой же правке. Держать один браузер
живым между снимками через devtools-протокол: сложность протокола против выигрыша в полторы
секунды, а постоянный профиль забирает ту же экономию одной строкой.
Размер кадра скрипт не знает и знать не должен: страница красит фон магентой, а снимок обрезается по ней. Иначе каждый стенд пришлось бы прописывать в аргументах.
Сказано: «Так. Стоп. Компакт и продолжим. Надо разобраться с оптимизацией, а то СЛИШКОМ
долго. Согласна?» (03.08.2026, сессия f76789b3).
Грабли: главные — не в скорости. Стенды неба и времени суток задавали кадр 430×330, а плита рисуется в натуральных пикселях (640×384 при PPU 32) и в такой кадр не влезала — она закрывала его целиком, и небо со всеми облаками оказывалось за краем. Час правок по облакам (горизонт, подсветка снизу, три варианта контура) ушёл в кадр, где облаков не было ВООБЩЕ, а я рассматривала снимки травы и рассуждала о воздушной перспективе.
Признак, который стоит запомнить: если правка не видна на снимке, сначала проверь, попадает ли
предмет правки в кадр, и только потом правь саму правку. Починка — вписывать мир в кадр
масштабом (fit), а не обрезать его.
Вторая: -Stand a,b,c без кавычек PowerShell разбирает в массив, и строковый параметр падает с
невнятным «cannot convert value». Параметр объявлен [string[]].
Владелец правды: docs/lab/src/main.ts (режим съёмки), docs/lab/src/draw.ts (still),
docs/lab/src/sections/gamefeel-floor.ts (вписывание плиты), scripts/lab-shot.ps1,
docs/lab/assets/shell.css (метка кропа).