Diffusers documentation
プロンプト
プロンプト
プロンプトは、モデルが生成すべき内容を記述します。良いプロンプトは詳細で具体的かつ構造化されており、より優れた画像や動画を生成します。
このガイドでは、効果的なプロンプトの書き方と、プロンプトを強化するテクニックについて紹介します。
良いプロンプトの書き方
効果的なプロンプトには、3つのコア要素が必要です。
- Subject - 生成したい対象。プロンプトはこの部分から開始します。
- スタイル - 媒体または美的感覚。どのように見えるべきか?
- コンテキスト - アクション、設定、ムードに関する詳細。
これらの要素をキーワードの羅列ではなく、構造化されたナラティブとして活用してください。最新のモデルは、キーワードマッチングよりも自然な言語理解に優れています。まずはシンプルに始め、その後で詳細を追加していきましょう。
プロンプトをより良く作成するには、コンテキストが特に重要です。ライティング、芸術的なディテール、ムードなどを追加してみてください。
具体的に、文脈を追加してください。レンズの種類、焦点距離、カメラの角度、被写界深度などの写真用語を使用してください。
プロンプトエンハンサーを試して、プロンプトの構造を改善しましょう。
ガイダンスとネガティブ
ほとんどの 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 引数は、transformer がサポートしている場合に蒸留または埋め込まれたガイダンスを指しますが、これは true CFG とは異なります。読み込むモデルのパイプライン API をご確認ください。
Modular Diffusersでは、ガイダンスアルゴリズムをguiderに置き換えることができます。Guidersを参照してください。
プロンプトの重み付け
Prompt weightingは、一部の単語を強調し、他の単語を弱める機能です。アテンションスコアをスケーリングすることで、各概念が持つ影響度を制御できます。
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]