Skip to main content

CLI tool for searching YouTube/YTMusic and downloading audio/video from 1000+ platforms

Project description

fm-dlp — Download and tag music/video from YouTube, YTMusic, and 1000+ sites

Python PyPI License Platform Ruff

Download and tag high-quality music and video from YouTube, YouTube Music, and 1000+ sites — all from your terminal.

✨ Features

  • Multi-platform Search — YouTube, YouTube Music (tracks & albums)
  • 1000+ Supported Sites — Any site yt-dlp supports
  • Audio/Video Formats — MP3, FLAC, MP4, MKV, WebM, and more with configurable bitrate
  • Metadata Embedding — Title, artist, album tags + thumbnail (audio)
  • Proxy Support — HTTP, HTTPS, SOCKS4/SOCKS5/SOCKS5h
  • Cookie Support — Browser cookies for restricted content
  • Parallel Downloads — Async support for multiple URLs
  • Cross-platform Config — XDG, AppData, Application Support

🚀 Quick Start

Prerequisites

  • Python 3.10+ & FFmpeg

Installation

pip install fm-dlp        # pip
uv pip install fm-dlp     # uv
pipx install fm-dlp       # pipx

Usage

fm-dlp config ~/Music                          # Set download directory (first run)
fm-dlp search "artist" --platform yt-music     # Search tracks
fm-dlp search "album" --type album             # Search albums
fm-dlp download "URL" --codec mp3 --kbps 320   # Download audio
fm-dlp download "URL" --codec mp4              # Download video

📋 Commands

search — Find music

fm-dlp search <query> [--limit 10] [--platform yt-music|yt-video] [--type track|album] [--proxy URL]
Option Default Description
--platform yt-music Search platform: yt-music, yt-video
--type track Content type: track, album
--limit 10 Number of results
--proxy Proxy URL

download — Download audio/video

fm-dlp download <urls> [--codec CODEC] [--kbps 256] [--quiet] [--max-concurrent 5] [--cookies browser] [--proxy URL]
Option Default Description
--codec m4a/opus Audio: mp3, aac, flac, m4a, opus, vorbis, wav
Video: mp4, mkv, webm, mov, avi, flv
--kbps 256 Bitrate 64–320 (audio only)
--max-concurrent 5 Parallel downloads
--quiet Suppress output
--no-metadata Disable metadata embedding
--cookies Browser: chrome, firefox, edge, etc.
--proxy http://, socks5://, etc.

config — Set download path

fm-dlp config ~/Music    # Set directory
fm-dlp config             # View current path

Stored in: ~/.config/fm-dlp/ (Linux), ~/Library/Application Support/fm-dlp/ (macOS), %APPDATA%\fm-dlp\ (Windows).

📖 Examples

# Search
fm-dlp search "Sewerslvt" --limit 10 --platform yt-music
fm-dlp search "usedcvnt" --type album

# Audio
fm-dlp download "URL" --codec flac
fm-dlp download "URL1 URL2 URL3" --codec mp3 --kbps 320

# Video
fm-dlp download "URL" --codec mp4
fm-dlp download "URL" --codec mkv

# Advanced
fm-dlp download "URL" --cookies firefox
fm-dlp download "URL" --proxy socks5://127.0.0.1:9050
fm-dlp download "URL1 URL2 URL3 URL4 URL5" --quiet --max-concurrent 10

📁 Project Structure

fm-dlp/
├── fm_dlp/
│   ├── __init__.py          # Package initializer
│   ├── cli.py               # CLI entry point (cliss)
│   ├── commands/
│   │   ├── search.py        # YouTube & YTMusic search
│   │   └── download.py      # Async download engine (yt-dlp)
│   └── utils/
│       ├── configer.py      # JSON config manager
│       └── validator.py     # Input validation & dependency checks
├── pyproject.toml
├── README.md
└── LICENSE

🔧 Requirements

Dependency Purpose
yt-dlp YouTube extraction & download
ytmusicapi YouTube Music API
mutagen Audio metadata tagging
platformdirs Cross-platform config paths
color-kiss Terminal colors
cliss CLI framework
FFmpeg Audio/video conversion (system)

❓ FAQ

Why fm-dlp when yt-dlp exists?

fm-dlp wraps yt-dlp's complex flags into a clean workflow: search with readable output, download with a single --codec option, and automatic metadata tagging from structured music data — no memorising flag combinations.

macOS defaults to M4A, others to Opus — why?

macOS treats M4A/AAC as first-class (Finder, Music.app, QuickTime). Linux/Windows default to Opus for superior quality at equivalent bitrates. Override with --codec.

How does CLI parsing work?

Uses cliss — a zero-dependency wrapper over argparse with type-driven arguments and async support.

Proxy support?

Protocol Download Search (yt-video) Search (yt-music)
http://, https://
socks4://, socks5://, socks5h://

📄 License

MIT License — see LICENSE file.

🙏 Acknowledgments


Author: Fkernel653 Repository: github.com/Fkernel653/fm-dlp PyPI: pypi.org/project/fm-dlp

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fm_dlp-3.5.5.tar.gz (26.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fm_dlp-3.5.5-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file fm_dlp-3.5.5.tar.gz.

File metadata

  • Download URL: fm_dlp-3.5.5.tar.gz
  • Upload date:
  • Size: 26.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fm_dlp-3.5.5.tar.gz
Algorithm Hash digest
SHA256 2aaa0a9dfaf125231ee4dff4902ecee52338670c7ab9a1f5660f930ade0c6c86
MD5 18cff0b1de394c074fd6e6ea8c4a1efa
BLAKE2b-256 05154e945f284bdd6bcea35d371fdffbaba8b2af33ddfd17d64cacc0aa297da6

See more details on using hashes here.

File details

Details for the file fm_dlp-3.5.5-py3-none-any.whl.

File metadata

  • Download URL: fm_dlp-3.5.5-py3-none-any.whl
  • Upload date:
  • Size: 22.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fm_dlp-3.5.5-py3-none-any.whl
Algorithm Hash digest
SHA256 246767a0544e2ec56ebb884b3b206fc487c7a828f9c3912119a72e0ab31177a7
MD5 c54579220b5f84cbe1a340c964f9d040
BLAKE2b-256 9c969c022c9389e39c15b02c2993ee4cdc8d3e2aeb53b8c1edcff067e7172596

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page