Diffusers documentation
Промптинг
Промптинг
Промпты описывают, что должна сгенерировать модель. Хорошие промпты подробные, конкретные и структурированные, и они приводят к получению более качественных изображений и видео.
В этом руководстве показано, как составлять эффективные промпты, и представлены приемы, которые делают их сильнее.
Составление хороших промптов
Каждый эффективный промпт требует трех ключевых элементов.
- Тема — то, что вы хотите сгенерировать. Начните свой промпт с этого.
- Стиль — это средство или эстетика. Как это должно выглядеть?
- Контекст — детали о действиях, обстановке и настроении.
Используйте эти элементы как основу для структурированного повествования, а не как список ключевых слов. Современные модели лучше понимают язык, чем сопоставление по ключевым словам. Начните с простого, а затем добавляйте детали.
Контекст особенно важен для создания более качественных промптов. Попробуйте добавить освещение, художественные детали и настроение.
Будьте конкретны и добавляйте контекст. Используйте фотографические термины, такие как тип объектива, фокусное расстояние, ракурсы съёмки и глубина резкости.
Попробуйте улучшатель промптов, чтобы помочь улучшить структуру вашего промпта.
Руководство и негативные примеры
Большинство пайплайнов Diffusers по-прежнему управляют сэмплированием с помощью classifier-free guidance и необязательного negative_prompt.
В пайплайнах семейства Stable Diffusion передавайте guidance_scale и negative_prompt. Чем выше значение guidance_scale, тем точнее изображение соответствует промпту. Слишком высокие значения могут привести к неестественному или перенасыщенному виду.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu"
)
image = pipeline(
prompt="a cozy reading nook with afternoon light",
negative_prompt="blurry, low quality, distorted",
guidance_scale=7.5,
).images[0]В более новых чекпоинтах, таких как Qwen-Image и Flux, классический CFG обычно представляет собой true_cfg_scale в сочетании с negative_prompt. Отрицательные промпты по-прежнему применяются, когда включён true CFG (true_cfg_scale > 1 и задан negative_prompt). Аргумент guidance_scale означает дистиллированное или встроенное руководство, если трансформер это поддерживает, что не то же самое. Проверьте API пайплайна для загружаемой вами модели.
Модульные Diffusers могут заменить алгоритм наведения на guider. См. Guiders.
Взвешивание промптов
Взвешивание промпта делает одни слова более сильными, а другие — более слабыми. Оно масштабирует оценки внимания, позволяя контролировать степень влияния каждой концепции.
Diffusers решает эту задачу с помощью аргументов prompt_embeds и pooled_prompt_embeds, которые принимают масштабированные векторы текстовых эмбеддингов. Для генерации этих эмбеддингов используйте библиотеку sd_embed. Она также поддерживает более длинные промпты. Для взвешивания в семействах Stable Diffusion с более простым синтаксисом можно также использовать Compel.
Библиотека sd_embed поддерживает только Stable Diffusion, Stable Diffusion XL, Stable Diffusion 3, Stable Cascade и Flux. Веса промптов не всегда помогают в моделях класса Flux, которые и так точно следуют инструкциям.
uv pip install git+https://github.com/xhinker/sd_embed.git@main
Формат взвешенного текста с числовыми множителями или скобками. Чем больше скобок, тем сильнее взвешивание.
| формат | множитель |
|---|---|
(cat) | увеличение в 1,1 раза |
((cat)) | увеличение в 1,21 раза |
(cat:1.5) | увеличение в 1,5 раза |
(cat:0.5) | установите вес в 0,5× |
Создайте взвешенный промпт и передайте его в get_weighted_text_embeddings_sdxl для генерации эмбеддингов.
Вы также можете передать отрицательные промпты в
negative_prompt_embedsиnegative_pooled_prompt_embeds.
import torch
from diffusers import DiffusionPipeline
from sd_embed.embedding_funcs import get_weighted_text_embeddings_sdxl
pipeline = DiffusionPipeline.from_pretrained(
"Lykon/dreamshaper-xl-1-0", dtype=torch.bfloat16, device_map="cuda" # or "mps", "xpu", "cpu"
)
prompt = """
A (cute cat:1.4) lounges on a (floating leaf:1.2) in a (sparkling pool:1.1) during a peaceful summer afternoon.
Gentle ripples reflect pastel skies, while (sunlight:1.1) casts soft highlights. The illustration is smooth and polished
with elegant, sketchy lines and subtle gradients, evoking a ((whimsical, nostalgic, dreamy lofi atmosphere:2.0)),
(anime-inspired:1.6), calming, comforting, and visually serene.
"""
prompt_embeds, _, pooled_prompt_embeds, *_ = get_weighted_text_embeddings_sdxl(pipeline, prompt=prompt)Передайте эмбеддинги в prompt_embeds и pooled_prompt_embeds, чтобы сгенерировать изображение.
image = pipeline(prompt_embeds=prompt_embeds, pooled_prompt_embeds=pooled_prompt_embeds).images[0]