Barış Keser db1d0e6b5c v1.6.0: paralel indirme (3 escanli) + responsive player bar
- Paralel indirme: tek tek yerine MAX_DL_CONCURRENT=3 escanli indirme havuzu.
  active_downloads {thread: yuzde}, download_done sayaci, _pump_downloads havuzu
  doldurur, _emit_dl_progress toplam ilerleme + "X/Y (N etkin)" pill. THREAD-GUVENLI:
  sinyaller QObject-bagli slotlara gider (self.sender() ile thread bulunur) -> tum
  kuyruk/havuz mutasyonu + QThread olusturma ana thread'de; 0 Qt cross-thread uyarisi.
  Dogrulandi: sahte-thread testi peak=3, dogru sayac + reset.
- Responsive player bar: ikincil kontroller (klip/karaoke/ambiyans/kuyruk/soz) varsayilan
  olarak ⋯ tasma menusune katlanir (>=1500px satir ici acilir). Kontrol GIZLENMEZ.
  Boylece bar her genislikte sigar, tasip sayfayi yatay kaydirip sol kenar cubugunu
  ekrandan itmez ("sapitmaz"). Dogrulandi: 1600/1100/820px'te overflowX=0, sidebarX=8,
  ⋯ toggle, 0 JS hatasi. #pHeroBtn eklenince (v1.5.0) bar tasmisti; bu onu cozer.
2026-09-20 19:55:53 +03:00

Just Music Premium

🎵 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 + crossfade/gapless + Discord Rich Presence.

sürüm indir indirme platform python tanıtım

📸 Ekran Görüntüleri

Klip modu — ekranı kaplamaz, ana alana gömülür; zaman kodlu sözler klibin üstünde senkron akar:

Klip modu

Kalıcı mini oynatıcı — sekme değiştirince klip köşeye iner ve çalmaya devam eder (akış kesilmez):

Mini oynatıcı

⬇ İndir & Kur (Windows)

⬇ JustMusic-Setup.msi indir  ·  Tüm sürümler  ·  🌐 Tanıtım sayfası

  • .msi kullanı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).
  • .msi GitHub Actions'ta bulutta derlenir (bkz. .github/workflows/build.yml): v* etiketi push edilince ffmpeg/yt-dlp/deno indirilir, PyInstaller derler, WiX ile .msi paketlenir ve Release'e yüklenir.

🆕 v1.6.0 — paralel indirme + responsive player bar

  • ⚡ Paralel indirme: toplu indirmede artık aynı anda 3 parça iner (tek tek değil) — playlist toplu indirme çok daha hızlı. Pill toplam ilerlemeyi ve "X/Y (N etkin)" sayacını gösterir; thread-güvenli.
  • 📱 Responsive alt player bar: kontroller artık dar/orta pencerede taşmıyor (taşma sol kenar çubuğunu ekrandan itiyordu). İkincil kontroller (klip, karaoke, ambiyans, kuyruk, söz) bir ⋯ menüsüne katlanır; çok geniş ekranda satır içinde açılır. Her genişlikte yatay kayma yok.

🆕 v1.5.0 — merkez "Şimdi Çalıyor" (A+B karışımı)

  • 🎧 Merkez now-playing hero (Apple Music tarzı): çalan parça ana alanda büyük görünür — dev kapak solda (kapak-renginden blur backdrop), sağda başlık + geniş scrubber + iri transport + tek satır canlı söz. Alt player bar'daki 💿 düğmesi (ya da mini kapağa/parça adına tıkla, ya da komut paleti) ile açılır.
  • Tek motor saati: merkez hero'nun scrubber'ı ve alt bar aynı DSP saatinden beslenir — sapma yok; büyük kapağa/expand'a tıkla → theater (mini → merkez → tam ekran zoom merdiveni).
  • Tümüyle opt-in ve geri alınabilir: A'nın daraltılabilir rayı (v1.4.0) + bu B hero'su = A+B karışımı. prefers-reduced-motion saygılı, View-Transition kapak morph'u özellik-testli.

🆕 v1.4.0 — daraltılabilir kabuk

  • 📐 Daraltılabilir kenar çubuğu: üst bardaki ☰ ile kenar çubuğu tam (300px) ↔ ikon rayı (64px) arasında geçer — içeriğe daha çok yer. Daralınca nav ikonları ve çalma listesi kapakları kalır, üzerine gelince isimleri ipucu (tooltip) olarak görünür. Durum kaydedilir; kısayol B, komut paletinde de var.
  • 🪟 Kayan "Şimdi Çalıyor": sağ panel çağrılınca yumuşak kayarak gelir (Apple Music tarzı çekmece), prefers-reduced-motion saygılı.

🆕 v1.3.0 — kesintisiz geçiş + Discord

  • 🎚 Crossfade + boşluksuz (gapless) çalma: parçalar arasında eş-güçlü geçiş (0–12 sn) ya da sınırda boşluksuz devam. Sıradaki parça önden çözülür → geçişte tek saniye boşluk/tıkırtı kalmaz. Albüm, canlı kayıt ve DJ setleri için. Varsayılan kapalı; sıralı çalmada devreye girer.
  • 🎮 Discord Rich Presence: çalan parça + oynat/duraklat durumu Discord profilinde görünür (opsiyonel). Ayarlardaki alana kendi Discord Application ID'ni gir, toggle'ı aç (Discord açık olmalı).
  • Kontroller Efektler → "Geçiş & Discord" kartında (crossfade kaydırıcısı, gapless düğmesi, Discord). TR/EN.

🆕 v1.2.1 — theater modu

  • 🎭 Theater modu: tam ekran "Şimdi Çalıyor"da kapak solda, zaman kodlu sözler sağda yan yana; çalarken aktif satır vurgulanır (Apple Music tarzı sürükleyici görünüm).

🆕 v1.2.0 — modern görünüm

  • 🫧 Cam arayüz (glassmorphism): menüler, komut paleti, bildirimler, mini-oynatıcı ve alt player bar buzlu cam; arkasındaki içerik yumuşak blur'lü görünür.
  • 🎨 Kapak-renginden adaptif tema: çalan parçanın kapak rengi tüm arayüze (accent, görselleştirici, butonlar) yansır — okunabilir aralığa clamp'lenir; özel renk seçilince kapanır.
  • 🖼 "Şimdi Çalıyor" hero: sağ panel ve tam ekranda blurlu kapak arka planı (Apple Music tarzı immersive).
  • 🎤 Dinamik söz adası: yüzen cam söz penceresi — Enhanced-LRC ile kelime kelime (karaoke) vurgulanır, sürüklenebilir. I tuşu veya komut paletinden aç.
  • ✨ Hareket: kart/parça giriş animasyonu (kademeli), buton "spring" tepkileri.

🆕 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/), QWebEngineView içinde render edilir → gerçek Spotify seviyesi görsel (gradyan başlıklar, kartlar, animasyonlar).
  • Ses & tüm mantık: yerli Python (engine.py DSP 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: ~/Music taranı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.
  • 🎚 Crossfade + boşluksuz (gapless) geçiş: sıradaki parça önden çözülür; eş-güçlü eritme (0–12 sn) veya sınırda boşluksuz devam. (v1.3.0)
  • 🎮 Discord Rich Presence: çalan parçayı Discord profilinde göster (opsiyonel, Client ID ile). (v1.3.0)
  • 🎭 Theater modu: tam ekranda kapak + senkron sözler yan yana, aktif satır vurgulu. (v1.2.1)
  • 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=…&timestamps=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 /suggestion ile 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 nsig korumasını çözmek için bir JS çalışma zamanı ister → Deno (bin/deno.exe) gömüldü; config.py bin/'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 · S karışık · L tekrar · 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 da requirements.txt üzerinden kurulur; bin/'deki exe yalnızca yedektir. ffmpeg ve deno zorunludur.)

📁 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.

S
Description
🎵 Spotify tarzı QtWebEngine müzik çalar — yerli DSP ses motoru (EQ/efekt), htdemucs stüdyo karaoke, crossfade/gapless, Discord Rich Presence, cam arayüz + kelime-kelime söz adası, gömülü yt-dlp/ffmpeg, klip akışı, playlist toplu indirme, TR/EN, otomatik güncelleme (.msi). Windows.
Readme
2.4 MiB
Languages
Python 40.5%
JavaScript 35.2%
CSS 13%
HTML 11.1%
Batchfile 0.2%