MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
A free, ad-free media downloader and converter. No ads. No accounts. Just downloads.
Translation pending
MediaTypeScript · CSSGitHub @caglarsapmazOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Ücretsiz ve reklamsız YouTube medya indirici/dönüştürücü. Next.js, TypeScript ve Cobalt ile geliştirildi; hesap ve indirme geçmişi gerektirmez.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Cliply — Ücretsiz Medya İndirici & Dönüştürücü Yapıştır. Seç. İndir. Next.js ile geliştirilmiş, reklamsız ve hesap gerektirmeyen bir medya indirme/dönüştürme aracı. Bir video linki yapıştırın, formatı seçin, dosyanızı alın. Cliply, kullanıcıların video linklerini yapıştırarak istedikleri formatta medya dosyası indirmelerini sağlayan, tamamen ücretsiz ve reklamsız bir web uygulamasıdır. Hesap oluşturmaya gerek yoktur, sunucu tarafında indirme geçmişi tutulmaz.Read the full README ↗
Yapıştır. Seç. İndir.
Next.js ile geliştirilmiş, reklamsız ve hesap gerektirmeyen bir medya indirme/dönüştürme aracı. Bir video linki yapıştırın, formatı seçin, dosyanızı alın.
Cliply, kullanıcıların video linklerini yapıştırarak istedikleri formatta medya dosyası indirmelerini sağlayan, tamamen ücretsiz ve reklamsız bir web uygulamasıdır. Hesap oluşturmaya gerek yoktur, sunucu tarafında indirme geçmişi tutulmaz.
next-themes ileyt-dlp + ffmpeg — indirme/dönüştürme dış bir servise bağımlı değil, Docker image'ına gömülü@upstash/ratelimit ile global sliding-window sayaç, yoksa local geliştirme için bellek içi (in-memory) fallbackMediaSource arayüzünü uygulamak ve registry'ye kaydetmekten ibaret| Katman | Tercih |
|---|---|
| Framework | Next.js 15 (App Router) |
| UI | React 19 |
| Dil | TypeScript (strict) |
| Stil | Tailwind CSS v4 — özel retro/paper/brütalist tasarım sistemi |
| Tema | next-themes (Sistem/Açık/Koyu) |
| i18n | Hazır bir framework yerine elle yazılmış hafif i18n katmanı (EN/TR) |
| Doğrulama | zod (env + request validation) |
| Rate limiting | Upstash Redis + @upstash/ratelimit, in-memory fallback ile |
| Medya işleme | yt-dlp + ffmpeg — süreç içinde (in-process), child process olarak |
| Çalışma ortamı | Node.js runtime, Docker container, Render'da deploy |
Cliply, yt-dlp'yi (muxing/encoding için PATH'teki ffmpeg ile birlikte) kendi container'ı
içinde doğrudan bir child process olarak çalıştırır — harici bir dönüştürme API'sine bağımlılık
yoktur. Native binary'ler ve uzun süren child process'ler serverless/Edge modeline uymadığı için
uygulama bir Docker web servisi olarak deploy edilir (bkz. aşağıdaki Render bölümü).
Kaynak (src/lib/sources) → URL'yi eşler, id çıkarır, metadata getirir
└── youtube.ts (varsa YouTube Data API v3, yoksa oEmbed fallback)
Dönüştürme (src/lib/conversion) → kanonik URL + format/kalite için yt-dlp'yi çalıştırır
└── ytdlp-client.ts job'a özel geçici dizine yazar, job-store.ts'e kaydeder
└── job-store.ts tek kullanımlık jobId → geçici dosya yolu, bellekte, TTL'li
└── concurrency.ts aynı anda kaç yt-dlp job'ı çalışabileceğini sınırlar (MAX_CONCURRENT_JOBS)
API rotaları (src/app/api) → /api/metadata, /api/prepare, /api/stream, /api/health
└── /api/prepare yt-dlp job'ını çalıştırır, jobId taşıyan bir downloadUrl döner
└── /api/stream geçici dosyayı tarayıcıya stream eder, sonra siler —
istek tamamlandığında diskte hiçbir şey kalmaz
Yeni bir kaynak (platform) eklemek, src/lib/sources içinde MediaSource arayüzünü uygulayıp
src/lib/sources/registry.ts dosyasına kaydetmekten ibarettir — istek akışındaki başka hiçbir şey
değişmez. Yeni format/kaliteler de kaynağın qualitiesFor() fonksiyonunda aynı desenle eklenir.
Video hiçbir zaman yeniden encode edilmez — format selector h264 (avc1) kaynak stream'i sabitler ve yalnızca remux/mux yapar, bu da küçük bir instance için ucuzdur. Sadece MP3 çıkarımı gerçek (ama audio-only, hafif) bir encode işlemi yapar.
Önemli — YouTube'un bot kontrolü: Render gibi paylaşımlı cloud sağlayıcıların IP'lerinden
gelen istekler YouTube tarafından sık sık "Sign in to confirm you're not a bot" hatasıyla
reddedilir; bu yt-dlp'nin player_client seçeneğiyle (android/ios/tv client'ları denenir)
her zaman aşılamaz. Kalıcı bir çözüm için YTDLP_COOKIES ortam değişkenine ayrı, feda
edilebilir bir hesabın YouTube oturum çerezlerini (Netscape cookies.txt formatında)
verebilirsiniz — bkz. .env.example. Bunu ana hesabınızla yapmayın: otomatik trafik o hesabın
YouTube tarafından kısıtlanmasına yol açabilir, ayrıca çerezler süreli olduğu için periyodik
olarak yenilenmesi gerekir.
Yerelde PATH'inizde yt-dlp ve ffmpeg gerektirir (macOS'ta brew install yt-dlp ffmpeg),
çünkü /api/prepare bunları doğrudan çalıştırır — hosted bir dönüştürme API'sinde olduğu gibi
bundle edilmiş bir fallback yoktur.
# Bağımlılıkları yükleyin
npm install
# Ortam değişkenlerini kopyalayın
cp .env.example .env
# Yerel olarak çalıştırın
npm run dev # http://localhost:3000
Her değişken hakkında detay ve nereden alınacağı için .env.example dosyasına bakın. Hepsi
opsiyoneldir:
| Değişken | Zorunlu mu? | Amaç |
|---|---|---|
MAX_CONCURRENT_JOBS | hayır (varsayılan 2) | Bu instance'ta aynı anda çalışabilecek yt-dlp dönüştürme sayısını sınırlar |
YTDLP_TIMEOUT_MS | hayır (varsayılan 120000) | Takılı kalan bir yt-dlp sürecini bu süre sonunda sonlandırır |
YTDLP_COOKIES | hayır (ama pratikte çoğu cloud sağlayıcıda gerekli) | YouTube'un bot kontrolünü aşmak için ayrı bir hesabın cookies.txt içeriği — bkz. Mimari bölümü |
YOUTUBE_API_KEY | hayır | Metadata'ya tam süre (duration) bilgisi ekler (oEmbed'de duration alanı yok) |
UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN | prod için önerilir | Kalıcı, çoklu-instance rate limiting |
NEXT_PUBLIC_SITE_URL | prod için önerilir | Kanonik URL / Open Graph etiketleri |
Docker web servisi olarak deploy edilir (Dockerfile + render.yaml), ücretsiz tier, VPS/sunucu
yönetimi yok:
render.yaml'ı okuyup cliply web servisini
oluşturur (Docker runtime, ücretsiz plan, /api/health üzerinden health check).
render.yaml
içinde sync: false olarak işaretlenenler otomatik doldurulmaz).Dockerfile'ı build eder (image'a yt-dlp + ffmpeg kurar) ve çalıştırır.Ücretsiz tier notları: instance 15 dakika hareketsizlikten sonra uykuya geçer (sonraki istek
bir soğuk başlangıç bedeli öder), RAM/CPU sınırlıdır — MAX_CONCURRENT_JOBS tam olarak eşzamanlı
dönüştürmeler altında instance'ın çökmesini önlemek için var. Gerçek trafik için buna güvenmeden
önce projenin kendi notlarına (Bilinen Sınırlamalar) bakın.
/api/metadata, /api/prepare ve /api/stream rotalarının tümü IP başına rate-limit'lidir
(src/lib/rate-limit.ts). Upstash yapılandırıldığında limitler, Redis üzerinde sliding-window
sayaç ile tüm serverless instance'lar genelinde uygulanır. Yapılandırılmadığında ise Cliply,
yalnızca tek bir çalışan instance'ı koruyan bellek içi bir sayaca düşer — local geliştirme için
yeterli, tek bölgeli bir production deployment için de makul ama kusursuz olmayan bir güvenlik ağı.
/api/prepare, dönüştürülen dosyayı job'a özel bir geçici dizine yazar; /api/stream bunu
doğrudan tarayıcıya stream eder ve istek bittiğinde (başarı, hata ya da bağlantının kopması
fark etmeksizin) dizini hemen siler. Bir çökme sonrası geride kalabilecek dizinler için
başlangıçta ayrıca bir temizlik taraması da çalışır.localStorage tabanlı yerel geçmiş bile
bilinçli olarak V1'e dahil edilmemiştir.YTDLP_COOKIES ayarlanmadan Render gibi paylaşımlı cloud IP'lerinde indirmeler YouTube'un
bot kontrolüne takılabilir (conversion_failed). Bu bir kod hatası değil, YouTube'un
datacenter IP'lerine karşı aldığı bir önlem — çözüm için Mimari bölümündeki not'a bakın.