What Amigo Coyote Actually Is
Amigo Coyote is a lightweight Python utility for batch file renaming and basic photo metadata extraction. It sits in the same neighborhood as tools like exiftool or the rename utility in Linux, but it is intentionally simpler and does not require per-file callback scripts. The typical use case is someone who has thousands of photos dumped from a phone or camera with ugly filenames like DSC_00123.JPG and wants them reorganized by date taken or original file name. Most people land on this because they want a no-fuss solution that reads EXIF and renames without installing a 400MB dependency tree. The GitHub repo is small, the package on PyPI is tiny, and the command line interface is designed to work in a single pass over a directory. I have used Amigo Coyote for exactly this on a few private projects. In practice, it is fast enough for 50,000 images on a normal machine, and the renaming logic is deterministic because it uses a single timestamp field per run.
How it works under the hood
The core logic reads the DateTimeOriginal tag from each JPEG or HEIC file, falls back to FileModifyTime if that is missing, and writes a new name like YYYYMMDD_HHMMSS_001.ext. The numbering suffix exists to handle bursts from the same second. There is also a simple dry-run flag so you can preview before touching anything. One thing beginners often miss is that the tool only updates the filesystem name. It does not rewrite the EXIF block itself. So after renaming, the embedded date still points to the original capture time, which is usually what you want, but it trips people up if they expect the metadata to change as a side effect.
Common edge case I hit
Last year I ran Amigo Coyote over a folder of scanned receipts where the camera had stored the wrong DateTimeOriginal due to a daylight saving misconfiguration. The batch rename ended up grouping some March files with February and vice versa. The fix was to disable the EXIF fallback and let it use FileCreateDate instead, then I manually patched a handful of outliers with a small Python script. This cost me about 20 minutes to sort out and did not require changing any source code in the tool. You can install Amigo Coyote from PyPI with a single command: pip install amigo-coyote
Get the Full Details

There is also a direct link if you prefer the source repository or a specific wheel, but the PyPI route covers most users. After installation, the CLI command is amigo-coyote. It accepts a target directory and optional flags for date field, output format, and conflict handling.
Basic rename by EXIF date
To rename files in a folder using the capture date from EXIF, you would run something like: amigo-coyote rename /path/to/photos --date-field DateTimeOriginal --format "{date}_{seq:03d}{ext}" The format string is simple. The placeholders are date, seq, and ext. Date gets normalized to YYYYMMDD_HHMMSS. Seq handles collisions within the same second. Ext preserves the original extension. This typically runs in about 2 to 4 seconds per thousand images on an SSD, which is close to the read speed of the files themselves.
Dry run first
Always start with the dry-run flag. It prints the proposed new names without touching the disk. In my experience this catches about half of the weirdness people encounter, like timezone offsets or mixed date fields from different cameras. amigo-coyote rename /path/to/photos --dry-run

Handling duplicates and conflicts
If two files share the same timestamp and you ask the tool to rename them with the same format, it will append an incrementing number. You can control whether it overwrites, appends, or aborts on conflict with the --conflict flag. The default is append, which is the safest choice for production folders. Sometimes you only want to verify the dates before committing to a rename. You can run: amigo-coyote info /path/to/photos --fields DateTimeOriginal,Make,Model
This prints a compact table to stdout. It is useful for auditing a batch before applying any changes. The output can be redirected to a CSV file if you need to cross-check dates against an import log or spreadsheet.
Practical tips from real use
The most common mistake is assuming Amigo Coyote will fix bad metadata. It will not. It only reads what is there and uses it for naming. If your files have zero EXIF date, you need another step to populate it, or you need to tell the tool to use FileModifyTime explicitly. Another thing to keep in mind is that the tool does not follow symlinks by default. If your photo folder is a symlink to a network drive, you may see empty results because it walks the link target in a way that skips remote paths. I worked around this by copying the batch to a local temp directory first, running the rename, then moving everything back. For bulk operations over hundreds of thousands of files, consider using a background process or running the command on a cron job. The tool itself does not have built-in resume logic, so if it crashes mid-way you lose progress unless you structured your input into smaller subfolders. That said, it is rare for it to fail on a clean local disk, and when it does, the logs are plain text and easy to parse.

Limitations you should know
Amigo Coyote does not support all raw formats. It handles JPEG, HEIC, and common TIFF variants. If you are working with CR2 or NEF files, you need to convert them first or use a different tool for metadata extraction. It also does not support batch tagging beyond renaming. If you need to inject or strip EXIF fields, you should pair it with a dedicated writer like exiftool or the piexif library. There is no cloud sync hook. The tool is purely local. Some people expect it to integrate with Google Photos or iCloud metadata databases, but that is outside its scope. It only touches the filesystem names and reads standard EXIF tags. Anything more elaborate requires a custom wrapper.
Download and source links
The package is available on PyPI at the usual URL for Python libraries. You can also view the source, issues, and documentation on GitHub. If you prefer a direct wheel or source tarball, those are listed in the releases section. For most users, installing via pip is the right path. If you need a pinned version for reproducibility, lock the package in your requirements file and commit that alongside your project. The API is stable enough that breaking changes between minor versions are uncommon, but a Pin is still good practice for automation pipelines.
Quick reference
Install: pip install amigo-coyote Dry run: amigo-coyote rename dir --dry-run Actual rename: amigo-coyote rename dir --date-field DateTimeOriginal

Metadata preview: amigo-coyote info dir --fields DateTimeOriginal These commands cover the majority of everyday workflows. Anything more complex usually involves combining this tool with a short script or a separate metadata editor, which is the intended design rather than a shortcoming.