Skip to main content

dailymotionx

PyPI version Python License: MIT OS

Download Dailymotion videos from episode pages or direct links — via CLI, Python API, or a local browser UI.

Designed for sites like myanime.live that embed Dailymotion players, but works with any page that contains a Dailymotion player URL, as well as direct dailymotion.com and dai.ly links.


Features

  • 🌐 Browser UI — launch a beautiful local web app (dailymotion ui), no terminal intimidation
  • ⌨️ Interactive CLI — guided prompts for URL and resolution using questionary + rich
  • 🔗 Episode page support — paste a myanime.live (or similar) URL and the Dailymotion embed is extracted automatically
  • 📺 All Dailymotion URL formats — embed, player, watch, short link
  • 🎞️ Merged MP4 output — video + audio merged to a single .mp4 via ffmpeg
  • 📊 Real-time progress — animated progress bar in the browser UI; rich progress in CLI
  • 🔔 yt-dlp update alerts — notifies you if a newer yt-dlp is on PyPI (never auto-updates silently)
  • 🩺 Doctor command — check all dependencies at a glance
  • 🖥️ Cross-platform — Windows, macOS, Linux; browser impersonation via curl-cffi
  • 🐍 Python API — import and use as a library in your own scripts

Requirements

Requirement Notes
Python ≥ 3.10
ffmpeg Must be on PATH — used for audio/video merge
yt-dlp Installed automatically as a dependency

Installing ffmpeg

Linux (Debian/Ubuntu)

sudo apt update && sudo apt install -y ffmpeg

macOS

brew install ffmpeg

Windows

winget install Gyan.FFmpeg

Or download from ffmpeg.org.


Installation

pip install dailymotionx

The dailymotion command will be available immediately after install.


Quick Start

Browser UI (recommended for beginners)

dailymotion ui

Opens a local web page automatically. Paste your URL, pick a resolution, click Download. That's it.

Interactive CLI

dailymotion

The CLI will prompt you for the URL and resolution.

One-liner

dailymotion "https://myanime.live/some-episode-page/" --resolution 720

CLI Reference

dailymotion download

dailymotion [download] [URL] [OPTIONS]

The download subcommand is the default — you can omit it entirely.

Option Default Description
URL (interactive prompt) Episode page URL or direct Dailymotion URL
-r, --resolution 720 Target resolution: 360, 480, 720, 1080, best
-o, --output-dir ~/Downloads Directory to save the MP4
-c, --concurrency 12 Number of parallel fragment downloads
--timeout 35 HTTP timeout in seconds
--non-interactive False Fail instead of prompting for missing inputs

Examples:

# Interactive (prompts for URL and resolution)
dailymotion

# Episode page URL
dailymotion "https://myanime.live/2026/04/19/battle-through-the-heavens-season-5-episode-195-english-sub/"

# Direct Dailymotion link
dailymotion "https://www.dailymotion.com/video/k4YiCNzUwtjazkFAmg2" -r 1080

# Save to specific folder, non-interactive
dailymotion "https://dai.ly/k4YiCNzUwtjazkFAmg2" -r best -o ~/Videos --non-interactive

dailymotion ui

dailymotion ui [--port PORT] [--no-browser]

Starts a local HTTP server and opens the browser UI automatically.

Option Default Description
--port 0 (auto) Port to listen on
--no-browser False Don't open the browser automatically

The UI features:

  • Real-time animated progress bar with phase indicators (Resolving → Video → Audio → Merging → Done)
  • Live speed and ETA display
  • Collapsible detailed log
  • yt-dlp update banner if a newer version is on PyPI
  • ffmpeg missing warning with install instructions

dailymotion doctor

dailymotion doctor [--upgrade-ytdlp]

Checks all runtime dependencies and prints their status:

╭────────────── Doctor ──────────────╮
│ Dependency check results           │
╰────────────────────────────────────╯
  - yt-dlp:     OK (available)
  - rich:       OK (available)
  - questionary:OK (available)
  - curl-cffi:  OK (available)
  - ffmpeg:     OK (available)

yt-dlp is up to date.
Option Description
--upgrade-ytdlp Run pip install --upgrade yt-dlp during this check

yt-dlp update notifications

dailymotionx checks PyPI for a newer version of yt-dlp at startup and prints a one-line notice if one is found. It never installs updates silently.

yt-dlp update available (2026.3.17 → 2026.6.1). Run: pip install --upgrade yt-dlp

Use dailymotion doctor --upgrade-ytdlp when you're ready to upgrade.


Supported URL Formats

Format Example
myanime.live episode page https://myanime.live/2026/.../episode-name/
Any page with embedded Dailymotion https://example.com/episode
Dailymotion watch link https://www.dailymotion.com/video/k4Yi...
Dailymotion embed https://www.dailymotion.com/embed/video/k4Yi...
Dailymotion geo player https://geo.dailymotion.com/player.html?video=k4Yi...
Short link https://dai.ly/k4Yi...

Python API

from pathlib import Path
from dailymotionx import DownloadRequest, download_episode

request = DownloadRequest(
    episode_url="https://myanime.live/2026/04/19/battle-through-the-heavens-s5-ep195-english-sub/",
    resolution="720",
    output_dir=Path.home() / "Downloads",
    concurrency=12,
    timeout_seconds=35,
)

result = download_episode(request)
print(f"Saved to: {result.output_file}")

Resolve only (no download)

from dailymotionx import resolve_episode_page, resolve_input_url

# From an episode page
dm_url = resolve_episode_page("https://myanime.live/some-episode/")
print(dm_url)  # https://geo.dailymotion.com/player.html?video=...

# From any supported URL (episode page or direct DM link)
dm_url = resolve_input_url("https://www.dailymotion.com/video/abc123")
print(dm_url)  # https://geo.dailymotion.com/player.html?video=abc123

Using progress hooks

def my_hook(d: dict) -> None:
    if d["status"] == "downloading":
        pct = d.get("downloaded_bytes", 0) / (d.get("total_bytes") or 1) * 100
        print(f"\r{pct:.1f}%", end="", flush=True)

result = download_episode(request, progress_hooks=[my_hook])

Output Files

Files are saved as:

{title} [{video_id}].mp4

Filenames are sanitised for cross-platform compatibility (restrictfilenames, windowsfilenames).

Output directory priority:

  1. --output-dir / output_dir argument
  2. ~/Downloads (if writable)
  3. Current working directory

Dependency Notes

Package Role
yt-dlp Video extraction and download engine
curl-cffi Browser-impersonating HTTP client (cross-platform TLS fingerprinting)
rich Beautiful terminal output
questionary Interactive CLI prompts
ffmpeg (system) Audio/video stream merging (must be installed separately)

curl-cffi enables browser TLS impersonation on all platforms — no manual setup needed beyond pip install dailymotionx.


Development

git clone https://github.com/shyamdarshanam/embed-downloader
cd embed-downloader
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

Run tests:

pytest

Lint:

ruff check src/

Type check:

mypy src/dailymotionx/

Build package:

python -m build
twine check dist/*

Publish to PyPI:

twine upload dist/*

License

MIT — see LICENSE.

Metadata

Release files for dailymotionx 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dailymotionx 0.2.1
File Size Uploaded
dailymotionx-0.2.1.tar.gz 30.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dailymotionx 0.2.1
File Interpreter ABI Platform
dailymotionx-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 56.8 kB

Release files / dailymotionx-0.2.1.tar.gz

Download URL dailymotionx-0.2.1.tar.gz
Size 30.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b7a691eca8d5e61e1d93c13b3f0b9211e35b6bae449adb366beeb0c6127af7fc
BLAKE2b-256 checksum
How to use checksums
2369007b105ffb08120279bd343eafa1a09fcfef9561f1f69e972abea76c111b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / dailymotionx-0.2.1-py3-none-any.whl

Download URL dailymotionx-0.2.1-py3-none-any.whl
Size 26.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f51249826104ecd5a9488ecacc25fded45e45ef8659d88bba697b9b3236ca9e6
BLAKE2b-256 checksum
How to use checksums
1a044f5f907fd7c00af2f9f025e7b4b7dbd9cf75132738f7432c3980bd24b2cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page