# プロンプト

プロンプトは、モデルが生成すべき内容を記述します。良いプロンプトは詳細で具体的かつ構造化されており、より優れた画像や動画を生成します。

このガイドでは、効果的なプロンプトの書き方と、プロンプトを強化するテクニックについて紹介します。

## 良いプロンプトの書き方

効果的なプロンプトには、3つのコア要素が必要です。

1. Subject - 生成したい対象。プロンプトはこの部分から開始します。
2. スタイル - 媒体または美的感覚。どのように見えるべきか?
3. コンテキスト - アクション、設定、ムードに関する詳細。

これらの要素をキーワードの羅列ではなく、構造化されたナラティブとして活用してください。最新のモデルは、キーワードマッチングよりも自然な言語理解に優れています。まずはシンプルに始め、その後で詳細を追加していきましょう。

プロンプトをより良く作成するには、コンテキストが特に重要です。ライティング、芸術的なディテール、ムードなどを追加してみてください。

  
    
    平和な夏の午後、プールの中の葉の上でくつろぐかわいい猫、lofiアートスタイル、イラスト。
  
  
    
    夏のある穏やかな午後、きらめく池の上を漂う葉の上に、愛らしい猫がくつろいでいます。水面にはくっきりとした反射が波紋のように広がり、日差しが柔らかく滑らかなハイライトを投げかけています。イラストは細部まで丁寧に仕上げられ、優雅な線と調和の取れた色彩が、リラックスした、静かで、そしてファンタジックなロファイの雰囲気を醸し出しています。アニメ風の表現で、視覚的にも心地よい作品です。
  

具体的に、文脈を追加してください。レンズの種類、焦点距離、カメラの角度、被写界深度などの写真用語を使用してください。

> [!TIP]
> [プロンプトエンハンサー](https://huggingface.co/models?sort=downloads&search=prompt+enhancer)を試して、プロンプトの構造を改善しましょう。

## ガイダンスとネガティブ

ほとんどの Diffusers パイプラインでは、サンプリングを classifier-free guidance と任意の `negative_prompt` で制御しています。

Stable Diffusion系のパイプラインでは、`guidance_scale`と`negative_prompt`を渡します。`guidance_scale`の値が高いほど、プロンプトに忠実になります。値が高すぎると、不自然な見た目や過剰な彩りになる可能性があります。

```py
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](./guiders)を参照してください。

## プロンプトの重み付け

Prompt weightingは、一部の単語を強調し、他の単語を弱める機能です。アテンションスコアをスケーリングすることで、各概念が持つ影響度を制御できます。

Diffusers は、スケーリングされたテキスト埋め込みベクトルを受け取る `prompt_embeds` および `pooled_prompt_embeds` 引数を通じてこれに対応しています。これらの埋め込みを生成するには [sd_embed](https://github.com/xhinker/sd_embed) ライブラリを使用します。また、より長いプロンプトにも対応しています。Stable Diffusion 系の重み付けをよりシンプルな構文で実装したい場合は、[Compel](https://github.com/damian0815/compel) を使用することもできます。

> [!NOTE]
> sd_embed ライブラリは、Stable Diffusion、Stable Diffusion XL、Stable Diffusion 3、Stable Cascade、および Flux のみをサポートしています。プロンプトの重み付けは、プロンプトをすでに忠実に追従する Flux クラスのモデルでは、必ずしも効果的ではありません。

```shell
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](https://github.com/xhinker/sd_embed/blob/4a47f71150a22942fa606fb741a1c971d95ba56f/src/sd_embed/embedding_funcs.py#L405)に渡して埋め込みを生成します。

> [!TIP]
> `negative_prompt_embeds` および `negative_pooled_prompt_embeds` にネガティブプロンプトを渡すこともできます。

```py
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` に埋め込みを渡して、画像を生成します。

```py
image = pipeline(prompt_embeds=prompt_embeds, pooled_prompt_embeds=pooled_prompt_embeds).images[0]
```

  

