Можно ли генерировать картинки бесплатно? Разбираем Docker Model Runner и OpenWebUI

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

Вся рубрика Docker: уроки, команды и практические сценарии

Каждый из нас встречался с ситуацией, когда нужно сгенерировать изображения для проекта. Запускаем сервис AI-генерации и задумываемся: что происходит с запросами, сколько кредитов осталось, и почему фильтр «безопасного контента» отклонил вполне разумный запрос на дракона в деловом костюме? Представьте, если бы можно было избежать этой головной боли и запустить процесс генерации на своей машине с удобным интерфейсом чата

Docker Model Runner позволяет это сделать. Всего несколькими командами можно загрузить модель генерации изображений, подключить её к Open WebUI и начать создавать изображения прямо из чата — всё это локально, приватно и на ваших условиях

Давайте построим это. Ваш собственный приватный DALL-E, без облачной подписки

Установка Docker на вашу машину — это первый шаг к локальной генерации изображений с использованием Docker Model Runner. Подробную инструкцию вы можете найти здесь

Если вы хотите расширить функциональность и создавать собственные образы для своих нужд, я настоятельно рекомендую ознакомиться с созданием образов Docker, используя Dockerfile

Управление многоконтейнерными приложениями станет более простым с использованием Docker Compose. Узнайте, как это сделать, в этой статье

Что понадобится для старта

  • 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 URLhttp://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 выполняет следующее:

  1. Распаковывает DDUF-файл — извлекает компоненты модели и загружает их через DiffusionPipeline.from_pretrained()
  2. Запускает 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. Переключение происходит через иконку изображения в строке ввода

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x