A personal toolbox of standalone, numbered utilities for systems, networking, DevOps, security, automation, media, firmware, and everyday problem-solving. Each tool lives in its own directory with its own README, scripts, and dependencies, so you can copy or use any single one without the rest of the repo.
- Python 94.5%
- Shell 5.4%
- Dockerfile 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Builds a complete icon set from one PNG logo: the logo at twelve sizes on transparent, black and white backgrounds, favicon.ico and PNG favicons, Apple touch icons, PWA and maskable Android icons, a Windows tile, Open Graph cards, site.webmanifest and browserconfig.xml. The logo is trimmed, its alpha haze cleaned, and centred with a margin suited to each use. A README in the output folder lists every file with its size, the settings and the <head> tags. Every output is rebuilt from pixel data. Only chunks that change how the pixels display are carried over (iCCP, sRGB, gAMA, cHRM, cICP, pHYs); C2PA credentials, EXIF, XMP and other text, timestamps and private chunks are dropped, as is anything after IEND. Each PNG written is re-read and checked chunk by chunk. --strip-source removes the same metadata from the input in place by dropping chunks, without re-encoding the image data. Existing output is refused unless --force is given, files are written under a temporary name and renamed into place, and --dry-run shows the metadata decisions and the file list without writing. Each step is printed as it happens; --quiet prints errors only. Verified with Pillow 12.3 on Python 3.14 against an ImageMagick-rewritten logo, an image with a C2PA manifest, 16-bit and palette PNGs, and truncated, corrupt, animated and ICC-bomb inputs. ruff (all rules, see ruff.toml) and mypy --strict pass. |
||
| 00-template | ||
| 01-fat32-usb-image-builder | ||
| 02-dedupe-movies | ||
| 03-dedupe-tv-shows | ||
| 04-purge-forgejo-action-runs | ||
| 05-arw-to-jpg | ||
| 06-png-to-web-icons | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
jdneer-toolbox
A personal toolbox of standalone, numbered utilities for systems, networking, DevOps, security, automation, media, firmware, and everyday problem-solving. Each tool lives in its own directory with its own README, scripts, and dependencies, so you can copy or use any single one without the rest of the repo.
Tools
| # | Tool | Description |
|---|---|---|
| 00 | template | README template and structure for new tools |
| 01 | fat32-usb-image-builder | Build a mountable FAT32 USB mass-storage image from files in src/ |
| 02 | dedupe-movies | Deduplicate a Jellyfin movie library by IMDb ID, keeping the best-quality copy |
| 03 | dedupe-tv-shows | Deduplicate a Jellyfin TV library by IMDb ID, keeping the most complete copy without losing episodes |
| 04 | purge-forgejo-action-runs | Bulk-delete Forgejo Actions workflow runs for the repository a checkout points at, keeping the newest N |
| 05 | arw-to-jpg | Batch-convert Sony ARW raws to sRGB JPEGs with LibRaw, carrying camera, lens and exposure metadata over |
| 06 | png-to-web-icons | Turn one PNG logo into a full favicon, PWA, Apple, Windows and social icon set, stripping C2PA, EXIF and text metadata |
Layout
Each tool lives in its own numbered directory:
NN-short-name/
├── README.md # Tool-specific documentation
├── .gitignore # Tool-specific exclusions
└── ... # The tool itself
The root README.md indexes the tools. The root .gitignore handles global
exclusions (AI artifacts, OS files, IDE files, model downloads). Each tool's own
.gitignore handles its build artifacts and input/output directories.
Adding a new tool
- Copy
00-template/README.mdtoNN-tool-name/README.mdand fill it in. - Add the tool, its own
.gitignore, and any wrappers it needs. - Add a row to the table above.
- Keep the tool self-contained so it can be used independently.
License
Repository
Remote: ssh://git@git.jdneer.com:29500/jd/jdneer-toolbox.git