Генератор промптов для Stable Diffusion на LLM: настройка Python
Если вы хотите, чтобы генератор промптов для Stable Diffusion на LLM превращал несколько слов в полный, хорошо структурированный промпт, вам нужна только текстовая модель и около тридцати строк кода на Python. Модель генерирует промпт текстом; она не создаёт изображения, поэтому вам всё равно нужно пропустить результат через SDXL или любой другой инструмент для работы с изображениями, который вы используете.


Ключевые моменты
- LLM генерирует только текст. Передайте его вывод в вашу собственную среду SDXL, ComfyUI или Automatic1111.
- JSON-режим возвращает положительный и отрицательный промпты, которые можно распарсить без регулярных выражений.
- Одно расширение стоит менее $0,0001, поэтому 1 000 промптов обходятся примерно в $0,09.
- Держите промпты лаконичными: текстовые кодировщики SDXL считывают только первые 77 токенов каждого фрагмента.
Что делает LLM и что не делает
Модели изображений хорошо реагируют на плотные, конкретные промпты: субъект, обстановка, объектив, освещение, среда, настроение и список того, чего следует избегать. Большинство людей вводят три слова и получают плоский результат. LLM устраняет этот разрыв, превращая вашу короткую идею в длинную версию в согласованном формате.
Чётко разделите обязанности. Этот сервис — текстовый API. Он не генерирует изображения, аудио или видео, и у него нет эмбеддингов или дообучения. Он стоит перед вашим конвейером обработки изображений и пишет инструкции, которые этот конвейер читает. Это совместимый с OpenAI эндпоинт, обслуживающий одну модель с открытыми весами от независимого провайдера, а не продукт какого-либо вендора моделей для изображений.
Модель настроена на ответы без отказов по контенту для законного использования взрослыми, что важно для художников и разработчиков игр, чьи темы (ужасы, насилие в художественной литературе, зрелые темы) блокируются в других местах. Сексуальный контент с участием несовершеннолетних — это строгое ограничение, и он никогда не генерируется.
Шаг 1: получите ключ и протестируйте один вызов
Войдите через Google или по электронной почте и паролю, затем откройте страницу API-ключ. Пробный запуск в один клик добавляет $0,50 кредита, который действует 7 дней и не требует привязки карты. Этого достаточно для тысяч расширений промптов, как показано в разделе стоимости.
Проверьте работоспособность с помощью curl:
curl https://api.sdxlapi.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You write Stable Diffusion prompts."},
{"role": "user", "content": "lighthouse in a storm"}
]
}'
Любой SDK OpenAI работает после изменения базового URL и ключа. Подробности в документации.
Шаг 2: системный промпт для стабильного вывода
Системный промпт — источник качества. Укажите модели целевой формат, порядок элементов, ограничение по длине и то, что следует исключить. Версия, которая хорошо работает как отправная точка:
Вы превращаете короткие идеи для изображений в промпты для SDXL. Напишите один положительный промпт из 40–60 слов: сначала субъект, затем обстановка, композиция, освещение, среда или стиль и настроение. Используйте фразы через запятую, без полных предложений. Затем напишите отрицательный промпт до 15 коротких фраз. Не добавляйте текст, водяные знаки или подписи к изображению. Верните JSON с ключами "prompt" и "negative".
Ограничение по количеству слов важно. Текстовые кодировщики CLIP SDXL обрабатывают промпты блоками по 77 токенов, и всё, что выходит за их пределы, либо обрезается, либо обрабатывается функцией разбиения на части в вашем интерфейсе. Стремление к 40–60 словам позволяет уместить большинство промптов в один блок, помещая самые важные детали в начало.
Используйте низкую или среднюю температуру (0,7–0,9), чтобы стиль оставался согласованным, но два запуска одной идеи отличались друг от друга. Если вам нужен идентичный вывод для тестирования, передайте фиксированный seed.
Шаг 3: скрипт на Python
Этот скрипт читает идеи из списка, запрашивает JSON и выводит пару промптов. Он использует официальный пакет OpenAI для Python с изменённым базовым URL.
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.sdxlapi.com/v1", api_key="YOUR_KEY")
SYSTEM = (
"You turn short image ideas into prompts for SDXL. Write one positive "
"prompt of 40 to 60 words: subject, setting, composition, lighting, "
"medium or style, mood, as comma-separated phrases. Then a negative "
"prompt of up to 15 short phrases. Return JSON with keys "
"'prompt' and 'negative'."
)
def expand(idea: str) -> dict:
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": idea},
],
response_format={"type": "json_object"},
temperature=0.8,
max_tokens=400,
)
return json.loads(resp.choices[0].message.content)
for idea in ["lighthouse in a storm", "abandoned greenhouse at dawn"]:
result = expand(idea)
print(idea, "->", result["prompt"])
print("negative:", result["negative"], "\n")
JSON-режим (response_format с json_object) делает ответ удобным для парсинга. В продакшене всё равно оборачивайте json.loads в блок try и повторяйте запрос один раз при сбое, так как длинный ответ, обрезанный по max_tokens, может оборваться посередине объекта.
Шаг 4: отправьте промпты в ваш инструмент для изображений
Вывод — это обычные строки, поэтому любой фронтенд может их принять. При локальной установке Automatic1111 или ComfyUI отправьте два поля в его API. Со скриптом, который перебирает CSV-файл с идеями, запишите результаты в файл и поставьте их в очередь как пакет.
- Сохраняйте идею, промпт и отрицательный промпт вместе, чтобы можно было отследить хорошее изображение до инструкции, которая его создала.
- Добавьте строку стиля из вашего собственного списка ("cinematic photograph", "ink illustration") как дополнительное поле в сообщении пользователя, когда вам нужна серия с единым визуальным стилем.
- Храните краткую библиотеку сработавших промптов и подавайте два-три из них в системный промпт в качестве примеров. Примеры few-shot направляют стиль более надёжно, чем прилагательные.
Для проекта в жанре ролевой игры тот же шаблон может иллюстрировать сцены из истории, превращая последние несколько абзацев в визуальное описание. Статья о текстовых сценариях ролевых игр охватывает сторителлинг.
Распространённые проблемы и решения
В почти каждом проекте генератора промптов возникают несколько проблем.
Модель добавляет комментарии
Ответы, начинающиеся с "Вот ваш промпт", ломают конвейеры. JSON-режим устраняет большую часть этого. Если вы работаете с обычным текстом, укажите "выводите только промпт, без преамбулы" и добавьте стоп-последовательность для строки, которую вы никогда не хотите видеть.
Каждый промпт выглядит одинаково
Низкая температура и строгий шаблон дают однородные результаты. Повысьте температуру до 1,0, варьируйте строку стиля, которую вы передаёте, или запросите три варианта и выберите один. Штрафы (frequency_penalty, presence_penalty) передаются и могут разбить повторяющиеся фразы.
Промпты слишком длинные для модели изображений
Установите жёсткое ограничение по количеству слов в системном промпте и проверяйте длину в коде. Ручное усечение удаляет последние детали, которые обычно наименее важны, но лучше, чтобы модель сразу писала коротко.
Вы получаете 429
Вы отправили слишком много запросов в минуту или одновременно. Сделайте паузу на несколько секунд и повторите запрос; в ответе может быть Retry-After: 5. Пакет с небольшим пулом потоков из 4–8 рабочих остаётся в пределах лимитов полного ключа.
Сколько стоят 1 000 промптов
Тарификация: $0,15 за 1 млн входных токенов и $0,50 за 1 млн выходных токенов. Типичное расширение отправляет системный промпт около 150 токенов плюс идею из 15 токенов, итого 170 токенов на вход, и получает около 120 токенов JSON.
- Вход: 170 × $0,15 / 1M = $0,0000255.
- Выход: 120 × $0,50 / 1M = $0,00006.
- На один промпт: около $0,0000855.
- 1 000 промптов: около $0,0855, или $0,09.
Округлите значение в большую сторону для длинных системных промптов или few-shot примеров. Если вы добавите 600 токенов примеров, входные данные составят 770 токенов, а 1 000 промптов обойдутся примерно в $0,1155 за входные данные + $0,06 за выходные, в сумме около $0,18. В любом случае, пробного кредита $0,50 хватит на несколько тысяч расширений. За неудачные запросы не взимается плата, а предоплаченный баланс не сгорает; подробности см. на странице тарифов для пополнения (от $20 до $500 криптовалютой).
Дополнительные руководства
Вопросы и ответы
Может ли LLM сгенерировать само изображение Stable Diffusion?
Нет. Он только пишет текст. Вы передаёте его промпт в SDXL, ComfyUI, Automatic1111 или любой другой инструмент для изображений, который вы запускаете.
Какой длины должен быть промпт для SDXL?
Оптимально использовать от 40 до 60 слов, размещая ключевые детали в начале, поскольку текстовые кодировщики читают данные блоками по 77 токенов.
Отказывает ли он в зрелых или мрачных темах?
Модель настроена на выдачу результатов без отказов по содержанию для законного использования взрослыми. Контент с участием несовершеннолетних никогда не генерируется.
Какое имя модели мне отправить?
Отправьте uncensored как идентификатор модели, с базовым URL https://api.sdxlapi.com/v1 и вашим ключом в виде Bearer токена.
Могу ли я запускать множество промптов параллельно?
Полный ключ позволяет 8 параллельных запросов и 300 в минуту; пробный ключ — 2 и 60. Ответ 429 означает: подождите и повторите.
Ваш ключ — всего в одном шаге
Создайте аккаунт, скопируйте ключ, измените базовый URL. Это вся настройка.