01В чём фокус
Ты уже генеришь картинки в ChatGPT. Он рисует хорошо, вопросов к нему нет. Вопросы начинаются после того, как картинка готова.
Ты жмёшь «Сохранить как». Ищешь папку. Переименовываешь image-4.png во что-то осмысленное. Потом делаешь это ещё девятнадцать раз, потому что к карусели нужно двадцать слайдов. Через час у тебя есть комплект, и ты обнаруживаешь, что пятая картинка почему-то другого оттенка, чем первая.
Это не проблема нейросети. Это проблема того, что между генерацией и проектом стоит человек с мышкой.
Гайд про то, как убрать этого человека. К концу у тебя будет схема, в которой ты пишешь одну команду в Claude Code, а в папке проекта появляются готовые файлы: в одном стиле, с теми именами, которые ты задал, и повторяемые завтра.
Никакого ключа API для этого не нужно. Обхода лимитов тоже не будет: работаем внутри своей подписки, теми же квотами, что и в браузере. Освобождаются руки, а не тариф.
02Что нужно до старта
Подписка ChatGPT. Любая платная. Генерация картинок входит в неё, отдельно за наш способ никто не берёт. Бесплатный аккаунт тоже сгенерит, но упрётся в лимит на второй-третьей картинке, и вся затея потеряет смысл.
Google Chrome. Именно он, не Edge и не Firefox. Схема держится на отладочном режиме Chrome, у остальных он устроен иначе.
Node.js. Восемнадцатая версия или новее. Проверяется одной строкой:
node -v
Нет ответа означает, что Node не установлен. Ставится с официального сайта, следующим шагом можно не заниматься до этого момента.
Claude Code. Он и будет писать движок. Ты его писать не будешь, и это принципиально: задача гайда научить тебя пользоваться схемой, а не программировать браузер.
Полчаса времени. Первый раз занимает минут двадцать, из них пятнадцать уходит на установку того, чего у тебя ещё нет.
Честная цена. Кроме подписки ты не платишь ничего: ни за движок, ни за подключение. Платишь временем на первую настройку и потом временем на редкий ремонт, когда интерфейс переедет. За полгода работы у меня такое случалось дважды, каждый раз это была правка в одну строку.
Дальше два предупреждения, которые я обязан дать до того, как ты вложишься.
Мы автоматизируем чужой интерфейс. Не официальный вход для разработчиков, а живую страницу, по которой ходит скрипт вместо тебя. Когда OpenAI переставит кнопку или переименует поле ввода, движок сломается. Не сразу, но однажды. Чинится это за десять минут вместе с Клодом, но узнать об этом лучше сейчас, чем в момент поломки.
Это не обход ограничений. Лимиты подписки остаются ровно теми же. Если ты упираешься в них в браузере, ты упрёшься в них и здесь, просто быстрее, потому что скрипт не устаёт. Обещать безлимит было бы враньём.
03Ядро
Вся схема стоит на одной мысли: промпт переезжает из переписки в файл проекта.
Пока промпт живёт в чате, он одноразовый. Понравился результат, а как ты его получил, уже не восстановить: формулировка утонула в ленте сообщений между двумя неудачными попытками.
Как только промпт лежит в файле, он становится частью проекта. Его видно, его можно править построчно, к нему можно вернуться через месяц, его можно скопировать в соседний проект и получить тот же стиль.
Дальше всё складывается само:
spec.json что нарисовать, каким стилем, куда положить
↓
движок открывает ChatGPT, печатает, ждёт, скачивает
↓
папка проекта готовые файлы с нужными именами
Три звена, и каждое отвечает на своё «почему».
Почему картинки приходят с нормальными именами: имя задано в спеке до генерации, а не придумывается после скачивания.
Почему можно перезапустить после обрыва связи: движок смотрит, какие файлы уже лежат в папке, и пропускает их. Прогон продолжается с места обрыва, а не с нуля.
Почему результат повторяется: спека лежит рядом с кодом. Поменял три строки, запустил заново, получил вариант. Не понравилось, вернулся к прежней версии.
Между спекой и ChatGPT стоит четвёртое звено, техническое: браузер, который остаётся открытым и залогиненным. Про него следующий раздел, и это единственное место в гайде, где придётся один раз сделать что-то непривычное.

04Подключение: один раз и больше не думать
Chrome умеет работать в отладочном режиме. Это штатная возможность, придуманная для разработчиков: браузер открывает на локальном компьютере служебную дверь, через которую программа может им управлять.
Запускается он с двумя дополнениями к обычному ярлыку.
На Windows:
"C:/Program Files/Google/Chrome/Application/chrome.exe" --remote-debugging-port=9222 --user-data-dir=D:/проект/auth/chrome-profile about:blank
На macOS:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222 --user-data-dir=~/проект/auth/chrome-profile about:blank
Первое дополнение открывает ту самую дверь на порту 9222. Второе не менее важно: user-data-dir создаёт отдельный профиль браузера для работы. Твой основной Chrome с вкладками, паролями и историей остаётся нетронутым, а рабочий живёт в папке проекта своей жизнью.
На macOS есть одна засада, из-за которой шаг молча не срабатывает. Если Chrome уже запущен, система не поднимает второй экземпляр, а просто открывает новое окно в существующем. Ключи запуска при этом игнорируются, служебная дверь не открывается, и скрипт потом не может подключиться. Лечится тем, что перед первым запуском Chrome закрывается целиком, через меню, а не крестиком окна. Дальше рабочий профиль живёт параллельно с обычным и мешать перестаёт.
Проверить, открылась ли дверь, можно одной строкой:
curl http://127.0.0.1:9222/json/version
В ответ придёт несколько строк с версией браузера. Пустота означает, что Chrome поднялся без ключей и надо разобраться с этим до того, как идти дальше.
Откроется чистое окно. Зайди в нём на chatgpt.com и залогинься руками, обычным способом. Один раз. Куки лягут в профиль и переживут все перезапуски: через неделю окно откроется уже залогиненным.
Дальше про этот шаг можно забыть. Утром поднял окно ярлыком, вечером закрыл.
Одна вещь, которая экономит вечер. Проверять, залогинен ли браузер, нужно по отсутствию кнопки входа, а не по наличию поля ввода. У незалогиненного посетителя поле ввода тоже есть, оно просто не отправляет. Я на этом потерял прогон: скрипт бодро отправлял промпты в пустоту и не понимал, почему картинок нет.
05Спека: что нарисовать и куда положить
Спека это обычный файл spec.json в папке проекта. Читается глазами, правится руками, лежит рядом с остальным кодом.
{
"outDir": "workspace/carousel/moi-slaydy",
"base": "Плоская векторная иллюстрация, кремовый фон, терракотовый акцент, толстая линия, без текста",
"jobs": [
{ "name": "slide-1", "group": "carousel", "prompt": "{BASE}. Человек за ноутбуком, вид сбоку" },
{ "name": "slide-2", "group": "carousel", "prompt": "{BASE}. Папка с документами, из неё летят листы" },
{ "name": "slide-3", "group": "carousel", "prompt": "{BASE}. Песочные часы на столе" },
{ "name": "slide-4", "group": "carousel", "prompt": "{BASE}. Рука нажимает большую кнопку" }
]
}
Разберём по полям.
outDir это папка, куда лягут файлы. Движок создаст её, если её нет.
base это общий кусок промпта, описывающий стиль. Он подставляется вместо {BASE} в каждое задание. Смысл в том, чтобы описание стиля жило в одном месте: захотел из терракоты сделать синеву, поменял одно слово в одной строке, а не в двадцати промптах.
name становится именем файла. slide-1 даёт slide-1.png. Никакого image-4-final-final.png.
group объединяет задания, которые должны получиться в одном стиле. Про это отдельный разговор ниже, потому что именно здесь у всех разъезжается.
prompt это то, что отличает конкретную картинку от соседней. Обрати внимание, насколько он короткий: весь стиль уже описан в base, здесь остаётся только сюжет.
Есть шестое поле, необязательное, но полезное: attach. В него кладётся список файлов, которые прикрепляются к промпту как референс.
{ "name": "slide-5", "group": "carousel", "prompt": "{BASE}. В той же манере, что на образце",
"attach": ["refs/style-sample.png"] }
Картинка-образец работает сильнее любого описания словами. Если стиль важно выдержать точно, проще один раз приложить эталон, чем подбирать прилагательные.
Заводить спеку с нуля не обязательно. Скажи Клоду словами, что нужно, и попроси собрать spec.json по этому образцу. Он сделает это за минуту и не ошибётся в запятых.
06Почему стиль расползается и как его удержать
Самая частая жалоба звучит так: первая картинка отличная, к пятой всё поехало.
Причина простая. ChatGPT помнит контекст внутри одной беседы. Пока ты рисуешь в том же диалоге, он держит в голове, что было раньше, и подстраивается. Новая беседа означает чистый лист: те же слова промпта дадут другую толщину линии, другой оттенок, другую манеру.
Отсюда правило: всё, что должно выглядеть родственным, рисуется в одной беседе. Поле group в спеке именно про это. Движок открывает по одной беседе на группу и гонит внутри неё все задания подряд.
Практическая раскладка выглядит так. Слайды одной карусели это одна группа. Иконки к статье это другая группа. Обложка это третья, отдельная, потому что она и должна отличаться.
Второе, что держит стиль, это дисциплина в base. Описывай не настроение, а признаки: толщину линии, палитру, наличие или отсутствие теней, ракурс. «Красиво и современно» ничего не означает и каждый раз понимается по-новому. «Плоская заливка, без градиентов, толстая линия, три цвета» воспроизводится.
И третье. Стиль лучше сначала нащупать руками в обычном чате, а когда получилось то, что нужно, перенести найденную формулировку в base. Спека это не место для экспериментов, это место для закрепления результата.
076б. Формат кадра проговаривается словами
Отдельная беда, которую замечаешь поздно. Ты просишь картинки под карусель, получаешь их, собираешь, и на третьем слайде видишь, что он чуть другой формы. Не по стилю, а по пропорциям.
Модель держит соотношение сторон нестрого. Если про формат не сказано прямо, она рисует «примерно квадрат» и время от времени промахивается. У меня так вышел слайд 997 на 1577 вместо честных 1080 на 1350: глазом почти незаметно, а в готовой карусели он поехал.
Лечится строкой в base, написанной жёстко и без вежливости:
STRICT FORMAT: canvas 1080x1350, ratio exactly 4:5.
Заглавные буквы тут не для красоты: короткое категоричное указание модель держит лучше, чем просьбу внутри длинного описания. Проверять результат стоит не глазами, а командой, которая покажет реальный размер файлов. Расхождение в пару пикселей допустимо, расхождение в пропорциях означает переделку.
08Свой результат за двадцать минут
Четыре шага. После них у тебя четыре картинки в одном стиле в папке проекта.
Шаг первый. Подними рабочий браузер.
Скопируй команду из четвёртого раздела, подставь свой путь к проекту, выполни. Откроется чистое окно Chrome. Зайди на chatgpt.com и залогинься.
Проверка перед тем как идти дальше: в окне видно поле ввода и не видно кнопки входа. Если кнопка входа на месте, ты не залогинен, и следующие шаги смысла не имеют.
Шаг второй. Попроси Клода собрать движок.
Открой Claude Code в папке проекта и скажи примерно так:
> Напиши скрипт на Node с Playwright. Он подключается к уже запущенному Chrome > через connectOverCDP на порт 9222, читает spec.json, для каждой группы открывает > новую вкладку с chatgpt.com, печатает промпт в композер, ждёт появления большой > картинки, скачивает её через page.request.get и сохраняет в outDir под именем > из поля name. Уже существующие файлы пропускай. В конце не вызывай browser.close, > просто process.exit.
Последнее предложение важнее, чем кажется. Про него в девятом разделе.
Клод поставит зависимости и напишет файл. Читать его код тебе не нужно.
Шаг третий. Собери спеку на четыре картинки.
Возьми образец из пятого раздела, поменяй base под свой стиль и опиши четыре сюжета. Или просто скажи Клоду, что нужно, и попроси заполнить спеку.
Шаг четвёртый. Запусти.
node scripts/gptimage-batch.mjs spec.json
В консоли пойдут точки: скрипт ждёт, пока картинка отрисуется. Одна занимает от тридцати секунд до полутора минут, четыре укладываются минут в пять.
Открой папку outDir. Там четыре PNG с твоими именами.
Шаг пятый, который все пропускают. Посмотри на результат глазами.
Не по одной картинке в просмотрщике, а всё сразу, одним листом с подписанными именами. Собирается это одной командой, и Клод соберёт её по просьбе.
Смотреть надо ровно две вещи. Первое: каждая ли картинка про то, о чём просили. Второе: совпадает ли имя файла с тем, что на картинке нарисовано. Второе кажется глупым, пока не столкнёшься.
Я на этом обжёгся: резал лист иконок на отдельные файлы, порядок нарезки разошёлся с порядком в промпте, и в готовом ролике на месте робота оказался кубок. Заметил это уже на отрендеренном видео, то есть после всей сборки.

09Что ты увидишь
Разница видна не на первой картинке, а на десятой.
Было. Двадцать слайдов карусели: двадцать промптов, набранных в браузере, двадцать скачиваний, двадцать переименований. Час с небольшим, из которого собственно творчества минут десять. Захотел поменять палитру, повторяешь всё заново с начала.
Стало. Промпты лежат в спеке. Запуск занимает одну строку. Пока рисуется, ты занят другим. Захотел поменять палитру, правишь одну строку base, удаляешь папку и запускаешь снова.
Есть и то, что становится хуже, и об этом честнее сказать сразу. Первый комплект через спеку собирается дольше, чем руками: надо описать стиль словами и завести файл. Схема начинает окупаться с третьего комплекта. Если тебе нужны две картинки один раз в жизни, не городи ничего, открой браузер.
10Чтобы не споткнуться
Три грабли, на которые наступают все, включая меня.
Скрипт закрыл браузер, и логин пропал.
В Playwright есть метод browser.close(), и рука сама тянется поставить его в конце. При обычном запуске он закрывает браузер, который сам же и открыл. Но при подключении к уже работающему Chrome он гасит не подключение, а весь браузер целиком, вместе с твоей залогиненной сессией и всеми вкладками.
Лечится одной строкой: вместо browser.close() пишем process.exit(0). Подключение оборвётся само, браузер продолжит работать.
Я вычищал десять таких вызовов из своих движков. Один сидел прямо внутри защиты от перерасхода: защита срабатывала и в качестве заботы убивала браузер.
Порт уже занят.
Симптом узнаваемый: вчера работало, сегодня скрипт не подключается или ведёт себя странно. Причина обычно в том, что с прошлого раза остался висеть Chrome, или ты случайно запустил второе окно на том же порту. Две программы начинают закрывать друг другу вкладки.
Правило: один порт, одно окно. Нужно второе окно, бери другой номер порта и другую папку профиля. Перед запуском полезно проверить, что на порту, простой командой:
curl http://127.0.0.1:9222/json/version
Ответ означает, что там кто-то живёт. Тишина означает, что порт свободен.
Картинки перестали приходить.
Скорее всего ты упёрся в лимит подписки. Выглядит это не как честная ошибка, а как молчание: промпт ушёл, картинки нет, скрипт ждёт.
Что делать: открой рабочее окно Chrome глазами и посмотри, что написано в беседе. Там будет прямое сообщение про лимит и время, когда он обновится. Ставь паузу между заданиями секунд в десять, а после сбоя минуту. Скрипт, который долбит без пауз, упирается в потолок быстрее и выглядит подозрительнее.
Промпт наложился на предыдущий.
Случается, когда предыдущий прогон оборвался и в поле ввода остался недоотправленный текст. Новый промпт печатается следом, и модель получает склейку двух заданий. На картинке это выглядит как смесь двух сюжетов, и понять причину по результату почти невозможно.
Правило простое: перед печатью поле очищается, и очистка проверяется чтением, а не считается выполненной. Я на этом попался в соседнем конвейере: код честно чистил поле, а проверка сравнивала его с пустой строкой и видела там подсказку «What do you want to create?», которую браузер рисует поверх пустого поля. Формально не пусто, на деле пусто.
11Если полезешь глубже
Этот раздел не нужен, чтобы получить картинки. Он нужен, когда движок сломался и вы с Клодом его чините. Пять вещей, каждая из которых стоила мне отдельного прогона.
Chrome умирает вместе с окном терминала. Если запустить браузер из скрипта обычным способом, он окажется дочерним процессом и закроется, когда закроется родитель. Спасает пара параметров при запуске: detached: true и вызов unref(). Тогда браузер живёт своей жизнью.
Полей ввода на странице два. Одно настоящее, второе скрытый дубль. Попытка напечатать в него уходит в таймаут без внятной ошибки. Правильный порядок: найти элемент, проверить, что он реально виден, сфокусировать и печатать в него, а не в первый попавшийся селектор.
Картинку нельзя тащить через страницу. Соблазнительно скачать её кодом внутри вкладки и передать наружу. На мегабайтном файле это превращается в массив из миллионов чисел, который едет по служебному каналу и роняет вкладку. Скачивать надо запросом со стороны скрипта.
Вложения долетают не все. Если к промпту прикладываются файлы, дождись, пока на странице появится столько превьюшек, сколько файлов ты отправил. Пауза по таймеру не работает: иногда долетает одно из трёх, и модель рисует не то, о чём её просили.
Движок скачал чужую картинку. Самая коварная из всех, потому что выглядит как успех: файл создан, размер нормальный, ошибок нет. А внутри изображение из прошлой беседы, которую ChatGPT восстановил при открытии страницы.
Механика такая. Движок запоминает, какие картинки уже есть на странице, отправляет промпт и ждёт появления новой. Если запомнить он успел раньше, чем догрузилась лента старого диалога, то приехавшие следом старые изображения он честно посчитает новыми и заберёт первое попавшееся.
Лечится тремя вещами сразу: запоминать все картинки, а не последнюю; не засчитывать результат раньше чем через полминуты после отправки, потому что своя картинка за это время не рисуется; и требовать, чтобы кандидат не менялся несколько секунд. Я поймал это на баннере к этому самому гайду: вместо схемы приехал лист вырезок из позавчерашней работы.
На Windows окна браузера лезут поверх всего. Когда движок поднимает несколько служебных окон, они открываются чёрными прямоугольниками на переднем плане. Причина в споре двух настроек запуска: одна велит спрятать окно, другая отвязывает процесс от текущей консоли, и он открывает себе новую. Лечится тем, что на Windows отвязку выключают.
1210б. Как чинить, не разбираясь
Движок однажды сломается, и чинить его будешь не ты, а Клод. От тебя нужен внятный симптом вместо слова «не работает».
Плохо: «скрипт сломался, почини».
Хорошо: «запустил движок, в консоли пошли точки и через семь минут написало, что картинка не найдена. В рабочем окне Chrome вижу, что промпт напечатан и отправлен, ответ пришёл текстом без картинки. Посмотри, что изменилось на странице».
Разница в том, что во втором случае названо место обрыва. Клод открывает страницу, сравнивает разметку с тем, что ищет движок, и правит поиск элементов. Обычно это одна строка.
Три вопроса, которые стоит задать себе до того, как звать на помощь. Браузер поднят и залогинен? Порт тот же, что в скрипте? В рабочем окне глазами видно, что происходит после отправки промпта? Половина поломок закрывается на третьем вопросе, потому что там прямым текстом написано про лимит.
13А если…
А если я не программист и не понял ни слова про порты?
Тебе и не нужно. Из всего гайда руками делается один шаг: запуск браузера с двумя дополнениями к ярлыку. Остальное пишет Клод. Скопируй ему пятый и седьмой разделы целиком, он разберётся.
А если у меня нет платной подписки?
Схема заработает, но упрётся в лимит на второй картинке. Смысла в автоматизации при таких квотах нет.
А если я хочу не картинки, а листы иконок?
Это то же самое, только в промпте просишь сетку из нескольких объектов на одном листе, а потом режешь его на отдельные файлы. Резка делается отдельным скриптом, и это уже другая тема. Скажу главное: после нарезки обязательно посмотри на результат глазами, с подписанными именами. Порядок объектов на листе почти никогда не совпадает с порядком в промпте, и на одном из моих роликов из-за этого в кадре появился кубок вместо робота.
А если картинки приходят не в том размере?
Скорее всего, ты не сказал про формат прямо. Смотри раздел про формат кадра: пропорции задаются отдельной строкой, а не подразумеваются из слова «карусель».
А если у меня Windows и лезут чёрные окна?
Значит, движок поднимает браузер сам, а не подключается к уже открытому. Это две разные схемы, и вторая спокойнее: браузер живёт отдельно, скрипт только приходит и уходит. Если окна всё равно появляются, покажи Клоду десятую главу, там описана причина.
А если я хочу тот же стиль в другом проекте?
Скопируй туда строку base. Это и есть весь стиль, всё остальное в спеке про сюжеты. Именно ради этого промпт и переезжал в файл.
А если ChatGPT поменяет интерфейс?
Движок сломается, и ты об этом узнаешь по пустой папке. Чинится описанием симптома Клоду: он откроет страницу, посмотрит на новую разметку и поправит поиск элементов. Обычно это десять минут. Это цена подхода, и она известна заранее.
А если запустить это на сервере, чтобы работало без меня?
Не советую. Схема завязана на живую залогиненную сессию, и переносить её на сервер означает вывозить туда свои куки. Держи её на своей машине.
14Зачем на самом деле
Соблазн увидеть в этом экономию времени. Час на комплект против пяти минут, цифра красивая.
Но настоящая ценность в другом. Пока промпт живёт в переписке, у тебя нет ремесла, у тебя есть везение: иногда получается хорошо, и ты не знаешь почему. Когда промпт лежит в файле, появляется то, что можно улучшать. Не «сгенерил удачно», а «вот формулировка, которая даёт нужный результат, и вот как я её дотачивал».
Это и отличает вайбкодинг от игры с нейросетью. Не то, что машина делает работу за тебя, а то, что твой способ работать записан и повторяется. Сегодня ты описываешь стиль иллюстраций, завтра тем же движением описываешь стиль текстов и порядок сборки видео.
Есть и побочный эффект, который замечаешь не сразу. Когда промпт лежит в файле, его начинают читать как текст, а не как заклинание. Видно, что половина слов в нём ничего не делает, а работают три прилагательных и одно указание на формат. Промпты становятся короче и точнее просто потому, что их стало видно.
Картинки тут просто первое место, где это становится очевидным.
15А дальше
Следующий шаг после спеки это сборка комплекта. Картинки уже приходят в папку, и логично, чтобы дальше они сами складывались в карусель или в ролик. Схема остаётся той же, добавляется одно звено: файл раскладки, который говорит, что где стоит.
Второе направление шире и интереснее. Тот же приём работает не только с картинками. Рабочее окно браузера, живущее отдельно от твоего личного, и спека вместо переписки: так же подключается генерация видео, так же собираются заготовки текстов, так же снимаются скриншоты живых страниц для врезок.
Один Клод не справляется. Собери рой про следующий шаг: когда работы больше, чем помещается в одну голову, и её надо разложить между агентами. Не чат, а сотрудник про агентов с собственным облачным компьютером и про то, где проходит граница безопасности.
И третье, к чему это ведёт по-настоящему. Когда у тебя набирается несколько таких связок, их пора описать словами один раз, чтобы не объяснять заново каждую неделю. Так появляется своя система навыков: папка с инструкциями, которые Клод читает сам и по которым работает. Про это будет отдельный разбор.
16Источники
Chrome DevTools Protocol: https://chromedevtools.github.io/devtools-protocol/ Официальное описание протокола, через который скрипт разговаривает с браузером. Читать целиком не нужно, полезно знать, что это штатный механизм, а не хак.
Playwright, подключение к запущенному браузеру: https://playwright.dev/docs/api/class-browsertype Раздел про connectOverCDP. Здесь же перечислено, чем подключение к чужому браузеру отличается от запуска своего.
Список ключей запуска Chromium: https://peter.sh/experiments/chromium-command-line-switches/ Полный перечень параметров командной строки, включая remote-debugging-port и user-data-dir.
Node.js, запуск дочерних процессов: https://nodejs.org/api/child_process.html Раздел про detached. Оттуда становится понятно, почему браузер умирает вместе с терминалом и что с этим делать.
Справка OpenAI: https://help.openai.com/ Актуальные лимиты подписок и правила работы с генерацией изображений.
Условия использования OpenAI: https://openai.com/policies/terms-of-use Стоит прочитать до того, как строить на этом рабочий процесс.
Документация Claude Code: https://docs.claude.com/en/docs/claude-code/overview Установка, работа в проекте, файл правил проекта.
Собрал бота. А как собрать конвейер?
Один бот закрывает одну задачу. Дальше начинается связка: n8n, Make, агенты в Claude Code и то, что крутится без тебя. Это уже не «ещё один инструмент», а система.
Что за клуб →