🎨 Blog AI Görsel Üretim - Yol Haritası

📅 Tarih: 2025-11-29 | 🎯 Tenant: ixtif.com | 👤 Kullanıcı Talebi: "Her blog konusunun içeriğine dair görsel üretimi"

🔍 Mevcut Sistem Analizi

✅ Tespit Edilen Sistem:

BlogAIContentWriter.php (satır 130-200) zaten Leonardo AI entegrasyonu mevcut!

// Mevcut kod (BlogAIContentWriter.php:137-140) $leonardoService = app(\App\Services\Media\LeonardoAIService::class); $imageResult = $leonardoService->generateForBlog($blogData['title'], 'blog');

Nasıl Çalışıyor:

  • Blog taslağından tam içerik üretilirken otomatik görsel oluşturuluyor
  • Leonardo AI servisi blog başlığını kullanarak görsel üretiyor
  • Görsel featured_image collection'ına kaydediliyor
  • SEO metadata (alt_text, title, description) otomatik ekleniyor

⚠️ Sorun:

Yeni blog üretimi sırasında Leonardo API kullanılıyor, ancak:

  • Mevcut 284 blog görselsiz kaldı (az önce temizledik)
  • Geçmişe dönük görsel üretimi yok
  • Her blog için manuel görsel atama gerekiyor

🎯 Hedef

284 mevcut blog için içeriğine uygun Leonardo AI görselleri üretmek

Her blog başlığı → Özgün sektörel AI görsel

🗺️ Yol Haritası

1Orphan Media Temizliği

Durum: ✅ Tamamlandı (0 orphan media)

Ne Yapıldı: Blog ile ilişkili tüm media kayıtları ve fiziksel dosyalar silindi

2Leonardo AI Servis Kontrolü

Yapılacak: LeonardoAIService sınıfını kontrol et

  • generateForBlog() metodunun parametrelerini incele
  • API key kontrolü (.env'de LEONARDO_API_KEY mevcut)
  • Generation ayarları (model, size, style vb.)
  • Rate limiting ve error handling
# Kontrol edilecek dosya app/Services/Media/LeonardoAIService.php

3Batch İşlem Stratejisi Belirleme

Seçenekler:

Seçenek A: Senkron (Basit, Yavaş)
  • 284 blog için tek tek görsel üret
  • Her blog: API call → görsel indir → media kaydet
  • Tahmini süre: ~15-20 dakika (API limitlerine bağlı)
  • ✅ Basit, hata ayıklaması kolay
  • ❌ Yavaş, API rate limit riski
Seçenek B: Queue Job (Önerilen)
  • Laravel Queue sistemi ile background işleme
  • Batch'ler halinde işle (örn: 10'ar 10'ar)
  • Retry mekanizması (API fail ederse)
  • Progress tracking
  • ✅ Hızlı, güvenli, takip edilebilir
  • ❌ Daha karmaşık kurulum

4Prompt Optimizasyonu

Her blog için özgün prompt oluştur:

  • Blog başlığından anahtar kelimeler çıkar
  • Sektörel bağlam ekle (forklift, transpalet, istif makinesi)
  • Görsel stil: "professional product photography"
  • Tutarlılık için şablon kullan
// Örnek prompt şablonu "Professional industrial photography of {keyword} in modern warehouse, high quality product shot, industrial equipment, professional lighting" // Örnek: "Professional industrial photography of electric forklift in modern warehouse..."

5Geliştirme & Test

Adımlar:

  1. LeonardoAIService kodunu incele
  2. 5 blog ile test et (küçük batch)
  3. Görsellerin kalitesini kontrol et
  4. API response time ve rate limit gözlemle
  5. Hata durumları için retry logic ekle

6Mass Production

284 blog için toplu üretim:

  • Batch script veya queue job çalıştır
  • Progress monitoring (kaç tane tamamlandı?)
  • Failed jobs tracking (başarısızları tekrar dene)
  • Final verification (tüm bloglar görsel aldı mı?)

7Kalite Kontrolü

Üretim sonrası kontroller:

  • Her blog'un featured_image media kaydı var mı?
  • Fiziksel dosyalar storage'da mevcut mu?
  • Görseller blog sayfalarında görünüyor mu?
  • SEO metadata (alt_text, title) eklenmiş mi?
  • Manuel inceleme: 10-15 blog detay sayfasını kontrol et

⚙️ Teknik Detaylar

Leonardo AI Entegrasyonu

// Mevcut kullanım (BlogAIContentWriter.php'den) $leonardoService = app(\App\Services\Media\LeonardoAIService::class); $imageResult = $leonardoService->generateForBlog($blogData['title'], 'blog'); // İncelenecek: // - generateForBlog() metodu ne bekliyor? // - Prompt nasıl oluşturuluyor? // - Response format nedir? // - Rate limiting var mı?

Media Collection Yapısı

Spatie Media Library kullanılıyor:

Batch Processing Önerisi

// Pseudo-code foreach (284 blog) { // 1. Blog başlığından prompt oluştur $prompt = createPromptFromTitle($blog->title); // 2. Leonardo AI ile görsel üret $image = LeonardoAI::generate($prompt); // 3. Blog'a ekle $blog->addMedia($image) ->toMediaCollection('featured_image', 'tenant'); // 4. Progress log echo "Blog #{$blog->id} ✅\n"; }

🚀 Sonraki Adım

Öncelik 1: LeonardoAIService kodunu incele

Dosya: app/Services/Media/LeonardoAIService.php

Amaç: generateForBlog() metodunun nasıl çalıştığını anlamak

Sana ihtiyacım olan bilgi:

  • Hangi stratejiyle devam edelim? (Senkron vs Queue)
  • Test için kaç blog ile başlayalım? (öneri: 5)
  • Görsel stili tercihin nedir? (professional, realistic, artistic vb.)