import 'dart:convert'; import 'package:hive/hive.dart'; import '../../cekirdek/log.dart'; import '../../modeller/wangp_ayarlari.dart'; import '../../modeller/wangp_profili.dart'; /// WanGP üretim profilleri / şablonları için kalıcı depo. /// /// - **Sistem profilleri** (sabit, silinmez): Wan2GP topluluk araştırmasından /// sentezlenmiş, RTX 4090 ile düşük VRAM'lar için optimal değerler. /// - **Kullanıcı profilleri**: "Mevcut ayarı kaydet" ile Hive box'a yazılır. /// /// Kalite kaynakları (kod yorumlarında): /// - InfiniteTalk önerileri: github.com/deepbeepmeep/Wan2GP issue #862 /// - mmgp Profile dokümantasyonu: github.com/deepbeepmeep/mmgp /// - SageAttention2: arxiv.org/abs/2411.10958 /// - TeaCache/MagCache: arxiv.org/abs/2506.09045 class WanGpProfilServisi { static const _boxAdi = 'wangp_profilleri'; static Box? _box; static Future> _kutu() async { _box ??= await Hive.openBox(_boxAdi); return _box!; } /// Tüm profiller (sistem + kullanıcı) — sistem önce. static Future> liste() async { final kutu = await _kutu(); final kullanici = []; for (final raw in kutu.values) { try { final j = jsonDecode(raw) as Map; kullanici.add(WanGpProfili.fromJson(j)); } catch (e) { Log.uyari('WanGpProfil', 'parse hatası: $e'); } } kullanici.sort((a, b) => (b.guncelleme ?? b.olusturma ?? DateTime(2000)) .compareTo(a.guncelleme ?? a.olusturma ?? DateTime(2000))); return [...WanGpHazirProfiller.tumu, ...kullanici]; } static Future kaydet(WanGpProfili p) async { if (p.sistemiMi) { throw Exception('Sistem profilleri kaydedilemez'); } final guncel = p.copyWith( guncelleme: DateTime.now(), olusturma: p.olusturma ?? DateTime.now(), ); final kutu = await _kutu(); await kutu.put(guncel.id, jsonEncode(guncel.toJson())); } static Future sil(String id) async { final kutu = await _kutu(); await kutu.delete(id); } static Future bul(String id) async { for (final p in WanGpHazirProfiller.tumu) { if (p.id == id) return p; } final kutu = await _kutu(); final raw = kutu.get(id); if (raw == null) return null; try { return WanGpProfili.fromJson(jsonDecode(raw) as Map); } catch (_) { return null; } } } /// Sabit (silinemez) hazır profiller — Wan2GP topluluk araştırmasından /// sentezlendi. Her birinin gerekçesi yorumda. class WanGpHazirProfiller { // ── RTX 4090 ULTRA KALİTE ──────────────────────────────────────────── // Kaynak: Wan2GP InfiniteTalk issue #862, SageAttention2 paper, mmgp Profile 1 // - Wan 2.1 14B I2V InfiniteTalk: native sinematik kalite // - Steps 30 (lipsync için sıkı) // - Sage Attention 2 (4090'da FA2'ye 3x, kalite eşit) // - Profile 3 (LowRAM_HighVRAM) — 32GB RAM/24GB VRAM dengesi // - **Hafif TeaCache 1.25x**: kalite kaybı algılanmaz, ~%20 hız (sweet spot) // - flow_shift 5 (480p) / 9 (720p+) // - CFG-Zero* açık (Wan2.1 native, modern) static final rtx4090Ultra = WanGpProfili( id: 'sys_4090_ultra', ad: 'RTX 4090 — Ultra Kalite', aciklama: 'En yüksek kalite, lip-sync stabil. ' 'Steps=30, hafif cache (1.25x). 24GB VRAM, 32GB+ RAM önerilir.', hedefDonanim: 'RTX 4090 24GB', sistemiMi: true, otomatikLipsyncModeli: true, vramSafetyCoefficient: 0.85, ayarlar: const WanGpAyarlari( sampleSolver: 'unipc', flowShift: 5.0, guidanceScale: 5.0, audioGuidanceScale: 4.0, embeddedGuidanceScale: 5.0, overrideAttention: 'sage2', overrideProfile: 3, slidingWindowSize: 81, slidingWindowOverlap: 17, slidingWindowColorCorrectionStrength: 0.3, // Hafif cache: sweet spot. Issue #629: 1.25x neredeyse görünmez. skipStepsCacheType: 'tea', skipStepsMultiplier: 1.25, skipStepsStartStepPerc: 0.15, // erken step'leri koru (kalite) riflexSetting: 'on', nagScale: 11.0, promptEnhancer: 'auto', filmGrainIntensity: 0.05, temporalUpsampling: 'rife', spatialUpsampling: 'lanczos', cfgStarSwitch: true, // Wan2.1 native (APG ile çakışmasın) apgSwitch: false, ozelAlanlar: { 'num_inference_steps': 30, }, ), ); // ── RTX 4090 HIZLI = LTX DESKTOP REPLİKASI ─────────────────────────── // Kaynak: Lightricks LTX-2 distilled docs + Wan2GP CLI flags + SageAttention2 // - LTX Desktop'un kendi pipeline'ı: ltx2_22B_distilled, 8 step, CFG=1 // - Sample Solver: FlowMatchEuler (UniPC çok yakın çalışır) // - Sage2 attention: RTX 4090'da FA2'ye 3.1x hız // - TeaCache 1.5x: ek %30-50 kazanç // - flow_shift 3.0: LTX-2 distilled native default // - sliding_window 121: LTX-2 native (InfiniteTalk değil!) // - **InfiniteTalk yerine ltx2_22B_distilled** → 3-5x hızlı, hâlâ yüksek kalite // Beklenen: 720p / 5sn → ~45sn (LTX Desktop ile aynı sınıf) // // NOT: ses varsa orchestrator otomatik infinitetalk'a geçer // (otomatikLipsyncModeli = true). Ses olmayan dans/aksiyon için // LTX distilled uygulanır. static final rtx4090Hizli = WanGpProfili( id: 'sys_4090_hizli', ad: 'RTX 4090 — Hızlı (LTX Desktop)', aciklama: 'LTX Desktop hız ve kalitesi. ~45sn/5sn segment. ' 'Ses varsa otomatik InfiniteTalk\'a geçer.', hedefDonanim: 'RTX 4090 24GB', sistemiMi: true, otomatikLipsyncModeli: true, // ses varsa infinitetalk override vramSafetyCoefficient: 0.85, ayarlar: const WanGpAyarlari( // LTX-2 sadece euler/res2s kabul (unipc → reddedildi: ltx2_handler.py:457) sampleSolver: 'euler', flowShift: 3.0, guidanceScale: 1.0, // distilled = CFG'siz overrideAttention: 'sage2', // RTX 4090'da 3.1x overrideProfile: 3, slidingWindowSize: 121, // LTX-2 native slidingWindowOverlap: 17, skipStepsCacheType: 'tea', skipStepsMultiplier: 1.5, skipStepsStartStepPerc: 0.1, cfgStarSwitch: true, apgSwitch: false, promptEnhancer: 'auto', temporalUpsampling: 'rife', ozelAlanlar: { // LTX-2 19B Distilled GGUF Q6_K — kurulu, anında kullanılabilir. // Test edildi: 1m 39s render, 45°C peak, çalışıyor ✓ 'model_type': 'ltx2_distilled_gguf_q6_k', 'num_inference_steps': 8, }, ), ); // ── ÇİNLİ DANS + LIPSYNC (Douyin/Bilibili tarzı) ───────────────────── // Kullanım: karakter şarkı söylüyor + dans ediyor (lipsync hayati) // - InfiniteTalk 14B (audio-driven, smooth shot transitions) // - Lightning LoRA SLOT: kullanıcı `loras/lightning_v1.safetensors` // dosyasını yüklediyse 4-8 stepte kalite korunur (yoksa 14 step) // - audio_guidance 5.0: dudak/ses sıkı bağ, "robotik" değil // - flow_shift 3.0 (480p), sliding_window 81 (InfiniteTalk zorunlu) // - Sage2 + TeaCache 1.5x: hız maksimum // - prompt_enhancer auto: Qwen ile dans/sahne detayını zenginleştir // - film_grain hafif: AI parlaklığını maskeler (sinematik) // - RIFE temporal upsample: 24→48fps, akıcı dans hareketleri // // Lightning LoRA önerisi: HF "lightx2v/Wan2.1-T2V-14B-StepDistill-CFG-Distill" // Dance LoRA için CivitAI'da "Wan2.1 dance" / "anime dance" araması. static final cinliDansLipsync = WanGpProfili( id: 'sys_cinli_dans', ad: 'Çinli Dans + Lipsync (4090)', aciklama: 'Douyin/Bilibili tarzı: dans eden karakter + şarkı. ' 'InfiniteTalk + Lightning LoRA slot.', hedefDonanim: 'RTX 4090 24GB', sistemiMi: true, otomatikLipsyncModeli: true, // model_type zaten infinitetalk vramSafetyCoefficient: 0.8, ayarlar: const WanGpAyarlari( sampleSolver: 'unipc', flowShift: 3.0, guidanceScale: 1.0, audioGuidanceScale: 5.0, // dans'ta 4'ten yumuşak, 6'dan az "robotik" overrideAttention: 'sage2', overrideProfile: 3, slidingWindowSize: 81, // InfiniteTalk zorunlu slidingWindowOverlap: 17, slidingWindowColorCorrectionStrength: 0.3, // shot geçişi renk uyumu skipStepsCacheType: 'tea', skipStepsMultiplier: 1.5, skipStepsStartStepPerc: 0.1, cfgStarSwitch: true, apgSwitch: false, promptEnhancer: 'auto', // Qwen — dans/sahne detayını zenginleştir temporalUpsampling: 'rife', // dans akıcılığı kritik filmGrainIntensity: 0.04, // hafif sinematik nagScale: 9.0, // negative prompt güçlendirici (AI-shine azalt) audioPromptType: 'A', ozelAlanlar: { 'model_type': 'infinitetalk', // 14 step lipsync için min; Lightning LoRA yüklüyse 8'e düşürülebilir 'num_inference_steps': 14, }, ), ); // ── INFINITETALK LIPSYNC — RTX 4090 ────────────────────────────────── // Kaynak: Wan2GP issue #862 (önerilen multi-person ayarlar) // - Multi-person: shift=3, guidance=1, audio=6, UniPC, sabit seed // - Single-person: shift=5, guidance=5, audio=4 (Ultra ile aynı) // Bu profil multi/single arası dengeli — hız öncelikli ama kararlı static final infinitetalkLipsync = WanGpProfili( id: 'sys_infinitetalk', ad: 'InfiniteTalk Lipsync — 4090', aciklama: 'LTX Desktop paritesinde stabil lip-sync. ' 'Sliding 81 zorunlu, ses-CFG sıkı.', hedefDonanim: 'RTX 4090 24GB', sistemiMi: true, otomatikLipsyncModeli: true, // bu profil zaten infinitetalk istiyor vramSafetyCoefficient: 0.8, ayarlar: const WanGpAyarlari( sampleSolver: 'unipc', flowShift: 3.0, guidanceScale: 1.0, audioGuidanceScale: 6.0, overrideAttention: 'sage2', overrideProfile: 3, slidingWindowSize: 81, slidingWindowOverlap: 17, audioPromptType: 'A', cfgStarSwitch: true, ozelAlanlar: { 'model_type': 'infinitetalk', 'num_inference_steps': 14, }, ), ); // ── 16GB VRAM DENGELİ ───────────────────────────────────────────────── // Kaynak: Wan2GP issue #185 (16GB VRAM önerileri), GGUF Q6_K analizi // - LTX-2 distilled GGUF Q6_K: ~14.6 GB, dengeli kalite // - Profile 4 (LowRAM_LowVRAM) — issue #1229: Profile 3 16GB altında takılıyor // - sliding 81 (peak'i kontrol için) // - MagCache 1.5x (8 step'te detay korur) static final vram16Dengeli = WanGpProfili( id: 'sys_16gb_dengeli', ad: '16GB VRAM — Dengeli', aciklama: 'GGUF Q6_K + Profile 4. RTX 4060 Ti / 4070 / 5060 Ti.', hedefDonanim: 'RTX 4070 / 4060 Ti 16GB', sistemiMi: true, otomatikLipsyncModeli: true, vramSafetyCoefficient: 0.7, ayarlar: const WanGpAyarlari( sampleSolver: 'unipc', flowShift: 3.0, overrideAttention: 'sage', overrideProfile: 4, slidingWindowSize: 81, slidingWindowOverlap: 17, skipStepsCacheType: 'mag', skipStepsMultiplier: 1.5, spatialUpsampling: 'lanczos', mmAudioSetting: 'none', // 2-3GB tasarruf ozelAlanlar: { 'model_type': 'ltx2_distilled_gguf_q6_k', 'num_inference_steps': 8, }, ), ); // ── 12GB VRAM VERİMLİ ──────────────────────────────────────────────── // Kaynak: GGUF Q4_K_M ölçümleri, sliding 65 etkisi // - LTX-2 distilled GGUF Q4_K_M: ~11.5 GB // - sliding 65 (81'den küçük, peak VRAM düşer) // - Lanczos upsample (RIFE VRAM yer) static final vram12Verimli = WanGpProfili( id: 'sys_12gb_verimli', ad: '12GB VRAM — Verimli', aciklama: 'GGUF Q4_K_M, sliding 65. RTX 3060 / 4060 / 4070 12GB.', hedefDonanim: 'RTX 3060 / 4060 12GB', sistemiMi: true, otomatikLipsyncModeli: true, vramSafetyCoefficient: 0.65, ayarlar: const WanGpAyarlari( sampleSolver: 'unipc', flowShift: 3.0, overrideAttention: 'sage', overrideProfile: 4, slidingWindowSize: 65, slidingWindowOverlap: 13, skipStepsCacheType: 'mag', skipStepsMultiplier: 1.75, spatialUpsampling: 'lanczos', mmAudioSetting: 'none', ozelAlanlar: { 'model_type': 'ltx2_distilled_gguf_q4_k_m', 'num_inference_steps': 6, 'resolution': '704x416', }, ), ); // ── 8GB VRAM DÜŞÜK ─────────────────────────────────────────────────── // Kaynak: Profile 5 (VeryLowRAM_LowVRAM), issue #862 multitalk öneri // - InfiniteTalk 14B 8GB'da çalışmaz → multitalk_480p // - sliding 49 (peak kontrolü) // - Steps 4 (distilled minimum) static final vram8Dusuk = WanGpProfili( id: 'sys_8gb_dusuk', ad: '8GB VRAM — Düşük', aciklama: 'GGUF Q4 + Profile 5 + sliding 49. RTX 3060 Ti / 4060 8GB.', hedefDonanim: 'RTX 3060 Ti / 4060 8GB', sistemiMi: true, otomatikLipsyncModeli: true, vramSafetyCoefficient: 0.6, ayarlar: const WanGpAyarlari( sampleSolver: 'unipc', flowShift: 3.0, overrideAttention: 'sage', overrideProfile: 5, slidingWindowSize: 49, slidingWindowOverlap: 9, skipStepsCacheType: 'tea', skipStepsMultiplier: 2.0, spatialUpsampling: 'lanczos', mmAudioSetting: 'none', ozelAlanlar: { 'model_type': 'ltx2_distilled_gguf_q4_k_m', 'num_inference_steps': 4, 'resolution': '640x384', }, ), ); // ── RTX 4090 — SERİN HIZLI ⭐ (önerilen denge) ─────────────────────── // Hedef: max hız değil ama yine hızlı + GPU coşmadan + sıcaklık 70-78°C // // Strateji: // - LTX-2 distilled (CFG=1, 8 step) → tek pencere ~25-30 sn yerine ~15 // - Profile 4 (RAM offload) → GPU "pulsed" çalışır, sürekli max değil // → fan eğrisi düşer, hot spot oluşmaz // - VRAM safety 0.65 → 24GB'ın 16GB'ını kullan, kart serin // - Sage2 attention → per-watt en verimli (her step daha az enerji) // - TeaCache 1.5× → step sayısının yarısı atlanıyor // - 832x480 (480p) → 720p'ye göre %50 daha az iş yükü // - prompt_enhancer + MMAudio kapalı → ekstra model yüklenmesin // - sliding 81 (LTX-2 native) → her pencere kısa, GPU soluk alır // // Beklenen: ~60-75sn / 5sn segment, GPU %75-85 yük, ~72-78°C // (Ultra: ~150sn %95+ yük 82-85°C; Hızlı: ~45sn %95+ 80-83°C) // // NOT: Ses varsa orchestrator otomatik InfiniteTalk'a geçer (lipsync için). static final rtx4090Serin = WanGpProfili( id: 'sys_4090_serin', ad: 'RTX 4090 — Serin Hızlı ⭐', aciklama: 'Hız + serinlik dengesi. ~70sn/5sn, GPU %75-85, ~75°C. ' 'Kart fan\'ı az, sistem rahat. (Önerilen)', hedefDonanim: 'RTX 4090 24GB', sistemiMi: true, otomatikLipsyncModeli: true, vramSafetyCoefficient: 0.65, // 0.85 yerine — GPU soluk alır ayarlar: const WanGpAyarlari( // LTX-2 sadece euler/res2s kabul (unipc reddedildi) sampleSolver: 'euler', flowShift: 3.0, guidanceScale: 1.0, overrideAttention: 'sage2', overrideProfile: 4, // RAM offload — GPU pulsed slidingWindowSize: 81, slidingWindowOverlap: 17, slidingWindowColorCorrectionStrength: 0.3, skipStepsCacheType: 'tea', skipStepsMultiplier: 1.5, skipStepsStartStepPerc: 0.1, cfgStarSwitch: true, apgSwitch: false, promptEnhancer: 'none', mmAudioSetting: 'none', spatialUpsampling: 'lanczos', temporalUpsampling: 'rife', ozelAlanlar: { // LTX-2 19B Distilled GGUF Q6_K — kurulu, anında kullanılabilir 'model_type': 'ltx2_distilled_gguf_q6_k', 'num_inference_steps': 8, 'resolution': '832x480', }, ), ); // ── SESSİZ MOD — Tüm GPU'lar için maximum serinlik (kalite>hız) ────── // 4090'a sahip değilsen veya çok ısınıyorsa bu mod. // - Profile 4 + safety 0.55 (VRAM minimum doluluk) // - Sage attention // - Sliding 65 (küçük pencere → soluk alma) // - mmaudio kapalı, prompt_enhancer kapalı // - Steps 20 (Ultra'nın 30'una göre %33 az iş) // - distilled + CFG=1 (4090 yoksa bile düşük yük) static final sessizMod = WanGpProfili( id: 'sys_sessiz_mod', ad: 'Sessiz Mod — Tüm GPU\'lar', aciklama: 'Termal/güç sınırlama önceliği. RTX 4090 dışı kartlar ' 'veya çok ısınan sistemler için. Render yavaş ama sistem sessiz.', hedefDonanim: 'Tüm GPU\'lar', sistemiMi: true, otomatikLipsyncModeli: true, vramSafetyCoefficient: 0.55, ayarlar: const WanGpAyarlari( // LTX-2 sadece euler/res2s kabul eder (unipc → reddedildi). // Client otomatik düzeltiyor ama profil seviyesinde de doğrudan euler. sampleSolver: 'euler', flowShift: 3.0, guidanceScale: 1.0, audioGuidanceScale: 4.0, overrideAttention: 'sage', overrideProfile: 4, slidingWindowSize: 65, slidingWindowOverlap: 13, skipStepsCacheType: 'tea', skipStepsMultiplier: 1.5, cfgStarSwitch: true, apgSwitch: false, promptEnhancer: 'none', mmAudioSetting: 'none', spatialUpsampling: 'lanczos', ozelAlanlar: { // LTX-2 19B Distilled GGUF Q6_K — gerçek test edilmiş, çalışan model. // Kullanıcının PC'sinde kurulu (ltx-2-19b-distilled_Q6_K.gguf). // 14 GB indirme yerine zaten lokal — anında kullanılabilir. 'model_type': 'ltx2_distilled_gguf_q6_k', 'num_inference_steps': 8, }, ), ); /// Hazır profillerin tümü (sıralı, UI'da bu sırayla gösterilir). /// "Serin Hızlı" ⭐ → varsayılan öneri (hız + GPU sağlığı dengesi) static final List tumu = [ rtx4090Serin, // ⭐ önerilen — coşturmaz ama hızlı rtx4090Hizli, // max hız (LTX Desktop) rtx4090Ultra, // max kalite cinliDansLipsync, // dans + şarkı infinitetalkLipsync, // saf lipsync sessizMod, // 4090 dışı için vram16Dengeli, vram12Verimli, vram8Dusuk, ]; }