Skip to main content

toolsx

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.
  • netis - Netis router administration CLI for status, Wi-Fi, WAN, devices, and WPS.
  • toolsx - list the installed tools and dispatch to a tool by name.

Install

pip install tools_extra

The package is published as tools_extra, but the installed CLI commands stay toolsx, ytm-dl, tg-uploader and netis.

From the repo:

python -m pip install .

Commands

Running toolsx prints the available tools:

toolsx

You can also dispatch through the umbrella command:

toolsx ytm-dl --help
toolsx tg-uploader --help
toolsx subtitle-extract --help
toolsx netis --help

Direct commands stay available too:

ytm-dl --help
tg-uploader --help
subtitle-extract --help
netis --help

subtitle-extract

subtitle-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
  • --lang skips the interactive language picker.
  • --type defaults to json.
  • --output defaults to <video-id>.<type>.
  • --cookies-file and --browser support videos that need authenticated subtitle access.
  • --js-runtime defaults to bun; use --js-runtime-path to point yt-dlp at a specific runtime binary.
  • If --lang is omitted, the tool shows available languages and prompts you to choose one.

ytm-dl

Public song or playlist

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_ID

Private playlists or library access

For 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 1

Useful flags

ytm-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-file uses a cookies.txt file instead of browser cookie extraction.
  • --browser and --browser-profile use cookies directly from a browser when needed.
  • --js-runtime defaults to bun; --js-runtime-path lets yt-dlp use an explicit runtime binary path.
  • --yes-all skips the first-song confirmation and downloads the whole playlist immediately.
  • --output-dir sets the base export directory; by default files go to ./[Album-Name].
  • --songs-limit defaults to all songs when omitted.
  • --lyrics-metadata fetches lyrics with timestamps and saves them into MP3 metadata.
  • --keep-original-audio skips MP3 conversion/tagging and keeps the downloaded source audio extension.
  • --mp3-bitrate controls MP3 conversion bitrate when MP3 conversion is enabled.
  • --debug enables verbose logs for lyrics, thumbnails, metadata, and full yt-dlp output.
  • --zip-max-size splits archives into .partNN.zip files once the source bytes per archive reach the limit.

If required input is missing in interactive mode, ytm-dl asks for it.

tg-uploader

tg-uploader accepts values from CLI args first, then environment variables, then prompts.

It supports both --file for a single upload and --files for multiple uploads from explicit paths or glob patterns.

Supported environment variables:

  • TOOLSX_TG_API_ID, TG_API_ID, TELEGRAM_API_ID
  • TOOLSX_TG_API_HASH, TG_API_HASH, TELEGRAM_API_HASH
  • TOOLSX_TG_BOT_TOKEN, TG_BOT_TOKEN, TELEGRAM_BOT_TOKEN
  • TOOLSX_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"
tg-uploader --files './exports/*'
tg-uploader --files './exports/*.mp3' './exports/*.flac'

Interactive mode also accepts glob patterns from the current directory. For example, entering (*) uploads all visible files in the current directory, and (*.mp3) uploads all matching MP3 files. If a pattern matches nothing, the command exits with an error.

Debug mode:

tg-uploader --file ./archive.zip --debug

netis

  • Example:
netis # Friendly TUI
netis --full-report
netis --wlan-info
netis --admin-password newpasshere
netis --internet-info
netis --devices-info
netis --wps-info
netis -h
  • Working with all netis Wi-Fi Routers, Models:

    • Wi-Fi 6: NX62, NX31, NX30, NX10, N6.
    • Wi-Fi 5: NC65, NC66, NC63, NC21, N2, N3F, WF2780, N5, N3D, and all other Wi-Fi 5 Routers.
    • Wi-Fi 4: WF2409E, WF2409PD, WF2419E, W1, W4, and all other Wi-Fi 4 Routers.
  • Tested on:

    • N3D with latest version V4.0.1.4296
    • WF2409E with latest version V4.0.1.4296

Local development

git clone https://github.com/z44d/toolsx
cd toolsx
python -m pip install -e .

Adding more tools

  1. Add the new module under src/.
  2. Register it in src/toolsx/registry.py so toolsx lists it.
  3. Add one console script entry under [project.scripts] in pyproject.toml.

Release workflow

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.

Metadata

Release files for tools-extra 1.0.2

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

Source distribution (sdist)

Source distribution for tools-extra 1.0.2
File Size Uploaded
tools_extra-1.0.2.tar.gz 36.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tools-extra 1.0.2
File Interpreter ABI Platform
tools_extra-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 73.4 kB

Release files / tools_extra-1.0.2.tar.gz

Download URL tools_extra-1.0.2.tar.gz
Size 36.5 kB
Tags Source
SHA-256 checksum
How to use checksums
a5d428ca34c7a91c8ac43322dad0685ee81b5c3e0e1fc5ad330a8ea8288b53cc
BLAKE2b-256 checksum
How to use checksums
51a78594ee1842d976492b06e18b071f0ca7104be0f4868ac6d9bf2608397dc1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.

Transparency log

Release files / tools_extra-1.0.2-py3-none-any.whl

Download URL tools_extra-1.0.2-py3-none-any.whl
Size 36.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1c80a2fc0e222abce66419576e22bdf6dc932aa8480cf8c9a4133b8495a70827
BLAKE2b-256 checksum
How to use checksums
32330cc2bbdcb553e34a5f37719c39246d92632dee69748e060e9df4316ced23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.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