I Built a Python CLI Toolbox Instead of Writing One-Off Scripts A developer built Toolbox, an open-source Python CLI that bundles reusable file and image utilities including CSV-to-Excel conversion, image grayscale, blur and compression, and PDF compression. The project, created after completing the freeCodeCamp Python certification, uses uv for package management, argparse for command parsing, OpenPyXL for Excel handling, and Pillow for image processing, with a rasterization approach for shrinking PDFs that trades away searchable text. Whenever I ask an AI assistant to do a small task, it writes a quick Python script for me. Convert an image. Compress a PDF. Convert a CSV to Excel. The script works, I use it once, and then it disappears. At some point I thought: Why keep asking for one-off scripts when I could build my own reusable toolbox? So I did. Toolbox is a small Python CLI with utilities for the file and image tasks I keep needing — CSV ↔ Excel conversion, image grayscale/blur/compress, and PDF compression. Code here: GitHub Repository https://github.com/MehakB7/toolbox I had just finished the freeCodeCamp Python certification and wanted to use it for something instead of stopping at the certificate. My background is mainly Node.js, so this also turned into a tour of how Python projects differ from what I already know. The first thing I had to figure out wasn't Python syntax. It was package management. In Node I install with npm install , dependencies live in package.json , and versions lock in package-lock.json . In Python I first came across pip with requirements.txt — you install things, then freeze them into a file yourself with pip freeze requirements.txt . Coming from Node, generating a lockfile by hand felt backwards. Then I found uv , a modern Python package and project manager that handles project creation, dependencies, virtual environments and lockfiles. Most of it mapped straight onto what I already knew: | Node.js | uv | |---|---| | npm init | uv init | | package.json | pyproject.toml | | package-lock.json | uv.lock | | npm install