# ComfyUI-MusicVideoDirector 🎬

**FikoYT** imzalı şarkıdan otomatik LTX Video klip promptu üreticisi.
Tamamen **lokal** çalışır — faster-whisper + Ollama. 6 custom node + sıfırdan yazılmış sihirbaz UI paneli.

---

## ✨ Yeni: FikoYT MVD Sihirbaz Paneli

Sağ alttaki **🎬** butonuna bas — 5 adımlı yüzen panel açılır:

| Adım | İş |
|------|-----|
| 0 · Ses | Drag-drop ile ses dosyası yükle (`input/`'a otomatik kopyalanır) |
| 1 · Whisper | Model/dil/VAD/segment süre ayarları — node ile çift yönlü senkron |
| 2 · Segment | Kart bazlı görsel segment editörü (tip, zaman, sözler) |
| 3 · Prompt | Ollama URL/model (otomatik liste!) + tarz/lokasyon/palet — tek tıkla `Queue` |
| 4 · Sonuç | PromptDisplay çıktısı parse edilir, segment kart UI'ı, kopyala / `→ Output` butonları, JSON export |

Panel **sürüklenebilir, resize edilebilir**, widget değerleri **KV state** ile saklanır (sıra bağımsız, yenileme sonrası kaybolmaz).

Ollama URL alanı değişince `/api/tags`'ten model listesi otomatik gelir, **embed modeller filtre** edilir. Sağ tık menüsünden manuel yenileme de var.

---

## Pipeline

```
Ses Dosyası
    ↓
🎵 FikoYT Audio Loader
    ↓
🎤 FikoYT Whisper Transcriber  ←  faster-whisper (lokal GPU)
    ↓
🧠 FikoYT Smart Segmenter      ←  Ollama: duygu/söz analizine göre
    ↓                              profesyonel klip segmentlere bölme
✏️ FikoYT Segment Editor       ←  Manuel düzeltme (opsiyonel)
    ↓
🤖 FikoYT Ollama Prompt Gen    ←  Ollama API (auto-discovery)
    ├─→ 📋 FikoYT Prompt Display  ←  Tüm segmentlerin raporu
    └─→ 📤 FikoYT Prompt Output   ←  Segment seç (0, 1, 2...)
                                      ↓
                                LTX Video Node
```

### 👤 Yüz Kimliği Koruma (PuLID-Flux)

**Önemli:** Karakter görseli yüklemek tek başına aynı yüzü garanti etmez. Vision LLM görseli metinsel olarak tarif eder, Flux base bunu okur ama "benzer yüz" üretir, "aynı yüz" değil.

**Birebir aynı yüz** için **PuLID-Flux** entegrasyonu gerekiyor:

#### Kurulum (tek seferlik)
1. ComfyUI Manager'ı aç
2. "Install Custom Nodes" → ara: **`ComfyUI_PuLID_Flux_ll`**
3. Install bas, ComfyUI'yi yeniden başlat
4. Panel **⚙ Ayarlar → 🖼 Görsel Üretim → 🔽 Eksikleri İndir** → `pulid_flux_v0.9.1.safetensors` otomatik iner (`models/pulid/`'e)
5. InsightFace ve EVA-CLIP modelleri ilk çalıştırmada otomatik iner (ComfyUI_PuLID_Flux_ll halleder)

#### Nasıl çalışır?
- Karakter resmini yükle (⚙ → 🎭 Karakter & Ortam → 👤 Karakter)
- PuLID-Flux yüklüyse `SegmentImageGen` **otomatik algılar ve uygular** — workflow değiştirmene gerek yok
- Yüz kimliği `ref_strength` widget'ı ile ayarlanır (0.7–1.0 önerilir)
- Konsolda `✓ PuLID uygulandi` mesajı görürsen aktif

#### 👥 Global Karakter Kütüphanesi (YENİ)

Artık tüm projelerce paylaşılan **merkezi karakter veritabanı** var:

**Dosya yapısı:**
```
ComfyUI/output/fikoyt_mvd/_characters/
  ├── lead_singer/
  │   ├── meta.json   (id, name, notes, default_strength…)
  │   └── reference.png
  ├── guitarist/
  │   └── …
  └── dancer/
      └── …
```

**Panelden yönetim:**
- ⚙ Ayarlar → **👥 Karakter Kütüphanesi (Global)** accordion'u
- ➕ Yeni karakter ekle (isim + notlar + resim)
- 📚 Mevcut karakterler grid'i (resim + isim + notlar + 🗑 sil)
- Tüm projeler aynı kütüphaneyi kullanır — bir kez yarat, her video klipte kullan

**Per-segment karakter atama:**
Her segment kartında 🎭 Karakter dropdown'u — o segmentte hangi karakter görünecek seçilir. PuLID o karakterin referansını kullanarak yüzü o segmente uygular.

**Workflow akışı:**
```
🎭 CharacterBank (global) ───┐
                              ↓
🎤 Whisper → 🧠 Smart Seg → 🤖 Prompt Gen → 🖼 SegmentImageGen
                                              ↑
                                Flux + PuLID per-segment
```

### 📚 Karakter Başına Çoklu Referans + LoRA Training

Her karakter için **sayısız referans görseli** desteklenir. Farklı açılar, ışıklar, ifadeler PuLID `fusion="mean"` ile birleşip daha kararlı yüz kimliği üretir.

**Yapı:**
```
_characters/<id>/
  ├── meta.json
  ├── reference.png           # Ana (ilk yüklenen)
  ├── reference.txt           # Ana caption (opsiyonel)
  └── refs/
      ├── front_001.png       # Ek referanslar
      ├── front_001.txt       # Per-ref caption
      ├── side_002.png
      └── ...
```

**Panel:**
- Karakter kartına tıkla → **🎭 Detail Modal** açılır
- **➕ Resim Ekle (toplu)** ile çoklu dosya seçimi (tek seferde 10+ resim yüklenebilir)
- Her referansın altında **caption textarea** (otomatik kaydedilir)
- Ana referans dışındaki ✕ ile silinir

**📦 LoRA Dataset Export:**
Detail modal'ın altında **"📦 LoRA Dataset Oluştur"** butonu:
- Tüm referansları `output/fikoyt_mvd/_lora_datasets/<id>_<timestamp>/` klasörüne kopyalar
- Her `image.png` için yanında `image.txt` caption dosyası oluşturur
- Trigger kelime = karakter adı (boşluksuz)
- `README.txt` ile training rehberi
- Klasör yolu panoya kopyalanır → doğrudan kohya/sd-scripts veya ComfyUI training node'larına ver

**Caption mantığı:**
- Per-image caption varsa → o kullanılır
- Yoksa: `{trigger}, {karakter notları}` template

**LoRA training araçları:**
- [kohya-ss/sd-scripts](https://github.com/kohya-ss/sd-scripts) — komut satırı, Flux ve SDXL desteği
- ComfyUI'de yerel training node paketleri (FluxGym vb.)

**Çok karakterli müzik klip senaryoları:**
- Düet: 2 sanatçı, segmentlerde sırayla farklı yüzler
- Hikaye: ana karakter + yan karakterler (intro→biri, chorus→diğeri)
- Grup: 3-4 üye, her birinin solo bölümü

CharacterBank node'unun `character_ids` widget'ında virgülle ayrılmış ID girersen sadece o karakterler bank'a yüklenir. Boş bırakırsan tüm kütüphane gelir.

### 🎭 Karakter & Ortam Referansı (Pro Mod)

Panelde **⚙ Ayarlar → 🎭 Karakter & Ortam Referansı** bölümünden:

- 👤 **Karakter resmi yükle** → proje/refs/character.png
- 👤 **Karakter notları** → özellikler + değişiklikler ("kısa kahverengi saçlı, mavi gözlü, 30 yaş kadın. Değişiklik: saçını topla, ciddi ifade")
- 🏙 **Ortam resmi yükle** → proje/refs/scene.png
- 🏙 **Ortam notları** → lokasyon + atmosfer
- Referans gücü ayarı (0-1.5)

Notlar her segmentin prompt'una otomatik eklenir:
```
[image_prompt]. CHARACTER: [karakter notları]. SETTING: [ortam notları]. [extra_positive]
```

### 🏆 2026 En İyi Lokal Stack

Karakter + ortam referansından profesyonel görsel için **önerilen kombinasyonlar**:

| Seviye | Model | Açıklama |
|--------|-------|----------|
| 🥇 **En iyi (tek model)** | **Flux.1-Kontext-Dev** | Black Forest Labs, Ağu 2025. Multi-reference editing — tek node'da karakter + ortam + metin talimatı. Tam senin için tasarlanmış. |
| 🥈 **Modüler stack** | **Flux.1-Dev + PuLID-Flux + Redux** | Flux base + PuLID (yüz kimliği koruma) + Redux (stil/ortam referansı). En esnek seçenek. |
| 🥉 **Eski ama çalışır** | **SDXL + IP-Adapter Plus + InstantID** | Düşük VRAM (12GB) için. Kalite Flux'tan düşük ama hızlı. |

### ⚠ Sorun Giderme — Blob/Bulanık Görsel

Görsel **boş turuncu blob** veya **anlamsız** çıkıyorsa şu sırayla bak:

| Belirti | Sebep | Çözüm |
|---------|-------|-------|
| Smooth orange gradient blob | Flux Dev'de **FluxGuidance YOK** (cfg=1 yetmiyor) | Settings → 🏆 Flux Pro preset → guidance=3.5 |
| Bulanık silüet, özne kayıp | Promptta "soft-focus, bokeh, silhouette" aşırı | Yeni system prompt bunları yasaklar (v4+) |
| Yüz her seferinde farklı | PuLID-Flux kurulu değil | ComfyUI Manager → install `ComfyUI_PuLID_Flux_ll` |
| Yüz var ama detay yok | PuLID end_at=1.0 (eskimiş) | v5+ end_at=0.8 — son %20 detay denoising serbest |
| Schnell ile 20 step | Schnell sadece 4 step ister | UNETLoader'da `flux1-dev-fp8` seç (schnell değil) |

**Diagnostic toggle'lar** (Settings → 🖼 → 🔧 Sorun Giderme):
- **PuLID kapat** → text-only mod, PuLID'in sorun olup olmadığını izole et
- **Karakter bank kapat** → direct character_image kullan

### 🔓 Uncensored / NSFW Profile (18+, opsiyonel)

Sistem auto-download YAPMAZ (community model URL'leri sürekli değişir + hukuki sorumluluk).
Manuel kurulum rehberi **⚙ Ayarlar → 🔓 Uncensored Profile** bölümünden:

**🧠 LLM (Ollama abliterated)**
```bash
ollama pull huihui_ai/qwen2.5-abliterated:14b
ollama pull huihui_ai/llama3.3-abliterate:70b
ollama pull dolphin-mistral:7b
ollama pull wizard-vicuna-uncensored:13b
ollama pull nous-hermes-2-mixtral:8x7b
```
Sonra Görsel Stüdyosu → Proje Bilgisi → Ollama Model alanına yapıştır.

**🖼 Flux/SDXL NSFW Modelleri (Civitai'den manuel)**
- Civitai → Flux NSFW LoRA: indir → `ComfyUI/models/loras/` → workflow'a `LoraLoader` ekle
- JuggernautXL Lightning v9 (SDXL alternative checkpoint)
- Lustify Pony (SDXL Pony fine-tune)

**👁 Vision (Vision-LLM)**
```bash
ollama pull huihui_ai/qwen2-vl-abliterated:7b
```
Karakter referans tarifi için kullanılır (⚙ Ayarlar → 🎭 Referans → Vision Model).

⚠ **Yasal not:** 18+ içerik üretmek bulunduğun yargı bölgesinin yasalarına tabidir. Kişisel/profesyonel kullanım kapsamında ve kendi sorumluluğunda. Çocuk içerikli üretim **kesinlikle yasak**, bu sistem CSAM koruması sağlamaz — kullanıcı yetişkin içerikle sınırlı tutmakla yükümlü.

### 🎬 2026 Tam Profesyonel Stack (Müzik Klip için)

İdeal kurulum — her katman için araştırma ile seçilmiş en iyi lokal model:

| Katman | Model | Boyut | Görev | Kurulum |
|--------|-------|-------|-------|---------|
| 🎤 Transcription | Whisper-large-v3 | 1.5 GB | Şarkı → metin (Türkçe dahil) | `faster-whisper` pip |
| 🎼 Vocal separation (ops.) | Demucs / Kim_Vocal_2 | 250 MB | Sadece şarkıcı sesi | `demucs` pip |
| 🧠 LLM (prompt gen) | Qwen3.5-7B veya 14B (q4_K_M) | 4-8 GB | Sahne prompt'ları + segmentasyon | Ollama |
| 🎨 LLM (vision) | Qwen2.5-VL-7B | 7 GB | Karakter/ortam görsel tarifi | Ollama |
| 🖼 Keyframe image | **Flux.1-Dev fp8** | 12 GB | Sanatçı portresi | ⚙ → 🔽 Eksikleri İndir |
| 👤 Face identity | **PuLID-Flux v0.9.1** | 1.2 GB | Aynı yüz her segmentte | ⚙ → 🔽 Eksikleri İndir |
| 🎬 **Ses-senkron video** | **🎯 HuMo-1.7B (Wan2.1 base)** | 3.5 GB | **Dudak sync + insan motion** (97 frame@25fps = 4sn) | ⚙ → 🔽 Eksikleri İndir + ComfyUI-WanVideoWrapper |
| 🎬 Alternatif video | LTX Video / Wan 2.1 | 5-15 GB | Generic video | Kendi seçimin |
| 🎞 Post-process | Bizim **CinematicPost** node | - | Grain + Sharpen + LAB ColorMatch | Built-in |

**Toplam disk:** ~30-40 GB (Flux + HuMo + Qwen + Whisper)
**Toplam VRAM:** ~24 GB önerilen (Flux fp8 + HuMo 1.7B + PuLID)

### 🎯 HuMo — Müzik Klip için Game-Changer

**ByteDance HuMo** (Sep 2025) tam senin için tasarlandı: **ses + görsel + metin → ses-senkron insan video** (özellikle dudak hareketi şarkıyla uyumlu).

```
ComfyUI/models/diffusion_models/Wan2_1-HuMo-1_7B_fp16.safetensors   (3.5 GB)
```

**Önerilen workflow (HuMo branch'i):**
```
[Mevcut Pipeline]
  Audio → Whisper → SmartSegmenter → SegmentEditor → AudioSplitter
                                       ↓                  ↓
                                  OllamaPromptGen    seg audio files
                                       ↓
                                  SegmentImageGen (Flux+PuLID) → seg keyframes
                                       ↓
                                  PromptOutput (audio_path + image_path + prompt'lar)
                                       ↓
[YENİ HuMo Branch]
                                  WanVideoLoader (Wan2_1-HuMo-1_7B)
                                       ↓
                                  WanVideoHuMo (image + audio + positive prompt)
                                       ↓
                                  Per-segment 4sn motion video
```

**Kurulum:**
1. ComfyUI Manager → Install Custom Nodes → **`ComfyUI-WanVideoWrapper`** (Kijai) → Install
2. ⚙ → 🖼 → 🔽 Eksikleri İndir → HuMo 1.7B otomatik iner
3. Workflow'a `WanVideoModelLoader` + `WanVideoHuMoSampler` ekle
4. PromptOutput'tan: `audio_path` → HuMoSampler audio input, `image_path` → start image, `positive_prompt` → text

### 🏆 Flux Pro Kurulum (Önerilen)

Workflow default olarak **Flux.1-dev** ile gelir. İhtiyacın olan dosyalar:

| Dosya | Konum | Boyut | Link |
|-------|-------|-------|------|
| `flux1-dev.safetensors` | `models/unet/` | ~23 GB | [HuggingFace](https://huggingface.co/black-forest-labs/FLUX.1-dev) |
| `flux1-dev-fp8.safetensors` (düşük VRAM) | `models/unet/` | ~12 GB | [Comfy Org](https://huggingface.co/Comfy-Org/flux1-dev) |
| `t5xxl_fp16.safetensors` | `models/clip/` veya `models/text_encoders/` | ~9.5 GB | [HF](https://huggingface.co/comfyanonymous/flux_text_encoders) |
| `t5xxl_fp8_e4m3fn.safetensors` (alt) | aynı | ~4.7 GB | aynı |
| `clip_l.safetensors` | aynı | ~250 MB | aynı |
| `ae.safetensors` (Flux VAE) | `models/vae/` | ~335 MB | [HF Black Forest](https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/ae.safetensors) |

**Flux için optimal ayarlar (default geldiği şekilde):**
- Çözünürlük: 1280×720 (16:9 LTX-uyumlu)
- Steps: 20
- CFG: **1.0** ⚠ (Flux distilled, klasik CFG yok)
- Sampler: `euler`
- Scheduler: `beta`
- ModelSamplingFlux shift: max=1.15, base=0.5

**SDXL'e geri dönmek için** workflow'da:
1. UNETLoader + DualCLIPLoader + VAELoader + ModelSamplingFlux node'larını sil
2. Yerine **CheckpointLoaderSimple** ekle (SDXL .safetensors seç)
3. MODEL/CLIP/VAE çıkışlarını SegmentImageGen'e bağla
4. Settings'te: width=1024, height=1024, cfg=7, scheduler=normal

**ComfyUI bağlantı şeması (önerilen — Flux + PuLID + Redux):**
```
CheckpointLoaderSimple ─→ MODEL ─→ PuLIDFluxLoader ─→ ApplyPuLIDFlux(character_image) ─→ patched MODEL
                       ├→ CLIP   (Karakter referansı yüz kimliği için)
                       └→ VAE
                                                                                ↓
LoadImage(scene) ─→ StyleModelLoader(redux) ─→ ApplyStyleModel ─→ scene conditioning
                                                                                ↓
                                                                       🖼 SegmentImageGen
                                                                          (model, clip, vae,
                                                                           character_image,
                                                                           scene_image, ...)
```

Veya **basit modda** sadece text-only çalışır — referans görseller proje klasörüne kaydedilir, notlar prompt'lara eklenir, kalite SDXL/Flux'un base prompt-following yeteneğine bağlıdır.

### 📁 Proje Klasör Yapısı (Yeni)

Her çalıştırma için otomatik klasör:

```
ComfyUI/output/fikoyt_mvd/
└── <ProjeAdi>_<YYYYMMDD_HHMMSS>/
    ├── source.mp3                 # Orijinal ses kopyası
    ├── audio/
    │   ├── seg_00_intro.mp3       # Parça parça kesilmiş sesler
    │   ├── seg_01_verse.mp3
    │   └── ...
    ├── images/                    # AI ile üretilen görseller (SegmentImageGen)
    │   ├── seg_00_intro.png
    │   └── ...
    ├── refs/                      # Karakter ve ortam referansları
    │   ├── character.png
    │   └── scene.png
    ├── prompts/
    │   ├── seg_00_intro.json      # Per-segment yapılı veri
    │   ├── seg_00_intro.txt       # Düz metin (kopyala-yapıştır)
    │   └── ...
    ├── report.md                  # Markdown rapor (Github/Notion'a yapıştırılabilir)
    └── project.json               # Master meta — geri yükleme için
```

Panelde **"Önceki Projeler"** listesi otomatik dolar, tıkla → tüm segmentler/promptlar/sesler geri yüklenir.
`reuse_existing=true` ile aynı isimli en yeni projeyi günceller (yeni klasör açmaz).

### 🧠 Smart Segmenter (Yeni)

Whisper'ın ham çıktısını alıp Ollama'ya gönderir. Model:
- **Duygu/söz akışı** değişimini tespit eder
- **Yapısal tipleri** belirler: `intro` / `verse` / `chorus` / `bridge` / `outro` / `instrumental`
- Tekrarlanan söz bloklarını → `chorus` olarak işaretler
- Hedef **4-8 segment**, her biri **12-35 saniye** (profesyonel klip uzunluğu)
- Her segment için `mood` (melankolik/enerjik/gergin…) ve `visual_hint` (kamera/sahne ipucu) üretir

Ollama erişilemezse otomatik olarak süre-bazlı fallback merge'e döner.

---

## Kurulum

### 1) Custom node

Bu klasörü:
```
ComfyUI/custom_nodes/ComfyUI-MusicVideoDirector/
├── __init__.py
├── nodes.py
├── workflow_music_video_director.json
├── README.md
└── web/js/fikoyt_mvd.js
```

### 2) faster-whisper

```bash
# Portable ComfyUI:
python_embeded\python.exe -m pip install faster-whisper

# Standalone:
pip install faster-whisper
```

`large-v3` modeli ilk çalıştırmada otomatik indirilir (~3 GB), sonra cache'ten gelir.

### 3) Ollama

```bash
ollama list
# Yoksa bir model çek:
ollama pull qwen2.5:7b-instruct-q4_K_M
ollama pull llama3.1:8b-instruct-q4_K_M
ollama pull mistral:latest
```

Varsayılan URL: `http://127.0.0.1:11434`

---

## Hızlı Başlangıç

### Yöntem A — Sihirbaz Paneli (önerilen)

1. **Load** → `workflow_music_video_director.json`
2. Sağ alttaki **🎬 FikoYT MVD** butonuna bas
3. 5 adımı sırayla geç:
   - **Adım 0:** ses dosyasını sürükle-bırak
   - **Adım 1:** Whisper ayarları → `↑ Node'a Uygula`
   - **Adım 2:** segmentleri istersen düzenle
   - **Adım 3:** şarkı bilgisi + Ollama modeli seç → `🚀 Promptları Üret`
   - **Adım 4:** sonuçları kopyala veya `→ Output` ile `segment_index` ata

### Yöntem B — Direkt node'lar

Sihirbaza ihtiyacın yoksa, workflow'u açıp her node'un widget'larını elle düzenle.

---

## Node Referansı

| Node | Girişler | Çıkışlar | İş |
|------|----------|----------|-----|
| 🎵 **AudioLoader** | `audio_file` (input/'tan), `custom_path` (opsiyonel tam yol) | `audio_bytes`, `file_path` | Ses dosyasını yükle |
| 🎤 **WhisperTranscriber** | `audio_bytes`, `model_size`, `language`, `device`, `vad_filter`, `min_seg_secs`, `max_seg_secs` | `segments` (MVD_SEGMENTS), `full_text` | faster-whisper transkript |
| 🧠 **SmartSegmenter** | `raw_segments`, `ollama_url`, `ollama_model`, `target_count`, `min_seg_sec`, `max_seg_sec`, `song_context` (ops.) | `segments` (MVD_SEGMENTS), `analysis` | AI ile duyguya göre segmente böl |
| ✏️ **SegmentEditor** | `segments_json` (multiline), `segments_in` (opsiyonel) | `segments` | JSON ile segment düzenle |
| ✂️ **AudioSplitter** | `audio_file_path`, `segments`, `project_name`, `output_format` (mp3/wav/ogg), `reuse_existing`, `pre_padding_ms`, `post_padding_ms`, `fade_ms`, `mp3_quality` | `segments` (audio_path ile), `project_dir`, `report` | Ses dosyasını padding'li segmentlere böl (ffmpeg) |
| 🖼 **SegmentImageGen** | `prompt_list`, `model`, `clip`, `vae`, `project_dir`, `width`, `height`, `steps`, `cfg`, `seed`, `sampler_name`, `scheduler`, `skip_existing` (ops.), `extra_positive` (ops.) | `prompt_list` (image_path ile), `last_image`, `report` | Her segment için profesyonel görsel üret (SD/SDXL/Flux). CheckpointLoaderSimple ile bağlanır |
| 💾 **ProjectSaver** | `project_dir`, `prompt_list`, `song_name`, `artist`, `segments` (ops.), `notes` (ops.) | `project_dir`, `summary` | Tüm projeyi kaydet |
| 🤖 **OllamaPromptGen** | `segments`, `ollama_url`, `ollama_model`, `song_name`, `artist_style`, `song_description`, `color_palette`, `camera_style`, `main_location`, `extra_style_notes`, `ltx_resolution`, `ltx_clip_duration` | `prompt_list` (MVD_PROMPT_LIST), `prompt_json` | Ollama ile prompt üret |
| 📤 **PromptOutput** | `prompt_list`, `segment_index` | `positive_prompt`, `negative_prompt`, `image_prompt`, `lyrics`, `start_time`, `end_time` | Tek segment seç |
| 📋 **PromptDisplay** | `prompt_list`, `song_name` | `report` | Tüm segmentlerin metinli raporu (UI'da görünür) |

### Ollama API Fallback Zinciri

OllamaPromptGen şu sırayla dener (biri çalışana kadar):
1. `POST /api/chat`
2. `POST /v1/chat/completions` (OpenAI uyumlu)
3. `POST /api/generate`

Yanıtta `<think>` blokları ve markdown code fence otomatik temizlenir, bozuk JSON için regex fallback var.

---

## Segment Tipleri ve LTX Davranışı

| Tip | Prompt Stili |
|-----|-------------|
| `verse` (kıta) | Yakın plan, içsel, sakin kamera |
| `chorus` (nakarat) | Geniş açı, yüksek enerji, dramatik |
| `bridge` (köprü) | Soyut, surreal, geçiş sahnesi |
| `intro` | Establishing shot, ortam tanıtımı |
| `outro` | Yavaş çekim, fade, kapanış |
| `instrumental` | Söz yok — saf görsel anlatım |

---

## LTX Video'ya Bağlantı

PromptOutput çıktıları:

| Çıkış | LTX Bağlantısı |
|-------|----------------|
| `positive_prompt` → | LTX positive conditioning |
| `negative_prompt` → | LTX negative conditioning |
| `image_prompt` → | CLIP Text Encode (keyframe) |
| `start_time` / `end_time` → | timing parametreleri |

Her segment için `segment_index`'i değiştirip tekrar Queue.

---

## Sorun Giderme

**`faster-whisper kurulu değil`**
```bash
python_embeded\python.exe -m pip install faster-whisper
```

**`Ollama bağlantı hatası`**
```bash
ollama serve
# Veya panel açıkken sağ tık → "🔄 Ollama modellerini yenile"
```

**Whisper modeli indirmiyor** → İlk çalıştırmada internet gerekli.
Model: `C:\Users\[kullanıcı]\.cache\huggingface\hub\`

**JSON parse hatası (Ollama)** → Daha büyük model dene (`qwen2.5:7b`, `llama3.1:8b`).
Node otomatik fallback'ler ekli: `<think>` temizleme, markdown sıyırma, regex array çıkarma.

**Panel açılmıyor / butonu yok** → ComfyUI'yi tam yenile (Ctrl+F5).
`web/js/fikoyt_mvd.js`'in 0 byte olmadığını kontrol et.

**Widget değerleri kayboluyor** → localStorage temizlenmiş olabilir. KV state `fikoyt_mvd_kv_state_v1` anahtarında.

---

## Dosya Yapısı

```
ComfyUI-MusicVideoDirector/
├── __init__.py                          — Node + WEB_DIRECTORY kayıt
├── nodes.py                             — 6 custom node
├── workflow_music_video_director.json   — Hazır workflow
├── README.md                            — Bu dosya
└── web/js/fikoyt_mvd.js                 — Sihirbaz panel UI
```

---

## Teknik Notlar

- **Node prefix:** `FikoYT_MVD_*` (önceki `MVD_*` versiyonundan göç eden workflow'lar çalışmaz, yenisini yükle)
- **Custom types:** `AUDIO_BYTES`, `MVD_SEGMENTS`, `MVD_PROMPT_LIST` — sadece bu node'lar arasında geçer
- **Display node:** PromptDisplay `OUTPUT_NODE = True` — `{ui: {text: [...]}}` döner, panel `executed` event'inden parse eder
- **KV state:** `localStorage.fikoyt_mvd_kv_state_v1` — `class#nodeId` → `{widget_name: value}` map
- **Panel pozisyonu:** `localStorage.fikoyt_mvd_panel_v1`

---

**FikoYT** © 2026
