feat: 9:16 crop + dinamik altyazı render motoru (Faz 2, Modül 4)
Her aday klip transkribe olduktan hemen sonra otomatik olarak video-render kuyruğuna giriyor. Yeni Python worker (video_render.py): - Klibi ffmpeg ile keser - OpenCV + MediaPipe Face Detector (Tasks API — yeni mediapipe sürümlerinde eski solutions API'si kalktı, .tflite model dosyası Docker build'de indiriliyor) ile örneklenmiş karelerde yüz merkezi tespit eder, yumuşatır (moving average); hiç yüz bulunamazsa sabit merkez crop'a düşer, hata saymaz - Kırpılmış kareleri OpenCV'den ffmpeg'e pipe'layıp tek geçişte orijinal sesi map'ler ve transcript_json'dan ürettiği .ass altyazıyı yakar - Sonucu /shared-media/shorts/<candidate_id>.mp4'e yazar Yeni ShortVideo modeli (PENDING/RENDERING/READY/FAILED). Panelde (segments + kanal detay sayfaları) render durumu + READY olunca video önizleme/indirme. VIDEO_RENDER_CONCURRENCY ayrı ve düşük (varsayılan 2) — bu iş diğerlerinden çok daha ağır. Kapsam: sadece tekil konuşmacı şablonu (çoklu konuşmacı/split-screen sonraki bir iterasyona bırakıldı — aktif-konuşmacı tespiti gerektiriyor). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
# StreamClipper AI — Faz 1
|
||||
# StreamClipper AI — Faz 1 + Faz 2 (render)
|
||||
|
||||
`prd.md` içindeki tam kapsamlı otonom pipeline'ın ilk fazı: ingestion (yt-dlp
|
||||
headless capture + 15dk segmentleme), sinyal analizi (ses peak + chat
|
||||
velocity), Whisper STT (OpenAI API, kelime zaman damgalı), BullMQ/Redis/
|
||||
Postgres altyapısı ve durum/transkript gösteren bir Next.js panel. LLM
|
||||
virality skorlama, render/crop/altyazı ve multi-platform dağıtım bu fazda
|
||||
**yok** — bkz. `prd.md` Modül 3 (skorlama kısmı), 4 ve 5.
|
||||
`prd.md` içindeki tam kapsamlı otonom pipeline'ın Faz 1+2'si: ingestion
|
||||
(yt-dlp headless capture + 15dk segmentleme), sinyal analizi (ses peak +
|
||||
chat velocity), Whisper STT (OpenAI API, kelime zaman damgalı), BullMQ/
|
||||
Redis/Postgres altyapısı, auth korumalı bir Next.js panel — ve Faz 2 olarak
|
||||
transkribe edilen her aday klibi otomatik yüz-takipli 9:16'ya crop'layıp
|
||||
dinamik altyazı basan bir render motoru (`apps/worker/worker/video_render.py`).
|
||||
LLM virality skorlama, çoklu-konuşmacı/split-screen şablonu ve
|
||||
multi-platform dağıtım hâlâ **yok** — bkz. `prd.md` Modül 3 (skorlama
|
||||
kısmı) ve Modül 5.
|
||||
|
||||
## Klasör Yapısı
|
||||
|
||||
@@ -77,8 +80,8 @@ Panel: http://localhost:3000 · API daemon health: http://localhost:4001/health
|
||||
Panelin tüm sayfaları giriş gerektirir (middleware ile korunuyor). İlk açılışta
|
||||
henüz hiç kullanıcı yoksa `/login` otomatik olarak "İlk Yönetici Hesabını
|
||||
Oluştur" formunu gösterir — kullanıcı adı/şifre girip ilk admin hesabını
|
||||
oradan oluşturursun. Sonraki kullanıcılar için ayrı bir "kullanıcı ekle"
|
||||
arayüzü henüz yok (Faz 2).
|
||||
oradan oluşturursun. `/users` sayfasından ek kullanıcı ekleyip silebilirsin
|
||||
(kendi hesabını veya son kalan tek kullanıcıyı silmek engellenir).
|
||||
|
||||
`SESSION_SECRET` production'da zorunlu (`openssl rand -base64 32` ile
|
||||
üretilebilir) — local dev'de boş bırakılırsa güvensiz bir varsayılan
|
||||
@@ -94,15 +97,21 @@ kullanılır, sadece test için.
|
||||
kuyruğundan alıp ses peak + (varsa) chat velocity analiziyle
|
||||
`candidate_segments` üretir.
|
||||
4. Her aday, `stt-scoring` kuyruğunda OpenAI Whisper API ile transkribe edilir;
|
||||
sonuç `candidate_segments.transcript_json` alanına yazılır ve Telegram'a
|
||||
bildirim gider.
|
||||
5. Panelde (`/` ve `/segments`) kanal durumu ve üretilen transkriptleri
|
||||
kontrol et.
|
||||
sonuç `candidate_segments.transcript_json` alanına yazılır, Telegram'a
|
||||
bildirim gider ve `video-render` kuyruğuna otomatik iş eklenir.
|
||||
5. `video-render` (Python, `video_render.py`) yüz tespiti + yumuşatılmış
|
||||
dinamik crop ile 9:16'ya çevirir, transkriptten `.ass` altyazı üretip
|
||||
yakar, `/shared-media/shorts/<candidate_id>.mp4`'e yazar;
|
||||
`short_videos.status` `READY`/`FAILED` olur, Telegram'a bildirim gider.
|
||||
6. Panelde (`/`, `/segments`, kanal detay sayfaları) kanal durumu, ham
|
||||
segment/transkript ve render edilen 9:16 kısa videoları izle/indir.
|
||||
|
||||
## Bilinen Sınırlamalar (bu faz kapsamı dışı)
|
||||
|
||||
- LLM virality skorlama, metadata üretimi, telif/görüntü filtresi yok.
|
||||
- 9:16 crop/altyazı render motoru yok.
|
||||
- LLM virality skorlama, metadata üretimi, telif/görüntü filtresi yok —
|
||||
transkribe edilen her aday otomatik render edilir, eşik/filtre yok.
|
||||
- Çoklu konuşmacı / split-screen şablonu yok — sadece tekil konuşmacı
|
||||
(yüz-merkezli dinamik crop).
|
||||
- YouTube/Instagram/TikTok'a otomatik yayınlama yok (bu API'ler ayrı onay
|
||||
süreçleri gerektiriyor — `prd.md` tartışmasına bkz.).
|
||||
- Aday pencere çıkarımı her zaman tek bir 15dk'lık segment dosyasıyla sınırlı;
|
||||
|
||||
Reference in New Issue
Block a user