➡ Click here to download the latest SpotD APK
Install: Settings → Apps → Special app access → Install unknown apps → allow your browser → open APK → Install
A professional local Spotify playlist + YouTube video downloader with a beautiful dark UI. No API keys, no login, no Premium required. Scrapes Spotify's public embed pages for track metadata, then downloads via yt-dlp. Built by Suyash Prabhu.
- Monorepo tool: pnpm workspaces
- Node.js version: 24
- Package manager: pnpm
- TypeScript version: 5.9
- API framework: Express 5
- Frontend: React + Vite (wouter, TanStack Query, shadcn/ui, Tailwind)
- Database: PostgreSQL + Drizzle ORM
- Validation: Zod (
zod/v4),drizzle-zod - API codegen: Orval (from OpenAPI spec)
- Build: esbuild (CJS bundle)
- Downloader: yt-dlp (installed at
.pythonlibs/bin/yt-dlp) - ZIP creation: archiver
artifacts/spotd— React + Vite frontend (preview at/)artifacts/api-server— Express API server (prefix/api)artifacts/spotd-mobile— Expo React Native mobile app (preview at/mobile/)
- Spotify playlist/album downloader (scrapes public embed, no API key)
- YouTube video downloader (360p–1080p)
- Quality selection: MP3 128/192/320 kbps, FLAC; video 360p–1080p
- Real-time per-track progress via polling (1.5s interval)
- Batch downloads zipped automatically
- Download history persisted to PostgreSQL
- Settings page (quality, chunk size, max songs, embed metadata)
- ZIP file served via
/api/downloads/:id/file - Auto-expiry: ZIPs expire 1hr after completion
artifacts/api-server/src/lib/spotify.ts— Spotify embed scraperartifacts/api-server/src/lib/ytdlp.ts— yt-dlp subprocess wrapperartifacts/api-server/src/lib/downloadManager.ts— Download session state + DBartifacts/api-server/src/routes/downloads.ts— Download CRUD routesartifacts/api-server/src/routes/settings.ts— Settings routeslib/api-spec/openapi.yaml— OpenAPI contractlib/db/src/schema/downloads.ts— DB schema (downloads + settings tables)
pnpm run typecheck— full typecheck across all packagespnpm run build— typecheck + build all packagespnpm --filter @workspace/api-spec run codegen— regenerate API hooks and Zod schemaspnpm --filter @workspace/db run push— push DB schema changes (dev only)
Installed at: .pythonlibs/bin/yt-dlp (Python 3.12, version 2026.03.17)
ffmpeg at: /nix/store/zpa9hwqagqkkagh1ky21l6xf41mfq933-replit-runtime-path/bin