A personal developer toolkit — a collection of everyday utilities wrapped in a single desktop app. Built with Python and CustomTkinter.
| Tool | What it does |
|---|---|
| Compressor | Compress images (Pillow) and videos (ffmpeg) with adjustable quality, resolution, and format options. One-click export to open output files/folders. |
| Images to PDF | Combine multiple images into a single PDF. Drag to reorder, configure page size, orientation, and margins. |
| File Converter | Convert between document formats (DOCX, PDF, TXT, XLSX, CSV, PPTX, HTML, Markdown) and image formats (PNG, JPEG, WebP, BMP, ICO, TIFF, GIF). |
| YouTube Downloader | Download videos and audio from YouTube via yt-dlp. Supports playlist downloads, resolution selection, and audio-only extraction. |
Coming soon
- Python 3.10+
- ffmpeg — required for video compression and YouTube audio extraction. Install via
winget install Gyan.FFmpegor download from ffmpeg.org. - Microsoft Office (optional) — enables higher-fidelity DOCX/PPTX/XLSX → PDF conversion through COM automation. Without it, a pure-Python fallback is used.
# Clone the repo
git clone https://github.com/azannw/devtools.git
cd devtools
# Create a virtual environment (recommended)
python -m venv venv
venv\Scripts\activate
# Install dependencies
pip install -r requirements.txtpython main.pydevtools/
├── main.py # App shell — sidebar navigation, tool registration
├── requirements.txt # Python dependencies
├── tools/
│ ├── compressor.py # Image & Video Compressor
│ ├── img_to_pdf.py # Images to PDF
│ ├── file_converter.py# File Converter
│ └── yt_downloader.py # YouTube Downloader
└── utils/
└── theme.py # Shared color palette, fonts, and widget factories
| Package | Purpose |
|---|---|
| customtkinter | Modern Tkinter UI framework |
| Pillow | Image processing |
| fpdf2 | PDF generation |
| python-docx | DOCX read/write |
| openpyxl | XLSX read/write |
| python-pptx | PPTX support |
| pypdf | PDF text extraction |
| pdf2docx | PDF → DOCX conversion |
| markdown | Markdown → HTML |
| comtypes | Windows COM automation (Office) |
| yt-dlp | YouTube downloads |
- Create a new file in
tools/with a class that extendsctk.CTkFrame. - Import and register it in
main.pyinside_register_tools(). - Add a nav entry to
nav_itemsin_build_sidebar().
That's it — the sidebar and content switching handle the rest.
MIT