尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Download videos for free from all social media
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Premium multi-platform video downloader powered by yt-dlp. TikTok-first, with support for 1000+ platforms (Instagram, YouTube, X, Facebook, Reddit, Vimeo, SoundCloud and more).
Built with Next.js 15 (App Router), TypeScript, Tailwind CSS, Supabase, and Upstash Redis.
💙 Frenz Core — read this before building any feature. It is the mandatory
engineering foundation of the whole Frenzsave ecosystem: one backend, one identity, one cloud, one
security model, one design system. Every feature integrates with Frenz Core; nothing bypasses it.檢視完整 README ↗Premium multi-platform video downloader powered by yt-dlp. TikTok-first, with support for 1000+ platforms (Instagram, YouTube, X, Facebook, Reddit, Vimeo, SoundCloud and more).
Built with Next.js 15 (App Router), TypeScript, Tailwind CSS, Supabase, and Upstash Redis.
💙 Frenz Core — read this before building any feature. It is the mandatory engineering foundation of the whole Frenzsave ecosystem: one backend, one identity, one cloud, one security model, one design system. Every feature integrates with Frenz Core; nothing bypasses it.
server/services), repository-ready data access, SOLID-friendly separation.(app) layout (sidebar/topbar/modals render once; only content swaps → SPA-instant nav), content-only loading.tsx skeletons, SSR-seeded cached-first feed surfaces, and an SWR-style client cache (features/data). See docs/PERFORMANCE.md.features/social/inbox.ts).lib/storage, Supabase fallback) + optional Cloudflare Stream adaptive-bitrate video (lib/media/stream.ts, SmartVideo). See docs/INFRASTRUCTURE.md.This is Phase 1: a runnable foundation. See Roadmap for what's intentionally stubbed for later phases.
PATH (or set YTDLP_PATH)Install yt-dlp + ffmpeg:
# macOS
brew install yt-dlp ffmpeg
# Windows (winget)
winget install yt-dlp.yt-dlp
winget install Gyan.FFmpeg
# Linux
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
sudo apt-get install -y ffmpeg
npm install
cp .env.example .env.local # fill in values (Supabase/Upstash optional for first run)
npm run dev
Open http://localhost:3000. The downloader works without Supabase or Upstash configured — those add auth, history, and distributed rate limiting.
Create a project at supabase.com.
Run the migrations (Supabase CLI or SQL editor):
supabase db push
# or paste supabase/migrations/*.sql into the SQL editor in order
Copy your project URL + anon key + service role key into .env.local.
Enable the Google / GitHub providers under Authentication → Providers (Phase 2).
The schema lives in supabase/migrations/ and includes RLS, triggers (handle_new_user, bump_platform_stats), storage buckets, and a realtime publication on downloads.
The Docker image bundles yt-dlp + ffmpeg, which is the most reliable way to run the streaming download endpoint.
cp .env.example .env.local # production values
docker compose up --build
This starts:
| Service | Port | Role |
|---|---|---|
web | 3000 | Next.js standalone server |
redis | 6379 | local cache (use Upstash in prod) |
nginx | 80 | reverse proxy + per-IP rate limiting |
Vercel's serverless runtime has no yt-dlp/ffmpeg, so the heavy routes run
on a Docker worker and Vercel proxies to it. The same codebase plays both
roles, decided purely by env:
| Role | Where | Env |
|---|---|---|
| Frontend | Vercel | DOWNLOAD_WORKER_URL=https://<worker> + WORKER_SECRET |
| Worker | Fly.io / Railway / VPS (Docker) | DOWNLOAD_WORKER_URL blank + same WORKER_SECRET |
When DOWNLOAD_WORKER_URL is set, /api/metadata and /api/download forward to
the worker (sending the secret); when blank, the app does the real
extraction/download itself. The worker rejects requests without a matching
x-worker-secret.
Deploy the worker (Fly.io example):
fly launch --no-deploy # creates the app from fly.toml
fly secrets set WORKER_SECRET=$(openssl rand -hex 24) \
UPSTASH_REDIS_REST_URL=... UPSTASH_REDIS_REST_TOKEN=...
fly deploy # builds Dockerfile (yt-dlp + ffmpeg)
Then point Vercel at it (Project → Settings → Environment Variables):
DOWNLOAD_WORKER_URL=https://<app>.fly.dev, the same WORKER_SECRET, plus
the rest of .env.example. Redeploy.
Note: Vercel Hobby caps function duration at 300s, so the proxied download connection is capped there; full-length downloads still complete on the worker if the client talks to it directly, or upgrade the plan.
Single-host alternative: skip Vercel and deploy only the Docker image
(docker compose up) — everything works in one place.
app/ # App Router pages + route handlers + SEO (robots, sitemap)
api/ # metadata, download, health endpoints
components/ # Presentational UI (landing sections, layout chrome)
features/ # Feature modules (downloader: hook + UI)
lib/ # Cross-cutting utilities (platforms, validation, rate-limit, supabase)
server/services/ # Server-only service layer (yt-dlp wrapper)
supabase/migrations/ # SQL schema, RLS, triggers, storage, realtime
types/ # Shared domain types
middleware.ts # Supabase session refresh + /admin guard
See .env.example for the full annotated list. Highlights:
| Variable | Required | Purpose |
|---|---|---|
NEXT_PUBLIC_SITE_URL | ✅ | SEO / canonical / sitemap base |
NEXT_PUBLIC_SUPABASE_URL / _ANON_KEY | for auth | Supabase client |
SUPABASE_SERVICE_ROLE_KEY | for admin/cron | bypasses RLS — server only |
UPSTASH_REDIS_REST_URL / _TOKEN | prod | distributed rate limiting |
YTDLP_PATH | optional | path to yt-dlp binary |
Phase 1 (this foundation) ships the downloader, schema, landing page, and infra. Planned next:
/download/[platform])Download only content you own or have the right to save, and respect each platform's Terms of Service and applicable copyright law. This project is a tool; responsibility for its use lies with the operator and end users. A DMCA process and Terms/Privacy pages should be in place before public launch.