iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Ü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.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
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.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.