Diffusers documentation

Prompting

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Prompting

Prompts menjelaskan apa yang harus dihasilkan oleh model. Prompt yang baik bersifat detail, spesifik, dan terstruktur, serta menghasilkan gambar dan video yang lebih baik.

Panduan ini menunjukkan cara menulis prompt yang efektif dan memperkenalkan teknik-teknik yang membuatnya lebih kuat.

Menulis prompt yang baik

Setiap prompt yang efektif membutuhkan tiga elemen inti.

  1. Subjek - apa yang ingin Anda hasilkan. Mulai prompt Anda di sini.
  2. Gaya - medium atau estetika. Bagaimana seharusnya tampilannya?
  3. Konteks - detail tentang tindakan, pengaturan, dan suasana.

Gunakan elemen-elemen ini sebagai narasi terstruktur, bukan daftar kata kunci. Model modern memahami bahasa dengan lebih baik daripada pencocokan kata kunci. Mulailah dengan sederhana, lalu tambahkan detail.

Konteks sangat penting untuk membuat prompt yang lebih baik. Coba tambahkan pencahayaan, detail artistik, dan suasana.

kucing lucu berbaring di atas daun di kolam pada sore hari musim panas yang tenang, dalam gaya seni lofi, ilustrasi.
Seekor kucing lucu bersantai di atas daun yang mengapung di kolam berkilau pada sore musim panas yang tenang. Pantulan jernih beriak di permukaan air, dengan sinar matahari yang memancarkan sorotan lembut dan halus. Ilustrasi ini detail dan rapi, dengan garis-garis elegan dan warna-warna yang harmonis, membangkitkan suasana lofi yang santai, tenang, dan penuh imajinasi, terinspirasi anime dan menenangkan secara visual.

Jadilah spesifik dan tambahkan konteks. Gunakan istilah fotografi seperti jenis lensa, panjang fokus, sudut kamera, dan kedalaman bidang.

Coba gunakan prompt enhancer untuk membantu meningkatkan struktur prompt Anda.

Panduan dan negatif

Sebagian besar pipeline Diffusers masih mengarahkan sampling dengan classifier-free guidance dan negative_prompt opsional.

Pada pipeline keluarga Stable Diffusion, berikan guidance_scale dan negative_prompt. Nilai guidance_scale yang lebih tinggi akan mengikuti prompt dengan lebih ketat. Nilai yang terlalu tinggi dapat menghasilkan tampilan yang tidak alami atau terlalu jenuh.

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]

Pada checkpoint yang lebih baru seperti Qwen-Image dan Flux, CFG klasik biasanya true_cfg_scale bersama dengan negative_prompt. Negatif tetap berlaku ketika true CFG diaktifkan (true_cfg_scale > 1 dan negative_prompt). Argumen guidance_scale mereka adalah guidance yang di-distil atau tertanam ketika transformer mendukungnya, yang tidak sama. Periksa API pipeline untuk model yang Anda muat.

Modular Diffusers dapat mengganti algoritma panduan dengan guider. Lihat Guiders.

Penimbangan prompt

Prompt weighting membuat beberapa kata lebih kuat dan yang lain lebih lemah. Ini menskalakan skor perhatian sehingga Anda dapat mengontrol seberapa besar pengaruh setiap konsep.

Diffusers menangani hal ini melalui argumen prompt_embeds dan pooled_prompt_embeds yang menerima vektor embedding teks yang telah diskalakan. Gunakan pustaka sd_embed untuk menghasilkan embedding ini. Ia juga mendukung prompt yang lebih panjang. Untuk penimbangan keluarga Stable Diffusion dengan sintaks yang lebih sederhana, Anda juga dapat menggunakan Compel.

Perpustakaan sd_embed hanya mendukung Stable Diffusion, Stable Diffusion XL, Stable Diffusion 3, Stable Cascade, dan Flux. Pemberian bobot pada prompt tidak selalu membantu pada model kelas Flux, yang memang sudah mengikuti prompt dengan ketat.

uv pip install git+https://github.com/xhinker/sd_embed.git@main

Format teks berbobot dengan pengali numerik atau tanda kurung. Semakin banyak tanda kurung, semakin kuat pembobotannya.

formatpengali
(cat)meningkat 1,1x
((cat))meningkat 1,21x
(cat:1.5)meningkat 1,5x
(cat:0.5)set weight menjadi 0.5×

Buat prompt berbobot dan teruskan ke get_weighted_text_embeddings_sdxl untuk menghasilkan embeddings.

Anda juga dapat meneruskan prompt negatif ke negative_prompt_embeds dan 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)

Lewatkan embeddings ke prompt_embeds dan pooled_prompt_embeds untuk menghasilkan gambar Anda.

image = pipeline(prompt_embeds=prompt_embeds, pooled_prompt_embeds=pooled_prompt_embeds).images[0]
Update on GitHub