SD Studio + LLM на локальной видеокарте: полный гайд 2026 | AiManual
AiManual Logo Ai / Manual.
03 Май 2026 Гайд

Как собрать свою SD Studio с LLM-помощником на локальной видеокарте

Пошаговый гайд по созданию локальной генеративной студии: Stable Diffusion + LLM-помощник на одной видеокарте. Автоматизация промптов, LoRA, без подписок.

Почему платить за Midjourney, если можно собрать свою студию за вечер?

Признайся: тебе надоело каждый месяц платить $10-30 за подписку, получать цензуру промптов и ждать, пока нейросеть сгенерирует "не то"? Я тоже через это прошёл. Решение — собрать локальную SD Studio с LLM-помощником. И да, это реально даже на одной видеокарте, если не пытаться запустить всё сразу в максимальном разрешении.

Суть простая: LLM (например, Llama 4 или Qwen 2.5) берёт на себя мозги — переписывает твой корявый запрос в профессиональный промпт для Stable Diffusion, добавляет LoRA-триггеры, подбирает параметры. Ты только говоришь „нарисуй киберпанк-кота в стиле аниме“, а LLM уже разворачивает это в полноценный промпт с референсами на художников и техниками. Дальше — Automatic1111 или Forge, и готово. Без интернета, без цензуры, без доплат.

Важно: на 2026 год это не хак, а полноценный рабочий пайплайн. Модели SDXL и SD3 (через Stable Diffusion WebUI Forge) работают стабильно, LLM-квантизации помещаются в 6-12 ГБ VRAM, а инструменты интеграции уже не требуют танцев с бубном. Но если у тебя видеокарта с 4 ГБ — сначала прочти этот гайд.

Что будем собирать? (И почему это не pet-проект, а рабочий инструмент)

Представь студию, где есть два движка:

  • Stable Diffusion — графический движок. Берёт промпт, рисует картинку. Мы используем Automatic1111 WebUI (или Forge), ControlNet, LoRA.
  • LLM — текстовый движок. Превращает "кота" в "a cyberpunk cat with neon stripes, futuristic Tokyo street at night, detailed fur, volumetric lighting, style of Makoto Shinkai".

Связка простая: пользовательский запрос → LLM (локально через Ollama или llama.cpp) → улучшенный промпт → SD WebUI (через REST API) → готовое изображение. Всё на одной машине, на одной видеокарте, без облаков.

Такой пайплайн решает проблему дорогих сервисов: за стоимость месяца Midjourney ты получаешь бесконечные генерации, полный контроль над LoRA и возможность кастомизировать модели под свой стиль. А LLM-помощник ещё и учится на твоих промптах — со временем он будет выдавать то, что нужно, с первой попытки.

Железо: с чем можно жить, а с чем — не стоит

На 2026 год минимальный комфортный порог — видеокарта с 12 ГБ VRAM. Это позволяет одновременно держать в памяти SDXL-модель (6-7 ГБ) и LLM-квантизацию на 4-5 ГБ. Если у тебя 8 ГБ — придётся экономить: запускать последовательно, выгружать LLM из памяти перед генерацией, использовать лёгкие модели вроде SD 1.5 или TinySD. С 16 ГБ и больше живёшь припеваючи.

  • RTX 5060 Ti 16GB — отличный бюджетный вариант, хватит и на SD, и на LLM 7B.
  • RTX 3090 / 4090 — золотой стандарт: 24 ГБ позволяют держать обе модели постоянно в памяти.
  • RTX 3060 12GB — тоже можно, но придётся заморачиваться с offloading. См. статью про 3×RTX 3090, если хочешь экстрима.

Общее правило: для LLM лучше брать квантизацию Q4_K_M — компромисс между качеством и размером. Для SD — модель SDXL (или SD3, если карта позволяет). LoRA весят по 50-100 МБ — их можно подгружать динамически.

Шаг 1: Установка Stable Diffusion WebUI

Не советую тратить время на кастомные сборки — бери Automatic1111 WebUI или Forge. На май 2026 Forge стабильнее поддерживает SD3 и ControlNet, но Automatic1111 всё ещё актуален. Установка в две команды:

# Установка Automatic1111 (Linux)
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui
./webui.sh --xformers --api

Флаг --api обязателен — через него мы будем слать промпты из LLM. На Windows запускай webui-user.bat, предварительно добавив --api в переменную COMMANDLINE_ARGS.

Ошибка новичка: забыть установить ControlNet. Поставь через Extensions → Available → поищи "sd-webui-controlnet". Он нужен, чтобы LLM могла задавать позы и композицию через OpenPose или Canny. Без него управлять генерацией сложнее.

Качаем модель: sd_xl_base_1.0.safetensors (или любую другую) и кладём в models/Stable-diffusion/. Для LoRA — в models/Lora/.

Шаг 2: Установка локального LLM (через Ollama)

Самый быстрый способ получить локальный текстовый движок — Ollama. Он под капотом использует llama.cpp, но даёт простой REST API. Установка:

# Linux/macOS
curl -fsSL https://ollama.com/install.sh | sh
# Windows — скачать exe с официального сайта

Качаем модель. Для видеокарты 12-16ГБ рекомендую Llama 4 7B Q4_K_M (около 4,5 ГБ) или Qwen 2.5 7B Q4_K_M. Они отлично справляются с написанием промптов. Если карта 24ГБ, можно взять Llama 4 70B Q3_K_M — качество выше, но и VRAM съест ~20 ГБ.

ollama pull llama4:7b-q4_K_M
# или qwen2.5:7b-q4_K_M

Проверяем, что работает: ollama serve (демон запущен по умолчанию). Теперь к нему можно обращаться через http://localhost:11434.

Сравнение Ollama vs llama.cpp — читай этот обзор. Для нашей задачи разницы почти нет, но Ollama удобнее для старта.

Шаг 3: Пишем скрипт-интегратор (Python)

Вот где начинается магия. Скрипт принимает текст от пользователя, отправляет его LLM, получает промпт и шлёт его в Automatic1111 на генерацию. Я написал минимальную версию — ты легко допилишь под себя.

import requests
import json

# Настройки
SD_URL = "http://127.0.0.1:7860/sdapi/v1/txt2img"
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL = "llama4:7b-q4_K_M"

def enhance_prompt(user_input: str) -> str:
    prompt_template = f"""
Ты — эксперт по промптам для Stable Diffusion. Улучши запрос пользователя, добавь детали: освещение, стиль, цвета, технику. Используй английский язык. Ответь только готовым промптом, без пояснений.

Запрос: {user_input}
"""
    payload = {
        "model": MODEL,
        "prompt": prompt_template,
        "stream": False,
        "options": {"num_predict": 256, "temperature": 0.7}
    }
    resp = requests.post(OLLAMA_URL, json=payload)
    return resp.json()["response"].strip()

def generate_image(prompt: str, negative: str = "blurry, ugly, watermark") -> str:
    payload = {
        "prompt": prompt,
        "negative_prompt": negative,
        "steps": 25,
        "width": 768,
        "height": 768,
        "sampler_name": "Euler a",
        "cfg_scale": 7,
    }
    resp = requests.post(SD_URL, json=payload)
    return resp.json()["images"][0]  # base64

# Использование
if __name__ == "__main__":
    user_text = input("Что нарисуем? ")
    enhanced = enhance_prompt(user_text)
    print(f"Сгенерированный промпт:\n{enhanced}")
    img_b64 = generate_image(enhanced)
    # Сохраняем как PNG
    import base64
    with open("output.png", "wb") as f:
        f.write(base64.b64decode(img_b64))
    print("Готово! output.png")

Запускаешь, вводишь "дракон на закате", получаешь километровый промпт и картинку. Можно добавить LoRA — для этого в payload SD допиши "alwayson_scripts": {"Lora": {"args": ["имя_лоры:1.0"]}}.

Типичная проблема: VRAM не хватает, и SD падает с OutOfMemory. Решение — выгружать LLM перед генерацией, если они запущены на одной карте. В скрипте можно добавить: requests.post("http://localhost:11434/api/generate", json={"model": MODEL, "keep_alive": 0}), чтобы освободить память.

Прокачка: ControlNet и мульти-LLM

Базовый пайплайн — это только начало. Попробуй:

  • Использовать LLM для генерации негативного промпта — отдельным запросом. Я делаю два параллельных вызова: один для позитива, другой для "чего избегать".
  • Добавить ControlNet через промпт: LLM описывает позу, а скрипт генерирует OpenPose-скелет через Python (библиотеки типа controlnet_aux), и подкладывает его как вход ControlNet.
  • Подключать две модели LLM: маленькую (3B) для быстрых черновиков промпта, потом большую (70B) для рефайна. Это ускоряет работу — читай статью про две карты, если хочешь распределить нагрузку.

Автоматизация: когда лень вводить текст

Можно сделать веб-интерфейс на Flask или FastAPI, который будет принимать запросы из браузера. Или прикрутить Telegram-бота. LLM будет работать как ассистент: ты пишешь "киберпанк, дождь, неон", а бот возвращает картинку. Код — тот же, только заворачиваешь в loop с очередью.

Для полной автоматизации можно дать LLM доступ к списку твоих LoRA. Например, скормить ей YAML-файл с описаниями LoRA, и пусть сама решает, что применить. Я использую LLM Tool Calling (поддерживается в Ollama): LLM возвращает JSON с параметрами, а скрипт его парсит.

Типичные грабли и как их обойти (FAQ style)

Проблема Причина Решение
LLM пишет промпт на русском Модель не понимает инструкцию Уточни в системном промпте: "Только английский"
SD падает при генерации Не хватает VRAM Добавь выгрузку LLM перед запросом к SD
Промпты получаются шаблонными LLM не креативна, temperature низкая Подними temperature до 0.9-1.2, добавь в промпт "be creative, use unexpected combinations"
Не работает ControlNet Не установлены модели ControlNet или preprocessor Скачай модели с Hugging Face (control_v11p_sd15_openpose), положи в models/ControlNet

Бонус: как запустить всё на одной видеокарте, если она не монстр (6-8 ГБ)

Да, это возможно. Хотя лучше сначала прочитать гайд по минимальным требованиям VRAM, лайфхак такой: используй SD 1.5 (весит ~2 ГБ) и LLM модель 3B (квантизация Q4 ~2 ГБ). В сумме 4-5 ГБ, остаётся запас. Запускай SD WebUI с флагом --medvram или --lowvram. LLM запускай с num_gpu_layers не 100, а 20 — часть слоёв оставить на CPU. Скорость упадёт, но работать будет.

Альтернатива — не держать LLM постоянно в памяти. Поднимай её по запросу через Ollama (он сам грузит/выгружает). Но тогда каждый запрос будет долгим (первый запуск модели занимает несколько секунд).

Если хочешь собрать полноценную станцию с нуля — тебе сюда: гайд по мощной станции за $15k. Но для старта хватит RTX 5060 Ti и немного терпения.

💡
Главное, что я понял за год экспериментов: не пытайся запустить всё сразу. Начни с простого скрипта на коленке, как в шаге 3. Когда увидишь, что первая картинка сгенерировалась через LLM-помощника, появится куча идей. Пет-проект превратится в рабочую среду за пару вечеров. А подписки... ну, они останутся только для тех, кто любит платить за воздух.

Подписаться на канал