- PHP 92%
- Shell 6.3%
- CSS 0.9%
- JavaScript 0.8%
| app | ||
| assets | ||
| bin | ||
| database | ||
| deploy | ||
| public | ||
| scripts | ||
| storage | ||
| templates | ||
| tests | ||
| views | ||
| .gitignore | ||
| .htaccess | ||
| CHANGELOG-v0.3.md | ||
| CHANGELOG-v2.7.0.md | ||
| HOTFIX-v1.3.0-r3.md | ||
| HOTFIX-v1.5.0-r1.md | ||
| HOTFIX-v1.7.1-r1.md | ||
| install.sh | ||
| KULLANIM-v0.3.1.md | ||
| KULLANIM-v0.3.2.md | ||
| KULLANIM-v0.3.3.md | ||
| KULLANIM-v0.3.4.md | ||
| KULLANIM-v0.3.5.md | ||
| KULLANIM-v0.3.md | ||
| KULLANIM-v0.4.0.md | ||
| KULLANIM-v0.5.0.md | ||
| KULLANIM-v0.5.1.md | ||
| KULLANIM-v0.5.2.md | ||
| KULLANIM-v0.5.3.md | ||
| KULLANIM-v0.5.4.md | ||
| KULLANIM-v0.5.5.md | ||
| KULLANIM-v0.6.0.md | ||
| KULLANIM-v1.0.0.md | ||
| KULLANIM-v1.1.0.md | ||
| KULLANIM-v1.2.0.md | ||
| PATCH-NOTES-v0.3.1.md | ||
| PATCH-NOTES-v0.3.2.md | ||
| PATCH-NOTES-v0.3.3.md | ||
| PATCH-NOTES-v0.3.4.md | ||
| PATCH-NOTES-v0.3.5.md | ||
| PATCH-NOTES-v0.4.0.md | ||
| PATCH-NOTES-v0.5.0.md | ||
| PATCH-NOTES-v0.5.1.md | ||
| PATCH-NOTES-v0.5.2.md | ||
| PATCH-NOTES-v0.5.3.md | ||
| PATCH-NOTES-v0.5.4.md | ||
| PATCH-NOTES-v0.5.5.md | ||
| PATCH-NOTES-v0.6.0.md | ||
| PATCH-NOTES-v1.7.18.md | ||
| README.md | ||
| RELEASE-NOTES-v1.0.0.md | ||
| RELEASE-NOTES-v1.1.0.md | ||
| RELEASE-NOTES-v1.2.0.md | ||
| RELEASE-NOTES-v1.2.1.md | ||
| RELEASE-NOTES-v1.2.2.md | ||
| RELEASE-NOTES-v1.2.3.md | ||
| RELEASE-NOTES-v1.2.4.md | ||
| RELEASE-NOTES-v1.2.5.md | ||
| RELEASE-NOTES-v1.2.6.md | ||
| RELEASE-NOTES-v1.2.7.md | ||
| RELEASE-NOTES-v1.2.8.md | ||
| RELEASE-NOTES-v1.3.0.md | ||
| RELEASE-NOTES-v1.3.1.md | ||
| RELEASE-NOTES-v1.3.2.md | ||
| RELEASE-NOTES-v1.3.3.md | ||
| RELEASE-NOTES-v1.4.0.md | ||
| RELEASE-NOTES-v1.4.1.md | ||
| RELEASE-NOTES-v1.5.0.md | ||
| RELEASE-NOTES-v1.6.0.md | ||
| RELEASE-NOTES-v1.7.0.md | ||
| RELEASE-NOTES-v1.7.5.md | ||
| RELEASE-NOTES-v1.7.6.md | ||
| RELEASE-NOTES-v1.7.7.md | ||
| RELEASE-NOTES-v1.7.8.md | ||
| RELEASE-NOTES-v1.7.9.md | ||
| RELEASE-NOTES-v1.7.10.md | ||
| RELEASE-NOTES-v1.7.11.md | ||
| RELEASE-NOTES-v1.7.12.md | ||
| RELEASE-NOTES-v1.7.13.md | ||
| RELEASE-NOTES-v1.7.14.md | ||
| RELEASE-NOTES-v1.7.15.md | ||
| RELEASE-NOTES-v1.7.16.md | ||
| RELEASE-NOTES-v1.7.17.md | ||
| RELEASE-NOTES-v1.7.20.md | ||
| RELEASE-NOTES-v1.7.21.md | ||
| RELEASE-NOTES-v1.7.23.md | ||
| RELEASE-NOTES-v1.7.24.md | ||
| RELEASE-NOTES-v2.2.0.md | ||
| RELEASE-NOTES-v2.2.1.md | ||
| RELEASE-NOTES-v2.2.6.md | ||
| RELEASE-NOTES-v2.2.9.md | ||
| RELEASE-NOTES-v2.2.11.md | ||
| RELEASE-NOTES-v2.2.12.md | ||
| RELEASE-NOTES-v2.3.0.md | ||
| RELEASE-NOTES-v2.3.1.md | ||
| RELEASE-NOTES-v2.4.3.md | ||
| RELEASE-NOTES-v2.4.4.md | ||
| RELEASE-NOTES-v2.4.7.md | ||
| RELEASE-NOTES-v2.4.9.md | ||
| RELEASE-NOTES-v2.4.10.md | ||
| RELEASE-NOTES-v2.4.11.md | ||
| RELEASE-NOTES-v2.4.12.md | ||
| RELEASE-NOTES-v2.4.13.md | ||
| RELEASE-NOTES-v2.4.14.md | ||
| RELEASE-NOTES-v2.4.15.md | ||
| RELEASE-NOTES-v2.5.0.md | ||
| RELEASE-NOTES-v2.6.0.md | ||
| RELEASE-NOTES-v2.6.1.md | ||
| RELEASE-NOTES-v2.8.0.md | ||
| RELEASE-NOTES-v2.8.1.md | ||
| TEMPLATE-CATALOG-v0.5.0.md | ||
| TEMPLATE-CATALOG-v0.5.1.md | ||
| TEMPLATE-CATALOG-v0.5.2.md | ||
| TEMPLATE-CATALOG-v0.5.3.md | ||
| TEMPLATE-CATALOG-v0.5.4.md | ||
| TEST-PLANI-v1.0.0.md | ||
| TEST-PLANI-v1.1.0.md | ||
| TEST-PLANI-v1.2.0.md | ||
| TEST-PLANI-v2.2.6.md | ||
| TEST-PLANI-v2.2.11.md | ||
| TEST-PLANI-v2.2.12.md | ||
| TEST-PLANI-v2.3.0.md | ||
| TEST-PLANI-v2.3.1.md | ||
| TEST-PLANI-v2.4.0.md | ||
| TEST-PLANI-v2.4.15.md | ||
| TEST-PLANI-v2.5.0.md | ||
| TEST-PLANI-v2.6.0.md | ||
| VERSION | ||
Murat Playlist Studio v2.8.1
v2.8 — On slot, eskilik önceliği ve AudioMuse anchor eğitimi
- Otomatik portföy tavanı ve güçlü kullanıcı hedefi 10 listeye yükseltildi; seçimde en az dört genre/style adayına öncelik verilir.
- Jellyfin'de son yayından sonra değiştirilen listeye dokunulmaz. Liste korumaya alınır, otomatik slot hesabından çıkarılır ve sonraki güçlü mix için curator hemen uyandırılır.
- 3 günlük kesin dinleme yasağı korunur. Yasak dolduktan sonra AudioMuse uyumlu adaylarda dinlenme tarihi en eski olanlar, harmonic/energy/transition akışı bozulmadan ek puan alır.
anchors:train, pozitif kullanıcı kanıtından pop, rock, rap, folk, Karadeniz, arabesk/fantezi, elektronik ve caz/soul rafları için güvenilir AudioMuse anchorları öğrenir; manuel anchorları silmez.
v2.7 — Tüm otomatik listelerde Managed Living
- Bütün otomatik managed playlistler 40 parçalık oluşturulur.
- Jellystat'ta pozitif playback görülen parça ek grace beklemeden, yalnız etkilenen kullanıcı taranarak onu içeren bütün active managed listelerden düşer.
- Liste 20–40 aralığındayken aynı listeyi tamamlamak için AudioMuse preview/refill işi üretilmez.
- Canlı Jellyfin içeriği 20 parçanın altına düştüğünde yarış koşulu yeniden doğrulanır; eski liste kaldırılır, aynı şablon varsayılan 24 saatlik cooldown'a alınır ve boş slot mevcut kalite/çeşitlilik/UserBrain kapılarıyla farklı güçlü adaydan yeniden 40 parçalık kurulur.
- UserBrain v3, 3 günlük tekrar engeli, skip/ret hafızası, origin/fingerprint/overlap ve yayın öncesi güvenlik kapıları değiştirilmemiştir.
- Yükseltme taramaları kullanıcı başına 30 saniye stagger edilir. Jobs, publication, lifecycle, audit, Living event, exposure ve öneri hafızası geçmişleri mevcut seyrek maintenance işleminde bounded tutulur; yeni timer veya sürekli global tarama eklenmez.
v2.3.1 kurulum hotfixi: v2.3.0 paketindeki
tests/smoke.phpyanlışlıkla eski schema27değerini bekliyordu. Üretim şeması v2.3 için28'dir. v2.3.1 yalnız bu kurulum kabul testini ve sürüm kimliğini düzeltir; Taste Drift algoritması/değerleri değişmez.
Living Recommendation Engine: Jellystat tüketim ledgerı + AudioMuse sonik uzayı üzerinde üç zaman ufuklu UserBrain, öğrenilmiş transition graph, adaptif keşif kişiliği ve davranışsal playlist kalite geri beslemesi. Öğrenme canlıdır; Jellyfin playlist yayını mevcut güvenlik kapılarıyla kontrollüdür ve istemci playback kuyruğuna müdahale edilmez.
v2.3 — Taste Drift / yaşayan mix rafı
v2.3 ile parça tüketimi ile mix yaşam döngüsü ayrılır. Kullanıcı managed listeleri hiç açmasa bile Jellyfin'de arama, sanatçı, albüm veya kendi playlistlerinden yaptığı gerçek playback UserBrain'i değiştirir. TasteDriftService, mevcut beyni drift episode başlangıç baseline'ı ve her managed listenin son başarılı yayın baseline'ı ile karşılaştırır.
drift < 0.12: stabil; rafı oynatma.drift >= 0.12+ en az 8 yeni playback: moderate; en az 4 saatlik uygun managed mix, 18 saatlik normal refresh'i beklemeden içerik yenileme adayı olabilir.drift >= 0.22+ en az 12 playback + 2 ayrı 90 dakikalık davranış dönemi + kalıcılık: strong; portföy challenger hysteresis'i kontrollü olarak 3.5 puana iner.drift >= 0.34+ en az 10 playback: major; en az 4 saatlik incumbent için challenger hysteresis'i 2.5 puana iner.- Bir değerlendirmede en fazla 1 mix kimliği değişebilir. Strong/major rotasyon sonrası drift episode anchor'ı yenilenir; tek bir dinleme patlaması 7 listenin tamamını döndüremez.
- Kullanıcının saat/daypart bağlamı ranking'de kalır ama tek başına global drift sayılmaz. Sabah→akşam geçişi rafı sebepsiz değiştirmez.
- Başarılı create/update/noop publication UserBrain baseline'ını yeniler. Consumption/session prune baseline'ı sıfırlamaz.
- v2.2.12 multi-wave 7/7 guaranteed refill, 3 günlük tüketim yasağı, fingerprint/origin/quality ve %35 gerçek Jellyfin overlap kapıları aynen korunur; fiziksel prune v2.7'de anlıktır.
Canlı durum:
php bin/console recommendation:drift USER_ID
v2.2.12, 6/7 portföyde art arda 7/40 needs_review preview üretilmesiyle görülen refill çıkmazını düzeltir. Önceki motor genişlemeyi yalnız ranked_candidates sayısına göre açtığı için gerçek seçim; portföy overlap, sonik cluster/work cap ve keşif kotaları sonrasında daralsa bile yeni AudioMuse dalgası başlamayabiliyordu. Yeni motor genişlemeyi doğrudan gerçek selected_count eksikliğine bağlar ve güvenli multi-wave AudioMuse araması uygular. Balanced-contrast UserBrain ve kronolojik backtest eşikleri korunur.
v2.2.12 refill politikası
Bir 40 parçalık preview gerçek seçimden sonra eksik kalırsa motor aynı düşük havuzu tekrar üretmez. Sırasıyla ikinci davranış seed dalgası, daha geniş davranış dalgası, altı öğrenilmiş AudioMuse zevk bölgesini round-robin gezen seed dalgası ve yalnız güçlü profil boş slotundayken kalibre AudioMuse zevk-bölgesi katalog rescue uygulanır. Katalog rescue yalnız gerçek sonik bölge benzerliği >=0.76 olan adayları açar. Son 3 günlük tüketim, tekrar/fingerprint, köken saflığı ve gerçek portföy overlap sınırları hiçbir dalgada gevşetilmez.
v2.2 öneri mimarisi
- UserBrain: uzun dönem 365 gün, orta dönem 45 gün, kısa dönem 72 saat. Sonik tercihler aynı ortalamaya ezilmez; ayrıca son 120 günden kullanıcıya özgü sabah/gündüz/akşam/gece ve hafta içi/hafta sonu davranış bağlamı öğrenilir.
- Canlı kanıt: authoritative
consumption_ledger, HistoryService gecikse bile daha yeni Jellystat playback olayını kısa dönem beyine taşır. - Tüketim / zevk ayrımı: Jellystat'ta 1+ saniye playback tüketimdir; 7 saniyelik skip 3 günlük blok oluşturur ve ayrıca negatif tercih kanıtıdır. Uzun/tam dinleme pozitif tercih kanıtıdır.
- Aday üretimi: kişisel/favori/tamamlama seed'leri ve farklı zevk bölgeleri AudioMuse komşuluklarından geniş aday havuzu üretir; gerektiğinde ikinci dalga kişisel expansion seed'leri açılır.
- Unified ranking: AudioMuse yakınlığı + uzun/orta/kısa UserBrain + kişisel gün/saat bağlamı + template amacı + transition + adaptif keşif + davranış/tazelik/çeşitlilik birlikte puanlanır.
- Transition Graph: ardışık sonik kümelerde kabul edilen ve skip edilen geçişleri öğrenir; sıra yalnız tekil parça puanına göre kurulmaz.
- Davranışsal kalite: exposure kanıtı olan playlistlerin complete/partial/skip sonuçları 90 günlük pencerede öğrenilir ve portföy seçiminde güvene göre geri beslenir.
- Adaptif keşif: kullanıcıya göre keşif hedefi güvenli %8–%35 bandında değişir.
Canlı öğrenme, kontrollü yayın
- Otoriter Jellystat taramasının primary heartbeat’i uzun yaşayan consumption worker içinde her 60 saniye son 2 saati overlap ederek okur; her 10 dakikada son 3 gün tamamen doğrulanır. Fiziksel Jellyfin temizliği yalnız süresi gelen kullanıcıda çalışır. Ayrı systemd timer 5 dakikada bir heartbeat kontrolü yapar ve ana worker sağlıklıysa işlem yapmadan çıkar.
- 60 saniyelik worker ağır model kurmaz; yalnız değişen kullanıcıyı
dirty=1işaretler. - Ayrı bounded learner en fazla 2 dirty kullanıcıyı 3 dakikada bir, non-blocking lock +
Nice=12+ idle IO ile işler. - Yeni event model rebuild sırasında gelirse race-safe dirty bayrağı korunur.
- Yeni preview/yayın 3 günlük tüketim ledgerını fail-closed okur. Tüketilmiş parça yeni listeye geri giremez.
- Fiziksel managed-list prune ek grace beklemeden yapılır ve parça kullanıcının onu içeren tüm active managed listelerinden çıkarılır.
- Mobil/web Jellyfin player queue'suna canlı ekleme yapılmaz.
Strict acceptance
Kurulum fixture testlerine ek olarak üretim için:
cd /var/www/html/araclar/playlists
sudo ./scripts/v24-strict-acceptance.sh USER_ID
Tek kullanıcıya daraltmak için:
sudo ./scripts/v24-strict-acceptance.sh 873d2b1f8272488f866f382e3192e9fd
Bu kabul kapısı Taste Drift kontrol düzlemi dahil full 3 günlük reconcile, production source-readiness, UserBrain freshness, portföy/kalite/overlap sınırları, anlık gerçek Jellyfin prune, 20-parça Living devir tabanı ve kritik timer/worker sağlığını kontrol eder. Son 120 güne kadar geçmişi kronolojik %80 eğitim / %20 holdout ayıran kişisel kalite backtesti de korunur; warn strict acceptance için PASS sayılmaz.
Motor ve migration
- Schema:
33 - Profil motoru:
behavior-profile-5.2-userbrain-v3-ratio-aligned - UserBrain:
user-brain-3.0-ratio-rejection-channel-memory - Recommendation engine:
recommendation-engine-3.0-feedback-memory - Preview motoru:
preview-8.2-userbrain-v22-multiwave - Portföy motoru:
dynamic-portfolio-14-ten-slot-style-diversity - Taste Drift:
taste-drift-2.3.0-hysteresis-v1 - Otoriter tüketim:
consumption-ledger-2-any-jellystat-play-3d - v2.2 yükseltmesinde eski türetilmiş match/map ve v1.x preview kararları geçersizleştirilir; raw Jellyfin/Jellystat/AudioMuse kanıtı ve publication geçmişi korunur.
Kurulum / yükseltme
rm -rf /tmp/mps-v280-install
mkdir -p /tmp/mps-v280-install
tar -xzf /home/muratca61/murat-playlist-studio-v2.8.1.tar.gz \
-C /tmp/mps-v280-install
cd /tmp/mps-v280-install/murat-playlist-studio-v2.8.1
sudo ./install.sh
Kurulum sonunda VERSION değeri 2.8.1 olmalıdır. Ardından strict acceptance tek komutla üretim gerçeğini doğrular.
Global chartlar
- Genel Top 100: son 90 gün, tüm kullanıcılar.
- Haftalık Top 20: 90 günlük temel + son 7 gün ve trend.
- Reserved chart isimleri singleton'dır; duplicate chartlar uzlaştırılır.
Strict production kabulü ayrıca panelin OTOMATİK ve WORKER ON olmasını zorunlu tutar; öğrenme çalışsa bile otomatik yayın kapalıyken sistem hedeflenen üretim durumunda PASS sayılmaz.