explainroo
explainroo is a free, open source tool that lets your AI agent make explainer videos with a voice. It runs on your own computer and needs no API key.
翻訳待ち
リポジトリ情報はまだ収集していません。
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A private, password-protected video downloader in the style of SaveFrom: paste a YouTube, Instagram, Facebook or TikTok link, pick a quality, get an MP4 (H.264/AAC — plays everywhere) or MP3. For personal use only: one password, no accounts, no ads.
Live deployment: https://mediadock.vercel.app (password in your notes — it is not in this repo).
| Platform | On Vercel (cloud) | Running at home | Notes |
|---|---|---|---|
| ✅ | ✅ | Public reels and video posts. Private accounts, stories and photo posts aren't supported. | |
| ✅ | ✅ | Public videos, reels, fb.watch and share links. Facebook often serves VP9, which is re-encoded to H.264 (slower: ~1–2 min for a 1-min 1080p clip on Vercel). | |
| TikTok | ✅ | ✅ | Videos incl. vm.tiktok.com / vt.tiktok.com / tiktok.com/t/ share links. H.264 qualities are offered so nothing has to be re-encoded. |
| YouTube | ✅ via your home PC helper | ✅ | YouTube blocks every cloud/datacenter server ("Sign in to confirm you're not a bot"), so the live site hands YouTube links to a helper on your own PC. Works whenever that PC is on. See YouTube on the live site. |
Quality options come from what the platform actually offers (e.g. MP4 1080p / 720p / 480p / 360p / MP3);
sizes are the platform's own estimates, never made up. Finished files are deleted automatically after
FILE_TTL_MINUTES (default 60).
Browser ──► Next.js app ──► yt-dlp (metadata, download) ──► FFmpeg (merge / remux / convert) ──► file link
packages/core/src/media) is shared by both deployment modes:| Mode | Where | How a conversion runs | Use it for |
|---|---|---|---|
Standalone (MEDIADOCK_MODE=standalone) | One Next.js app — Vercel, or npm run dev at home | A streaming /api/convert request downloads + converts and sends live progress; the file goes to Vercel Blob (or a local temp folder) | The live site; easiest setup |
Self-hosted (MEDIADOCK_MODE=proxy) | Web + Fastify API + BullMQ worker + Redis + R2/S3 (Docker / Render) | Background jobs with retries, polling, signed links; also "convert a file you own" uploads | Long videos, uploads, heavier use |
| Path | Role |
|---|---|
apps/web | Next.js UI. In standalone mode it also hosts the API routes (lib/server/*, app/api/convert). |
apps/api, apps/worker | Self-hosted mode: REST API and the BullMQ/FFmpeg worker. |
packages/shared | Browser-safe contract: URL allowlist + platform detection, types, schemas, error catalogue. |
packages/core | yt-dlp + FFmpeg pipeline, platform adapters, config, auth tokens, storage, queue. |
Needs Node ≥ 22.12, FFmpeg and yt-dlp on your PATH (or set YTDLP_PATH).
npm install
cp apps/web/.env.example apps/web/.env.local # set ACCESS_PASSWORD
npm run build -w @vd/web && npm run start -w @vd/web # or: npm run dev:web
Open http://localhost:3000. To reach it from your phone while away, put a tunnel in front of it
(e.g. ngrok http 3000 or Cloudflare Tunnel) — the site stays password-protected.
Quick check of any links from the command line (same pipeline as the site):
npm run try -- "https://www.tiktok.com/@realmadrid/video/7707305867162570017" "https://youtu.be/…"
apps/web (leave "include files outside the root directory" on).BLOB_READ_WRITE_TOKEN).MEDIADOCK_MODE=standaloneACCESS_PASSWORD_HASH — from npm run hash-password (or ACCESS_PASSWORD for a quick test)SESSION_SECRET — 32+ random characters (node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))")apps/web/scripts/fetch-yt-dlp.mjs);
FFmpeg comes from ffmpeg-static. Redeploy every few weeks (or when a site stops working) to pick up a newer yt-dlp.Limits on Vercel (Hobby, all overridable via env): 300 s per conversion, input ≤ 400 MB, videos ≤ 30 min. Blob on Hobby includes limited free storage/transfer per month; files are deleted after an hour, so storage stays tiny.
YouTube refuses requests from cloud servers (tested from Vercel with every yt-dlp client: all blocked). So for YouTube the live site uses a home helper: the same app running on your PC, reached through a permanent ngrok address.
phone/laptop ─► mediadock.vercel.app ──(YouTube link + shared secret)──► your PC (home internet) ─► YouTube
▲ │ yt-dlp + FFmpeg
└──────────── live progress ◄────────────────────── ┘ finished file ─► Vercel Blob ─► download link
This is the beginning of the README. Read the rest at the original. Read the full README ↗