Веб-команды всё чаще выгружают растровые материалы прямо из браузера или плагинов предпросмотра: «Сохранить как PNG» в подпапку загрузок, быстрый экспорт из DevTools или связка Figma → локальный каталог. На ноутбуке дизайнера это ломается от сна диска и смены путей; на удалённом Mac с OpenClaw удобно держать единый контур: watch входящей папки, проверка ICC (чтобы CDN и Safari не интерпретировали цвет «как попало»), затем переименование по шаблону и перенос в каталог отгрузки. Ниже — шаги без «магии»: их можно перенести на другой узел завтра. Базовую установку согласуйте с руководством по установке OpenClaw на все платформы; нюансы метаданных и lossless-перепаковки PNG — в материале метаданные PNG, ICC/sRGB и lossless. Цепочку «watch → переименование → валидация» можно стыковать с пайплайном watch folder и переименования PNG.
Содержание
OpenClaw и шлюз: минимальная установка и права
Сведите поверхность к тому, что реально использует команда: OpenClaw Gateway (или эквивалентный HTTP/CLI-триггер) и один долгоживущий воркер под тем же пользователем macOS, под которым идёт SSH и читается каталог экспорта. Версии Node/Python и путь к бинарникам зафиксируйте в коротком README рядом с конфигом — иначе ночной перезапуск и ручная сессия разойдутся по окружению.
Контракт каталогов (корень подставьте свой, имена сохраните):
~/WebPngPipeline/inbox— сюда браузер или скрипт кладёт свежие PNG (в Chrome задайте стандартную папку загрузок или подкаталог «export-web»).~/WebPngPipeline/validate— файл «захвачен» на время чтения ICC и проверки целостности.~/WebPngPipeline/ready— прошли профиль и имя; отсюда забирает CI или rsync.~/WebPngPipeline/failed— карантин с sidecar.reason.json(код правила, stderr).~/WebPngPipeline/logs— JSONL по заданиям, суточная ротация.
Чеклист прав: (1) chown -R на пользователя воркера; не оставляйте world-writable. (2) В launchd plist указывайте абсолютные пути и EnvironmentVariables с HOME — тильда ~ в plist не раскрывается. (3) При запросе macOS выдайте Full Disk Access терминалу или бинарнику воркера, если чтение идёт из защищённых томов. (4) Дымовой тест из той же оболочки, что будет у OpenClaw: touch по всем пяти каталогам и sips -g profileName на эталонном PNG.
Конфигурация мониторинга папки экспорта браузера
Экспорт из браузера часто двухфазный: сначала появляется временный файл, затем он переименовывается в .png. Наблюдатель должен реагировать на завершённую запись.
Шаги настройки watch:
- В Chrome/Edge укажите каталог загрузок внутри
inboxили symlink «Загрузки → inbox», чтобы не смешивать личные файлы и ассеты. - Включите дебаунс 1–3 с после последнего события по пути и проверку стабильного размера (два одинаковых
statс паузой 400–800 мс). - Фильтр: только
*.png, без регистрозависимых сюрпризов; игнор.crdownload,.tmp, скрытых имён. - Очередь задачи OpenClaw: абсолютный путь, размер,
mtime, опциональноsource=browserиз переменной окружения плагина.
На хосте достаточно fswatch и оболочки, которая ставит задания в файл-очередь или вызывает webhook Gateway; для продакшена удобнее launchd с KeepAlive. Политику повторов и ротации JSONL-логов зафиксируйте в том же репозитории конфигов, что и триггер watch, чтобы ночной перезапуск не обнулял счётчики backoff.
Правила проверки ICC и цветового профиля в PNG
Для веба обычно хотят предсказуемый sRGB: либо явный встроенный профиль sRGB IEC61966-2.1, либо (по внутреннему регламенту) отсутствие встроенного профиля при условии, что исходный рендер уже в sRGB и QA смотрит только в браузере с дефолтом sRGB. Зафиксируйте одну политику на продукт — смешение «то с ICC, то без» даёт расхождения между Chrome и Safari.
| Политика команды | Условие «принято» | Пример проверки (macOS) |
|---|---|---|
| Строгий sRGB для маркетинга | Встроенный профиль совпадает с эталоном или конвертирован через sips |
sips -g profileName "/path/validate/x.png" → ожидаемая строка |
| «Без встроенного ICC» | exiftool не показывает iCCP / профиль пуст | exiftool -icc_profile:all "/path/validate/x.png" |
| Запрет Display P3 в веб-поставке | Имя профиля не содержит P3; иначе failed/ |
Парсинг вывода sips или JSON из exiftool |
Мини-пример исправления: если политика требует sRGB, а браузер отдал PNG с профилем дисплея, выполните нормализацию до продвижения в ready/:
sips -m "/System/Library/ColorSync/Profiles/sRGB Profile.icc" \
"/path/validate/asset.png" --out "/path/validate/asset_srgb.png"
После конвертации повторите чтение профиля и только затем применяйте шаблон имени. Отдельно зафиксируйте для команды, разрешён ли Display P3 в исходниках и как он запрещён в финальной веб-поставке — иначе правило «только sRGB» будет спорить с макетами из Figma на P3-дисплее.
Шаблоны имён, архив и политика повторов при сбоях
Шаблон имени держите детерминированным, чтобы диффы и CDN-кэш были предсказуемы. Пример для лендинга и баннеров:
{project_slug}_{block_id}_{width}x{height}_{profile_token}.png
# hero_main_1920x1080_srgb.png
Чеклист переименования: (1) Атомарность: пишите во временное имя в validate/, затем mv в ready/. (2) Коллизии: если файл существует, добавляйте суффикс _v2 или короткий суффикс из SHA-256 имени исходника. (3) Архив: опционально копируйте в ready/archive/YYYY-MM-DD/ tar-пакетом по релизу, чтобы откатить поставку без поиска по корзине браузера.
Повторы (retry): разделите ошибки данных (битый PNG, неизвестный профиль при строгой политике) и транзиентные (задержка NFS, краткий обрыв VPN). Для транзиентных — экспоненциальный backoff 5 / 20 / 60 с, не более трёх попыток на файл; фиксируйте каждую попытку в JSONL (stage: watch | icc | rename). Окончательный отказ → failed/ и уведомление в тот же канал, что использует Gateway.
FAQ: типичные ошибки и разбор
В: watch срабатывает на «пустой» или обрезанный PNG.
О: Увеличьте дебаунс и проверку стабильного размера; отбрасывайте файлы нулевой длины и префиксы временных имён браузера.
В: Operation not permitted при чтении из «Загрузок».
О: Выдайте Full Disk Access процессу воркера; убедитесь, что владелец файлов совпадает с UserName в LaunchAgent.
В: sips показывает профиль дисплея вместо sRGB после «исправления».
О: Проверьте, что вы указываете выходной путь и не читаете старый файл; для пакетов не смешивайте in-place и копию в одном задании без явного контроля.
В: launchd не видит inbox.
О: Только абсолютные пути; передайте HOME в окружение plist; избегайте относительных путей от «текущей директории».
В: политика «без ICC», но QA видит цветовой сдвиг в Safari.
О: Пересмотрите регламент: часто безопаснее явный sRGB в файле; сверьтесь с lossless-перепаковкой и метаданными в материале по ICC из вводного абзаца.
Запуск контура watch и ICC на выделенном Apple Silicon
Когда нужны стабильные пути, ночные пакеты и SSH без сна ноутбука, удалённый Mac — удобная база для OpenClaw, мониторинга каталогов и проверки профилей. На MacPng можно открыть страницы без обязательного входа: сравните тарифы, оформите аренду и перенесите этот HowTo на свой узел.