- Yeni justmusic/web/i18n.js: kaynak-string cevirisi (gettext tarzi). Ic mantik/veri
TURKCE kalir (mood etiketleri, korumali liste adlari, durum eslesmeleri) — yalniz
GOSTERIMDE T() Ingilizce'ye cevirir. Boylece veri gocu yok, kutuphane bozulmaz.
- Sablon yedegi: exact anahtar yoksa degisken run'lar placeholder'a cevrilir —
"5 sarki" -> "{n} sarki" -> "5 songs"; "“Foo” silinsin mi?" -> "Delete “Foo”?".
- showToast(t) iceride T() uyguladigi icin tum toast'lar (Python dahil) otomatik cevrilir;
durum eslesmeleri (indexOf) Turkce kaynakta kaldigi icin bozulmaz.
- Ust bara dil secici (#langSel); secim settings.lang'e kaydedilir (setLanguage slotu),
acilista initFromState uygular. index.html statik metinler data-i18n / title / placeholder
ile applyStaticI18n'de cevrilir. Dil degisince gorunum + sidebar + sag panel + dile bagli
select'ler (tema/uyku) yeniden cizilir.
- app.js render literalleri T() ile sarildi (butonlar, menuler, basliklar, bos-durumlar,
komut paleti, karaoke menu, klip, stats, kisayollar, mood chip).
- Dogrulama: harness TR<->EN<->TR (statik kabuk, sidebar korumali adlar, sayisal sablon,
toast, effects/home/palet gorunumleri, sag panel, select'ler) hepsi cevriliyor, 0 JS hatasi.
🎵 Just Music Premium
Windows için profesyonel müzik çalar — Spotify tarzı QtWebEngine arayüzü + yerli DSP ses motoru (gerçek zamanlı EQ & efektler) + gömülü yt-dlp/ffmpeg + htdemucs stüdyo karaoke.
📸 Ekran Görüntüleri
Klip modu — ekranı kaplamaz, ana alana gömülür; zaman kodlu sözler klibin üstünde senkron akar:
Kalıcı mini oynatıcı — sekme değiştirince klip köşeye iner ve çalmaya devam eder (akış kesilmez):
⬇ İndir & Kur (Windows)
⬇ JustMusic-Setup.msi indir · Tüm sürümler · 🌐 Tanıtım sayfası
.msikullanıcı bazlı kurar (yönetici/UAC gerekmez); Başlat menüsü + masaüstü kısayolu ekler.- Otomatik güncelleme: uygulama açılışta GitHub'da yeni sürüm arar; varsa
.msi'yi arka planda sessizce indirir ve kapanışta kurup yeniden başlatır (istersen "Şimdi yeniden başlat" ile hemen). .msiGitHub Actions'ta bulutta derlenir (bkz..github/workflows/build.yml):v*etiketi push edilince ffmpeg/yt-dlp/deno indirilir, PyInstaller derler, WiX ile.msipaketlenir ve Release'e yüklenir.
🆕 v1.1.0
- 🌍 Dil desteği (TR + EN) — üst bardaki dil seçicisinden anında geçiş; seçim kaydedilir. İç veri (mood, korumalı liste adları) Türkçe kalır, yalnız arayüz çevrilir — kütüphanen bozulmaz.
🆕 v1.0.4
- 📃 Playlist toplu indirme — YouTube playlist URL'si → önizle, seç, X/Y sayaçlı toplu indir.
- ⬅➡ Geri / İleri gezinme — üst bardaki oklar artık görünüm geçmişinde dolaşıyor.
- Düzeltmeler: komut paletinden karaoke menüsü artık kapanmıyor; arama/akıllı-liste görünümünde yanlışlıkla sürükle-sırala kaldırıldı; indirme/ayırma bildirimleri üst üste binmiyor.
- Bakım: yt-dlp güncellendi (YouTube tarafı değişince indirmedeki HTTP 403 düzeldi).
📚 Geliştirici Belgeleri
docs/ altında — projeyi hızlı kavramak için:
Mimari · Köprü Sinyalleri ·
Bilinen Sorunlar · Geliştirici Rehberi + TR→EN sözlük.
Kod grafiği: graphify-out/ (graphify query "...").
🏗 Mimari
- Arayüz: HTML/CSS/JS (
justmusic/web/),QWebEngineViewiçinde render edilir → gerçek Spotify seviyesi görsel (gradyan başlıklar, kartlar, animasyonlar). - Ses & tüm mantık: yerli Python (
engine.pyDSP motoru,library.py,downloader.py,covers.py,naming.py). Arayüz ↔ Python QWebChannel köprüsüyle konuşur (bridge.py). - Sunucu / port YOK: her şey in-process. Varlıklar ve kapaklar özel
app://şemasıyla servis edilir (scheme.py). Eski pywebview sürümündeki port çakışması / sonsuz kilitlenme burada imkânsız.
✨ Özellikler
- Spotify düzeni: üstte arama, solda kütüphane (kapaklı çalma listeleri), ortada gradyanlı liste görünümü + sütunlu şarkı tablosu, sağda "çalınıyor" paneli, altta player bar, ana sayfa kartları, şarkı sözleri görünümü.
- Gerçek DSP ses motoru (numpy/scipy + sounddevice): 30 EQ preset + 10 bant özel EQ + 🤖 Oto EQ + efekt paneli (Preamp, Bass Boost, Echo, Reverb, 8D Spatial) — çalarken anında. Gerçek FFT görselleştirici.
- yt-dlp Python kütüphanesi + gömülü
ffmpeg.exe/deno.exe: kurulum gerekmez. Ara → 20 sonucu kapaklarıyla gör → satıra tıkla, anında insin (tek tık = tek indirme); dilersen checkbox ile seçip toplu indir; ya da bağlantı yapıştır → direkt mp3. - 📃 Playlist toplu indirme: YouTube playlist URL'si yapıştır → tüm parçalar kapaklarıyla önizlenir, seç ve indir; ilerleme X/Y sayacıyla gösterilir, hepsi "İndirilenler" listesine düşer. (v1.0.4)
- 🎤 Stüdyo karaoke (htdemucs / Demucs, YALNIZCA CPU): şarkıyı gerçekten
vokal + enstrüman olarak ayırır. Player'daki mikrofon düğmesi bir menü açar:
Enstrümantal (karaoke), Akapella (sadece vokal), ⚡ Hızlı karaoke
(anında mid-side, motor gerektirmez) ve Kapat. Ayrılan stem'ler
~/Music/JustMusic/stems/altında önbelleğe alınır → aynı şarkı bir daha ayrılmaz (anında geçiş). CPU'da ilk ayırma şarkı başına ~4-5 dk sürer, ilerleme gösterilir; geçiş çaldığın saniyeyi koruyarak yapılır. - Akıllı isim & kapak: dağınık MP3 adları temizlenip "Sanatçı - Başlık"a ayrıştırılır, bu temiz adla YouTube kapağı çekilir. "🖼 İsim & Kapak" ile toplu senkron.
- Otomatik kütüphane:
~/Musictaranır, her alt klasör bir çalma listesi. - Kuyruk (Sıradaki): sıraya ekle / sıradaki çal, kuyruk sayfası.
- Tam ekran "Şimdi Çalıyor": kapak renginden gradyan + canlı görselleştirici.
- İstatistik sayfası: toplam parça/liste/süre + en çok dinlenenler (grafik).
- Genel arama: kütüphanede anında arar (şarkı+liste), Enter → YouTube indirme.
- Kapak mozaiği (2×2), özel vurgu rengi seçici, gerçek şarkı süreleri (ffmpeg ile), indirme göstergesi, sürükle-bırak ile listeye ekleme, klavye kısayolları penceresi, alt bar mini görselleştirici.
- Premium tipografi: gömülü Sora (başlıklar) + Manrope (gövde) fontları.
🚀 Çağ açıcı (bize özel DSP) özellikler
- 🎙 Karaoke / Vokal Azaltma: gerçek zamanlı merkez-kanal iptaliyle vokali kısar.
- 🌈 Ruh Hali Motoru: sesin enerji + parlaklığını analiz edip parçanın "ruh halini" (Enerjik/Sakin/Güçlü…) bulur, isteğe bağlı arayüz rengini ona uydurur.
- 🌊 Şarkı DNA'sı: parçanın tüm dalga formu (SoundCloud tarzı) — tıklayarak seek.
- 🔁 A-B Döngü / Pratik Modu: iki nokta arasında döngü (öğrenmek/çalışmak için).
- 💡 Ambiyans Işığı: pencere kenarları müziğin rengi + bası ile titreşir.
- 🌊 Odak Sesleri: DSP ile üretilen yağmur / beyaz / kahverengi gürültü (müzikle veya tek başına — odak/uyku için).
- 🎬 Klip Modu (akış — indirme yok): alt bardaki film tuşu, çalan parçanın
klibini yt-dlp ile çözüp internetten oynatır (
playVideo→VideoStreamThread). Ekranı kaplamaz: Spotify gibi ana alana gömülür, kenar çubuğu + alt bar durur ve alt bar klibi sürer (oynat/duraklat, seek, ses). "Sese geç" ile müziğe dönülür — müzik varsayılan dinleme biçimidir. Zaman kodlu sözler varsa klibin üstünde senkron akar. YouTube'dan inen parçalarda kayıt birebir aynı olduğu için konum iki yönde devredilir (müziğin 40. sn'si → klip 40. sn'den).- Kalıcı mini oynatıcı: klip açıkken sekme/menü değiştirmek akışı KESMEZ — video, YouTube/Spotify gibi köşedeki bir mini oynatıcıya iner ve çalmaya devam eder; film tuşuna basınca yeniden büyür. Video/ses elementleri bir kez kurulup DOM'da yalnızca taşınır (yeniden yaratılmaz), böylece yt-dlp'yi her seferinde tekrar beklemek gerekmez.
- Not: QtWebEngine H.264/AAC oynatamaz ve YouTube muxed webm vermez → VP9 video + Opus ses ayrı akış olarak gelir ve arayüzde senkron tutulur.
Ayrıca: 3 durumlu tekrar, liste sıralama, kompakt mod, dosya konumunu aç,
kalp animasyonu ve daha fazlası. Ses işleme tamamen yerli DspEngine'de.
🎤 Otomatik şarkı sözleri (Lyrica API)
- Bir parça çalınca sözü yoksa otomatik olarak
Lyrica servisinden çekilir
(
/lyrics/?artist=…&song=…×tamps=true&fast=true). - Sözler zaman kodlu (LRC) gelir → satırlar çalarken senkron vurgulanır,
satıra tıklayınca o ana atlar. Sanatçı bilgisi yoksa önce
/suggestionile bulunur. - Sağ paneldeki "Getir" butonuyla elle de çekilebilir; kaynak (lrclib, Genius, Musixmatch…) bildirilir. Sözler kütüphaneye kaydedilir.
🧬 Daha da radikal (analiz + üretim)
- BPM/tempo tespiti, ses eşitleme (loudness normalize), spektrogram, zaman kodlu (LRC) şarkı sözleri senkronu, Komut Paleti (Ctrl+K), Ruh Hali Radyosu, reverb ortam presetleri (Oda/Salon/Katedral…), parça kırpma & dışa aktarma (A-B ile), akıllı çalma listeleri.
- Ayrıca: liste içi sürükle-sırala, özel liste kapağı, M3U dışa aktar, tekrarları kaldır, tümünü kuyruğa ekle, 12 tema, sıradaki önizleme.
🔧 İndirme mimarisi (ve düzeltmesi)
- Arama/indirme yt-dlp'nin PYTHON kütüphanesiyle yapılır (exe değil):
gerçek ilerleme kancaları, dönüşüm sonrası kesin dosya yolu
(
requested_downloads[].filepath) ve anlaşılır hatalar. - Modern yt-dlp, YouTube
nsigkorumasını çözmek için bir JS çalışma zamanı ister → Deno (bin/deno.exe) gömüldü;config.pybin/'i sürecin PATH'ine ekler, kütüphane Deno'yu otomatik bulur. - Sonuç: "sonuç bulunamadı / indirme başarısız" giderildi (gerçek müzik videosu indirmesiyle doğrulandı).
🎨 İkonlar
Emoji tuşlar FontAwesome (gömülü) ile değiştirildi — renk ve arka plan tema ile kontrol edilebilir.
- Sürükle-bırak, favoriler, künye düzenleme, listeler arası kopyalama, hız (0.5x–2x), ses boost (100+), uyku zamanlayıcı, 6 tema, JSON yedek.
- Klavye:
Boşluk·←/→10 sn ·↑/↓ses ·Skarışık ·Ltekrar ·N/P.
Veriler ~/Music/JustMusic/ altında (library.json, downloads/, covers/).
🛠 Kullanılan Araçlar
| Katman | Araç | Neden |
|---|---|---|
| Arayüz kabuğu | PyQt6 + PyQt6-WebEngine (QWebEngineView, QWebChannel) |
Chromium tabanlı web arayüzü + JS↔Python köprüsü, sunucusuz |
| Web arayüzü | Saf HTML/CSS/JS (framework yok) | Spotify seviyesi görsel, tam kontrol |
| Ses motoru | NumPy · SciPy (sosfilt, lfilter) · sounddevice |
Gerçek zamanlı DSP: EQ, efektler, karaoke, FFT — QMediaPlayer'ın yapamadığı |
| İndirme | yt-dlp (Python kütüphanesi) | İlerleme kancaları + kesin dosya yolu + anlaşılır hata |
| Kod çözme / MP3 | FFmpeg (gömülü ffmpeg.exe) |
Her biçimi f32 PCM'e çöz, mp3 dönüştür |
| JS çalışma zamanı | Deno (gömülü deno.exe) |
YouTube nsig korumasını çözmek için şart |
| Şarkı sözleri | Lyrica API | Zaman kodlu (LRC) senkron sözler |
| İkonlar | Font Awesome Free (gömülü, çevrimdışı) | SVG ikon — rengi/arka planı tema ile değişir |
| Tipografi | Sora + Manrope (gömülü) | Başlık + gövde fontları (latin-ext = Türkçe) |
| Paketleme | PyInstaller | Tek dist\JustMusic\ klasörü (WebEngine + bin + web gömülü) |
| Logo | OpenRouter → Google Nano Banana Pro (Gemini Image) | logo.png + logo.ico üretimi |
Ses tarayıcıda değil, tamamen yerli
DspEngine'de (sounddevice) çalınır; QtWebEngine yalnızca görseldir. Böylece EQ/efekt kalitesi ve "sunucu yok" garantisi korunur.
🧩 Kurulum & Çalıştırma
setup.bat REM .venv + bağımlılıklar (PyQt6, PyQt6-WebEngine, numpy, scipy, sounddevice, yt-dlp)
run.bat REM çalıştır
build.bat REM dist\JustMusic\JustMusic.exe üret (~880 MB; WebEngine+ffmpeg gömülü)
Gömülü ikili araçlar depoda yok (GitHub 100 MB/dosya sınırı). Çalıştırmadan önce
bin/klasörüne şunları koyun:ffmpeg.exe(indir),yt-dlp.exe(indir),deno.exe(indir). (yt-dlp Python kütüphane olarak darequirements.txtüzerinden kurulur;bin/'deki exe yalnızca yedektir.ffmpegvedenozorunludur.)
📁 Yapı
main.py # QtWebEngine giriş noktası (şema + köprü + pencere)
justmusic/
bridge.py # JS↔Python köprüsü (KONTROLÖR): ses, kütüphane, indirme, EQ
scheme.py # app:// özel şema (web varlıkları + kapaklar)
engine.py # DSP motoru (EQ+efekt+hız+FFT) — projenin kalbi
eqpresets.py # 30 EQ profili + bant/efekt tanımları
library.py # veri modeli + JSON + müzik klasörü tarama
downloader.py # yt-dlp PYTHON kütüphanesi ile indirme (+ffmpeg mp3)
covers.py # yt-dlp PYTHON kütüphanesi ile kapak arama/önbellek
naming.py # MP3 adı temizleme
config.py # yollar, gömülü bin/web çözümleme
web/ # index.html, app.css, app.js, qwebchannel.js + fontawesome/ + fonts/
assets/logo.png
bin/ffmpeg.exe bin/deno.exe bin/yt-dlp.exe # depoda YOK — kendiniz indirin (deno: nsig/JS çözümü)
docs/ # README ekran görüntüleri
setup.bat run.bat build.bat build.py requirements.txt
ℹ️ Not
Ses tarayıcıda değil, tamamen yerli DspEngine'de (sounddevice) çalınır;
QtWebEngine yalnızca görseldir. Hız artışı pitch'i değiştirir (nightcore); reverb
çok-taplı "oda" hissidir.


