Skip to main content

AI-driven terminal downloader: chat for songs/videos, get yt-dlp + ffmpeg + iTunes/LRCLib-tagged audio.

Project description

mindown-cli

Terminal version of mindown — chat with an OpenAI-compatible model to find and download songs / videos via yt-dlp, with automatic ID3 / iTunes-atom tagging (cover art + LRCLib lyrics) on every audio file.

mindown-cli preview

Requirements

  • Python 3.9+
  • yt-dlp on your $PATH (or supply a full path during setup)
  • ffmpeg on your $PATH (used for audio extraction and metadata write-back)
  • An OpenAI-compatible API key — works with OpenAI, OpenRouter, Groq, Together, Anthropic via gateway, local Ollama in OpenAI mode, etc.

On macOS:

brew install yt-dlp ffmpeg

Install

pip install -e .

This installs a mindown command. The package is pure stdlib — no extra Python deps are required.

First run

$ mindown
Welcome to Mindown CLI.
Chat-driven YouTube  mp3/mp4 downloader with iTunes + LRCLib tagging.

OpenAI-compatible API key: ********
Base URL [https://api.openai.com/v1]:
Model [gpt-4o-mini]:
yt-dlp path [/opt/homebrew/bin/yt-dlp]:
ffmpeg path [/opt/homebrew/bin/ffmpeg]:
Download directory [~/Downloads/Mindown]:
✓ Saved config to ~/.config/mindown-cli/config.json

The config is written to ~/.config/mindown-cli/config.json (or $XDG_CONFIG_HOME/mindown-cli/config.json) with mode 0600 because it holds the API key. Re-run setup with mindown --config.

How it works

  1. Your message is sent to the chat model along with two tool definitions:
    • search_youtube(query, limit) — runs yt-dlp ytsearch: and returns up to 10 candidate videos.
    • propose_downloads(items[]) — surfaces a list of {url, format, quality} proposals for you to approve.
  2. The model picks queries, fetches candidates, then proposes a list. You tick / un-tick items at the prompt; nothing downloads automatically.
  3. Approved items are downloaded sequentially with yt-dlp, with a live progress bar parsing yt-dlp's --progress-template output.
  4. For audio downloads, the file is run through a tagging pass:
    • iTunes Search API → title, artist, album, year, genre, track #, cover art (1200×1200), composer, copyright (via album lookup).
    • LRCLib → plain-text lyrics (USLT / ©lyr).
    • Optional AI lyrics fallback — when LRCLib has no match, ask the configured chat model for the lyrics and write them into the same USLT / ©lyr field. Off by default; opt in during first-run setup, with /ailyrics on in the REPL, or --ai-lyrics on the command line. Some models refuse on copyright grounds, in which case nothing is written.
    • ffmpeg rewrites the file in place with ID3v2.3 / iTunes atoms.

Slash commands

/help              show command list
/config            re-run setup
/show              print current config (API key redacted)
/reset             clear chat history
/dir <path>        change download directory
/model <name>      switch model
/tag on|off        toggle iTunes tag enrichment
/ailyrics on|off   toggle the AI lyrics fallback
/quit              exit

Use with AI agents

Just ask your AI agent:

install this skill: https://github.com/moerdowo/mindown-cli/blob/main/SKILL.md

The agent will fetch the skill file and figure out where to put it for its own runtime.

Notes

  • Audio defaults to MP3 best quality. Video defaults to MP4 1080p when asked for video; otherwise audio is chosen.
  • --no-playlist is enforced — paste a /watch?v=… URL inside a playlist and only that single video downloads.
  • yt-dlp's progress is parsed from a structured DL|... template line, so the progress bar is robust against locale formatting differences in the classic [download] output.
  • Output files are named %(title).200B [%(id)s].%(ext)s so duplicate titles do not clobber each other.

License

Personal-use utility, no warranty. yt-dlp and ffmpeg are redistributed under their respective licenses.

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

mindown-0.1.0.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

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

mindown-0.1.0-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

File details

Details for the file mindown-0.1.0.tar.gz.

File metadata

  • Download URL: mindown-0.1.0.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for mindown-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e72bb06e8fc5f7d8b8fc80b56055a651dca6a6f9aaf44032337763bf90f1e9b4
MD5 245a34ae5429a2272fe64b235587e75c
BLAKE2b-256 dc0e889f60437a194fdb92349255d400a680c7afa7c204dcc4a5090a9bc49203

See more details on using hashes here.

File details

Details for the file mindown-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mindown-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 24.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for mindown-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 390c152c429224e9a8c52190786bafbe9cef7f1ee8fc2dde54406e8d0f8b7868
MD5 436cb095c3b6e5e1fbb79c5a7d5b0ae0
BLAKE2b-256 9897f36f65e59a513a71216414becd21ec1161bf401366d52ca04209b3d2d76b

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