A full-featured video downloader & web scraper — makes a video from literally everything.
Give Mbedly a page URL and it will hunt down every embedded video on it, let you pick a quality (144p → 4K, or mp3), and download them all with a live progress bar. Fully cross-platform: Windows, macOS, Linux, and Android (Termux).
- 🔍 Scrapes any page and extracts every embedded video URL (YouTube, Facebook, LiviVideo, native
.mp4, HLS.m3u8). ▶️ YouTube — watch / youtu.be / embed / shorts / live URLs, with title & channel from oEmbed.- 📚 Mahara-Tech courses — dump every lecture of a course (cookie header support).
- 🎚️ Quality selection — 144p, 360p, 480p, 720p, 1080p, 2K, 4K, and mp3 audio.
- ⬇️ Batch mode — grab one video, several, or ALL at once.
- 🖥️ Textual dashboard — a btop/opencode-style full-screen TUI. No mouse required.
- 📱 Flutter app — a cross-platform UI (
flutter/mbedly_app) backed by the localmbedly-api; live progress, history, playlists. - 📜 Download history kept in
~/.mbedly/history.json. - 🧩 Clean engine layer (
mbedly.engine) — pure Python, reused by the dashboard, the JSON API, and the Flutter app.
Requires Python 3.9+, ffmpeg, and the
textualdependency (installed automatically).
git clone https://github.com/ammar0xff/Mbedly.git && cd Mbedly
./install.sh # Debian/Ubuntu, macOS, Termux, Git Bash / WSLor manually:
python -m pip install .
mbedly --help- Windows (native):
py -m pip install .(ffmpeg viawinget install ffmpeg) - macOS:
brew install ffmpeg && pip3 install . - Termux:
pkg install -y ffmpeg && pip install .
Dashboard (like btop / opencode):
mbedly # opens the full-screen dashboard on a terminal
mbedly --tui "URL" # open the dashboard with a URL already loadedDashboard keys:
Enteron the URL box analyses a page and shows every video with its real title (labels resolved automatically).↑/↓select a result,ddownloads it,adownloads all. Pick a quality (144p → mp3), watch live progress/speed, then hit download.?shows all shortcuts,rshows download history,q/Ctrl+Qquits,/focuses the URL box.
Direct command:
mbedly "https://www.youtube.com/watch?v=dQw4w9WgXcQ" # 1080p default
mbedly "URL" -q 720p # pick quality
mbedly "URL" -q mp3 # audio only
mbedly "URL" -q 1080p -n ALL -o ~/Videos # every video found
mbedly "https://maharatech.gov.eg/course/view.php?id=X" -c "cookie editor header"
mbedly -h # helpJSON API (the Flutter app's backend — stdlib only, runs anywhere Python does):
mbedly-api # http://127.0.0.1:8765
mbedly-api --port 9000 --host 0.0.0.0 # expose to LAN devices
curl http://127.0.0.1:8765/health
curl -X POST http://127.0.0.1:8765/scrape -H 'Content-Type: application/json' -d '{"url":"https://..."}'
curl -X POST http://127.0.0.1:8765/download -H 'Content-Type: application/json' -d '{"urls":["https://..."],"quality":"720p"}'Flutter app (reuses the engine through the API):
cd flutter/mbedly_app
flutter pub get && flutter run -d chrome # any device/web target- Scrape any page for embedded video links & download them
- YouTube (watch / embed / shorts / live) with metadata
- Playlist & serialized episode downloads
- Mahara-Tech course extraction (cookie support)
- Facebook, LiviVideo, native
.mp4, HLS.m3u8 - Cross-platform full-screen dashboard (Textual) with progress bars & download history
- JSON API (
mbedly-api) + Flutter app (flutter/mbedly_app) wired to it - CI —
pytest+flutter analyze+flutter test+flutter build webon GitHub Actions - Queue management + parallel downloads
- Udemy, Coursera, Alison password-gated course extraction
- Flutter: queue screen, resume/cancel, settings
pip install -e ".[dev]"
pytestDistributed under the MIT License.
Ammar Mohamed — ammar0xf@gmail.com
Project Link: https://github.com/ammar0xff/Mbedly