y83 projects / 04 / php + vue + comfyui

Y83 Media — генерация изображений как сервис, а не как кнопка

в продакшне · 2026

Пользователь пишет запрос в чат обычным языком и получает картинку в той же ленте. Он может дорисовать кадр кистью, расширить его за границы, приложить референсы стиля, покрутить слайдеры понятий, поднять детализацию апскейлом или забрать результат через API. Под этим — своя асинхронная очередь, движок ComfyUI с 14 воркфлоу, собранными вручную под конкретные модели, и внешний контракт для интеграций.

адрес
media.y83.ru
моделей
5 + 15 LoRA
пресетов
402
железо
RTX 5060 Ti 8 ГБ

продукт

Продуктовый сервис вокруг ComfyUI

Задача

ComfyUI мощный, но это конструктор: графы, очереди, файлы вместо галереи. Нужен был сервис, где человек описывает результат словами и получает картинку, и API, чтобы встроить генерацию в чужой продукт.

Решение

14 методов-сборщиков воркфлоу в одном сервисе: сервис сам собирает граф под выбранную модель и режим из 40 уникальных типов узлов ComfyUI. Плюс свой клиент ComfyUI с ручным разбором WebSocket-кадров, чтобы в интерфейсе был виден живой прогресс по каждой ноде, а не «ждём».

Фокус вместо ширины

Реестр сокращён до 5 моделей, которые реально работают на 8 ГБ видеопамяти: шесть моделей и их чекпойнты удалены с диска GPU-сервера, видео-режимы вырезаны из продукта, пресеты переключены на Krea 2 Turbo. Освободившееся место ушло в глубину — 12 LoRA под Krea 2, 32 рецепта референсов, 8 слайдеров понятий, перевод Krea 2 Turbo на NVFP4.

Следствие

Внешний API v2 живёт в отдельном файле роутов без сессионной middleware: bearer-токены, вход по логину и паролю, rate limit 100 запросов в минуту, long-poll ожидания, идемпотентные повторы, JSON-ошибки с кодом, вебхуки на завершение и ошибку. Документация открыта на media.y83.ru/docs — OpenAPI на 1 485 строк и справочник на 1 169 строк.

Связь с Y83 Code

Сервис соединён с Y83 Code в замкнутый мультимодальный контур через 6 MCP-инструментов: агент по ходу разработки генерирует нужные ассеты, правит детали по PNG-маске или прямоугольникам, переносит стиль по 32 рецептам (до 12 референсов), управляет 8 слайдерами понятий и 15 LoRA (12 Krea 2 + 3 SDXL), проверяет результат через ai_vision и сохраняет готовый файл в проект. В чате виден живой процент, готовая картинка и локальная копия файла — разбор инструментов на отдельной странице этого кейса.

возможности

Что умеет

5 моделей, 9 режимов, 402 пресета и отдельный редактор под Krea 2 Turbo.

Интерфейс

Чат вместо формы

Запрос обычным языком, результат в той же ленте. История подгружается порциями, поэтому длинная переписка не тормозит экран.

  • chat

402 пресета в 19 категориях

У каждого пресета есть объяснение, почему промпт работает, рекомендованная модель и свои параметры шагов и CFG. Каталог собирается из одного файла-источника, а не правится в трёх местах.

  • presets

32 рецепта референсов

Рецепт отвечает на вопрос «что взять из картинки»: перенести стиль, сохранить объект, скопировать свет, позу, кадрирование, палитру, материал, фон. У каждого рецепта своя сила по умолчанию — её не нужно угадывать.

  • refs

8 слайдеров понятий

Яркость, туман, детализация, фотореализм, насыщенность, резкость, боке, драматичный свет. Шкала от −6 до +6, у каждого полюса описано, что он значит.

  • sliders

Движок

5 моделей, 15 LoRA, 2 апскейлера

Krea 2 Turbo как основная модель, Flux.2 Klein 4B для быстрых прогонов, SDXL-семейство: Juggernaut XL с отдельной версией для инпейнта и Pony Diffusion XL. LoRA — 12 под Krea 2 (Realism V2, IdeoKrea, Dark Brush, Neon Drip, Vintage Tarot и другие) и 3 под SDXL. Апскейлеры RealESRGAN и 4x-UltraSharp.

  • models

9 режимов генерации

text2img, img2img, controlnet, ipadapter, inpainting, outpainting, krea2, upscale ×2 и ×4. Режимы без рабочих моделей убраны: каждый оставшийся доведён до конца.

  • modes

14 билдеров воркфлоу

Отдельные графы под семейства моделей из 40 уникальных типов узлов: SD и SDXL, Flux.2, Krea 2 с референсами и слайдерами, ControlNet с двумя картинками, IP-Adapter с четырьмя типами веса, апскейл, инпейнт и аутпейнт.

  • workflow

Flux.2: батч со своим промптом на картинку

Одно исходное изображение, несколько результатов и отдельный промпт для каждого. Ветки собираются циклом: свой энкодер, сэмплер, декодер и сохранение на каждый кадр.

  • flux2

Krea 2 Studio

Три вкладки редактора

Генерация с img2img и регулируемым denoise, кисть для инпейнта прямо в интерфейсе, расширение кадра на четыре стороны с предпросмотром зон до запуска.

  • editor

Инпейнт маской и прямоугольниками

Область правки задаётся нарисованной маской или до восьми прямоугольниками в пикселях исходника. Denoise по умолчанию 0,85 для инпейнта и 1,0 для аутпейнта — при 1,0 объект заменяется целиком.

  • inpaint

До 12 референсов на кадр

Каждый референс — картинка плюс рецепт и сила влияния. Референсом может быть прошлая генерация, файл с телефона или публичный URL: на сервер он уходит инлайн, а слайдеры и референсы сцеплены в один промпт.

  • refs

Две LoRA, апскейл и турбо-шаги

До двух LoRA с разной силой, пост-апскейл ×2 или ×4 внутри воркфлоу, восемь шагов, CFG 1.0 и сэмплер er_sde — турбо-настройки модели. Для черновиков есть четырёхшаговый режим.

  • tuning

Инструменты агента

image_generate / image_edit

Создание кадра и правка готового: промпт, негатив, размеры, шаги, CFG, мегапиксели, seed, до двух LoRA, референсы стиля, слайдеры, апскейл после генерации.

  • mcp

image_status / image_jobs

Живой прогресс по id с эхом параметров и исходников плюс список сохранённых задач: работа переживает таймаут, закрытие треда и перезапуск приложения.

  • mcp

image_quota / image_cancel

Остаток минутного лимита можно спросить до запуска пачки, а ненужную задачу — отменить и не жечь GPU.

  • mcp

Разбор инструментов

Шесть инструментов с параметрами и каталоги движка — рецепты, LoRA, слайдеры — на отдельной странице кейса.

  • mcp

Надёжность и API

Живой прогресс по WebSocket

Свой клиент ComfyUI: ручной разбор кадров протокола, свои pong-ответы, разбор бинарных кадров превью. Пользователь видит текущую ноду, процент и текст — «Кэш: 14 нодов», «Сохранение результата».

  • websocket

Две очереди, retry и два шедулера

Высокий и низкий приоритет, у каждой задачи три попытки с откатом и таймаут 600 с. Шедулер забирает готовые задачи, коллектор разбирает результаты пачками по 20.

  • queue

API v2 на 11 обработчиков

Bearer-токены, вход по логину и паролю, long-poll ожидания результата, выдача параметров и исходников в статусе, список своих генераций, остаток лимита, идемпотентные повторы, вебхуки на завершение и ошибку.

  • api

97 % генераций завершились успешно

По текущей базе: 1 064 успешных из 1 097 запусков. Срез 27 октября 2026. Тестов — 209 в 30 файлах.

  • reliability

как работает

Путь генерации

01

Запрос

Пользователь описывает результат словами или выбирает пресет — вместе с объяснением и параметрами.

02

Сборка графа

GenerationService выбирает нужный из 14 билдеров и собирает граф под выбранную модель и режим.

03

Очередь

Задача встаёт в очередь по приоритету, job с тремя попытками и откатом 30 секунд.

04

Прогресс

WebSocket-клиент разбирает кадры ComfyUI и отдаёт в интерфейс ноду, процент и живое превью.

05

Результат и вебхук

Картинка попадает в галерею с метаданными; событие уходит подписчикам через DeliverWebhook с откатом.

результаты

41 463

строк кода

PHP, Vue, TypeScript, миграции, тесты
402

пресетов

19 категорий, у всех объяснение
12

LoRA под Krea 2

плюс 3 под SDXL
97%

генераций успешно

1 064 из 1 097 в текущей базе

Числа снимаются с живого сервера скриптом и обновляются при каждой выкладке. Срез 27 октября 2026.

экраны

Как это выглядит

Здесь появятся настоящие скриншоты продакшн-версии.

листайте вбок · 6 экранов

Чат генерации

Чат генерации

главный экран: запрос и результат в одной ленте

Панель параметров

Панель параметров

режим, модель, шаги, CFG, референсы, слайдеры

Krea 2 Studio

Krea 2 Studio

генерация, кисть, расширение кадра

Каталог пресетов

Каталог пресетов

402 пресета с объяснением каждого

Галерея с инпейнтом

Галерея с инпейнтом

карточки, метаданные, рисование по маске

Дашборд состояния

Дашборд состояния

процессы, память, очередь ComfyUI, кнопки рестарта

технологии

Из чего собрано

Бэкенд

  • PHP 8.3
  • Laravel 13
  • Sanctum 4
  • Filament (админка)
  • database-очередь, два приоритета

Фронтенд

  • Vue 3.5
  • Pinia
  • Tailwind CSS
  • TypeScript
  • Vite

Генерация

  • ComfyUI 0.38.2 (WS + REST)
  • Krea 2 / Flux.2 / SDXL
  • GGUF и NVFP4-квантование
  • LTX и Wan вырезаны: видео в продукт не вошло

Инфраструктура

  • nginx + php8.3-fpm
  • RTX 5060 Ti 8 ГБ, 16 ГБ RAM
  • Python-микросервис remove_bg на rembg
  • OpenAPI 3.0 и публичные доки

этапы

Что сделано и что дальше

этап 1

Чат и очередь

базовая генерация, асинхронная очередь, статусы, история

этап 2

Модели и режимы

5 моделей, 9 режимов, 14 билдеров воркфлоу

этап 3

Каталог и редактор

402 пресета, Krea 2 Studio с референсами и слайдерами, инпейнт-канвас

этап 4

API v2

токены, вебхуки, rate limit, OpenAPI 3.0, документация

этап 5

Чистка и фокус

сняли шесть моделей и их чекпойнты, вырезали видео-режимы, переключили пресеты на Krea 2 Turbo, довели тесты до 209 тестов в 30 файлах

этап 6

Внешний API как продукт

вход по логину и паролю, long-poll ожидания, выдача параметров в статусе, идемпотентные повторы, JSON-ошибки, остаток лимита и список своих генераций

вопросы

Частые вопросы

Это обёртка над ComfyUI?

Обёртка — это UI поверх готового движка. Здесь написан свой клиент ComfyUI с ручным разбором WebSocket-кадров и своими pong-ответами, 14 билдеров воркфлоу под конкретные модели, своя очередь на два приоритета с тремя попытками, каталог из 402 пресета, внешний API v2 с публичной документацией, админка на Filament и 209 тестов в 30 файлах.

Сколько моделей и как они себя ведут?

В реестре 5 моделей, во внешний API отдаются 2 — Krea 2 Turbo и Flux.2 Klein 4B. Плюс 15 LoRA и 2 апскейлера. Квантование выбрано под 8 ГБ видеопамяти: GGUF для Flux.2 и NVFP4 для Krea 2 Turbo. Параметры у моделей разные: Flux.2 идёт с CFG 1.0 и четырьмя шагами, Krea 2 Turbo — с восемью шагами, CFG 1.0 и сэмплером er_sde.

Какие инженерные задачи решены для стабильной работы на 8 ГБ VRAM?

Под каждую модель подобран свой контур квантования и загрузки: Krea 2 Turbo переведена с Q4_0 GGUF на NVFP4 с обычным CLIPLoader (GGUF-текстенкодер давал артефакты), а Flux.2 работает в GGUF. Модели удерживаются в VRAM между задачами без холодной перезагрузки, батчи защищены от потери кадров при нехватке памяти, а внешний API v2 вынесен в изолированный контур роутинга со строгими JSON-контрактами.

Что убрали и почему?

Шесть моделей и их чекпойнты удалены с диска GPU-сервера: на 8 ГБ они не работали и только путали каталог. Видео-режимы вырезаны из продукта — на этой видеопамяти они не подтвердились. Пресеты переключены на Krea 2 Turbo, каталог сокращён до 402 записей в 19 категориях. Убрать оказалось полезнее, чем оставить: меньше выбора — понятнее результат.

Как организована работа над изменениями?

Каждое крупное изменение проходит через расследование и план в репозитории: требования, архитектурные решения, разбивка на независимые ветки. Так сделаны интеграция Krea 2, референсы и слайдеры, API v2 и чистка реестра моделей. Каждый закрытый пункт виден в истории коммитов отдельным изменением: 94 коммита за 76 дней (28 июля 2026 — 12 октября 2026).

Y83 Media

Есть вопрос по проекту?

Веб-сервис генерации изображений на своём GPU: 5 моделей, 9 режимов, 402 пресета, Krea 2 Studio с референсами, слайдерами и LoRA, асинхронная очередь с живым прогрессом и внешний API v2 с публичной документацией.

@xipovski xipovski@gmail.com
следующий проект PyJHora MCP