Kaliteli Görsel için Etkili Prompt Yazma Teknikleri
Stable Diffusion kurulumunu tamamladınız, modelleriniz yerli yerinde, ComfyUI ya da AUTOMATIC1111 arayüzünüz çalışıyor. Peki ya ürettiğiniz görseller hep “bir şeyler eksik” gibi görünüyor? Sorun büyük ihtimalle prompt yazma teknikleri. Sistem yöneticisi bakış açısıyla söylersem: altyapı mükemmel olabilir, ama girdi kalitesiz olursa çıktı da kalitesiz olur. Garbage in, garbage out prensibi burada da geçerli.
Bu yazıda Stable Diffusion için etkili prompt yazmanın teknik boyutlarını ele alacağım. Salt “sanat” tarafından değil, sistematik ve tekrarlanabilir sonuçlar üretebileceğiniz bir metodoloji olarak yaklaşacağım.
Prompt Nedir, Model Nasıl İşler
Prompt yazmaya girmeden önce modelin arka planda ne yaptığını anlamak gerekiyor. Stable Diffusion, metni CLIP (Contrastive Language-Image Pre-Training) encoder aracılığıyla token’lara dönüştürür. Her token bir anlam vektörüne karşılık gelir ve model bu vektörleri kullanarak gürültüden görseli adım adım temizler.
Teknik olarak bilmeniz gereken birkaç kritik nokta:
- Token limiti: CLIP varsayılan olarak 77 token ile sınırlıdır. Bunu aşarsanız sonraki kelimeler işlenmez
- Kelime sırası önemlidir: Prompt’un başındaki kelimeler daha fazla ağırlık taşır
- Virgül ayrımı: Virgüller token gruplarını mantıksal olarak ayırır
- Büyük/küçük harf: Genellikle fark yaratmaz ama bazı özel token’larda (örneğin LoRA trigger word’leri) önemlidir
# AUTOMATIC1111 üzerinde token sayısını kontrol etmek için
# Settings > User Interface > Show tokenizer button seçeneğini aktif edin
# Ya da API üzerinden:
curl -X POST http://localhost:7860/sdapi/v1/token-counter
-H "Content-Type: application/json"
-d '{"prompt": "a beautiful landscape, mountains, sunset, photorealistic"}'
Bu API çağrısı size prompt’unuzdaki token sayısını döndürür. 77 sınırına yaklaşıyorsanız prompt’u sadeleştirmeniz gerekiyor.
Prompt Anatomisi: Temel Yapı
İyi bir prompt’un belirli bir anatomisi vardır. Rastgele kelimeler dökmek yerine yapılandırılmış bir yaklaşım çok daha tutarlı sonuçlar verir.
Konu Katmanı
İlk olarak ana konuyu net biçimde tanımlayın. “A cat” yerine “a fluffy orange tabby cat sitting on a wooden table” deyin. Ne kadar spesifik olursanız o kadar iyi.
# İyi prompt yapısını test eden basit bir script
#!/bin/bash
PROMPT_SIMPLE="a cat"
PROMPT_DETAILED="a fluffy orange tabby cat, sitting on a weathered wooden table, green eyes, sharp focus"
curl -s -X POST http://localhost:7860/sdapi/v1/txt2img
-H "Content-Type: application/json"
-d "{
"prompt": "$PROMPT_DETAILED",
"negative_prompt": "blurry, low quality, distorted",
"steps": 30,
"cfg_scale": 7,
"width": 512,
"height": 512,
"seed": 42
}" | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
with open('output.png', 'wb') as f:
f.write(base64.b64decode(data['images'][0]))
print('Gorsel kaydedildi: output.png')
"
Stil ve Atmosfer Katmanı
Konu belirlendikten sonra stilistik direktifler eklenir. Bu katman görselin genel havasını belirler.
- Fotografik stiller: photorealistic, RAW photo, DSLR, film grain, bokeh
- Sanatsal stiller: oil painting, watercolor, digital art, concept art, illustration
- Dönem stilleri: vintage, retro, 80s aesthetic, art nouveau, baroque
- Atmosfer: moody, dramatic lighting, ethereal, cinematic, noir
# Aynı konuyu farklı stillerle test eden batch script
#!/bin/bash
STYLES=("photorealistic, DSLR photo" "oil painting, impressionist" "digital art, concept art" "watercolor illustration")
BASE_SUBJECT="a mountain village at sunset"
for i in "${!STYLES[@]}"; do
STYLE="${STYLES[$i]}"
FULL_PROMPT="$BASE_SUBJECT, $STYLE, high quality, detailed"
echo "Style $i isleniyor: $STYLE"
curl -s -X POST http://localhost:7860/sdapi/v1/txt2img
-H "Content-Type: application/json"
-d "{
"prompt": "$FULL_PROMPT",
"negative_prompt": "blurry, ugly, low quality",
"steps": 25,
"seed": 1234,
"width": 512,
"height": 512
}" | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
with open('style_test_$i.png', 'wb') as f:
f.write(base64.b64decode(data['images'][0]))
"
echo "style_test_$i.png kaydedildi"
done
Teknik Kalite Direktifleri
Modelin kaliteye odaklanmasını sağlayan anahtar kelimeler vardır. Bunlar eğitim verisinde yüksek kaliteli görsellerle ilişkilendirilmiş token’lardır.
Pozitif kalite artırıcılar:
- masterpiece: Genel kaliteyi yükseltir
- best quality: Detay ve netlik artar
- ultra detailed: Ince detaylar ön plana çıkar
- sharp focus: Netleme kalitesi artar
- 8k, 4k: Yüksek çözünürlük algısı yaratır (gerçek çözünürlük değil)
- professional photography: Kompozisyon kalitesini artırır
Negatif Prompt’un Önemi
Negatif prompt, modele ne üretmemesi gerektiğini söyler. Birçok yeni kullanıcı bunu ihmal eder. Negatif prompt olmadan model serbest bırakılmış demektir ve istenmeyen artifaktlar, deformasyonlar kolayca ortaya çıkar.
# Standart negatif prompt şablonlarını bir dosyaya kaydedelim
cat > /home/sduser/prompts/negative_templates.txt << 'EOF'
# Genel kalite negatifi
QUALITY_NEGATIVE="blurry, low quality, worst quality, low resolution, pixelated, jpeg artifacts, compression artifacts"
# Anatomik düzeltmeler (insan figürleri için)
ANATOMY_NEGATIVE="bad anatomy, deformed, extra limbs, missing limbs, extra fingers, missing fingers, mutated hands, fused fingers, poorly drawn hands, poorly drawn face, cloned face"
# Stil sorunları
STYLE_NEGATIVE="watermark, signature, text, logo, username, artist name, ugly, duplicate, morbid, mutilated, out of frame, extra heads"
# Tam negatif (birleşik)
FULL_NEGATIVE="$QUALITY_NEGATIVE, $ANATOMY_NEGATIVE, $STYLE_NEGATIVE"
EOF
echo "Negatif prompt sablonlari kaydedildi"
Gerçek dünya senaryosunda bir e-ticaret sitesi için ürün fotoğrafı ürettiğinizi düşünün. Bu durumda negatif prompt’unuz çok spesifik olmalı:
#!/bin/bash
PRODUCT_POSITIVE="professional product photography, a sleek black coffee mug on white background, studio lighting, clean, minimalist, commercial photography, high resolution"
PRODUCT_NEGATIVE="shadow, dark background, cluttered, people, hands, text, watermark, blurry, low quality, distorted, reflections on product"
curl -X POST http://localhost:7860/sdapi/v1/txt2img
-H "Content-Type: application/json"
-d "{
"prompt": "$PRODUCT_POSITIVE",
"negative_prompt": "$PRODUCT_NEGATIVE",
"steps": 35,
"cfg_scale": 8.5,
"width": 768,
"height": 768,
"sampler_name": "DPM++ 2M Karras"
}" > product_result.json
python3 << 'PYEOF'
import json, base64
with open('product_result.json') as f:
data = json.load(f)
with open('product_photo.png', 'wb') as f:
f.write(base64.b64decode(data['images'][0]))
print("Urun fotografı uretildi")
PYEOF
Ağırlık ve Vurgu Teknikleri
AUTOMATIC1111 ve benzeri arayüzlerde parantez ile kelime ağırlığını artırabilirsiniz. Bu çok güçlü ama dikkatli kullanılması gereken bir özellik.
Syntax’ı şöyle açıklayayım:
- (kelime): 1.1x ağırlık
- ((kelime)): 1.21x ağırlık
- (kelime:1.5): 1.5x ağırlık
- [kelime]: 0.9x ağırlık (azaltır)
# Ağırlık testini karşılaştırmalı yapmak için script
#!/bin/bash
declare -A PROMPTS
PROMPTS["normal"]="a red car parked in front of a blue building, sunset"
PROMPTS["car_emphasized"]="a (red car:1.4) parked in front of a blue building, sunset"
PROMPTS["sunset_emphasized"]="a red car parked in front of a blue building, (sunset:1.6)"
PROMPTS["car_deemphasized"]="a [red car] parked in front of a [blue building], (dramatic sunset:1.5)"
for key in "${!PROMPTS[@]}"; do
echo "Test: $key"
curl -s -X POST http://localhost:7860/sdapi/v1/txt2img
-H "Content-Type: application/json"
-d "{
"prompt": "${PROMPTS[$key]}",
"negative_prompt": "blurry, low quality",
"steps": 28,
"cfg_scale": 7.5,
"seed": 999,
"width": 512,
"height": 512
}" | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
with open('weight_test_${key}.png', 'wb') as f:
f.write(base64.b64decode(data['images'][0]))
print('Kaydedildi: weight_test_${key}.png')
"
done
CFG Scale ve Steps ile Prompt İlişkisi
Prompt yazımı sadece kelimelerden ibaret değil. CFG Scale (Classifier Free Guidance) değeri prompt’a ne kadar “sadık” kalınacağını belirler.
- CFG 1-4: Model çok serbest, prompt’u gevşek takip eder
- CFG 7-8: Altın oran, dengeleri iyi tutar
- CFG 10-15: Prompt’a sıkı sıkıya bağlı ama artifakt riski artar
- CFG 15+: Genellikle yanmış, oversaturated görseller
Prompts’unuz ne kadar detaylı olursa CFG değerinizi de biraz yükseltebilirsiniz. Yüzeysel bir prompt ile yüksek CFG felaket üretebilir.
# CFG scale sweep testi
#!/bin/bash
PROMPT="portrait of a medieval knight in armor, dramatic lighting, photorealistic, detailed"
NEG_PROMPT="blurry, low quality, cartoon, anime"
for CFG in 4 6 7.5 10 12 15; do
echo "CFG $CFG test ediliyor..."
curl -s -X POST http://localhost:7860/sdapi/v1/txt2img
-H "Content-Type: application/json"
-d "{
"prompt": "$PROMPT",
"negative_prompt": "$NEG_PROMPT",
"steps": 30,
"cfg_scale": $CFG,
"seed": 5678,
"width": 512,
"height": 512
}" | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
with open('cfg_${CFG}_test.png', 'wb') as f:
f.write(base64.b64decode(data['images'][0]))
print('CFG $CFG kaydedildi')
"
done
echo "CFG sweep tamamlandi, sonuclari karsilastirin"
Gerçek Dünya Senaryosu: Toplu İçerik Üretimi
Diyelim ki bir medya şirketi için 50 farklı blog yazısına görsel üretmeniz gerekiyor. Her görselin konusu farklı ama tutarlı bir stil bekleniyor. Bu noktada prompt şablonları devreye giriyor.
#!/bin/bash
# Toplu gorsel uretim scripti
# Kullanim: ./batch_generate.sh topics.txt
TOPICS_FILE=$1
OUTPUT_DIR="./generated_images"
STYLE_TEMPLATE="professional blog illustration, flat design, modern, colorful, clean background, high quality"
NEGATIVE_BASE="realistic photo, photograph, ugly, blurry, low quality, watermark, text"
mkdir -p "$OUTPUT_DIR"
if [ ! -f "$TOPICS_FILE" ]; then
echo "Konu dosyasi bulunamadi: $TOPICS_FILE"
exit 1
fi
COUNTER=0
while IFS= read -r TOPIC; do
[ -z "$TOPIC" ] && continue
FULL_PROMPT="illustration of $TOPIC, $STYLE_TEMPLATE"
OUTPUT_FILE="$OUTPUT_DIR/$(echo $TOPIC | tr ' ' '_' | tr '[:upper:]' '[:lower:]')_${COUNTER}.png"
echo "[$COUNTER] Uretiliyor: $TOPIC"
RESULT=$(curl -s -X POST http://localhost:7860/sdapi/v1/txt2img
-H "Content-Type: application/json"
-d "{
"prompt": "$FULL_PROMPT",
"negative_prompt": "$NEGATIVE_BASE",
"steps": 25,
"cfg_scale": 7,
"width": 768,
"height": 512
}")
echo "$RESULT" | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
if 'images' in data:
with open('$OUTPUT_FILE', 'wb') as f:
f.write(base64.b64decode(data['images'][0]))
print('Kaydedildi: $OUTPUT_FILE')
else:
print('HATA: Gorsel uretilmedi')
print(data)
"
COUNTER=$((COUNTER + 1))
sleep 1 # Rate limiting
done < "$TOPICS_FILE"
echo "Toplam $COUNTER gorsel uretildi"
# topics.txt ornegi
cat > topics.txt << 'EOF'
cybersecurity and data protection
cloud computing infrastructure
machine learning algorithms
database optimization
network monitoring dashboard
containerization with docker
kubernetes cluster management
EOF
Prompt Kütüphanesi Oluşturmak
Sistematik çalışan bir sysadmin olarak başarılı prompt’larınızı versiyon kontrol altında tutun. Bu hem tekrarlanabilirlik sağlar hem de ekip içinde paylaşım kolaylaşır.
# Prompt kutuphane sistemi
mkdir -p ~/sd-prompts/{portraits,landscapes,products,concepts}
cat > ~/sd-prompts/portraits/professional_headshot.yaml << 'EOF'
name: "Professional Headshot"
version: "1.2"
positive: "professional headshot photo, business portrait, (sharp focus:1.2), studio lighting, neutral background, high quality, 4k, detailed"
negative: "casual, blurry, low quality, extreme makeup, anime, cartoon, distorted, bad anatomy"
cfg_scale: 8
steps: 35
sampler: "DPM++ 2M Karras"
notes: "Arka plan rengi icin 'neutral gray background' veya 'white background' eklenebilir"
EOF
cat > ~/sd-prompts/landscapes/fantasy_world.yaml << 'EOF'
name: "Fantasy Landscape"
version: "1.0"
positive: "epic fantasy landscape, (dramatic lighting:1.3), towering mountains, mystical atmosphere, detailed environment, concept art, matte painting, 8k"
negative: "realistic photo, people, modern elements, blurry, low quality, flat colors"
cfg_scale: 7.5
steps: 40
sampler: "Euler a"
notes: "Saatin degistirmek icin 'golden hour', 'night', 'dawn' ekle"
EOF
echo "Prompt kutuphanesi olusturuldu"
ls ~/sd-prompts/
Sık Yapılan Hatalar
Yıllar içinde sistemleri debug ederken öğrendiğim şey: sorunları kategorize etmek çözümü hızlandırır. Prompt sorunları da aynı şekilde.
Çok sık karşılaşılan hatalar ve çözümleri:
- Çok uzun prompt: 77 token sınırını aşıyorsunuz. Gereksiz sıfatları kaldırın, en önemli kavramları öne alın
- Çelişen direktifler: “hyperrealistic cartoon” gibi çelişkili stiller. Modelin kafası karışır, bir taraf seçin
- Aşırı vurgu: (((kelime))) şeklinde fazla parantez kullanımı artifakt üretir. 1.3-1.5 değerleri genellikle yeterli
- Boş negatif prompt: Mutlaka temel negatif promptlar kullanın
- Bağlam eksikliği: “man” yerine “a middle-aged man in a blue suit, indoors, office environment” yazın
- Stil karmaşası: Çok fazla farklı stilistik direktif vermek tutarsız sonuç üretir
Prompt Optimizasyon Workflow’u
Profesyonel bir workflow şöyle görünmeli:
Önce seed sabitleyin (örneğin seed: 42), sonra prompt varyasyonlarını test edin. Aynı seed ile prompt değişikliklerinin etkisini izole biçimde görebilirsiniz. Beğendiğiniz sonuca ulaştığınızda seed’i -1 yaparak varyasyonlar üretin. Bu iteratif yaklaşım, sysadmin dünyasındaki A/B testine çok benziyor.
Ayrıca PNG Info sekmesini mutlaka kullanın. AUTOMATIC1111 her görsele metadata olarak kullanılan prompt, seed, model ve parametreleri gömer. Haftalar önce ürettiğiniz harika bir görseli tekrar üretmek istediğinizde bu bilgiler hayat kurtarır.
Sonuç
Stable Diffusion için etkili prompt yazmak, teknik bir disiplindir. Sysadmin olarak zaten iteratif problem çözme, sistematik test etme ve sonuçları dokümante etme alışkanlığınız var. Bu alışkanlıkları prompt engineering’e uyguladığınızda ciddi bir avantaj elde edersiniz.
Özet olarak: konuyu net tanımlayın, stil direktiflerini ekleyin, kalite anahtar kelimelerini kullanın, güçlü bir negatif prompt yazın ve CFG ile steps değerlerini prompt karmaşıklığına göre ayarlayın. Sonuçlarınızı bir kütüphanede saklayın, versiyonlayın ve ekibinizle paylaşın.
Tüm bunları scriptler ve API ile otomatize ettiğinizde, Stable Diffusion artık sadece kişisel bir oyuncak değil, prodüksiyona alınabilir bir içerik üretim aracına dönüşür. Ve bu noktada işin teknik keyfi gerçekten başlıyor.
