Skip to main content

bat_img

Fast, multithreaded batch image processor — available as a standalone command-line tool installable via pip.

The binary is a native Rust executable (no Python overhead at runtime). The Python package is simply a convenient delivery mechanism so you can install bat_img the same way you install any other command-line tool.

Installation

pip install bat_img

Pre-built binaries are provided for:

Platform Architecture
macOS Apple Silicon (M1 / M2 / M3 / M4)
Linux x86-64 (glibc 2.17+, compatible with most distros)
Windows x86-64

After installation, the bat_img command is available in your terminal.

Quick start

# Strip GPS location from all iPhone photos (in-place)
bat_img -i ~/Pictures/iPhone --strip-gps

# Resize all JPEGs to 1920 px wide, save to ./web/
bat_img -i ./photos -r 1920x0 -o ./web

# Convert HEIC → WebP at quality 85, resize to 2048 px wide
bat_img -i ./iphone_photos -r 2048x0 -f webp -q 85 -o ./web

# Strip ALL metadata, sharpen — 8 threads, recurse
bat_img -i ./raw -R --strip-all --sharpen -t 8 -o ./export

Features

Feature Flag
In-place processing — overwrite originals (omit --output)
Strip GPS location from EXIF --strip-gps
Strip ALL metadata (EXIF, IPTC, XMP) --strip-all
Resize (width, height, or both) -r 1920x0
No-upscale guard --no-upscale
Resize filter --filter lanczos3
Add solid border --border 20 --border-color "#fff"
Rotate 90 / 180 / 270° --rotate 90
Flip horizontal / vertical --flip-h / --flip-v
Brightness adjustment --brightness 10
Contrast adjustment --contrast 15
Sharpen --sharpen
Grayscale --grayscale
Format conversion incl. HEIC -f heic / webp / png / jpeg / tiff
JPEG / WebP quality -q 85
Filename prefix / suffix --prefix web_ --suffix _sm
Parallel threads -t 8
Dry-run preview --dry-run
Recursive directory walk -R

Usage

bat_img [OPTIONS] --input <INPUT>...

All options

  -i, --input <INPUT>...       File, glob pattern, or directory
  -o, --output <DIR>           Output directory.
                               Omit to process files in-place.
  -R, --recursive              Recurse into subdirectories
  -t, --threads <N>            Thread count [default: CPU core count]
  -q, --quality <1-100>        JPEG/WebP quality (HEIC preserves original
                               quality when omitted)
  -f, --format <FORMAT>        Output format:
                               heic | heif | jpeg | png | webp | tiff | bmp | gif
      --strip-gps              Remove GPS location from EXIF
      --strip-all              Remove all metadata
  -r, --resize <WxH>           Resize (use 0 for auto: 1920x0 or 0x1080)
      --filter <FILTER>        Resize filter [default: lanczos3]
                               nearest|triangle|catmull-rom|gaussian|lanczos3
      --no-upscale             Never upscale smaller images
      --border <PIXELS>        Add border N pixels wide on all sides
      --border-color <COLOR>   Border color: name or #rrggbb [default: white]
      --rotate <DEG>           Rotate clockwise: 90 | 180 | 270
      --flip-h                 Flip horizontally
      --flip-v                 Flip vertically
      --brightness <VALUE>     Brightness delta (-100..+100)
      --contrast <VALUE>       Contrast delta (-100..+100)
      --sharpen                Apply unsharp mask
      --grayscale              Convert to grayscale
      --prefix <PREFIX>        Prepend string to output filename
      --suffix <SUFFIX>        Append string to output filename
      --overwrite              Overwrite existing output files
      --dry-run                Preview without writing files
      --quiet                  Suppress output except errors
  -h, --help                   Print help
  -V, --version                Print version

In-place mode

Omitting --output overwrites each original file in place. A temp file is written first and then atomically renamed over the original, so the source is never corrupted if something goes wrong.

# Strip GPS from every HEIC file recursively — no copies made
bat_img -i ~/Pictures -R --strip-gps

# Resize all JPEGs to 2048 px wide, in-place
bat_img -i ./photos -r 2048x0

Note: in-place mode cannot change the file format (e.g. HEIC → WebP). Use --output when changing formats.

Examples

# Add a 20 px black border to all PNGs
bat_img -i ./screenshots --border 20 --border-color black -o ./bordered

# Rotate scans 90° clockwise and convert to grayscale
bat_img -i ./scans --rotate 90 --grayscale -o ./processed

# Convert HEIC → JPEG at quality 90, resize to fit 1920×1080
bat_img -i ./iphone_photos -f jpeg -q 90 -r 1920x1080 -o ./jpegs

# Dry-run — see what would happen without writing anything
bat_img -i ./photos -r 800x600 --strip-gps --dry-run

HEIC support

bat_img can read and write HEIC/HEIF files natively, including:

  • Decoding HEIC photos from iPhone / iPad
  • Re-encoding back to HEIC while preserving the original codec (HEVC / AV1) and file size (unless --quality is specified)
  • Converting HEIC to any other supported format with -f jpeg, -f webp, etc.

License

bat_img is distributed under MIT License. Please see details in LICENSE.

Metadata

Release files for bat-img 1.0.6

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

Source distribution (sdist)

Source distribution for bat-img 1.0.6
File Size Uploaded
bat_img-1.0.6.tar.gz 4.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for bat-img 1.0.6
File Interpreter ABI Platform
bat_img-1.0.6-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
bat_img-1.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
bat_img-1.0.6-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 7.0 MB

Release files / bat_img-1.0.6.tar.gz

Download URL bat_img-1.0.6.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
4d0444ba6f50995a9ad7a11592590ccc98cc67288a1c69b1d98a2829f426e0d1
BLAKE2b-256 checksum
How to use checksums
e222d2ed5198281563ef33d78b17a6cbf196044d059cf84defe5bef2dbfe6a46
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 7, 2026.

Transparency log

Release files / bat_img-1.0.6-py3-none-win_amd64.whl

Download URL bat_img-1.0.6-py3-none-win_amd64.whl
Size 3.3 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
1f605863aa10848aaa9d706c2f44c2145e5cb33906e89a545854afc963db0a31
BLAKE2b-256 checksum
How to use checksums
da6d1eb8aecc6e86b248a98661c0876ab59f7bab172161624fdb872c4336f216
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 7, 2026.

Transparency log

Release files / bat_img-1.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL bat_img-1.0.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.0 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
a76d1bf1b1c401e378c7840cc664c2bd41d62ba629f382ae6fc996b0b71850a4
BLAKE2b-256 checksum
How to use checksums
97872b8a5e4fd8add8a38b1bb49849ac1f8f82bec25ce11a858d47c252a4a31b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 7, 2026.

Transparency log

Release files / bat_img-1.0.6-py3-none-macosx_11_0_arm64.whl

Download URL bat_img-1.0.6-py3-none-macosx_11_0_arm64.whl
Size 1.7 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1fe2dbfcb018dc5bfa51451d6c486f4c0eec7cf14817f58a782ea5f2385b0408
BLAKE2b-256 checksum
How to use checksums
2a672cc90002507ff896d656700ea821d540899aa8c9e7d9e3136af0cd9b3289
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 7, 2026.

Transparency log

Release history Release notifications | RSS feed

1.1.7

4 release files

1.1.6

4 release files

1.1.5

4 release files

1.1.4

4 release files

1.1.3

4 release files

1.1.2

4 release files

1.1.1

4 release files

1.1.0

4 release files

1.0.9

4 release files

1.0.8

4 release files

1.0.7

4 release files

This release

1.0.6 This release

4 release files

1.0.5

4 release files

1.0.4

4 release files

1.0.0

3 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