Skip to main content

Intro - Examples

Nuget stable .github/workflows/stable.yml Coverage Nuget pre-release .github/workflows/preview.yml GitHub license

Quality Gate Status Reliability Rating Maintainability Rating Security Rating Bugs .github/workflows/CI.yml

photo-cli is CLI tool (works on macOS & Windows & Linux) that extracts when and where (reverse geocode) your photographs are taken, copy into a new organized folder (not modifying source folder) with various folder & file naming strategies or export all data into CSV (can view on Microsoft Excel, Libre/OpenOffice Calc, Apple Numbers, Google Sheets) files. With this exported CSV file you can navigate your photo locations on Google Maps & Earth with your custom label and pin style.

Features Explained With An Example

There is three main feature that can be explained better with examples.

  1. Copy into a new organized folder
  2. Archive & index into local SQLite incrementally in a specific folder with photo-cli archive command
  3. Export all extracted information into a CSV Report
  4. Navigate Your Photo Locations on Google Maps & Earth

1. Copy Into a New Organized Folder Example With photo-cli copy Command

Folder & File Hierarchy Before -> After

Original Folder HierarchyAfter photo-cli

├── DSC_5727.jpg ├── GOPR6742.jpg ├── Italy album │   ├── DJI_01732.jpg │   ├── DJI_01733.jpg │   ├── DSC00001.JPG │   ├── DSC03467.jpg │   ├── DSC_1769.JPG │   ├── DSC_1770.JPG │   ├── DSC_1770_(same).jpg │   ├── DSC_1771.JPG │   ├── GOPR7496.jpg │   ├── GOPR7497.jpg │   ├── IMG_0747.JPG │   └── IMG_2371.jpg └── Spain Journey    ├── DSC_1807.jpg    ├── DSC_1808.jpg    └── IMG_5397.jpg

2 directories, 17 files

├── 2005.08.13_09.47.23-Kenya.jpg ├── 2005.12.14-2008.10.22-Italy album │   ├── 2005.12.14_14.39.47-Italia-Firenze-Quartiere 1.jpg │   ├── 2008.10.22_16.28.39-Italia-Arezzo.jpg │   ├── 2008.10.22_16.29.49-Italia-Arezzo.jpg │   ├── 2008.10.22_16.38.20-Italia-Arezzo.jpg │   ├── 2008.10.22_16.43.21-Italia-Arezzo.jpg │   ├── 2008.10.22_16.44.01-Italia-Arezzo.jpg │   ├── 2008.10.22_16.46.53-Italia-Arezzo.jpg │   ├── 2008.10.22_16.52.15-Italia-Arezzo.jpg │   ├── 2008.10.22_16.55.37-Italia-Arezzo.jpg │   ├── 2008.10.22_17.00.07-Italia-Arezzo-1.jpg │   └── 2008.10.22_17.00.07-Italia-Arezzo-2.jpg ├── 2012.06.22_19.52.31-United Kingdom-Ascot-Sunninghill and Ascot.jpg ├── 2015.04.10-2015.04.10-Spain Journey │   ├── 2015.04.10_20.12.23-España-Madrid-1.jpg │   └── 2015.04.10_20.12.23-España-Madrid-2.jpg ├── Italy album │   └── no-address │   └── IMG_2371.jpg ├── photo-cli-report.csv └── Spain Journey    └── no-address-and-no-photo-taken-date    └── IMG_5397.jpg

6 directories, 18 files

What Happened? / How It Is Processed?

There are lots of transformation options and customization settings, this is just one of them. This transformation is done by running only the following single command;

Command with explicit argument names & values

photo-cli copy --process-type SubFoldersPreserveFolderHierarchy --naming-style DateTimeWithSecondsAddress --number-style PaddingZeroCharacter --folder-append DayRange --folder-append-location Prefix --reverse-geocode OpenStreetMapFoundation --openstreetmap-properties country city town suburb --output photo-cli-test --no-coordinate InSubFolder --no-taken-date InSubFolder --verify

Same command with shorter alias of all argument names & values

photo-cli copy -f 2 -s 8 -n 2 -a 4 -p 1 -e 2 -r country city town suburb -o photo-cli-test -c 3 -t 3 -v

Console/terminal output (as progress may take time, for each operation completion status shown with progress)

Searching photos: finished. 17 photos found.
Parsing photo exif information: finished.
This OpenStreetMapFoundation provider is using rate limit of 1 seconds between each request
Reverse Geocoding: finished.
Directory grouping: finished.
Processing target folder: finished.
Verified all photo files copied successfully by comparing file hashes from original photo files.
All files SHA1 hashes written into file: sha1.lst. You may verify yourself with `sha1sum --check sha1.lst` tool in Linux/macOS.
Writing csv report: finished.
- 17 photos copied.
- 4 directories created.
- 15 photos has taken date and coordinate.
- 1 photos has taken date but no coordinate.
- 1 photos has no taken date and coordinate.

Step By Step photo-cli copy Process

  1. Gather all photo paths in the source folder within subfolders.
  2. Extract EXIF data of each photograph's taken date and coordinate.
  3. As the file name strategy is selected as DateTimeWithSecondsAddress and it contains the address, by using third-party reverse geocode provider we are building the address with OpenStreetMap by using given administrative levels as city town suburb for each photograph.
  4. As the folder process type is selected as SubFoldersPreserveFolderHierarchy folder and file hierarchy at the new output folder will be the same.
  5. As the folder append type is selected as DayRange and folder append location is Prefix, folder names on output folder will be created with the same name prefixed with the earliest and latest photograph taken date. For example: 2005.12.14-2008.10.22-Italy album (original folder name is Italy album)
  6. As the file name strategy is selected as DateTimeWithSecondsAddress each photograph file name would be copied as a photo taken date unified with the address which is built from the third party reverse geocode provider by the photograph's coordinate. For example: 2012.06.22_19.52.31-United Kingdom-Ascot-Sunninghill and Ascot.jpg (original file name is GOPR6742.jpg)
  7. As no photograph taken date action is selected as InSubFolder and no coordinate action is selected as InSubFolder, photographs with no related EXIF data are copied into a sub folder by obeying the original folder hierarchy. For example: /Italy album/no-address/IMG_2371.jpg and /Spain Journey/no-address-and-no-photo-taken-date/IMG_5397.jpg
  8. As verify is added, it is verifying that all photo files copied successfully by comparing file hashes. By adding this, it guarantees that there won't be any corrupted photos that is caused by disk operation failures.
  9. To verify and see all information in one place, photo-cli-report.csv report will be created on the output file. Can be examined in Markdown table or CSV file.
Contents of photo-cli-report.csv File in Markdown Table (report of copy command)
Click to expand
PhotoPathPhotoNewPathPhotoDateTakenReverseGeocodeFormattedLatitudeLongitudePhotoTakenYearPhotoTakenMonthPhotoTakenDayPhotoTakenHourPhotoTakenMinutePhotoTakenSecondsAddress1Address2Address3Address4Address5Address6Address7Address8
/TestImages/DSC_5727.jpgphoto-cli-test/2005.08.13_09.47.23-Kenya.jpg08/13/2005 09:47:23Kenya-0.3712999999999999636.056416666666664200581394723Kenya
/TestImages/GOPR6742.jpgphoto-cli-test/2012.06.22_19.52.31-United Kingdom-Ascot-Sunninghill and Ascot.jpg06/22/2012 19:52:31United Kingdom-Ascot-Sunninghill and Ascot51.424838333333334-0.67356166666666662012622195231United KingdomAscotSunninghill and Ascot
/TestImages/Italy album/DSC03467.jpgphoto-cli-test/2005.12.14-2008.10.22-Italy album/2005.12.14_14.39.47-Italia-Firenze-Quartiere 1.jpg12/14/2005 14:39:47Italia-Firenze-Quartiere 143.7855944333333311.23461943333333420051214143947ItaliaFirenzeQuartiere 1
/TestImages/Italy album/GOPR7497.jpgphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.28.39-Italia-Arezzo.jpg10/22/2008 16:28:39Italia-Arezzo43.4674483333333411.88512666666388820081022162839ItaliaArezzo
/TestImages/Italy album/DJI_01732.jpgphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.29.49-Italia-Arezzo.jpg10/22/2008 16:29:49Italia-Arezzo43.4671566666638911.88539499999722320081022162949ItaliaArezzo
/TestImages/Italy album/GOPR7496.jpgphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.38.20-Italia-Arezzo.jpg10/22/2008 16:38:20Italia-Arezzo43.46708166666389411.88453833333055520081022163820ItaliaArezzo
/TestImages/Italy album/DJI_01733.jpgphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.43.21-Italia-Arezzo.jpg10/22/2008 16:43:21Italia-Arezzo43.46836511.88163499997222220081022164321ItaliaArezzo
/TestImages/Italy album/DSC00001.JPGphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.44.01-Italia-Arezzo.jpg10/22/2008 16:44:01Italia-Arezzo43.4684416666666711.8815152008102216441ItaliaArezzo
/TestImages/Italy album/IMG_0747.JPGphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.46.53-Italia-Arezzo.jpg10/22/2008 16:46:53Italia-Arezzo43.46824333333055511.88017166663888920081022164653ItaliaArezzo
/TestImages/Italy album/DSC_1771.JPGphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.52.15-Italia-Arezzo.jpg10/22/2008 16:52:15Italia-Arezzo43.4672549999972211.87921333333333420081022165215ItaliaArezzo
/TestImages/Italy album/DSC_1769.JPGphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.55.37-Italia-Arezzo.jpg10/22/2008 16:55:37Italia-Arezzo43.4660116666388911.8791116666388920081022165537ItaliaArezzo
/TestImages/Italy album/DSC_1770.JPGphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_17.00.07-Italia-Arezzo-1.jpg10/22/2008 17:00:07Italia-Arezzo43.46445511.881478333333334200810221707ItaliaArezzo
/TestImages/Italy album/DSC_1770_(same).jpgphoto-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_17.00.07-Italia-Arezzo-2.jpg10/22/2008 17:00:07Italia-Arezzo43.46445511.881478333333334200810221707ItaliaArezzo
/TestImages/Italy album/IMG_2371.jpgphoto-cli-test/Italy album/no-address/IMG_2371.jpg07/16/2008 11:33:202008716113320
/TestImages/Spain Journey/DSC_1807.jpgphoto-cli-test/2015.04.10-2015.04.10-Spain Journey/2015.04.10_20.12.23-España-Madrid-1.jpg04/10/2015 20:12:23España-Madrid40.44697222222222-3.7247527777777782015410201223EspañaMadrid
/TestImages/Spain Journey/DSC_1808.jpgphoto-cli-test/2015.04.10-2015.04.10-Spain Journey/2015.04.10_20.12.23-España-Madrid-2.jpg04/10/2015 20:12:23España-Madrid40.44697222222222-3.7247527777777782015410201223EspañaMadrid
/TestImages/Spain Journey/IMG_5397.jpgphoto-cli-test/Spain Journey/no-address-and-no-photo-taken-date/IMG_5397.jpg
Contents of photo-cli-report.csv File in Raw Text Format (report of copy command)
Click to expand
PhotoPath,PhotoNewPath,PhotoDateTaken,ReverseGeocodeFormatted,Latitude,Longitude,PhotoTakenYear,PhotoTakenMonth,PhotoTakenDay,PhotoTakenHour,PhotoTakenMinute,PhotoTakenSeconds,Address1,Address2,Address3,Address4,Address5,Address6,Address7,Address8
/TestImages/DSC_5727.jpg,photo-cli-test/2005.08.13_09.47.23-Kenya.jpg,08/13/2005 09:47:23,Kenya,-0.37129999999999996,36.056416666666664,2005,8,13,9,47,23,Kenya,,,,,,,
/TestImages/GOPR6742.jpg,photo-cli-test/2012.06.22_19.52.31-United Kingdom-Ascot-Sunninghill and Ascot.jpg,06/22/2012 19:52:31,United Kingdom-Ascot-Sunninghill and Ascot,51.424838333333334,-0.6735616666666666,2012,6,22,19,52,31,United Kingdom,Ascot,Sunninghill and Ascot,,,,,
/TestImages/Italy album/DSC03467.jpg,photo-cli-test/2005.12.14-2008.10.22-Italy album/2005.12.14_14.39.47-Italia-Firenze-Quartiere 1.jpg,12/14/2005 14:39:47,Italia-Firenze-Quartiere 1,43.78559443333333,11.234619433333334,2005,12,14,14,39,47,Italia,Firenze,Quartiere 1,,,,,
/TestImages/Italy album/GOPR7497.jpg,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.28.39-Italia-Arezzo.jpg,10/22/2008 16:28:39,Italia-Arezzo,43.46744833333334,11.885126666663888,2008,10,22,16,28,39,Italia,Arezzo,,,,,,
/TestImages/Italy album/DJI_01732.jpg,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.29.49-Italia-Arezzo.jpg,10/22/2008 16:29:49,Italia-Arezzo,43.46715666666389,11.885394999997223,2008,10,22,16,29,49,Italia,Arezzo,,,,,,
/TestImages/Italy album/GOPR7496.jpg,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.38.20-Italia-Arezzo.jpg,10/22/2008 16:38:20,Italia-Arezzo,43.467081666663894,11.884538333330555,2008,10,22,16,38,20,Italia,Arezzo,,,,,,
/TestImages/Italy album/DJI_01733.jpg,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.43.21-Italia-Arezzo.jpg,10/22/2008 16:43:21,Italia-Arezzo,43.468365,11.881634999972222,2008,10,22,16,43,21,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC00001.JPG,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.44.01-Italia-Arezzo.jpg,10/22/2008 16:44:01,Italia-Arezzo,43.46844166666667,11.881515,2008,10,22,16,44,1,Italia,Arezzo,,,,,,
/TestImages/Italy album/IMG_0747.JPG,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.46.53-Italia-Arezzo.jpg,10/22/2008 16:46:53,Italia-Arezzo,43.468243333330555,11.880171666638889,2008,10,22,16,46,53,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC_1771.JPG,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.52.15-Italia-Arezzo.jpg,10/22/2008 16:52:15,Italia-Arezzo,43.46725499999722,11.879213333333334,2008,10,22,16,52,15,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC_1769.JPG,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_16.55.37-Italia-Arezzo.jpg,10/22/2008 16:55:37,Italia-Arezzo,43.46601166663889,11.87911166663889,2008,10,22,16,55,37,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC_1770.JPG,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_17.00.07-Italia-Arezzo-1.jpg,10/22/2008 17:00:07,Italia-Arezzo,43.464455,11.881478333333334,2008,10,22,17,0,7,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC_1770_(same).jpg,photo-cli-test/2005.12.14-2008.10.22-Italy album/2008.10.22_17.00.07-Italia-Arezzo-2.jpg,10/22/2008 17:00:07,Italia-Arezzo,43.464455,11.881478333333334,2008,10,22,17,0,7,Italia,Arezzo,,,,,,
/TestImages/Italy album/IMG_2371.jpg,photo-cli-test/Italy album/no-address/IMG_2371.jpg,07/16/2008 11:33:20,,,,2008,7,16,11,33,20,,,,,,,,
/TestImages/Spain Journey/DSC_1807.jpg,photo-cli-test/2015.04.10-2015.04.10-Spain Journey/2015.04.10_20.12.23-España-Madrid-1.jpg,04/10/2015 20:12:23,España-Madrid,40.44697222222222,-3.724752777777778,2015,4,10,20,12,23,España,Madrid,,,,,,
/TestImages/Spain Journey/DSC_1808.jpg,photo-cli-test/2015.04.10-2015.04.10-Spain Journey/2015.04.10_20.12.23-España-Madrid-2.jpg,04/10/2015 20:12:23,España-Madrid,40.44697222222222,-3.724752777777778,2015,4,10,20,12,23,España,Madrid,,,,,,
/TestImages/Spain Journey/IMG_5397.jpg,photo-cli-test/Spain Journey/no-address-and-no-photo-taken-date/IMG_5397.jpg,,,,,,,,,,,,,,,,,,

2. Archive & index into local SQLite incrementally in a specific folder with photo-cli archive command

Folder & File Hierarchy Before -> After

Original Folder HierarchyAfter photo-cli

├── DSC_5727.jpg ├── GOPR6742.jpg ├── Italy album │   ├── DJI_01732.jpg │   ├── DJI_01733.jpg │   ├── DSC00001.JPG │   ├── DSC03467.jpg │   ├── DSC_1769.JPG │   ├── DSC_1770.JPG │   ├── DSC_1770_(same).jpg │   ├── DSC_1771.JPG │   ├── GOPR7496.jpg │   ├── GOPR7497.jpg │   ├── IMG_0747.JPG │   └── IMG_2371.jpg └── Spain Journey ├── DSC_1807.jpg ├── DSC_1808.jpg └── IMG_5397.jpg

2 directories, 17 files

├── 2005 │   ├── 08 │   │   └── 13 │   │   └── 2005.08.13_09.47.23-5842c73cfdc5f347551bb6016e00c71bb1393169.jpg │   └── 12 │   └── 14 │   └── 2005.12.14_14.39.47-03cb14d5c68beed97cbe73164de9771d537fcd96.jpg ├── 2008 │   ├── 07 │   │   └── 16 │   │   └── 2008.07.16_11.33.20-90d835861e1aa3c829e3ab28a7f01ec3a090f664.jpg │   └── 10 │   └── 22 │   ├── 2008.10.22_16.28.39-5d66eec547469a1817bda4abe35c801359b2bb55.jpg │   ├── 2008.10.22_16.29.49-629b0b141634d6c0906e49af448bec8d755ba32c.jpg │   ├── 2008.10.22_16.38.20-620d23336a12ab54f9f0190fe93960a4dba2df59.jpg │   ├── 2008.10.22_16.43.21-3b0a3215b4f66d7ff4804dd223f192c21aee71bc.jpg │   ├── 2008.10.22_16.44.01-d470205a1d331a9d3765b3762b7c954bb8efc6ea.jpg │   ├── 2008.10.22_16.46.53-f670f2bb6c54898894b06b083185b05086bd4e6e.jpg │   ├── 2008.10.22_16.52.15-6b89a245809031ecc47789cdeaa332545330fc39.jpg │   ├── 2008.10.22_16.55.37-dd42edcde2433a7df4a3d67bf61944a20884da89.jpg │   └── 2008.10.22_17.00.07-a0ab699f5f99fce8ff49163e87c7590c2c9a66eb.jpg ├── 2012 │   └── 06 │   └── 22 │   └── 2012.06.22_19.52.31-bb649a18b3e7bb3df3701587a13f833749091817.jpg ├── 2015 │   └── 04 │   └── 10 │   ├── 2015.04.10_20.12.23-3907fc960f2873f40c8f35643dd444e0468be131.jpg │   └── 2015.04.10_20.12.23-9f4e6d352ec172e1059571250655e376769080fe.jpg ├── no-photo-taken-date │   └── cf756397cc3ca81b2650c8801fd64e172504015a.jpg └── photo-cli.sqlite3

17 directories, 17 files

What Happened? / How It Is Processed?

This archive process is done by running only the following single command;

photo-cli archive --output archive-folder --reverse-geocode OpenStreetMapFoundation --openstreetmap-properties country city town suburb

Same command with shorter alias of all argument names & values

photo-cli archive -o archive-folder -e 2 -r country city town suburb

Console/terminal output (as progress may take time, for each operation completion status shown with progress)

Searching photos: finished. 17 photo(s) found.
warn: PhotoCli.Services.Implementations.ExifParserService[0]
No coordinate found on `Gps` directory for /Users/ac/dev/src/photo-cli/photo-cli/docs/test-photographs/Spain Journey/IMG_5397.jpg
warn: PhotoCli.Services.Implementations.ExifParserService[0]
No coordinate found on `Gps` directory for /Users/ac/dev/src/photo-cli/photo-cli/docs/test-photographs/Italy album/IMG_2371.jpg
Parsing photo exif information: finished.
This OpenStreetMapFoundation provider is using rate limit of 1 second(s) between each request
Reverse Geocoding: finished.
Directory grouping: started.
Directory grouping: finished.
warn: PhotoCli.Services.Implementations.DuplicatePhotoRemoveService[0]
Photo is skipped due to same photo has already been archived. Same photo paths: /Users/ac/dev/src/photo-cli/photo-cli/docs/test-photographs/Italy album/DSC_1770.JPG, /Users/ac/dev/src/photo-cli/photo-cli/docs/test-photographs/Italy album/DSC_1770_(same).jpg
Processing target folder: finished.
Verified all photo files copied successfully by comparing file hashes from original photo files.
- 16 photo(s) existed on the output.
- 1 photo(s) are skipped, they have the same photo.
- 15 photo(s) has taken date and coordinate.
- 1 photo(s) has taken date but no coordinate.
- 1 photo(s) has no taken date and coordinate.

Step By Step photo-cli archive Process

  1. Gather all photo paths in the source folder within subfolders.
  2. Extract EXIF data of each photograph's taken date and coordinate.
  3. As third-party reverse geocode is selected, we are building address with OpenStreetMap by using given administrative levels as city town suburb for each photograph.
  4. On the output folder, photos will be placed on folder hierarchy by it's photo taken date's /[year]/[month]/[day]. For example: /2008/07/16/.
  5. Photo file names will be formatted as yyyy.MM.dd_HH.mm.ss-{sha1-hash-of-file}.{extension}. For example: 2008.07.16_11.33.20-90d835861e1aa3c829e3ab28a7f01ec3a090f664.jpg. Input file name is: IMG_2371.jpg.
  6. Input folder has duplicate photos with different names DSC_1770.JPG, DSC_1770_(same).JPG. We are only archiving one of them by comparing file hashes to output 2008/10/22/2008.10.22_17.00.07-a0ab699f5f99fce8ff49163e87c7590c2c9a66eb.jpg and logs warning on the console with a message Photo is skipped due to same photo has already been archived. Same photo paths: /Users/ac/dev/src/photo-cli/photo-cli/docs/test-photographs/Italy album/DSC_1770.JPG, /Users/ac/dev/src/photo-cli/photo-cli/docs/test-photographs/Italy album/DSC_1770_(same).jpg.
  7. The photo that don't have any photo taken date Spain Journey/IMG_5397.jpg, copied into no-photo-taken-date folder with only a sha1-hash cf756397cc3ca81b2650c8801fd64e172504015a.jpg.
  8. After copying all photos, we are verifying that all photo files copied successfully by comparing file hashes. It guarantees that there won't be any corrupted photos that is caused by disk operation failures.
  9. All photo taken dates, address information is saved on local SQLite database on the output folder's top most folder photo-cli.sqlite3. It's an extra feature for technical persons who has technical knowledge about databases who wants to query for personal purposes.
Contents of photo-cli.sqlite3 SQLite Database in Markdown Table (output of archive command)
IdPathCreatedAtDateTakenReverseGeocodeFormattedLatitudeLongitudeYearMonthDayHourMinuteSecondsAddress1Address2Address3Address4Address5Address6Address7Address8Sha1Hash
12012/06/22/2012.06.22_19.52.31-bb649a18b3e7bb3df3701587a13f833749091817.jpg2023-11-17 00:44:18.9421822012-06-22 19:52:31United Kingdom-Ascot-Sunninghill and Ascot51.424838333333334-0.67356166666666662012622195231United KingdomAscotSunninghill and Ascotnullnullnullnullnullbb649a18b3e7bb3df3701587a13f833749091817
22005/08/13/2005.08.13_09.47.23-5842c73cfdc5f347551bb6016e00c71bb1393169.jpg2023-11-17 00:44:18.9423912005-08-13 09:47:23Kenya-Barut ward-0.3712999999999999636.056416666666664200581394723KenyaBarut wardnullnullnullnullnullnull5842c73cfdc5f347551bb6016e00c71bb1393169
3no-photo-taken-date/cf756397cc3ca81b2650c8801fd64e172504015a.jpg2023-11-17 00:44:18.942393nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullcf756397cc3ca81b2650c8801fd64e172504015a
42015/04/10/2015.04.10_20.12.23-9f4e6d352ec172e1059571250655e376769080fe.jpg2023-11-17 00:44:18.9423942015-04-10 20:12:23España-Madrid40.44697222222222-3.7247527777777782015410201223EspañaMadridnullnullnullnullnullnull9f4e6d352ec172e1059571250655e376769080fe
52015/04/10/2015.04.10_20.12.23-3907fc960f2873f40c8f35643dd444e0468be131.jpg2023-11-17 00:44:18.9423952015-04-10 20:12:23España-Madrid40.44697222222222-3.7247527777777782015410201223EspañaMadridnullnullnullnullnullnull3907fc960f2873f40c8f35643dd444e0468be131
62008/07/16/2008.07.16_11.33.20-90d835861e1aa3c829e3ab28a7f01ec3a090f664.jpg2023-11-17 00:44:18.9423962008-07-16 11:33:20nullnullnull2008716113320nullnullnullnullnullnullnullnull90d835861e1aa3c829e3ab28a7f01ec3a090f664
72008/10/22/2008.10.22_16.44.01-d470205a1d331a9d3765b3762b7c954bb8efc6ea.jpg2023-11-17 00:44:18.9423982008-10-22 16:44:01Italia-Arezzo43.4684416666666711.8815152008102216441ItaliaArezzonullnullnullnullnullnulld470205a1d331a9d3765b3762b7c954bb8efc6ea
82008/10/22/2008.10.22_17.00.07-a0ab699f5f99fce8ff49163e87c7590c2c9a66eb.jpg2023-11-17 00:44:18.9424012008-10-22 17:00:07Italia-Arezzo43.46445511.881478333333334200810221707ItaliaArezzonullnullnullnullnullnulla0ab699f5f99fce8ff49163e87c7590c2c9a66eb
92008/10/22/2008.10.22_16.52.15-6b89a245809031ecc47789cdeaa332545330fc39.jpg2023-11-17 00:44:18.9424012008-10-22 16:52:15Italia-Arezzo43.4672549999972211.87921333333333420081022165215ItaliaArezzonullnullnullnullnullnull6b89a245809031ecc47789cdeaa332545330fc39
102008/10/22/2008.10.22_16.55.37-dd42edcde2433a7df4a3d67bf61944a20884da89.jpg2023-11-17 00:44:18.9424022008-10-22 16:55:37Italia-Arezzo43.4660116666388911.8791116666388920081022165537ItaliaArezzonullnullnullnullnullnulldd42edcde2433a7df4a3d67bf61944a20884da89
112008/10/22/2008.10.22_16.43.21-3b0a3215b4f66d7ff4804dd223f192c21aee71bc.jpg2023-11-17 00:44:18.9424032008-10-22 16:43:21Italia-Arezzo43.46836511.88163499997222220081022164321ItaliaArezzonullnullnullnullnullnull3b0a3215b4f66d7ff4804dd223f192c21aee71bc
122008/10/22/2008.10.22_16.29.49-629b0b141634d6c0906e49af448bec8d755ba32c.jpg2023-11-17 00:44:18.9424032008-10-22 16:29:49Italia-Arezzo43.4671566666638911.88539499999722320081022162949ItaliaArezzonullnullnullnullnullnull629b0b141634d6c0906e49af448bec8d755ba32c
132008/10/22/2008.10.22_16.38.20-620d23336a12ab54f9f0190fe93960a4dba2df59.jpg2023-11-17 00:44:18.9424042008-10-22 16:38:20Italia-Arezzo43.46708166666389411.88453833333055520081022163820ItaliaArezzonullnullnullnullnullnull620d23336a12ab54f9f0190fe93960a4dba2df59
142008/10/22/2008.10.22_16.28.39-5d66eec547469a1817bda4abe35c801359b2bb55.jpg2023-11-17 00:44:18.9424052008-10-22 16:28:39Italia-Arezzo43.4674483333333411.88512666666388820081022162839ItaliaArezzonullnullnullnullnullnull5d66eec547469a1817bda4abe35c801359b2bb55
152008/10/22/2008.10.22_16.46.53-f670f2bb6c54898894b06b083185b05086bd4e6e.jpg2023-11-17 00:44:18.9424062008-10-22 16:46:53Italia-Arezzo43.46824333333055511.88017166663888920081022164653ItaliaArezzonullnullnullnullnullnullf670f2bb6c54898894b06b083185b05086bd4e6e
162005/12/14/2005.12.14_14.39.47-03cb14d5c68beed97cbe73164de9771d537fcd96.jpg2023-11-17 00:44:18.9424072005-12-14 14:39:47Italia-Firenze-Quartiere 143.7855944333333311.23461943333333420051214143947ItaliaFirenzeQuartiere 1nullnullnullnullnull03cb14d5c68beed97cbe73164de9771d537fcd96

3. Export all extracted information into a CSV Report With photo-cli info Command

Contents of photo-info.csv File in Markdown Table (output of info command)

Click to expand
PhotoPathPhotoNewPathPhotoDateTakenReverseGeocodeFormattedLatitudeLongitudePhotoTakenYearPhotoTakenMonthPhotoTakenDayPhotoTakenHourPhotoTakenMinutePhotoTakenSecondsAddress1Address2Address3Address4Address5Address6Address7Address8
/TestImages/DSC_5727.jpg08/13/2005 09:47:23Kenya-0.3712999999999999636.056416666666664200581394723Kenya
/TestImages/GOPR6742.jpg06/22/2012 19:52:31United Kingdom-Ascot-Sunninghill and Ascot51.424838333333334-0.67356166666666662012622195231United KingdomAscotSunninghill and Ascot
/TestImages/Italy album/DSC_1770.JPG10/22/2008 17:00:07Italia-Arezzo43.46445511.881478333333334200810221707ItaliaArezzo
/TestImages/Italy album/DSC_1771.JPG10/22/2008 16:52:15Italia-Arezzo43.4672549999972211.87921333333333420081022165215ItaliaArezzo
/TestImages/Italy album/IMG_0747.JPG10/22/2008 16:46:53Italia-Arezzo43.46824333333055511.88017166663888920081022164653ItaliaArezzo
/TestImages/Italy album/IMG_2371.jpg07/16/2008 11:33:202008716113320
/TestImages/Italy album/DSC_1770_(same).jpg10/22/2008 17:00:07Italia-Arezzo43.46445511.881478333333334200810221707ItaliaArezzo
/TestImages/Italy album/DJI_01733.jpg10/22/2008 16:43:21Italia-Arezzo43.46836511.88163499997222220081022164321ItaliaArezzo
/TestImages/Italy album/DSC00001.JPG10/22/2008 16:44:01Italia-Arezzo43.4684416666666711.8815152008102216441ItaliaArezzo
/TestImages/Italy album/DSC_1769.JPG10/22/2008 16:55:37Italia-Arezzo43.4660116666388911.8791116666388920081022165537ItaliaArezzo
/TestImages/Italy album/GOPR7497.jpg10/22/2008 16:28:39Italia-Arezzo43.4674483333333411.88512666666388820081022162839ItaliaArezzo
/TestImages/Italy album/DSC03467.jpg12/14/2005 14:39:47Italia-Firenze-Quartiere 143.7855944333333311.23461943333333420051214143947ItaliaFirenzeQuartiere 1
/TestImages/Italy album/GOPR7496.jpg10/22/2008 16:38:20Italia-Arezzo43.46708166666389411.88453833333055520081022163820ItaliaArezzo
/TestImages/Italy album/DJI_01732.jpg10/22/2008 16:29:49Italia-Arezzo43.4671566666638911.88539499999722320081022162949ItaliaArezzo
/TestImages/Spain Journey/DSC_1807.jpg04/10/2015 20:12:23España-Madrid40.44697222222222-3.7247527777777782015410201223EspañaMadrid
/TestImages/Spain Journey/DSC_1808.jpg04/10/2015 20:12:23España-Madrid40.44697222222222-3.7247527777777782015410201223EspañaMadrid
/TestImages/Spain Journey/IMG_5397.jpg

Contents of photo-info.csv File in Raw Text Format (report of info command)

Click to expand
PhotoPath,PhotoNewPath,PhotoDateTaken,ReverseGeocodeFormatted,Latitude,Longitude,PhotoTakenYear,PhotoTakenMonth,PhotoTakenDay,PhotoTakenHour,PhotoTakenMinute,PhotoTakenSeconds,Address1,Address2,Address3,Address4,Address5,Address6,Address7,Address8
/TestImages/DSC_5727.jpg,,08/13/2005 09:47:23,Kenya,-0.37129999999999996,36.056416666666664,2005,8,13,9,47,23,Kenya,,,,,,,
/TestImages/GOPR6742.jpg,,06/22/2012 19:52:31,United Kingdom-Ascot-Sunninghill and Ascot,51.424838333333334,-0.6735616666666666,2012,6,22,19,52,31,United Kingdom,Ascot,Sunninghill and Ascot,,,,,
/TestImages/Italy album/DSC_1770.JPG,,10/22/2008 17:00:07,Italia-Arezzo,43.464455,11.881478333333334,2008,10,22,17,0,7,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC_1771.JPG,,10/22/2008 16:52:15,Italia-Arezzo,43.46725499999722,11.879213333333334,2008,10,22,16,52,15,Italia,Arezzo,,,,,,
/TestImages/Italy album/IMG_0747.JPG,,10/22/2008 16:46:53,Italia-Arezzo,43.468243333330555,11.880171666638889,2008,10,22,16,46,53,Italia,Arezzo,,,,,,
/TestImages/Italy album/IMG_2371.jpg,,07/16/2008 11:33:20,,,,2008,7,16,11,33,20,,,,,,,,
/TestImages/Italy album/DSC_1770_(same).jpg,,10/22/2008 17:00:07,Italia-Arezzo,43.464455,11.881478333333334,2008,10,22,17,0,7,Italia,Arezzo,,,,,,
/TestImages/Italy album/DJI_01733.jpg,,10/22/2008 16:43:21,Italia-Arezzo,43.468365,11.881634999972222,2008,10,22,16,43,21,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC00001.JPG,,10/22/2008 16:44:01,Italia-Arezzo,43.46844166666667,11.881515,2008,10,22,16,44,1,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC_1769.JPG,,10/22/2008 16:55:37,Italia-Arezzo,43.46601166663889,11.87911166663889,2008,10,22,16,55,37,Italia,Arezzo,,,,,,
/TestImages/Italy album/GOPR7497.jpg,,10/22/2008 16:28:39,Italia-Arezzo,43.46744833333334,11.885126666663888,2008,10,22,16,28,39,Italia,Arezzo,,,,,,
/TestImages/Italy album/DSC03467.jpg,,12/14/2005 14:39:47,Italia-Firenze-Quartiere 1,43.78559443333333,11.234619433333334,2005,12,14,14,39,47,Italia,Firenze,Quartiere 1,,,,,
/TestImages/Italy album/GOPR7496.jpg,,10/22/2008 16:38:20,Italia-Arezzo,43.467081666663894,11.884538333330555,2008,10,22,16,38,20,Italia,Arezzo,,,,,,
/TestImages/Italy album/DJI_01732.jpg,,10/22/2008 16:29:49,Italia-Arezzo,43.46715666666389,11.885394999997223,2008,10,22,16,29,49,Italia,Arezzo,,,,,,
/TestImages/Spain Journey/DSC_1807.jpg,,04/10/2015 20:12:23,España-Madrid,40.44697222222222,-3.724752777777778,2015,4,10,20,12,23,España,Madrid,,,,,,
/TestImages/Spain Journey/DSC_1808.jpg,,04/10/2015 20:12:23,España-Madrid,40.44697222222222,-3.724752777777778,2015,4,10,20,12,23,España,Madrid,,,,,,
/TestImages/Spain Journey/IMG_5397.jpg,,,,,,,,,,,,,,,,,,,

What Happened? / How It Is Processed?

There is some options and lots of customization settings, this is just a one of them. This information extracted is done by running only the following single command;

Command with explicit argument names & values

photo-cli info --all-folders --output photo-info.csv --reverse-geocode OpenStreetMapFoundation --openstreetmap-properties country city town suburb --no-taken-date Continue --no-coordinate Continue

Same command with shorter alias of all argument names & values

photo-cli info -a -o photo-info.csv -e 2 -r country city town suburb -t Continue -c Continue

Console/terminal output (as progress may take time, for each operation completion status shown as percentage)

Searching photos: finished. 17 photos found.
Parsing photo exif information: finished.
Reverse Geocoding: finished.
Writing csv report: finished.
- 15 photos has taken date and coordinate.
- 1 photos has taken date but no coordinate.
- 1 photos has no taken date and coordinate.

Step By Step photo-cli info Process

  1. As all folders is selected. We are gathering all photo paths in the source folder within subfolders.
  2. Extract EXIF data of each photograph's taken date and coordinate.
  3. As third-party reverse geocode is selected, we are building address with OpenStreetMap by using given administrative levels as city town suburb for each photograph.
  4. As no photograph taken date action is selected as Continue and no coordinate action is selected as Continue, they are listing in report with empty data.

4. Navigate Your Photo Locations on Google Maps & Earth

If you want to discover your photographs interactively in the world, you may do it by importing your CSV output (whether photo-cli copy or photo-cli info command) to Google Maps and Google Earth, you can interactively navigate through your photographs.

Google Maps

Open Google My Maps and after clicking Create a New Map, you can import your CSV file on a layer(you may add many layers).

google-maps

Google Earth Desktop

After installing Google Earth Desktop, on File menu, you can import your CSV file via Import menu item.

google-earth-desktop

Google Earth Web

To navigate your photographs on Google Earth Web, first you should import your CSV on Google Earth Desktop and save it as KMZ or KML. Then you can create a project and add this KML file.

google-earth-web google-earth-web