toolsx packages a small CLI toolbox with a few ready-to-use commands:
ytm-dl- download a single YouTube Music song or a full playlist as tagged MP3 files.tg-uploader- upload a file to Telegram with a bot session.subtitle-extract- extract video subtitles or auto-captions as UTF-8 JSON, SRT, or text.toolsx- list the installed tools and dispatch to a tool by name.
pip install tools_extraThe package is published as tools_extra, but the installed CLI commands stay toolsx, ytm-dl, and tg-uploader.
From the repo:
python -m pip install .Running toolsx prints the available tools:
toolsxYou can also dispatch through the umbrella command:
toolsx ytm-dl --help
toolsx tg-uploader --help
toolsx subtitle-extract --helpDirect commands stay available too:
ytm-dl --help
tg-uploader --help
subtitle-extract --helpsubtitle-extract uses yt-dlp metadata to inspect available subtitles, lets you choose a language when needed, and writes UTF-8 output as json, srt, or txt.
Examples:
subtitle-extract --url "https://www.youtube.com/watch?v=VIDEO_ID"
subtitle-extract --id VIDEO_ID --lang en --type srt
subtitle-extract --url "https://www.youtube.com/watch?v=VIDEO_ID" --lang ar --type txt --output ./captions.txt
subtitle-extract --url "https://www.youtube.com/watch?v=VIDEO_ID" --cookies-file ./cookies.txt --debug
subtitle-extract --url "https://www.youtube.com/watch?v=VIDEO_ID" --browser chrome --browser-profile Default
subtitle-extract --url "https://www.youtube.com/watch?v=VIDEO_ID" --js-runtime bun --js-runtime-path /opt/homebrew/bin/bun--langskips the interactive language picker.--typedefaults tojson.--outputdefaults to<video-id>.<type>.--cookies-fileand--browsersupport videos that need authenticated subtitle access.--js-runtimedefaults tobun; use--js-runtime-pathto point yt-dlp at a specific runtime binary.- If
--langis omitted, the tool shows available languages and prompts you to choose one.
No browser.json file is required for public URLs or IDs.
ytm-dl --url "https://music.youtube.com/playlist?list=PL..."
ytm-dl --url "https://music.youtube.com/watch?v=VIDEO_ID"
ytm-dl --id VIDEO_IDFor private playlists, liked songs, or library selection, create browser.json first with the ytmusicapi browser auth guide:
Then run:
ytm-dl --auth-file browser.json --library-index 1ytm-dl \
--url "https://music.youtube.com/playlist?list=PL..." \
--output-dir ./exports \
--yes-all \
--songs-limit 25 \
--lyrics-metadata \
--zip \
--zip-max-size 2000000000--cookies-fileuses acookies.txtfile instead of browser cookie extraction.--browserand--browser-profileuse cookies directly from a browser when needed.--js-runtimedefaults tobun;--js-runtime-pathlets yt-dlp use an explicit runtime binary path.--yes-allskips the first-song confirmation and downloads the whole playlist immediately.--output-dirsets the base export directory; by default files go to./[Album-Name].--songs-limitdefaults to all songs when omitted.--lyrics-metadatafetches lyrics with timestamps and saves them into MP3 metadata.--keep-original-audioskips MP3 conversion/tagging and keeps the downloaded source audio extension.--mp3-bitratecontrols MP3 conversion bitrate when MP3 conversion is enabled.--debugenables verbose logs for lyrics, thumbnails, metadata, and full yt-dlp output.--zip-max-sizesplits archives into.partNN.zipfiles once the source bytes per archive reach the limit.
If required input is missing in interactive mode, ytm-dl asks for it.
tg-uploader accepts values from CLI args first, then environment variables, then prompts.
Supported environment variables:
TOOLSX_TG_API_ID,TG_API_ID,TELEGRAM_API_IDTOOLSX_TG_API_HASH,TG_API_HASH,TELEGRAM_API_HASHTOOLSX_TG_BOT_TOKEN,TG_BOT_TOKEN,TELEGRAM_BOT_TOKENTOOLSX_TG_CHAT_ID,TG_CHAT_ID,TELEGRAM_CHAT_ID
Example:
export TOOLSX_TG_API_ID=12345
export TOOLSX_TG_API_HASH=your_api_hash
export TOOLSX_TG_BOT_TOKEN=123:token
export TOOLSX_TG_CHAT_ID=-1001234567890
tg-uploader --file ./archive.zip --caption "Nightly build"Debug mode:
tg-uploader --file ./archive.zip --debuggit clone https://github.com/z44d/toolsx
cd toolsx
python -m pip install -e .- Add the new module under
src/. - Register it in
src/toolsx/registry.pysotoolsxlists it. - Add one console script entry under
[project.scripts]inpyproject.toml.
The GitHub workflow at .github/workflows/publish.yml builds and publishes to PyPI on version tags like v0.1.0.
Before using it, configure PyPI trusted publishing for the repository or provide the required PyPI credentials in GitHub.