No description
  • Python 51.6%
  • Dockerfile 48.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
akalagov-oh-agent 9d77ea80ab Revert temp force default back to false
Co-authored-by: openhands <openhands@all-hands.dev>
2026-09-27 17:20:55 +00:00
.forgejo/workflows Revert temp force default back to false 2026-09-27 17:20:55 +00:00
i18n Set <html lang="ru"> in the dashboard index.html 2026-09-27 16:40:00 +00:00
patches Adopt community-fork fixes as build-time patches + AGENTS.md 2026-09-27 17:16:41 +00:00
workflows Add docker-compose.yml and example txt2img workflow 2026-09-26 00:00:12 +00:00
.dockerignore Move app config + secrets out of compose into .env (with .env.example) 2026-09-26 00:27:54 +00:00
.env.example Use .env.example placeholder that survives the sandbox verbatim 2026-09-26 00:31:30 +00:00
.gitignore Move app config + secrets out of compose into .env (with .env.example) 2026-09-26 00:27:54 +00:00
AGENTS.md Adopt community-fork fixes as build-time patches + AGENTS.md 2026-09-27 17:16:41 +00:00
docker-compose.yml Move app config + secrets out of compose into .env (with .env.example) 2026-09-26 00:27:54 +00:00
Dockerfile Adopt community-fork fixes as build-time patches + AGENTS.md 2026-09-27 17:16:41 +00:00
README.md Adopt community-fork fixes as build-time patches + AGENTS.md 2026-09-27 17:16:41 +00:00

CI/CD-репозиторий для сборки Docker-образа ComfyUI2API

Docker Forgejo Actions Container Registry Made with OpenHands

Upstream: GitHub Stars GitHub Forks GitHub Issues Last Commit

This repo: Forgejo Last Commit Forgejo Issues Open Forgejo Issues Closed


ComfyUI2API (CI/CD)

Этот репозиторий не содержит исходного кода — он существует только для того, чтобы автоматически собирать Docker-образ ComfyUI2API (OpenAI-совместимый API поверх ComfyUI: /v1/images/generations, /v1/images/edits, /v1/videos/* и т.д.) и размещать его в локальном Container Registry.

Откуда берётся код

Исходники: https://github.com/Einzieg/Comfyui2api. Автор не публикует готовые Docker-образы (в upstream проект запускается через docker-compose + uv), поэтому образ собирается здесь. Dockerfile лежит в этом репозитории: workflow клонирует исходники в upstream/, а сборка использует корневой Dockerfile.

Как это работает

Workflow: .forgejo/workflows/ci-cd.yml

  • каждое утро (06:00, Asia/Qostanay) проверяет HEAD main-ветки upstream через git ls-remote (без полного клона);
  • если появился новый коммит — клонирует его с GitHub, собирает образ docker buildx и пушит в registry;
  • если новых коммитов нет — сборка пропускается (последний собранный SHA запоминается в кэше раннера).

Upstream не выкладывает релизные теги X.Y.Z, поэтому версией образа выступает SHA коммита, а не номер релиза.

Запустить вручную можно из вкладки Actions → Run workflow: опционально указать конкретный commit (короткий или полный SHA) и/или force (пересобрать уже собранный коммит).

Русский дашборд

Upstream-дашборд (/ui/) написан на китайском. Этот образ собирает его на русском: Dockerfile содержит стадию webui, которая

  1. применяет словарь перевода i18n/ru.json к исходникам фронтенда через i18n/apply_i18n.py;
  2. пересобирает дашборд (vite build);
  3. подменяет предсобранный src/comfyui2api/webui_dist русским бандлом.

Скрипт перевода в конце проверяет, что в исходниках не осталось ни одного китайского символа; если upstream добавит новые строки — сборка упадёт с списком непровернутых фрагментов. Тогда нужно расширить i18n/ru.json (ключи — точные китайские сегменты из upstream) и пересобрать.

Патчи из community-форков

Помимо локализации, образ накатывает набор полезных правок, которых пока нет в upstream, взятых из публичных форков (все — MIT, как и upstream):

Патч Источник Что даёт
Случайный seed на каждую задачу xundaoai a1501a7 Повторные генерации не дают идентичный результат (рандомизируются KSampler/SamplerCustom/RandomNoise).
size/width/height → resizeFlag для img2img opq007 Запрошенный размер реально применяется; неполная пара width/height отбрасывается.
Батч-параметр n opq007 n/batchsize/numimages сопоставляются с batch_size в workflow (несколько изображений за запрос).
Rate-limit на admin-авторизацию opq007 После 10 неудачных попыток входа в /v1/admin/* — блок на 60 с (защита от brute-force).

Правки лежат одним файлом patches/fork-fixes.patch и применяются в Dockerfile через patch -p1 --fuzz=0. Регрессионные тесты — в tests/test_fork_patches.py (добавляются патчем). Если upstream изменит затронутые файлы (jobs.py, workflow_params.py, admin_routes.py), строгое применение patch упадёт и сборка прервётся — тогда патч нужно перегенерировать против нового upstream.

Образы

Регистр: git.maydayoffice.kz, пакет maydayoffice/comfyui2api.

Каждый собранный коммит получает теги:

Тег Значение
sha-<7 символов> конкретный коммит (читабельно)
<полный SHA> тот же коммит, полный тег
latest самый свежий собранный HEAD main

Пример:

git.maydayoffice.kz/maydayoffice/comfyui2api:latest
git.maydayoffice.kz/maydayoffice/comfyui2api:sha-383e62c
git.maydayoffice.kz/maydayoffice/comfyui2api:383e62c5da952d0f7095d7fd69a8b622c197a1b4

Использование

Быстрый старт: docker compose

В репозитории есть docker-compose.yml (restart, extra_hosts, env_file, volumes, healthcheck, logging) и пример txt2img-воркфлоу в API-формате workflows/txt2img.example.json. Вся конфигурация (включая секреты) — в .env:

# 1. Создайте .env из шаблона и ЗАМЕНИТЕ API_TOKEN (и при желании прочее)
cp .env.example .env

# 2. Положите свои воркфлоу (ComfyUI → File → Export (API)) в ./workflows
cp workflows/txt2img.example.json workflows/txt2img.json   # переименуйте по вкусу

# 3. Запустите
docker compose up -d

# 4. Проверьте (model = имя файла без .json)
curl -s -X POST http://localhost:8000/v1/images/generations \
  -H "Authorization: Bearer <ваш API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"model": "txt2img", "prompt": "a red apple on a wooden table"}' | python3 -m json.tool

.env не коммитится (.gitignore); шаблон с описанием всех переменных — .env.example.

Ручной запуск

docker login git.maydayoffice.kz
docker pull git.maydayoffice.kz/maydayoffice/comfyui2api:latest

Минимальный запуск (ComfyUI на хосте):

docker run -d --name comfyui2api \
  -p 8000:8000 \
  -e COMFYUI_BASE_URL=http://host.docker.internal:8188 \
  -e API_TOKEN=your-api-token \
  -e COMFYUI_STARTUP_CHECK=false \
  -v $(pwd)/workflows:/app/comfyui-api-workflows \
  -v comfyui2api-runs:/app/runs \
  --add-host host.docker.internal:host-gateway \
  git.maydayoffice.kz/maydayoffice/comfyui2api:latest
  • workflows/ — JSON-воркфлоу в формате File → Export (API) из ComfyUI (имя файла без .json = значение model в API-запросах; UI-формат с nodes/links не поддерживается);
  • API_TOKEN — Bearer-токен, защищающий API (без него API открыт!);
  • COMFYUI_STARTUP_CHECK=false — не ронять старт, если ComfyUI ещё не поднялся;
  • --add-host host.docker.internal:host-gateway — чтобы контейнер видел ComfyUI на хост-машине (без него host.docker.internal не резолвится).

Доступные эндпоинты: /v1/images/generations, /v1/images/edits, /v1/images/variations, /v1/videos/generations, /v1/videos/edits, /v1/videos, /v1/models, /v1/workflows, /v1/jobs (+ WebSocket-прогресс). Полное описание — в upstream README.