Diffusers documentation

Промптинг

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Промптинг

Промпты описывают, что должна сгенерировать модель. Хорошие промпты подробные, конкретные и структурированные, и они приводят к получению более качественных изображений и видео.

В этом руководстве показано, как составлять эффективные промпты, и представлены приемы, которые делают их сильнее.

Составление хороших промптов

Каждый эффективный промпт требует трех ключевых элементов.

  1. Тема — то, что вы хотите сгенерировать. Начните свой промпт с этого.
  2. Стиль — это средство или эстетика. Как это должно выглядеть?
  3. Контекст — детали о действиях, обстановке и настроении.

Используйте эти элементы как основу для структурированного повествования, а не как список ключевых слов. Современные модели лучше понимают язык, чем сопоставление по ключевым словам. Начните с простого, а затем добавляйте детали.

Контекст особенно важен для создания более качественных промптов. Попробуйте добавить освещение, художественные детали и настроение.

милая кошка отдыхает на листе в бассейне в спокойный летний полдень, в стиле lofi, иллюстрация.
Милый котик лежит на плавающем листе в сверкающем пруду в безмятежный летний полдень. Чёткие отражения рябью расходятся по воде, а солнечный свет создаёт мягкие, плавные блики. Иллюстрация детализирована и отполирована, с изящными линиями и гармоничными цветами, вызывая расслабляющее, спокойное и игривое lofi-настроение, вдохновлённое аниме и визуально приятное.

Будьте конкретны и добавляйте контекст. Используйте фотографические термины, такие как тип объектива, фокусное расстояние, ракурсы съёмки и глубина резкости.

Попробуйте улучшатель промптов, чтобы помочь улучшить структуру вашего промпта.

Руководство и негативные примеры

Большинство пайплайнов 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]
Update on GitHub