尚未检测到更新。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.