📅 24 Aralık 2025 | Tenant 1001 (muzibu.com) | Müzik Platformu
Ne Yapacağız?
Muzibu müzik platformunda kullanıcılar yeni playlist oluşturduğunda, şarkı yüklediklerinde veya albüm oluşturduklarında artık yapay zeka otomatik olarak profesyonel kapak görselleri üretecek.
🎯 Kullanıcı Deneyimi:
Neden Önemli?
💡 Nasıl Çalışıyor?
Leonardo AI (yapay zeka görsel üretim servisi) playlist/şarkı adına göre otomatik olarak müzik temalı, sinematik, profesyonel görsel oluşturur. Sistem arka planda çalışır, kullanıcı hiçbir şey yapmasına gerek kalmadan görseller hazır olur.
Mevcut Sistem Durumu:
LeonardoAIService mevccut (Blog AI için kullanılıyor)GeneratePlaylistCover Job ZATEN VAR ama kullanılmıyorAIPromptEnhancer 11 Altın Kural mevcutMediaLibraryItem tenant-aware çalışıyorEtkilenen Dosyalar:
🔥 ZORUNLU (Her zaman Leonardo)
Modules/Muzibu/app/Services/PlaylistService.phpModules/Muzibu/app/Http/Livewire/Admin/SongManageComponent.phpModules/Muzibu/app/Http/Livewire/Admin/AlbumBulkUploadComponent.phpModules/Muzibu/app/Jobs/GeneratePlaylistCover.php (mevcut)⭐ TERCİHEN (Media yoksa)
Modules/Muzibu/app/Http/Livewire/Admin/GenreManageComponent.phpModules/Muzibu/app/Http/Livewire/Admin/SectorManageComponent.phpModules/Muzibu/app/Http/Livewire/Admin/AlbumManageComponent.phpModules/Muzibu/app/Http/Livewire/Admin/RadioManageComponent.phpModules/Muzibu/app/Http/Livewire/Admin/PlaylistManageComponent.phpLeonardo AI Prompt Stratejisi:
BlogAIContentWriter::generateBlogFromDraft()AIPromptEnhancer kullanıyor (11 Altın Kural)MediaLibraryItem oluşturuyormedia_id atanıyorai-supervisorPlaylistService::createPlaylistWithSongs()GeneratePlaylistCover Job VAR ama dispatch edilmiyor!media_id field boş kalıyorSongManageComponent::save()media_id field var ama kullanılmıyorAlbumBulkUploadComponent::startUpload()📍 Nerede: PlaylistService.php
Metod: createPlaylistWithSongs()
// Playlist oluşturulduktan sonra (satır ~245)
if ($playlist) {
// Leonardo AI Job dispatch et
GeneratePlaylistCover::dispatch(
$playlist->playlist_id,
$data['title'],
null, // songTitle
null, // artistName
$userId,
tenant('id')
);
Log::info('🎨 Playlist Leonardo job dispatched', [
'playlist_id' => $playlist->playlist_id
]);
}
🔄 Job İşlemi:
GeneratePlaylistCover (ZATEN MEVCUT!)muzibu_my_playlist📍 Nerede: SongManageComponent.php
Metod: save() (satır ~578-594)
// Yeni song oluşturduktan sonra (satır ~594)
} else {
$song = Song::query()->create($data);
$this->songId = $song->song_id;
log_activity($song, 'eklendi');
// HLS conversion
if ($song->file_path) {
\Modules\Muzibu\App\Jobs\ConvertToHLSJob::dispatch($song);
}
// 🎨 LEONARDO AI: Media yoksa otomatik görsel üret
if (!$song->media_id) {
\Modules\Muzibu\App\Jobs\GenerateSongCover::dispatch(
$song->song_id,
$song->title,
$song->album?->artist?->title,
$song->genre?->title,
tenant('id')
);
Log::info('🎨 Song Leonardo job dispatched', [
'song_id' => $song->song_id
]);
}
$toast = [...];
}
⚠️ Yeni Job Gerekli:
GenerateSongCover (YENİ OLUŞTURULACAK!)muzibu_my_playlistGeneratePlaylistCover Job'undan kopyala📍 Nerede: AlbumBulkUploadComponent.php
Metod: startUpload() (satır ~305 sonrası)
// Song oluşturulduktan sonra (satır ~305 sonrası)
Log::info('✅ Bulk upload - Song oluşturuldu', [...]);
// HLS conversion job'u kuyruğa ekle
\Modules\Muzibu\App\Jobs\ConvertToHLSJob::dispatch($song);
// 🎨 LEONARDO AI: Otomatik görsel üret
\Modules\Muzibu\App\Jobs\GenerateSongCover::dispatch(
$song->song_id,
$file['title'],
$this->album->artist?->title,
Genre::find($genreId)?->title,
tenant('id')
);
Log::info('🎨 Bulk song Leonardo job dispatched', [
'song_id' => $song->song_id
]);
$this->uploadedFiles[$index]['status'] = 'completed';
⭐ Stratejisi:
if (!$model->media_id)GenerateGenericMuzibyCover (universal job)type (genre/sektor/album/radio) + title🔧 Uygulama:
Her Livewire ManageComponent'te save() metoduna aynı pattern eklenecek. Universal job ile tüm content type'ları tek job'dan yönetilebilir.
Modules/Muzibu/app/Services/PlaylistService.php → createPlaylistWithSongs()
GeneratePlaylistCover::dispatch() ekle
Modules/Muzibu/app/Jobs/GenerateSongCover.php (YENİ DOSYA)
GeneratePlaylistCover Job'unu referans almuzibu_my_playlist
Modules/Muzibu/app/Http/Livewire/Admin/SongManageComponent.php → save()
if (!$song->media_id)GenerateSongCover::dispatch() ekle
Modules/Muzibu/app/Http/Livewire/Admin/AlbumBulkUploadComponent.php → startUpload()
GenerateSongCover::dispatch() ekle
Her ManageComponent → save()
GenerateGenericMuzibyCover Job oluştur (universal)if (!$model->media_id) kontrol ettenant('id') geçirtenancy()->initialize($this->tenantId)muzibu_my_playlist (mevcut)ai_can_use_credits(1)ai_use_credits(1, ...)AIPromptEnhancer kullan (11 Altın Kural)✅ Mevcut (Referans Al)
app/Services/Media/LeonardoAIService.phpModules/AI/app/Services/AIPromptEnhancer.phpModules/Muzibu/app/Jobs/GeneratePlaylistCover.phpModules/Blog/app/Services/BlogAIContentWriter.php🔧 Değiştirilecek
Modules/Muzibu/app/Services/PlaylistService.phpModules/Muzibu/app/Http/Livewire/Admin/SongManageComponent.phpModules/Muzibu/app/Http/Livewire/Admin/AlbumBulkUploadComponent.php