Docker Model Runner и Open WebUI помогают запустить генерацию изображений локально, без отдельного облачного сервиса

Каждый из нас встречался с ситуацией, когда нужно сгенерировать изображения для проекта. Запускаем сервис AI-генерации и задумываемся: что происходит с запросами, сколько кредитов осталось, и почему фильтр «безопасного контента» отклонил вполне разумный запрос на дракона в деловом костюме? Представьте, если бы можно было избежать этой головной боли и запустить процесс генерации на своей машине с удобным интерфейсом чата
Docker Model Runner позволяет это сделать. Всего несколькими командами можно загрузить модель генерации изображений, подключить её к Open WebUI и начать создавать изображения прямо из чата — всё это локально, приватно и на ваших условиях
Давайте построим это. Ваш собственный приватный DALL-E, без облачной подписки
Установка Docker на вашу машину — это первый шаг к локальной генерации изображений с использованием Docker Model Runner. Подробную инструкцию вы можете найти здесь
Если вы хотите расширить функциональность и создавать собственные образы для своих нужд, я настоятельно рекомендую ознакомиться с созданием образов Docker, используя Dockerfile
Управление многоконтейнерными приложениями станет более простым с использованием Docker Compose. Узнайте, как это сделать, в этой статье
- Что понадобится для старта
- Как Docker Model Runner интегрируется с Open WebUI
- Загрузка DDUF-модели в Docker Model Runner
- Запуск Open WebUI и подключение к локальному эндпоинту
- Настройка Open WebUI для работы с эндпоинтом изображений
- Загрузка языковой модели для чата
- Генерация изображения через интерфейс чата
- Генерация изображений через API напрямую
- Расширенные параметры
- Как работает бэкенд Diffusers в Docker Model Runner
- Устранение неполадок при работе Docker Model Runner с Open WebUI
- Что дальше после первого запуска
- Часто задаваемые вопросы
Что понадобится для старта
- Docker Desktop (macOS) или Docker Engine (Linux)
- ~8 ГБ свободной оперативной памяти для небольшой модели (чем больше, тем лучше)
- GPU: необязательно, но настоятельно рекомендуется — NVIDIA (CUDA), Apple Silicon (MPS) или резервный вариант на CPU
Если команда docker model version выполняется без ошибок, всё готово
Как Docker Model Runner интегрируется с Open WebUI
Прежде чем погружаться в детали, вот общая картина
Docker Model Runner управляет загрузкой модели и жизненным циклом бэкенда, обеспечивая совместимость с OpenAI API, включая эндпоинт POST /v1/images/generations, который активно используется Open WebUI
Загрузка DDUF-модели в Docker Model Runner
Docker Model Runner использует компактный формат дистрибуции под названием DDUF (Diffusers Unified Format, унифицированный формат диффузионных моделей) для распространения моделей генерации изображений через Docker Hub — точно так же, как любой другой OCI-артефакт
Загрузите модель для начала работы:
docker model pull stable-diffusion
Можно убедиться, что она готова:
docker model inspect stable-diffusion
{ "id": "sha256:5f60862074a4c585126288d08555e5ad9ef65044bf490ff3a64855fc84d06823", "tags": [ "docker.io/ai/stable-diffusion:latest" ], "created": 1768470632, "config": { "format": "diffusers", "architecture": "diffusers", "size": "6.94GB", "diffusers": { "dduf_file": "stable-diffusion-xl-base-1.0-FP16.dduf", "layout": "dduf" } }
}
Локально модель хранится в формате DDUF, который объединяет все компоненты диффузионной модели (текстовый энкодер, VAE, UNet/DiT, настройки планировщика) в одном файле. Docker Model Runner может распаковать его в процессе работы
Запуск Open WebUI и подключение к локальному эндпоинту
Docker Model Runner имеет встроенную команду запуска, позволяющую подключить Open WebUI к локальному эндпоинту вывода
docker model launch openwebui
Вот и всё. За кулисами это выполняет:
docker run --rm \
-p 3000:8080 \
-e OPENAI_API_BASE=http://model-runner.docker.internal/engines/v1 \
-e OPENAI_BASE_URL=http://model-runner.docker.internal/engines/v1 \
-e OPENAI_API_KEY=sk-docker-model-runner \
ghcr.io/open-webui/open-webui:latest
Имя хоста model-runner.docker.internal — это специальная DNS-запись, которую контейнеры Docker Desktop используют для обращения к Model Runner, запущенному на хосте, без каких-либо манипуляций с пробросом портов. Если вы используете Docker CE, вместо model-runner.docker.internal вы увидите адрес контейнера docker/model-runner
Откройте браузер по адресу http://localhost:3000, создайте локальную учётную запись (она остаётся офлайн) — и вы окажетесь в интерфейсе чата
Совет: хотите запустить в фоновом режиме? Добавьте --detach:
docker model launch openwebui --detach
Предпочитаете Docker Compose? Смотрите полную настройку в официальной документации: https://docs.docker.com/ai/model-runner/openwebui-integration/
Настройка Open WebUI для работы с эндпоинтом изображений
Open WebUI уже использует Docker Model Runner для текстового чата автоматически — он считывает переменную окружения OPENAI_API_BASE. Для генерации изображений нужно также указать ему эндпоинт изображений. Это займёт около 30 секунд в интерфейсе настроек
Перейдите по адресу http://localhost:3000/admin/settings/images, включите генерацию изображений и заполните поля:
| Поле | Значение |
|---|---|
| API Base URL | http://model-runner.docker.internal/engines/diffusers/v1 |
| API Key | любое-значение |
Нажмите Save
Зачем нужен фиктивный API-ключ? Docker Model Runner не требует аутентификации — это локальный сервис. Ключ нужен только потому, что форма Open WebUI требует его наличия. Подойдёт любая непустая строка
Загрузка языковой модели для чата
Open WebUI — это также полнофункциональный интерфейс чата, и один из его лучших трюков — возможность попросить языковую модель сгенерировать изображение прямо из разговора. Для этого нужна и языковая модель тоже
# Лёгкий вариант — работает почти на любой машине
docker model pull smollm2
# Рекомендуемый — более мощный, лучше понимает творческие запросы
docker model pull gpt-oss
Обе модели автоматически появятся в селекторе моделей Open WebUI. Используйте smollm2, если у вас мало оперативной памяти, или gpt-oss, если хотите более богатые и творческие ответы перед генерацией изображений
Дополнительная настройка не нужна — Open WebUI подхватывает текстовые модели с того же эндпоинта OPENAI_API_BASE, с которым уже настроен
Генерация изображения через интерфейс чата
Вернитесь в главный вид чата. Вы заметите небольшую иконку изображения в строке ввода сообщения. Нажмите на неё, чтобы переключить режим генерации изображений, введите запрос и отправьте
Попробуйте что-нибудь вроде:
Create an image of a whale.
Первый запрос занимает немного больше времени, пока бэкенд загружает модель в память. После этого последующие изображения генерируются значительно быстрее
Я рекомендую добавлять в запрос стилистические уточнения — например, photorealistic, oil painting или cinematic lighting. Это заметно влияет на качество даже без изменения параметров шагов вывода
Open WebUI автоматически направляет запросы на генерацию изображений в движок Diffusers, а текстовые запросы — в языковую модель, бесшовно, в рамках одного разговора
Генерация изображений через API напрямую
Для разработчиков, которые хотят интегрировать генерацию изображений в собственные приложения, Docker Model Runner предоставляет стандартный OpenAI Images API напрямую:
curl -s -X POST http://localhost:12434/engines/diffusers/v1/images/generations \
-H "Content-Type: application/json" \
-d '{
"model": "stable-diffusion",
"prompt": "A cat sitting on a couch",
"size": "512x512"
}'
Ответ точно следует формату OpenAI Images API:
{
"created": 1742990400,
"data": [
{
"b64_json": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBD..."
}
]
}
Декодируйте и сохраните изображение стандартными средствами base64
Расширенные параметры
API поддерживает все параметры, которые можно ожидать от полноценного пайплайна diffusers:
curl http://localhost:12434/engines/diffusers/v1/images/generations \
-X POST \
-H "Content-Type: application/json" \
-d '{
"model": "stable-diffusion",
"prompt": "A serene Japanese zen garden, cherry blossoms, koi pond, photorealistic",
"negative_prompt": "blurry, low quality, distorted, watermark",
"size": "768x512",
"n": 2,
"num_inference_steps": 30,
"guidance_scale": 7.5,
"seed": 42,
"response_format": "b64_json"
}' | jq -r '.data[0].b64_json' | base64 -d > garden.png
| Параметр | Что делает |
|---|---|
| prompt | Что вы хотите видеть на изображении |
| negative_prompt | Чего вы хотите избежать |
| size | Разрешение в формате ШИРИНАxВЫСОТА (например, 512×512, 768×512) |
| n | Количество генерируемых изображений (1–10) |
| num_inference_steps | Больше шагов = выше качество, медленнее (по умолчанию: 50) |
| guidance_scale | Насколько точно следовать подсказке (1–20, по умолчанию: 7.5) |
| seed | Целое число для воспроизводимых результатов; опустите для случайного |
Совет профессионала: устанавливайте seed во время итерации над запросом. Когда вы будете довольны композицией, уберите его, чтобы получить уникальные вариации
Как работает бэкенд Diffusers в Docker Model Runner
Когда вы впервые запрашиваете изображение, Docker Model Runner выполняет следующее:
- Распаковывает DDUF-файл — извлекает компоненты модели и загружает их через
DiffusionPipeline.from_pretrained() - Запускает FastAPI-сервер — именно с этим сервером общаются Open WebUI и ваши curl-команды через Docker Model Runner
Сервер устанавливается при первом использовании путём загрузки автономной среды Python с Docker Hub (с фиксированной версией, поэтому обновления выполняются явно). Он располагается по адресу ~/.docker/model-runner/diffusers/ — никаких конфликтов версий Python, никакой настройки virtualenv
Устранение неполадок при работе Docker Model Runner с Open WebUI
Модель очень долго загружается при первом использовании. Это нормально — веса модели загружаются с диска и передаются в память GPU. Последующие запросы в той же сессии выполняются значительно быстрее, поскольку бэкенд остаётся в рабочем состоянии
Ошибка 503 "No model loaded". Убедитесь, что модель полностью загружена (docker model list) и что вы отправляете правильное имя модели в поле model
Качество изображений низкое / генерация слишком быстрая. Увеличьте num_inference_steps (попробуйте 20–50 шагов). Более высокие значения дают медленнее, но чётче результаты
Open WebUI не может подключиться к конечной точке изображений. Дважды проверьте URL в Admin Panel → Settings → Images. Внутри Docker-контейнера это должен быть http://model-runner.docker.internal/engines/diffusers/v1, а не localhost
Что дальше после первого запуска
Docker Model Runner делает локальную генерацию изображений простой. Он упаковывает и обслуживает модели изображений через совместимый с OpenAI API, а Open WebUI предоставляет удобный чат-интерфейс поверх него. Вместе они позволяют генерировать изображения в приватном режиме на собственной машине — как через браузер, так и напрямую через API, без использования облачного сервиса
На мой взгляд, самое интересное начинается именно здесь — когда базовый пайплайн уже работает и можно экспериментировать с более сложными сценариями. Я покажу три направления, которые открываются сразу после первого запуска:
- Мультимодальные рабочие процессы: общайтесь с текстовой моделью об идее, а затем сразу же генерируйте её изображение — в том же диалоге Open WebUI
- RAG + генерация изображений: создайте пайплайн, который генерирует иллюстрации для ваших документов
- Пользовательские модели: бэкенд diffusers поддерживает любую модель, упакованную в DDUF, поэтому вы можете упаковать собственные дообученные модели с помощью инструментов упаковки моделей Docker
Команда Docker Model Runner активно расширяет поддержку моделей на Docker Hub. Проверяйте docker model search для получения информации о последних доступных моделях
Часто задаваемые вопросы
Можно ли использовать Docker Model Runner без GPU? Да, CPU-режим поддерживается как резервный вариант. Генерация будет значительно медленнее, но работоспособна. Для комфортной работы рекомендуется NVIDIA с поддержкой CUDA или Apple Silicon с MPS
Нужно ли подключение к интернету после загрузки модели? Нет. После того как модель загружена командой docker model pull, весь процесс генерации происходит полностью локально. Open WebUI также работает офлайн — учётная запись, которую вы создаёте при первом входе, хранится только на вашей машине
Какой минимальный объём оперативной памяти нужен для запуска stable-diffusion? Модель занимает около 6.94 ГБ на диске. Для комфортной работы рекомендуется не менее 8 ГБ свободной оперативной памяти, а лучше 16 ГБ с учётом накладных расходов системы и Open WebUI
Можно ли использовать собственную дообученную модель? Да. Движок Diffusers поддерживает любую модель, упакованную в формат DDUF. Для упаковки используйте инструменты упаковки моделей Docker, после чего модель подключается так же, как и стандартная stable-diffusion
Как одновременно использовать и текстовый чат, и генерацию изображений в Open WebUI? Open WebUI автоматически маршрутизирует запросы: текстовые — к языковой модели через OPENAI_API_BASE, запросы на генерацию изображений — к бэкенду diffusers через отдельный эндпоинт, настроенный в Admin Panel → Settings → Images. Переключение происходит через иконку изображения в строке ввода



