(normally) - in two flavors. Used only to prioritize high-traffic pages for dev work, iff JS and tracker enabled. The former/defunct training site's id: ga('create', 'UA-52578333-1', 'auto'). The book site's id, now used for all: ga('create', 'UA-52579036-1', 'auto'). JS is also used if enabled for thumbspage galleries, Top buttons, TOCs, etc. Jun-2019: tell Google Analytics to anonymize IP address on receipt for privacy. More: https://developers.google.com/analytics/devguides/collection/analyticsjs/. Oct-2022: install a GA4 tag (i.e., script) alongside the prior UA tag. UA tags will stop collecting data in 2023. It's okay to use both until the cutover (and Google advises doing so), but the UA tag will be pointless after that and should be removed. This handles genhtml-insert clients; others get tags by running insert-analytics.py in package-publishing scripts. Also per Google: "In Google Analytics 4, IP anonymization is not necessary since IP addresses are not logged or stored". Let's hope so... -->

tagpix — Combine Your Photos for Easy Access

tagpix is a photo organizer that merges and labels photos for easier viewing and archiving. With tagpix, access to a folder, and a few simple commands, control of your photo archives remains with you, not a proprietary, closed program or device.

Overview

This portable Python command-line program runs on both Python 3.X and 2.X, and works on all major platforms, including Windows, Mac OS, Linux, and Android. Its main role is to merge the content of disparate photo collections spread across multiple folders.

If your digital photo collection has become scattered over many folders; uses filenames that are not unique because of their origin on multiple cameras; hosts modification dates that reflect retouches instead of events; or contains arbitrary duplicates, tagpix may be the photo-organizing tool you've been looking for. Running it on your photo folders transforms them into a simple, uniform format that's ideal for both viewing and archiving, and as private as the device on which it is stored.

tagpix transfers all the items in an entire source-folder tree to either a single flat folder or group-by-year subfolders, and renames the items transferred with date-taken or date-modified prefixes to make them unique. Date taken is extracted from standard photo-file Exif metadata tags or Android filename; any non-photo items (movies and other) are isolated in their own folders; files may be transferred by moves or copies per user settings; and duplicate content and filenames are found and resolved automatically.

This program is a source-code script run from a console, where all inputs are prompted. You can use it to create a new archive (e.g., for burning to optical disk), extend an existing one (e.g., for viewing), or do both for new photos with an extra post-run merge (e.g., by file-explorer GUI). However it is used, tagpix provides fast, convenient, and private access to all the photos you've shot over multiple years on multiple cameras.

Resources

For complete usage coverage and version details, see the User Guide listed below. For license and usage cautions, see the documentation string at the top of the script file, also below.

Docs:

Code:

Screenshots:

Examples:

Download

Use the following to fetch tagpix, or view its unzipped content.

This program was last changed: September 29, 2020.

Its latest update silences a harmless-but-confusing Pillow DOS warning (and prevents a rarer error) for large images. See all its version history. Tagpix was also patched trivially in December 2024 to avoid a new string-escape error in Python 3.13.

Related programs: for Python-coded options for viewing and publishing your photo folders, try the thumbspage web-page generator, and the PyPhoto GUI in PyGadgets. For more code examples, see the programs page.

Defunct app: an experimental app for Mac OS was withdrawn, but its web page has Pillow install tips.



[Home page] Books Code Blog Python Author Train Find ©M.Lutz