diff --git a/notebooks/make_df.ipynb b/notebooks/make_df.ipynb index b5486c8..1b7da6e 100644 --- a/notebooks/make_df.ipynb +++ b/notebooks/make_df.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "ffcab11d", "metadata": {}, "outputs": [], @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "a4cda272", "metadata": {}, "outputs": [], @@ -22,17 +22,185 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "09ee7182", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DateMedia TypeLocationDownload LinkMedia Download Url
02025-11-29 04:50:47+00:00VideoLatitude, Longitude: 44.110836, -94.217804https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
12025-11-29 04:49:56+00:00VideoLatitude, Longitude: 44.110767, -94.217705https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
22025-11-26 14:23:27+00:00VideoLatitude, Longitude: 44.354908, -93.96698https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
32025-11-26 14:18:45+00:00VideoLatitude, Longitude: 44.355003, -93.96696https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
42025-11-16 17:58:59+00:00ImageLatitude, Longitude: 46.184643, -94.363495https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
52025-11-12 02:10:34+00:00VideoLatitude, Longitude: 44.354897, -93.96707https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
62025-11-07 04:43:52+00:00VideoLatitude, Longitude: 44.354797, -93.96702https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
72025-10-27 21:50:11+00:00VideoLatitude, Longitude: 44.354794, -93.967026https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
82025-10-16 06:39:29+00:00VideoLatitude, Longitude: 40.4103, -104.70806https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
92025-10-14 20:46:28+00:00VideoLatitude, Longitude: 40.432137, -104.76975https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...
\n", + "
" + ], + "text/plain": [ + " Date Media Type \\\n", + "0 2025-11-29 04:50:47+00:00 Video \n", + "1 2025-11-29 04:49:56+00:00 Video \n", + "2 2025-11-26 14:23:27+00:00 Video \n", + "3 2025-11-26 14:18:45+00:00 Video \n", + "4 2025-11-16 17:58:59+00:00 Image \n", + "5 2025-11-12 02:10:34+00:00 Video \n", + "6 2025-11-07 04:43:52+00:00 Video \n", + "7 2025-10-27 21:50:11+00:00 Video \n", + "8 2025-10-16 06:39:29+00:00 Video \n", + "9 2025-10-14 20:46:28+00:00 Video \n", + "\n", + " Location \\\n", + "0 Latitude, Longitude: 44.110836, -94.217804 \n", + "1 Latitude, Longitude: 44.110767, -94.217705 \n", + "2 Latitude, Longitude: 44.354908, -93.96698 \n", + "3 Latitude, Longitude: 44.355003, -93.96696 \n", + "4 Latitude, Longitude: 46.184643, -94.363495 \n", + "5 Latitude, Longitude: 44.354897, -93.96707 \n", + "6 Latitude, Longitude: 44.354797, -93.96702 \n", + "7 Latitude, Longitude: 44.354794, -93.967026 \n", + "8 Latitude, Longitude: 40.4103, -104.70806 \n", + "9 Latitude, Longitude: 40.432137, -104.76975 \n", + "\n", + " Download Link \\\n", + "0 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "1 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "2 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "3 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "4 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "5 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "6 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "7 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "8 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "9 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "\n", + " Media Download Url \n", + "0 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "1 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "2 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "3 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "4 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "5 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "6 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "7 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "8 https://us-east1-aws.api.snapchat.com/dmd/mm?u... \n", + "9 https://us-east1-aws.api.snapchat.com/dmd/mm?u... " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df.head(10)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "d8fb8fd5", "metadata": {}, "outputs": [], @@ -44,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "71007845", "metadata": {}, "outputs": [], @@ -59,30 +227,251 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "68ed283f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DateMedia TypeLocationDownload LinkMedia Download Urlfile_dtlocation_latitudelocation_longitude
02025-11-29 04:50:47+00:00VideoLatitude, Longitude: 44.110836, -94.217804https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...2025-11-29_04-50-4744.11084-94.21780
12025-11-29 04:49:56+00:00VideoLatitude, Longitude: 44.110767, -94.217705https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...2025-11-29_04-49-5644.11077-94.21770
22025-11-26 14:23:27+00:00VideoLatitude, Longitude: 44.354908, -93.96698https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...2025-11-26_14-23-2744.35491-93.96698
32025-11-26 14:18:45+00:00VideoLatitude, Longitude: 44.355003, -93.96696https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...2025-11-26_14-18-4544.35500-93.96696
42025-11-16 17:58:59+00:00ImageLatitude, Longitude: 46.184643, -94.363495https://app.snapchat.com/dmd/memories?uid=098c...https://us-east1-aws.api.snapchat.com/dmd/mm?u...2025-11-16_17-58-5946.18464-94.36350
\n", + "
" + ], + "text/plain": [ + " Date Media Type \\\n", + "0 2025-11-29 04:50:47+00:00 Video \n", + "1 2025-11-29 04:49:56+00:00 Video \n", + "2 2025-11-26 14:23:27+00:00 Video \n", + "3 2025-11-26 14:18:45+00:00 Video \n", + "4 2025-11-16 17:58:59+00:00 Image \n", + "\n", + " Location \\\n", + "0 Latitude, Longitude: 44.110836, -94.217804 \n", + "1 Latitude, Longitude: 44.110767, -94.217705 \n", + "2 Latitude, Longitude: 44.354908, -93.96698 \n", + "3 Latitude, Longitude: 44.355003, -93.96696 \n", + "4 Latitude, Longitude: 46.184643, -94.363495 \n", + "\n", + " Download Link \\\n", + "0 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "1 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "2 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "3 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "4 https://app.snapchat.com/dmd/memories?uid=098c... \n", + "\n", + " Media Download Url file_dt \\\n", + "0 https://us-east1-aws.api.snapchat.com/dmd/mm?u... 2025-11-29_04-50-47 \n", + "1 https://us-east1-aws.api.snapchat.com/dmd/mm?u... 2025-11-29_04-49-56 \n", + "2 https://us-east1-aws.api.snapchat.com/dmd/mm?u... 2025-11-26_14-23-27 \n", + "3 https://us-east1-aws.api.snapchat.com/dmd/mm?u... 2025-11-26_14-18-45 \n", + "4 https://us-east1-aws.api.snapchat.com/dmd/mm?u... 2025-11-16_17-58-59 \n", + "\n", + " location_latitude location_longitude \n", + "0 44.11084 -94.21780 \n", + "1 44.11077 -94.21770 \n", + "2 44.35491 -93.96698 \n", + "3 44.35500 -93.96696 \n", + "4 46.18464 -94.36350 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df = df.apply(get_join_col, axis=1)\n", "df = df.apply(extract_lat_long, axis=1)\n", - "df.head(10)" + "df.head(5)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "713d3202", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filecreatedategpslatitudegpslongitude
0../downloads/2019-04-05_23-27-17.jpg---
1../downloads/2024-10-23_00-29-09.jpg2024:10:22 19:29:0944 deg 6' 15.76\" N94 deg 13' 10.52\" W
2../downloads/2025-02-16_00-09-41.mp42025:02:16 00:09:41--
3../downloads/2023-03-10_22-11-18.jpg2023:03:10 16:11:1840 deg 24' 39.14\" N104 deg 41' 33.90\" W
4../downloads/2024-02-24_22-18-07.jpg2024:02:24 16:18:0740 deg 25' 17.09\" N104 deg 45' 22.75\" W
\n", + "
" + ], + "text/plain": [ + " file createdate \\\n", + "0 ../downloads/2019-04-05_23-27-17.jpg - \n", + "1 ../downloads/2024-10-23_00-29-09.jpg 2024:10:22 19:29:09 \n", + "2 ../downloads/2025-02-16_00-09-41.mp4 2025:02:16 00:09:41 \n", + "3 ../downloads/2023-03-10_22-11-18.jpg 2023:03:10 16:11:18 \n", + "4 ../downloads/2024-02-24_22-18-07.jpg 2024:02:24 16:18:07 \n", + "\n", + " gpslatitude gpslongitude \n", + "0 - - \n", + "1 44 deg 6' 15.76\" N 94 deg 13' 10.52\" W \n", + "2 - - \n", + "3 40 deg 24' 39.14\" N 104 deg 41' 33.90\" W \n", + "4 40 deg 25' 17.09\" N 104 deg 45' 22.75\" W " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "metadata = pd.read_csv(\"../temp/filemetadata.csv\", sep=\"#\")\n", - "metadata.head(10)" + "metadata.head(5)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "cb28dcd6", "metadata": {}, "outputs": [], @@ -131,7 +520,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "97ee9100", "metadata": {}, "outputs": [], @@ -168,7 +557,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "8684b468", "metadata": {}, "outputs": [], @@ -185,19 +574,144 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "6a1e641e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
filecreatedategpslatitudegpslongitudeLatitudeLongitudefilenameextensionfile_dt
0../downloads/2019-04-05_23-27-17.jpg---0.000000.000002019-04-05_23-27-17.jpgjpg2019-04-05_23-27-17
1../downloads/2024-10-23_00-29-09.jpg2024:10:22 19:29:0944 deg 6' 15.76\" N94 deg 13' 10.52\" W44.10438-94.219592024-10-23_00-29-09.jpgjpg2024-10-23_00-29-09
2../downloads/2025-02-16_00-09-41.mp42025:02:16 00:09:41--0.000000.000002025-02-16_00-09-41.mp4mp42025-02-16_00-09-41
3../downloads/2023-03-10_22-11-18.jpg2023:03:10 16:11:1840 deg 24' 39.14\" N104 deg 41' 33.90\" W40.41087-104.692752023-03-10_22-11-18.jpgjpg2023-03-10_22-11-18
4../downloads/2024-02-24_22-18-07.jpg2024:02:24 16:18:0740 deg 25' 17.09\" N104 deg 45' 22.75\" W40.42141-104.756322024-02-24_22-18-07.jpgjpg2024-02-24_22-18-07
\n", + "
" + ], + "text/plain": [ + " file createdate \\\n", + "0 ../downloads/2019-04-05_23-27-17.jpg - \n", + "1 ../downloads/2024-10-23_00-29-09.jpg 2024:10:22 19:29:09 \n", + "2 ../downloads/2025-02-16_00-09-41.mp4 2025:02:16 00:09:41 \n", + "3 ../downloads/2023-03-10_22-11-18.jpg 2023:03:10 16:11:18 \n", + "4 ../downloads/2024-02-24_22-18-07.jpg 2024:02:24 16:18:07 \n", + "\n", + " gpslatitude gpslongitude Latitude Longitude \\\n", + "0 - - 0.00000 0.00000 \n", + "1 44 deg 6' 15.76\" N 94 deg 13' 10.52\" W 44.10438 -94.21959 \n", + "2 - - 0.00000 0.00000 \n", + "3 40 deg 24' 39.14\" N 104 deg 41' 33.90\" W 40.41087 -104.69275 \n", + "4 40 deg 25' 17.09\" N 104 deg 45' 22.75\" W 40.42141 -104.75632 \n", + "\n", + " filename extension file_dt \n", + "0 2019-04-05_23-27-17.jpg jpg 2019-04-05_23-27-17 \n", + "1 2024-10-23_00-29-09.jpg jpg 2024-10-23_00-29-09 \n", + "2 2025-02-16_00-09-41.mp4 mp4 2025-02-16_00-09-41 \n", + "3 2023-03-10_22-11-18.jpg jpg 2023-03-10_22-11-18 \n", + "4 2024-02-24_22-18-07.jpg jpg 2024-02-24_22-18-07 " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "meta = metadata.apply(convert_lat_long_to_decimal_degrees, axis=1)\n", "meta = meta.apply(get_file_name, axis=1)\n", - "meta.head(10)" + "meta.head(5)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "543eecf8", "metadata": {}, "outputs": [], @@ -231,7 +745,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "a162c993", "metadata": {}, "outputs": [], @@ -247,30 +761,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "b57f9726", "metadata": {}, "outputs": [], "source": [ "data = meta.apply(get_datetime_for_df, axis=1)\n", "data = data.apply(get_media_type, axis=1)\n", - "data.head(10)" + "# data.head(10)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "cea52cd0", "metadata": {}, "outputs": [], "source": [ "joined = pd.merge(df, data, how='left', left_on='file_dt', right_on='file_dt', suffixes=('_df', '_meta'))\n", - "joined.head(10)" + "# joined.head(10)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "3f350445", "metadata": {}, "outputs": [], @@ -293,18 +807,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "07ac5dd2", "metadata": {}, "outputs": [], "source": [ "df0 = joined[col_mapper.keys()].rename(columns=col_mapper)\n", - "df0.head(10)" + "# df0.head(10)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "192561b3", "metadata": {}, "outputs": [], @@ -326,7 +840,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "c89101b9", "metadata": {}, "outputs": [], @@ -337,26 +851,181 @@ "# 20 = Path\n", "\n", "df1 = df0.apply(check_for_errors, axis=1)\n", - "df1.head(10)" + "# df1.head(10)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "445c1b9b", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
correct_date_utccorrect_media_typecorrect_latitudecorrect_longitudepathfilenameactual_date_cstactual_latitudeactual_longitudeactual_media_typeerrors
6082024-05-11 05:50:50+00:00Video44.10428-94.21973NaNNaNNaNNaNNaNNaN21
8232023-11-29 17:14:20+00:00Image40.41069-104.69252../downloads/2023-11-29_17-14-20.jpg2023-11-29_17-14-20.jpg-0.00.00000Image6
8242023-11-29 17:14:20+00:00Image40.41069-104.69252../downloads/2023-11-29_17-14-20.jpg2023-11-29_17-14-20.jpg-0.00.00000Image6
9832023-09-04 23:46:07+00:00Image41.00173-102.19107../downloads/2023-09-04_23-46-07.jpg2023-09-04_23-46-07.jpg2023:09:04 18:46:070.0-102.19107Image2
14982022-06-26 00:36:04+00:00Image40.01046-105.00995../downloads/2022-06-26_00-36-04.jpg2022-06-26_00-36-04.jpg2022:06:25 19:36:040.00.00000Image2
\n", + "
" + ], + "text/plain": [ + " correct_date_utc correct_media_type correct_latitude \\\n", + "608 2024-05-11 05:50:50+00:00 Video 44.10428 \n", + "823 2023-11-29 17:14:20+00:00 Image 40.41069 \n", + "824 2023-11-29 17:14:20+00:00 Image 40.41069 \n", + "983 2023-09-04 23:46:07+00:00 Image 41.00173 \n", + "1498 2022-06-26 00:36:04+00:00 Image 40.01046 \n", + "\n", + " correct_longitude path \\\n", + "608 -94.21973 NaN \n", + "823 -104.69252 ../downloads/2023-11-29_17-14-20.jpg \n", + "824 -104.69252 ../downloads/2023-11-29_17-14-20.jpg \n", + "983 -102.19107 ../downloads/2023-09-04_23-46-07.jpg \n", + "1498 -105.00995 ../downloads/2022-06-26_00-36-04.jpg \n", + "\n", + " filename actual_date_cst actual_latitude \\\n", + "608 NaN NaN NaN \n", + "823 2023-11-29_17-14-20.jpg - 0.0 \n", + "824 2023-11-29_17-14-20.jpg - 0.0 \n", + "983 2023-09-04_23-46-07.jpg 2023:09:04 18:46:07 0.0 \n", + "1498 2022-06-26_00-36-04.jpg 2022:06:25 19:36:04 0.0 \n", + "\n", + " actual_longitude actual_media_type errors \n", + "608 NaN NaN 21 \n", + "823 0.00000 Image 6 \n", + "824 0.00000 Image 6 \n", + "983 -102.19107 Image 2 \n", + "1498 0.00000 Image 2 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "errors = df1[df1['errors'] > 0]\n", - "errors.head(10)" + "errors.head(5)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "de9ed1f5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(679, 11)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "errors.shape" ] @@ -371,10 +1040,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "0b325144", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(676, 11)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "img_errors = errors[errors['correct_media_type'] == 'Image']\n", "img_errors.shape" @@ -382,20 +1062,21 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "0649c3d6", - "metadata": {}, - "outputs": [], - "source": [ - "img_errors.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "3559f965", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 11)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "video_errors = errors[errors['correct_media_type'] == 'Video']\n", "video_errors.shape" @@ -403,65 +1084,230 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "49e183fd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
correct_date_utccorrect_media_typecorrect_latitudecorrect_longitudepathfilenameactual_date_cstactual_latitudeactual_longitudeactual_media_typeerrors
6082024-05-11 05:50:50+00:00Video44.10428-94.21973NaNNaNNaNNaNNaNNaN21
16332022-05-07 15:25:31+00:00Video0.000000.00000NaNNaNNaNNaNNaNNaN21
17632022-01-31 05:59:54+00:00Video40.43224-104.76977NaNNaNNaNNaNNaNNaN21
\n", + "
" + ], + "text/plain": [ + " correct_date_utc correct_media_type correct_latitude \\\n", + "608 2024-05-11 05:50:50+00:00 Video 44.10428 \n", + "1633 2022-05-07 15:25:31+00:00 Video 0.00000 \n", + "1763 2022-01-31 05:59:54+00:00 Video 40.43224 \n", + "\n", + " correct_longitude path filename actual_date_cst actual_latitude \\\n", + "608 -94.21973 NaN NaN NaN NaN \n", + "1633 0.00000 NaN NaN NaN NaN \n", + "1763 -104.76977 NaN NaN NaN NaN \n", + "\n", + " actual_longitude actual_media_type errors \n", + "608 NaN NaN 21 \n", + "1633 NaN NaN 21 \n", + "1763 NaN NaN 21 " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "video_errors.head(10)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "9e5569c5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
correct_date_utccorrect_media_typecorrect_latitudecorrect_longitudepathfilenameactual_date_cstactual_latitudeactual_longitudeactual_media_typeerrors
6082024-05-11 05:50:50+00:00Video44.10428-94.21973------21
16332022-05-07 15:25:31+00:00Video0.000000.00000------21
17632022-01-31 05:59:54+00:00Video40.43224-104.76977------21
\n", + "
" + ], + "text/plain": [ + " correct_date_utc correct_media_type correct_latitude \\\n", + "608 2024-05-11 05:50:50+00:00 Video 44.10428 \n", + "1633 2022-05-07 15:25:31+00:00 Video 0.00000 \n", + "1763 2022-01-31 05:59:54+00:00 Video 40.43224 \n", + "\n", + " correct_longitude path filename actual_date_cst actual_latitude \\\n", + "608 -94.21973 - - - - \n", + "1633 0.00000 - - - - \n", + "1763 -104.76977 - - - - \n", + "\n", + " actual_longitude actual_media_type errors \n", + "608 - - 21 \n", + "1633 - - 21 \n", + "1763 - - 21 " + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "wrong_filetype = df1[df1['correct_media_type'] != df1['actual_media_type']]\n", - "wrong_filetype.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a39979b", - "metadata": {}, - "outputs": [], - "source": [ - "wrong_filetype = wrong_filetype.fillna('-')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9714201c", - "metadata": {}, - "outputs": [], - "source": [ - "wrong_filetype.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2a77f8b5", - "metadata": {}, - "outputs": [], - "source": [ - "# to_change = wrong_filetype[wrong_filetype['path'] != '-']\n", - "# to_change.head(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f06455b4", - "metadata": {}, - "outputs": [], - "source": [ - "# import os\n", - "# os.rename(src=\"../downloads/2017-11-03_16-46-57.mp4\", dst=\"../downloads/2017-11-03_16-46-57.jpg\")" + "wrong_filetype = wrong_filetype.fillna('-')\n", + "wrong_filetype.head(5)" ] }, { @@ -494,6 +1340,828 @@ "source": [ "wrong_filetype.apply(change_filetype, axis=1)" ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "e7b8202f", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import subprocess\n", + "import os\n", + "\n", + "# --- 1. Define the Update Function ---\n", + "\n", + "def update_exif_with_exiftool(row):\n", + " \"\"\"\n", + " Constructs and runs the ExifTool command for a single image.\n", + " \"\"\"\n", + " image_path = row['path']\n", + " create_date = row['correct_date_utc']\n", + " latitude = row['correct_latitude']\n", + " longitude = row['correct_longitude']\n", + " \n", + " utc = pytz.utc\n", + " # Use the 'America/Chicago' zone which handles both CST (-6) and CDT (-5) automatically\n", + " central = pytz.timezone('America/Chicago')\n", + " # local_dt = utc_dt.astimezone(central)\n", + " # dt_utc = utc.localize(create_date)\n", + " dt_utc = create_date\n", + " dt_central = dt_utc.astimezone(central)\n", + " dt_str = dt_central.strftime(\"%Y:%m:%d %H:%M:%S\")\n", + " \n", + " lat_ref = 'N' if latitude >= 0 else 'S'\n", + " lon_ref = 'E' if longitude >= 0 else 'W'\n", + " \n", + " # Determine the time zone offset string (e.g., \"-05:00\" or \"-06:00\")\n", + " # This is critical for the viewing software to correctly interpret dt_str.\n", + " offset_str = dt_central.strftime('%z')\n", + " if len(offset_str) == 5:\n", + " offset_str = offset_str[:3] + \":\" + offset_str[3:] # Converts -0500 to -05:00\n", + "\n", + " if not os.path.exists(image_path):\n", + " print(f\"❌ File not found, skipping: {image_path}\")\n", + " return\n", + "\n", + " # ExifTool requires the date format to be adjusted slightly, \n", + " # and it automatically handles the degree/minute/second conversion.\n", + " # The date MUST be in 'YYYY:MM:DD HH:MM:SS' format (same as piexif).\n", + " \n", + " # We use -overwrite_original to avoid creating unnecessary backup files (.jpg_original)\n", + " # The -all= handles potential piexif conflicts by deleting all existing tags \n", + " # before adding new ones, but is commented out for safety.\n", + " # command = [\n", + " # 'exiftool',\n", + " # # '-all=', # <-- Optional: Use this to remove all existing metadata first\n", + " # # # Set all three date tags explicitly using the Central Time value\n", + " # f'-CreateDate={dt_str}'\n", + " # # f'-DateTime={dt_str}'\n", + " # # f'-DateTimeOriginal={dt_str}',\n", + " # # f'-DateTimeDigitized={dt_str}',\n", + " # f'-GPSLatitude={latitude}',\n", + " # f'-GPSLongitude={longitude}',\n", + " # f\"-GPSLatitudeRef='{lat_ref}'\",\n", + " # f\"-GPSLongitudeRef='{lon_ref}'\",\n", + " # '-overwrite_original',\n", + " # image_path\n", + " # ]\n", + " command = [\n", + " 'exiftool',\n", + " # Local time (Central Time) determined by pytz\n", + " f'-IFD0:DateTime={dt_str}',\n", + " f'-ExifIFD:DateTimeOriginal={dt_str}',\n", + " f'-ExifIFD:DateTimeDigitized={dt_str}',\n", + " \n", + " # Dynamic offset (-05:00 or -06:00) determined by pytz\n", + " f'-OffsetTimeOriginal={offset_str}',\n", + " \n", + " # GPS tags\n", + " f'-GPSLatitude={latitude}',\n", + " f'-GPSLongitude={longitude}',\n", + " f\"-GPSLatitudeRef='{lat_ref}'\",\n", + " f\"-GPSLongitudeRef='{lon_ref}'\",\n", + " \n", + " # Keep overwrite and target file\n", + " '-overwrite_original',\n", + " image_path\n", + " ]\n", + "\n", + " try:\n", + " # Run the command\n", + " result = subprocess.run(command, check=True, capture_output=True, text=True)\n", + " \n", + " # Check ExifTool output for success messages\n", + " if \"1 image files updated\" in result.stdout:\n", + " print(f\"✅ Updated: {image_path}\")\n", + " else:\n", + " # Print stderr if ExifTool reports an error (e.g., invalid data)\n", + " print(f\"⚠️ Warning updating {image_path}: {result.stderr.strip()}\")\n", + "\n", + " except subprocess.CalledProcessError as e:\n", + " print(f\"🛑 Subprocess Error on {image_path}: {e.stderr.strip()}\")\n", + " except FileNotFoundError:\n", + " print(\"🛑 ERROR: ExifTool command not found. Is ExifTool installed and in your PATH?\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "e2736799", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🛑 Subprocess Error on ../downloads/2023-11-29_17-14-20.jpg: Warning: Sorry, IFD0:DateTime doesn't exist or isn't writable\n", + "Warning: Sorry, ExifIFD:DateTimeDigitized doesn't exist or isn't writable\n", + "Error: Not a valid JPG (looks more like a PNG) - ../downloads/2023-11-29_17-14-20.jpg\n", + "🛑 Subprocess Error on ../downloads/2023-11-29_17-14-20.jpg: Warning: Sorry, IFD0:DateTime doesn't exist or isn't writable\n", + "Warning: Sorry, ExifIFD:DateTimeDigitized doesn't exist or isn't writable\n", + "Error: Not a valid JPG (looks more like a PNG) - ../downloads/2023-11-29_17-14-20.jpg\n", + "✅ Updated: ../downloads/2023-09-04_23-46-07.jpg\n", + "✅ Updated: ../downloads/2022-06-26_00-36-04.jpg\n", + "✅ Updated: ../downloads/2022-06-12_02-53-57.jpg\n", + "✅ Updated: ../downloads/2022-06-12_02-51-55.jpg\n", + "✅ Updated: ../downloads/2022-06-12_02-50-04.jpg\n", + "✅ Updated: ../downloads/2022-06-12_02-35-23.jpg\n", + "✅ Updated: ../downloads/2022-06-11_23-47-52.jpg\n", + "✅ Updated: ../downloads/2022-06-11_04-58-13.jpg\n", + "✅ Updated: ../downloads/2022-06-11_03-04-57.jpg\n", + "✅ Updated: ../downloads/2022-06-10_21-11-57.jpg\n", + "✅ Updated: ../downloads/2022-06-08_15-01-04.jpg\n", + "✅ Updated: ../downloads/2022-06-07_04-20-55.jpg\n", + "✅ Updated: ../downloads/2022-06-05_17-30-52.jpg\n", + "✅ Updated: ../downloads/2022-05-30_16-42-20.jpg\n", + "✅ Updated: ../downloads/2022-05-29_12-25-43.jpg\n", + "✅ Updated: ../downloads/2022-05-28_11-27-10.jpg\n", + "✅ Updated: ../downloads/2022-05-28_11-26-33.jpg\n", + "✅ Updated: ../downloads/2022-05-27_07-31-32.jpg\n", + "✅ Updated: ../downloads/2022-05-26_02-24-28.jpg\n", + "✅ Updated: ../downloads/2022-05-24_18-47-11.jpg\n", + "✅ Updated: ../downloads/2022-05-23_17-41-39.jpg\n", + "✅ Updated: ../downloads/2022-05-20_04-14-40.jpg\n", + "✅ Updated: ../downloads/2022-05-20_00-52-00.jpg\n", + "✅ Updated: ../downloads/2022-05-19_20-14-48.jpg\n", + "✅ Updated: ../downloads/2022-05-19_15-55-40.jpg\n", + "✅ Updated: ../downloads/2022-05-15_06-32-35.jpg\n", + "✅ Updated: ../downloads/2022-05-13_21-45-03.jpg\n", + "✅ Updated: ../downloads/2022-05-08_08-05-24.jpg\n", + "✅ Updated: ../downloads/2022-05-05_03-18-35.jpg\n", + "✅ Updated: ../downloads/2022-05-02_15-13-11.jpg\n", + "✅ Updated: ../downloads/2022-05-02_04-49-16.jpg\n", + "✅ Updated: ../downloads/2022-05-01_19-44-14.jpg\n", + "✅ Updated: ../downloads/2022-04-02_03-25-29.jpg\n", + "✅ Updated: ../downloads/2022-04-01_19-48-10.jpg\n", + "✅ Updated: ../downloads/2022-04-01_16-07-51.jpg\n", + "✅ Updated: ../downloads/2022-04-01_06-11-31.jpg\n", + "✅ Updated: ../downloads/2022-03-30_23-08-33.jpg\n", + "✅ Updated: ../downloads/2022-03-28_14-43-37.jpg\n", + "✅ Updated: ../downloads/2022-03-26_03-28-02.jpg\n", + "✅ Updated: ../downloads/2022-03-24_13-51-34.jpg\n", + "✅ Updated: ../downloads/2022-03-22_23-50-48.jpg\n", + "✅ Updated: ../downloads/2022-03-21_16-45-23.jpg\n", + "✅ Updated: ../downloads/2022-03-21_12-58-17.jpg\n", + "✅ Updated: ../downloads/2022-03-11_06-36-00.jpg\n", + "✅ Updated: ../downloads/2022-03-09_23-44-31.jpg\n", + "✅ Updated: ../downloads/2022-03-03_22-48-40.jpg\n", + "✅ Updated: ../downloads/2022-02-26_05-19-51.jpg\n", + "✅ Updated: ../downloads/2022-02-25_09-02-58.jpg\n", + "✅ Updated: ../downloads/2022-02-25_08-58-53.jpg\n", + "✅ Updated: ../downloads/2022-02-25_08-51-32.jpg\n", + "✅ Updated: ../downloads/2022-02-16_22-18-47.jpg\n", + "✅ Updated: ../downloads/2022-02-14_04-48-05.jpg\n", + "✅ Updated: ../downloads/2022-02-14_04-42-44.jpg\n", + "✅ Updated: ../downloads/2022-02-12_17-25-11.jpg\n", + "✅ Updated: ../downloads/2022-02-11_06-19-51.jpg\n", + "✅ Updated: ../downloads/2022-02-07_03-27-02.jpg\n", + "✅ Updated: ../downloads/2022-02-02_02-33-19.jpg\n", + "✅ Updated: ../downloads/2022-01-22_20-46-09.jpg\n", + "✅ Updated: ../downloads/2022-01-22_02-12-58.jpg\n", + "✅ Updated: ../downloads/2022-01-20_05-05-59.jpg\n", + "✅ Updated: ../downloads/2022-01-20_04-44-26.jpg\n", + "✅ Updated: ../downloads/2022-01-19_17-11-07.jpg\n", + "✅ Updated: ../downloads/2022-01-18_22-11-31.jpg\n", + "✅ Updated: ../downloads/2022-01-16_06-45-03.jpg\n", + "✅ Updated: ../downloads/2022-01-15_21-34-48.jpg\n", + "✅ Updated: ../downloads/2022-01-12_02-13-08.jpg\n", + "✅ Updated: ../downloads/2022-01-11_04-33-53.jpg\n", + "✅ Updated: ../downloads/2022-01-11_01-20-01.jpg\n", + "✅ Updated: ../downloads/2022-01-08_08-36-36.jpg\n", + "✅ Updated: ../downloads/2022-01-06_21-16-08.jpg\n", + "✅ Updated: ../downloads/2022-01-06_12-42-55.jpg\n", + "✅ Updated: ../downloads/2022-01-06_06-59-39.jpg\n", + "✅ Updated: ../downloads/2022-01-01_12-29-14.jpg\n", + "✅ Updated: ../downloads/2021-12-31_07-33-53.jpg\n", + "✅ Updated: ../downloads/2021-12-31_07-33-40.jpg\n", + "✅ Updated: ../downloads/2021-12-31_00-41-24.jpg\n", + "✅ Updated: ../downloads/2021-12-30_02-08-29.jpg\n", + "✅ Updated: ../downloads/2021-12-26_04-18-16.jpg\n", + "✅ Updated: ../downloads/2021-12-22_08-42-59.jpg\n", + "✅ Updated: ../downloads/2021-12-20_09-27-59.jpg\n", + "✅ Updated: ../downloads/2021-12-20_09-26-06.jpg\n", + "✅ Updated: ../downloads/2021-12-20_09-17-01.jpg\n", + "✅ Updated: ../downloads/2021-12-20_02-18-32.jpg\n", + "✅ Updated: ../downloads/2021-12-19_22-42-03.jpg\n", + "✅ Updated: ../downloads/2021-12-14_05-34-58.jpg\n", + "✅ Updated: ../downloads/2021-12-14_04-19-53.jpg\n", + "✅ Updated: ../downloads/2021-12-14_04-15-42.jpg\n", + "✅ Updated: ../downloads/2021-12-12_20-29-04.jpg\n", + "✅ Updated: ../downloads/2021-12-05_02-49-59.jpg\n", + "✅ Updated: ../downloads/2021-12-04_23-47-52.jpg\n", + "✅ Updated: ../downloads/2021-12-04_07-20-21.jpg\n", + "✅ Updated: ../downloads/2021-11-30_06-12-26.jpg\n", + "✅ Updated: ../downloads/2021-11-30_06-11-01.jpg\n", + "✅ Updated: ../downloads/2021-11-30_06-05-40.jpg\n", + "✅ Updated: ../downloads/2021-11-27_08-15-06.jpg\n", + "✅ Updated: ../downloads/2021-11-27_05-30-41.jpg\n", + "✅ Updated: ../downloads/2021-11-26_05-11-35.jpg\n", + "✅ Updated: ../downloads/2021-11-24_03-03-13.jpg\n", + "✅ Updated: ../downloads/2021-11-21_18-55-42.jpg\n", + "✅ Updated: ../downloads/2021-11-20_09-37-51.jpg\n", + "✅ Updated: ../downloads/2021-11-20_09-37-39.jpg\n", + "✅ Updated: ../downloads/2021-11-20_09-36-31.jpg\n", + "✅ Updated: ../downloads/2021-11-20_09-36-14.jpg\n", + "✅ Updated: ../downloads/2021-11-20_08-20-32.jpg\n", + "✅ Updated: ../downloads/2021-11-20_08-20-24.jpg\n", + "✅ Updated: ../downloads/2021-11-20_08-19-49.jpg\n", + "✅ Updated: ../downloads/2021-11-20_07-33-09.jpg\n", + "✅ Updated: ../downloads/2021-11-20_07-32-59.jpg\n", + "✅ Updated: ../downloads/2021-11-18_00-25-36.jpg\n", + "✅ Updated: ../downloads/2021-11-17_07-22-50.jpg\n", + "✅ Updated: ../downloads/2021-11-14_09-37-36.jpg\n", + "✅ Updated: ../downloads/2021-11-14_08-31-15.jpg\n", + "✅ Updated: ../downloads/2021-11-12_23-40-55.jpg\n", + "✅ Updated: ../downloads/2021-11-10_00-08-17.jpg\n", + "✅ Updated: ../downloads/2021-11-10_00-04-40.jpg\n", + "✅ Updated: ../downloads/2021-11-10_00-04-26.jpg\n", + "✅ Updated: ../downloads/2021-11-09_17-06-36.jpg\n", + "✅ Updated: ../downloads/2021-11-09_06-43-51.jpg\n", + "✅ Updated: ../downloads/2021-11-09_06-41-00.jpg\n", + "✅ Updated: ../downloads/2021-11-09_04-43-32.jpg\n", + "✅ Updated: ../downloads/2021-11-09_03-24-55.jpg\n", + "✅ Updated: ../downloads/2021-11-09_01-31-56.jpg\n", + "✅ Updated: ../downloads/2021-11-08_23-11-11.jpg\n", + "✅ Updated: ../downloads/2021-11-08_01-28-39.jpg\n", + "✅ Updated: ../downloads/2021-11-07_07-08-39.jpg\n", + "✅ Updated: ../downloads/2021-11-07_07-06-34.jpg\n", + "✅ Updated: ../downloads/2021-11-03_21-48-16.jpg\n", + "✅ Updated: ../downloads/2021-11-02_05-50-07.jpg\n", + "✅ Updated: ../downloads/2021-11-02_05-48-47.jpg\n", + "✅ Updated: ../downloads/2021-11-02_03-06-17.jpg\n", + "✅ Updated: ../downloads/2021-10-29_04-08-44.jpg\n", + "✅ Updated: ../downloads/2021-10-29_04-07-38.jpg\n", + "✅ Updated: ../downloads/2021-10-25_04-57-38.jpg\n", + "✅ Updated: ../downloads/2021-10-24_02-47-13.jpg\n", + "✅ Updated: ../downloads/2021-10-23_06-21-10.jpg\n", + "✅ Updated: ../downloads/2021-10-22_01-33-56.jpg\n", + "✅ Updated: ../downloads/2021-10-21_05-40-23.jpg\n", + "✅ Updated: ../downloads/2021-10-20_19-56-49.jpg\n", + "✅ Updated: ../downloads/2021-10-18_05-18-54.jpg\n", + "✅ Updated: ../downloads/2021-10-16_17-56-02.jpg\n", + "✅ Updated: ../downloads/2021-10-16_06-47-41.jpg\n", + "✅ Updated: ../downloads/2021-10-16_06-45-52.jpg\n", + "✅ Updated: ../downloads/2021-10-16_06-37-42.jpg\n", + "✅ Updated: ../downloads/2021-10-16_06-36-54.jpg\n", + "✅ Updated: ../downloads/2021-10-16_06-34-37.jpg\n", + "✅ Updated: ../downloads/2021-10-15_05-26-59.jpg\n", + "✅ Updated: ../downloads/2021-10-15_05-26-47.jpg\n", + "✅ Updated: ../downloads/2021-10-14_06-44-40.jpg\n", + "✅ Updated: ../downloads/2021-10-13_03-19-02.jpg\n", + "✅ Updated: ../downloads/2021-10-13_03-18-53.jpg\n", + "✅ Updated: ../downloads/2021-10-12_07-28-42.jpg\n", + "✅ Updated: ../downloads/2021-10-09_05-15-21.jpg\n", + "✅ Updated: ../downloads/2021-10-09_04-29-50.jpg\n", + "✅ Updated: ../downloads/2021-10-09_00-59-53.jpg\n", + "✅ Updated: ../downloads/2021-10-08_22-11-44.jpg\n", + "✅ Updated: ../downloads/2021-10-03_20-07-47.jpg\n", + "✅ Updated: ../downloads/2021-10-03_02-26-39.jpg\n", + "✅ Updated: ../downloads/2021-10-01_05-00-14.jpg\n", + "✅ Updated: ../downloads/2021-10-01_05-00-14.jpg\n", + "✅ Updated: ../downloads/2021-10-01_01-41-29.jpg\n", + "✅ Updated: ../downloads/2021-09-30_01-41-01.jpg\n", + "✅ Updated: ../downloads/2021-09-30_01-41-01.jpg\n", + "✅ Updated: ../downloads/2021-09-29_22-19-53.jpg\n", + "✅ Updated: ../downloads/2021-09-29_22-19-53.jpg\n", + "✅ Updated: ../downloads/2021-09-29_19-42-50.jpg\n", + "✅ Updated: ../downloads/2021-09-29_19-42-50.jpg\n", + "✅ Updated: ../downloads/2021-09-26_05-27-00.jpg\n", + "✅ Updated: ../downloads/2021-09-26_04-52-29.jpg\n", + "✅ Updated: ../downloads/2021-09-26_04-37-55.jpg\n", + "✅ Updated: ../downloads/2021-09-21_00-57-57.jpg\n", + "✅ Updated: ../downloads/2021-09-19_23-29-42.jpg\n", + "✅ Updated: ../downloads/2021-09-19_17-19-01.jpg\n", + "✅ Updated: ../downloads/2021-09-19_06-48-15.jpg\n", + "✅ Updated: ../downloads/2021-09-19_06-04-01.jpg\n", + "✅ Updated: ../downloads/2021-09-19_05-14-52.jpg\n", + "✅ Updated: ../downloads/2021-09-18_14-01-09.jpg\n", + "✅ Updated: ../downloads/2021-09-18_14-01-09.jpg\n", + "✅ Updated: ../downloads/2021-09-17_18-28-41.jpg\n", + "✅ Updated: ../downloads/2021-09-17_18-28-41.jpg\n", + "✅ Updated: ../downloads/2021-09-15_03-10-07.jpg\n", + "✅ Updated: ../downloads/2021-09-10_21-41-10.jpg\n", + "✅ Updated: ../downloads/2021-09-10_21-41-10.jpg\n", + "✅ Updated: ../downloads/2021-09-09_20-15-33.jpg\n", + "✅ Updated: ../downloads/2021-09-09_06-11-59.jpg\n", + "✅ Updated: ../downloads/2021-09-09_06-11-59.jpg\n", + "✅ Updated: ../downloads/2021-09-06_20-37-23.jpg\n", + "✅ Updated: ../downloads/2021-09-06_19-54-33.jpg\n", + "✅ Updated: ../downloads/2021-09-06_07-43-20.jpg\n", + "✅ Updated: ../downloads/2021-09-06_07-43-20.jpg\n", + "✅ Updated: ../downloads/2021-09-05_20-05-29.jpg\n", + "✅ Updated: ../downloads/2021-09-05_06-25-06.jpg\n", + "✅ Updated: ../downloads/2021-09-01_18-05-38.jpg\n", + "✅ Updated: ../downloads/2021-09-01_18-05-38.jpg\n", + "✅ Updated: ../downloads/2021-08-28_18-46-34.jpg\n", + "✅ Updated: ../downloads/2021-08-28_17-30-35.jpg\n", + "✅ Updated: ../downloads/2021-08-28_05-42-02.jpg\n", + "✅ Updated: ../downloads/2021-08-22_19-11-47.jpg\n", + "✅ Updated: ../downloads/2021-08-10_02-49-58.jpg\n", + "✅ Updated: ../downloads/2021-08-04_06-51-29.jpg\n", + "✅ Updated: ../downloads/2021-08-04_06-47-15.jpg\n", + "✅ Updated: ../downloads/2021-08-04_03-39-24.jpg\n", + "✅ Updated: ../downloads/2021-08-04_01-23-47.jpg\n", + "✅ Updated: ../downloads/2021-08-04_01-19-25.jpg\n", + "✅ Updated: ../downloads/2021-08-01_05-41-35.jpg\n", + "✅ Updated: ../downloads/2021-07-27_05-12-48.jpg\n", + "✅ Updated: ../downloads/2021-07-27_05-08-41.jpg\n", + "✅ Updated: ../downloads/2021-07-22_00-20-53.jpg\n", + "✅ Updated: ../downloads/2021-07-18_16-59-29.jpg\n", + "✅ Updated: ../downloads/2021-07-18_16-04-51.jpg\n", + "✅ Updated: ../downloads/2021-07-17_16-33-00.jpg\n", + "✅ Updated: ../downloads/2021-07-16_18-28-54.jpg\n", + "✅ Updated: ../downloads/2021-07-14_02-23-31.jpg\n", + "✅ Updated: ../downloads/2021-07-13_23-22-05.jpg\n", + "✅ Updated: ../downloads/2021-07-13_22-38-34.jpg\n", + "✅ Updated: ../downloads/2021-07-09_23-23-26.jpg\n", + "✅ Updated: ../downloads/2021-07-09_22-18-18.jpg\n", + "✅ Updated: ../downloads/2021-07-07_23-14-54.jpg\n", + "✅ Updated: ../downloads/2021-07-04_03-29-56.jpg\n", + "✅ Updated: ../downloads/2021-07-03_19-21-40.jpg\n", + "✅ Updated: ../downloads/2021-07-03_19-21-31.jpg\n", + "✅ Updated: ../downloads/2021-07-01_19-47-55.jpg\n", + "✅ Updated: ../downloads/2021-07-01_17-37-04.jpg\n", + "✅ Updated: ../downloads/2021-07-01_16-54-59.jpg\n", + "✅ Updated: ../downloads/2021-07-01_06-38-22.jpg\n", + "✅ Updated: ../downloads/2021-06-24_16-17-43.jpg\n", + "✅ Updated: ../downloads/2021-06-12_00-43-05.jpg\n", + "✅ Updated: ../downloads/2021-06-08_21-08-58.jpg\n", + "✅ Updated: ../downloads/2021-06-07_04-21-10.jpg\n", + "✅ Updated: ../downloads/2021-06-04_17-55-16.jpg\n", + "✅ Updated: ../downloads/2021-06-03_21-37-00.jpg\n", + "✅ Updated: ../downloads/2021-06-03_01-08-16.jpg\n", + "✅ Updated: ../downloads/2021-06-03_01-01-57.jpg\n", + "✅ Updated: ../downloads/2021-05-31_05-51-11.jpg\n", + "✅ Updated: ../downloads/2021-05-29_17-55-40.jpg\n", + "✅ Updated: ../downloads/2021-05-28_22-43-51.jpg\n", + "✅ Updated: ../downloads/2021-05-28_22-42-39.jpg\n", + "✅ Updated: ../downloads/2021-05-27_01-19-49.jpg\n", + "✅ Updated: ../downloads/2021-05-26_02-57-42.jpg\n", + "✅ Updated: ../downloads/2021-05-26_02-48-53.jpg\n", + "✅ Updated: ../downloads/2021-05-26_02-38-59.jpg\n", + "✅ Updated: ../downloads/2021-05-25_21-39-10.jpg\n", + "✅ Updated: ../downloads/2021-05-25_02-11-24.jpg\n", + "✅ Updated: ../downloads/2021-05-22_04-33-42.jpg\n", + "✅ Updated: ../downloads/2021-05-21_06-16-35.jpg\n", + "✅ Updated: ../downloads/2021-05-21_00-01-55.jpg\n", + "✅ Updated: ../downloads/2021-05-20_20-09-53.jpg\n", + "✅ Updated: ../downloads/2021-05-15_21-07-38.jpg\n", + "✅ Updated: ../downloads/2021-05-14_20-31-36.jpg\n", + "✅ Updated: ../downloads/2021-05-14_19-36-54.jpg\n", + "✅ Updated: ../downloads/2021-05-14_17-49-06.jpg\n", + "✅ Updated: ../downloads/2021-05-14_02-05-28.jpg\n", + "✅ Updated: ../downloads/2021-05-13_04-21-04.jpg\n", + "✅ Updated: ../downloads/2021-05-13_00-31-13.jpg\n", + "✅ Updated: ../downloads/2021-05-11_19-03-52.jpg\n", + "✅ Updated: ../downloads/2021-05-04_19-07-29.jpg\n", + "✅ Updated: ../downloads/2021-05-03_00-44-51.jpg\n", + "✅ Updated: ../downloads/2021-05-02_00-51-19.jpg\n", + "✅ Updated: ../downloads/2021-04-30_19-19-41.jpg\n", + "✅ Updated: ../downloads/2021-04-30_19-07-54.jpg\n", + "✅ Updated: ../downloads/2021-04-30_02-45-11.jpg\n", + "✅ Updated: ../downloads/2021-04-30_02-40-30.jpg\n", + "✅ Updated: ../downloads/2021-04-29_00-59-51.jpg\n", + "✅ Updated: ../downloads/2021-04-28_02-30-55.jpg\n", + "✅ Updated: ../downloads/2021-04-27_01-45-19.jpg\n", + "✅ Updated: ../downloads/2021-04-27_01-19-45.jpg\n", + "✅ Updated: ../downloads/2021-04-26_00-23-15.jpg\n", + "✅ Updated: ../downloads/2021-04-24_04-56-43.jpg\n", + "✅ Updated: ../downloads/2021-04-24_04-56-13.jpg\n", + "✅ Updated: ../downloads/2021-04-24_04-55-29.jpg\n", + "✅ Updated: ../downloads/2021-04-24_04-18-17.jpg\n", + "✅ Updated: ../downloads/2021-04-24_04-12-24.jpg\n", + "✅ Updated: ../downloads/2021-04-24_03-55-47.jpg\n", + "✅ Updated: ../downloads/2021-04-24_03-54-56.jpg\n", + "✅ Updated: ../downloads/2021-04-24_03-31-20.jpg\n", + "✅ Updated: ../downloads/2021-04-24_02-11-18.jpg\n", + "✅ Updated: ../downloads/2021-04-24_02-04-34.jpg\n", + "✅ Updated: ../downloads/2021-04-23_18-25-02.jpg\n", + "✅ Updated: ../downloads/2021-04-23_10-17-41.jpg\n", + "✅ Updated: ../downloads/2021-04-23_05-17-56.jpg\n", + "✅ Updated: ../downloads/2021-04-21_14-27-43.jpg\n", + "✅ Updated: ../downloads/2021-04-19_22-00-39.jpg\n", + "✅ Updated: ../downloads/2021-04-19_14-25-43.jpg\n", + "✅ Updated: ../downloads/2021-04-19_00-50-38.jpg\n", + "✅ Updated: ../downloads/2021-04-19_00-47-38.jpg\n", + "✅ Updated: ../downloads/2021-04-18_15-30-46.jpg\n", + "✅ Updated: ../downloads/2021-04-17_23-54-33.jpg\n", + "✅ Updated: ../downloads/2021-04-17_04-22-57.jpg\n", + "✅ Updated: ../downloads/2021-04-17_04-19-02.jpg\n", + "✅ Updated: ../downloads/2021-04-17_04-10-02.jpg\n", + "✅ Updated: ../downloads/2021-04-17_04-06-49.jpg\n", + "✅ Updated: ../downloads/2021-04-16_04-30-12.jpg\n", + "✅ Updated: ../downloads/2021-04-16_04-24-08.jpg\n", + "✅ Updated: ../downloads/2021-04-14_17-47-50.jpg\n", + "✅ Updated: ../downloads/2021-04-13_16-46-27.jpg\n", + "✅ Updated: ../downloads/2021-04-12_02-12-35.jpg\n", + "✅ Updated: ../downloads/2021-04-12_00-28-53.jpg\n", + "✅ Updated: ../downloads/2021-04-11_14-33-51.jpg\n", + "✅ Updated: ../downloads/2021-04-09_21-11-06.jpg\n", + "✅ Updated: ../downloads/2021-04-09_21-10-42.jpg\n", + "✅ Updated: ../downloads/2021-04-09_06-54-21.jpg\n", + "✅ Updated: ../downloads/2021-04-05_21-29-59.jpg\n", + "✅ Updated: ../downloads/2021-04-05_21-27-58.jpg\n", + "✅ Updated: ../downloads/2021-04-05_03-16-59.jpg\n", + "✅ Updated: ../downloads/2021-04-05_03-16-30.jpg\n", + "✅ Updated: ../downloads/2021-04-05_00-09-49.jpg\n", + "✅ Updated: ../downloads/2021-04-05_00-09-39.jpg\n", + "✅ Updated: ../downloads/2021-04-05_00-05-54.jpg\n", + "✅ Updated: ../downloads/2021-04-04_20-02-23.jpg\n", + "✅ Updated: ../downloads/2021-04-03_22-20-26.jpg\n", + "✅ Updated: ../downloads/2021-04-03_03-36-01.jpg\n", + "✅ Updated: ../downloads/2021-04-03_03-25-57.jpg\n", + "✅ Updated: ../downloads/2021-04-01_17-19-35.jpg\n", + "✅ Updated: ../downloads/2021-04-01_04-57-53.jpg\n", + "✅ Updated: ../downloads/2021-03-31_22-27-44.jpg\n", + "✅ Updated: ../downloads/2021-03-31_16-50-49.jpg\n", + "✅ Updated: ../downloads/2021-03-30_23-37-26.jpg\n", + "✅ Updated: ../downloads/2021-03-27_02-17-11.jpg\n", + "✅ Updated: ../downloads/2021-03-24_22-13-52.jpg\n", + "✅ Updated: ../downloads/2021-03-21_23-48-06.jpg\n", + "✅ Updated: ../downloads/2021-03-18_20-12-32.jpg\n", + "✅ Updated: ../downloads/2021-03-18_04-02-50.jpg\n", + "✅ Updated: ../downloads/2021-03-18_02-18-26.jpg\n", + "✅ Updated: ../downloads/2021-03-18_01-18-22.jpg\n", + "✅ Updated: ../downloads/2021-03-16_22-18-20.jpg\n", + "✅ Updated: ../downloads/2021-03-12_05-57-15.jpg\n", + "✅ Updated: ../downloads/2021-03-12_05-54-32.jpg\n", + "✅ Updated: ../downloads/2021-03-07_16-05-49.jpg\n", + "✅ Updated: ../downloads/2021-03-05_04-13-32.jpg\n", + "✅ Updated: ../downloads/2021-03-02_02-50-30.jpg\n", + "✅ Updated: ../downloads/2021-02-28_06-33-44.jpg\n", + "✅ Updated: ../downloads/2021-02-28_04-01-32.jpg\n", + "✅ Updated: ../downloads/2021-02-23_22-04-13.jpg\n", + "✅ Updated: ../downloads/2021-02-16_20-04-58.jpg\n", + "✅ Updated: ../downloads/2021-02-11_22-33-14.jpg\n", + "✅ Updated: ../downloads/2021-02-09_19-21-50.jpg\n", + "✅ Updated: ../downloads/2021-02-07_01-21-34.jpg\n", + "✅ Updated: ../downloads/2021-01-31_15-38-03.jpg\n", + "✅ Updated: ../downloads/2021-01-28_19-26-51.jpg\n", + "✅ Updated: ../downloads/2021-01-25_03-04-27.jpg\n", + "✅ Updated: ../downloads/2021-01-24_03-49-58.jpg\n", + "✅ Updated: ../downloads/2021-01-23_20-28-50.jpg\n", + "✅ Updated: ../downloads/2021-01-22_17-16-42.jpg\n", + "✅ Updated: ../downloads/2021-01-16_18-34-04.jpg\n", + "✅ Updated: ../downloads/2021-01-15_18-54-45.jpg\n", + "✅ Updated: ../downloads/2021-01-14_19-32-40.jpg\n", + "✅ Updated: ../downloads/2021-01-11_01-19-23.jpg\n", + "✅ Updated: ../downloads/2021-01-09_07-06-49.jpg\n", + "✅ Updated: ../downloads/2021-01-08_00-09-30.jpg\n", + "✅ Updated: ../downloads/2021-01-06_18-42-52.jpg\n", + "✅ Updated: ../downloads/2021-01-04_05-32-51.jpg\n", + "✅ Updated: ../downloads/2021-01-03_16-23-36.jpg\n", + "✅ Updated: ../downloads/2021-01-02_18-23-33.jpg\n", + "✅ Updated: ../downloads/2020-12-31_08-02-24.jpg\n", + "✅ Updated: ../downloads/2020-12-30_22-54-50.jpg\n", + "✅ Updated: ../downloads/2020-12-30_18-43-51.jpg\n", + "✅ Updated: ../downloads/2020-12-28_19-44-53.jpg\n", + "✅ Updated: ../downloads/2020-12-25_04-19-09.jpg\n", + "✅ Updated: ../downloads/2020-12-25_03-24-33.jpg\n", + "✅ Updated: ../downloads/2020-12-22_04-56-33.jpg\n", + "✅ Updated: ../downloads/2020-12-20_03-44-56.jpg\n", + "✅ Updated: ../downloads/2020-12-20_02-43-33.jpg\n", + "✅ Updated: ../downloads/2020-12-20_02-07-16.jpg\n", + "✅ Updated: ../downloads/2020-12-17_19-08-36.jpg\n", + "✅ Updated: ../downloads/2020-12-17_00-24-02.jpg\n", + "✅ Updated: ../downloads/2020-12-16_21-58-47.jpg\n", + "✅ Updated: ../downloads/2020-12-08_18-09-54.jpg\n", + "✅ Updated: ../downloads/2020-12-07_06-23-32.jpg\n", + "✅ Updated: ../downloads/2020-12-03_19-29-15.jpg\n", + "✅ Updated: ../downloads/2020-11-29_21-49-31.jpg\n", + "✅ Updated: ../downloads/2020-11-27_22-52-44.jpg\n", + "✅ Updated: ../downloads/2020-11-26_16-57-31.jpg\n", + "✅ Updated: ../downloads/2020-11-26_01-04-17.jpg\n", + "✅ Updated: ../downloads/2020-11-21_21-02-08.jpg\n", + "✅ Updated: ../downloads/2020-11-14_20-13-42.jpg\n", + "✅ Updated: ../downloads/2020-11-07_05-14-19.jpg\n", + "✅ Updated: ../downloads/2020-11-04_03-37-05.jpg\n", + "✅ Updated: ../downloads/2020-11-04_03-35-59.jpg\n", + "✅ Updated: ../downloads/2020-11-01_03-32-38.jpg\n", + "✅ Updated: ../downloads/2020-10-31_02-36-30.jpg\n", + "✅ Updated: ../downloads/2020-10-23_20-46-13.jpg\n", + "✅ Updated: ../downloads/2020-10-17_06-01-36.jpg\n", + "✅ Updated: ../downloads/2020-10-17_04-42-47.jpg\n", + "✅ Updated: ../downloads/2020-10-16_00-42-41.jpg\n", + "✅ Updated: ../downloads/2020-10-15_06-40-10.jpg\n", + "✅ Updated: ../downloads/2020-10-11_22-14-31.jpg\n", + "✅ Updated: ../downloads/2020-10-11_03-05-35.jpg\n", + "✅ Updated: ../downloads/2020-10-11_03-05-14.jpg\n", + "✅ Updated: ../downloads/2020-10-11_03-03-34.jpg\n", + "✅ Updated: ../downloads/2020-10-10_21-07-44.jpg\n", + "✅ Updated: ../downloads/2020-10-08_01-04-03.jpg\n", + "✅ Updated: ../downloads/2020-10-08_01-03-24.jpg\n", + "✅ Updated: ../downloads/2020-10-01_21-39-48.jpg\n", + "✅ Updated: ../downloads/2020-09-08_20-07-45.jpg\n", + "✅ Updated: ../downloads/2020-09-04_00-51-58.jpg\n", + "✅ Updated: ../downloads/2020-09-03_18-54-23.jpg\n", + "✅ Updated: ../downloads/2020-08-31_00-11-38.jpg\n", + "✅ Updated: ../downloads/2020-08-29_04-01-49.jpg\n", + "✅ Updated: ../downloads/2020-08-26_22-55-34.jpg\n", + "✅ Updated: ../downloads/2020-08-15_01-43-14.jpg\n", + "✅ Updated: ../downloads/2020-08-14_14-30-23.jpg\n", + "✅ Updated: ../downloads/2020-08-07_22-10-15.jpg\n", + "✅ Updated: ../downloads/2020-08-05_05-01-53.jpg\n", + "✅ Updated: ../downloads/2020-08-05_04-03-25.jpg\n", + "✅ Updated: ../downloads/2020-08-04_05-02-01.jpg\n", + "✅ Updated: ../downloads/2020-08-03_03-19-43.jpg\n", + "✅ Updated: ../downloads/2020-08-03_03-19-12.jpg\n", + "✅ Updated: ../downloads/2020-08-02_05-09-39.jpg\n", + "✅ Updated: ../downloads/2020-08-01_16-28-13.jpg\n", + "✅ Updated: ../downloads/2020-07-31_03-29-01.jpg\n", + "✅ Updated: ../downloads/2020-07-31_03-27-30.jpg\n", + "✅ Updated: ../downloads/2020-07-25_04-36-03.jpg\n", + "✅ Updated: ../downloads/2020-07-24_16-32-43.jpg\n", + "✅ Updated: ../downloads/2020-07-22_02-48-06.jpg\n", + "✅ Updated: ../downloads/2020-07-21_15-23-11.jpg\n", + "✅ Updated: ../downloads/2020-07-14_02-36-58.jpg\n", + "✅ Updated: ../downloads/2020-07-04_08-30-53.jpg\n", + "✅ Updated: ../downloads/2020-07-02_00-20-25.jpg\n", + "✅ Updated: ../downloads/2020-07-01_23-59-11.jpg\n", + "✅ Updated: ../downloads/2020-07-01_16-09-55.jpg\n", + "✅ Updated: ../downloads/2020-07-01_00-06-12.jpg\n", + "✅ Updated: ../downloads/2020-06-29_17-42-18.jpg\n", + "✅ Updated: ../downloads/2020-06-25_21-24-44.jpg\n", + "✅ Updated: ../downloads/2020-06-25_21-23-34.jpg\n", + "✅ Updated: ../downloads/2020-06-10_03-31-32.jpg\n", + "✅ Updated: ../downloads/2020-05-30_05-01-33.jpg\n", + "✅ Updated: ../downloads/2020-05-24_01-47-43.jpg\n", + "✅ Updated: ../downloads/2020-05-23_02-52-02.jpg\n", + "✅ Updated: ../downloads/2020-05-17_05-22-21.jpg\n", + "✅ Updated: ../downloads/2020-05-09_04-15-30.jpg\n", + "✅ Updated: ../downloads/2020-05-01_01-20-36.jpg\n", + "✅ Updated: ../downloads/2020-04-23_22-14-43.jpg\n", + "✅ Updated: ../downloads/2020-04-23_18-56-42.jpg\n", + "✅ Updated: ../downloads/2020-04-19_20-07-03.jpg\n", + "✅ Updated: ../downloads/2020-04-19_00-22-12.jpg\n", + "✅ Updated: ../downloads/2020-04-16_20-22-12.jpg\n", + "✅ Updated: ../downloads/2020-04-12_04-16-51.jpg\n", + "✅ Updated: ../downloads/2020-04-07_16-05-06.jpg\n", + "✅ Updated: ../downloads/2020-04-07_15-47-41.jpg\n", + "✅ Updated: ../downloads/2020-04-04_20-49-30.jpg\n", + "✅ Updated: ../downloads/2020-03-30_21-04-23.jpg\n", + "✅ Updated: ../downloads/2020-03-23_18-56-05.jpg\n", + "✅ Updated: ../downloads/2020-03-23_01-12-05.jpg\n", + "✅ Updated: ../downloads/2020-03-19_16-00-59.jpg\n", + "✅ Updated: ../downloads/2020-03-19_05-11-22.jpg\n", + "✅ Updated: ../downloads/2020-03-19_04-09-49.jpg\n", + "✅ Updated: ../downloads/2020-03-19_03-46-12.jpg\n", + "✅ Updated: ../downloads/2020-03-16_07-00-45.jpg\n", + "✅ Updated: ../downloads/2020-03-16_05-28-52.jpg\n", + "✅ Updated: ../downloads/2020-03-15_21-34-30.jpg\n", + "✅ Updated: ../downloads/2020-03-14_17-20-00.jpg\n", + "✅ Updated: ../downloads/2020-03-14_05-31-03.jpg\n", + "✅ Updated: ../downloads/2020-03-14_00-20-07.jpg\n", + "✅ Updated: ../downloads/2020-03-14_00-18-57.jpg\n", + "✅ Updated: ../downloads/2020-03-14_00-11-35.jpg\n", + "✅ Updated: ../downloads/2020-03-13_23-29-27.jpg\n", + "✅ Updated: ../downloads/2020-03-13_22-07-51.jpg\n", + "✅ Updated: ../downloads/2020-03-13_20-31-30.jpg\n", + "✅ Updated: ../downloads/2020-03-07_04-07-56.jpg\n", + "✅ Updated: ../downloads/2020-03-07_03-41-17.jpg\n", + "✅ Updated: ../downloads/2020-03-06_05-27-14.jpg\n", + "✅ Updated: ../downloads/2020-03-04_18-23-21.jpg\n", + "✅ Updated: ../downloads/2020-02-29_06-46-35.jpg\n", + "✅ Updated: ../downloads/2020-02-29_06-32-03.jpg\n", + "✅ Updated: ../downloads/2020-02-29_06-12-04.jpg\n", + "✅ Updated: ../downloads/2020-02-29_05-57-30.jpg\n", + "✅ Updated: ../downloads/2020-02-19_04-04-40.jpg\n", + "✅ Updated: ../downloads/2020-02-19_01-52-34.jpg\n", + "✅ Updated: ../downloads/2020-02-17_22-51-52.jpg\n", + "✅ Updated: ../downloads/2020-02-16_19-51-38.jpg\n", + "✅ Updated: ../downloads/2020-02-12_04-20-00.jpg\n", + "✅ Updated: ../downloads/2020-02-09_16-34-25.jpg\n", + "✅ Updated: ../downloads/2020-02-08_00-53-21.jpg\n", + "✅ Updated: ../downloads/2020-02-06_01-42-00.jpg\n", + "✅ Updated: ../downloads/2020-02-05_21-11-29.jpg\n", + "✅ Updated: ../downloads/2020-02-02_01-38-05.jpg\n", + "✅ Updated: ../downloads/2020-01-31_20-12-47.jpg\n", + "✅ Updated: ../downloads/2020-01-30_19-46-38.jpg\n", + "✅ Updated: ../downloads/2020-01-26_23-52-19.jpg\n", + "✅ Updated: ../downloads/2020-01-26_16-37-30.jpg\n", + "✅ Updated: ../downloads/2020-01-19_04-16-55.jpg\n", + "✅ Updated: ../downloads/2020-01-19_04-03-52.jpg\n", + "✅ Updated: ../downloads/2020-01-18_01-30-08.jpg\n", + "✅ Updated: ../downloads/2020-01-16_04-11-25.jpg\n", + "✅ Updated: ../downloads/2020-01-10_04-57-48.jpg\n", + "✅ Updated: ../downloads/2020-01-10_01-49-54.jpg\n", + "✅ Updated: ../downloads/2020-01-10_01-49-14.jpg\n", + "✅ Updated: ../downloads/2020-01-10_01-48-58.jpg\n", + "✅ Updated: ../downloads/2020-01-05_17-05-12.jpg\n", + "✅ Updated: ../downloads/2020-01-05_15-55-01.jpg\n", + "✅ Updated: ../downloads/2020-01-02_03-16-14.jpg\n", + "✅ Updated: ../downloads/2020-01-01_07-26-25.jpg\n", + "✅ Updated: ../downloads/2020-01-01_07-24-13.jpg\n", + "✅ Updated: ../downloads/2020-01-01_07-21-58.jpg\n", + "✅ Updated: ../downloads/2020-01-01_04-54-35.jpg\n", + "✅ Updated: ../downloads/2019-12-30_15-18-08.jpg\n", + "✅ Updated: ../downloads/2019-12-28_07-32-30.jpg\n", + "✅ Updated: ../downloads/2019-12-28_00-22-52.jpg\n", + "✅ Updated: ../downloads/2019-12-26_02-46-56.jpg\n", + "✅ Updated: ../downloads/2019-12-13_03-50-08.jpg\n", + "✅ Updated: ../downloads/2019-12-12_04-33-39.jpg\n", + "✅ Updated: ../downloads/2019-12-07_06-24-01.jpg\n", + "✅ Updated: ../downloads/2019-12-06_03-43-13.jpg\n", + "✅ Updated: ../downloads/2019-12-02_04-27-32.jpg\n", + "✅ Updated: ../downloads/2019-12-01_04-49-18.jpg\n", + "✅ Updated: ../downloads/2019-11-11_17-35-27.jpg\n", + "✅ Updated: ../downloads/2019-11-11_17-35-10.jpg\n", + "✅ Updated: ../downloads/2019-11-11_17-11-10.jpg\n", + "✅ Updated: ../downloads/2019-11-10_19-29-15.jpg\n", + "✅ Updated: ../downloads/2019-11-04_02-28-48.jpg\n", + "✅ Updated: ../downloads/2019-11-01_02-22-09.jpg\n", + "✅ Updated: ../downloads/2019-11-01_02-08-38.jpg\n", + "✅ Updated: ../downloads/2019-10-31_12-52-46.jpg\n", + "✅ Updated: ../downloads/2019-10-19_01-30-30.jpg\n", + "✅ Updated: ../downloads/2019-10-18_03-24-00.jpg\n", + "✅ Updated: ../downloads/2019-10-18_03-09-26.jpg\n", + "✅ Updated: ../downloads/2019-10-16_21-45-42.jpg\n", + "✅ Updated: ../downloads/2019-10-13_03-19-21.jpg\n", + "✅ Updated: ../downloads/2019-10-12_02-15-50.jpg\n", + "✅ Updated: ../downloads/2019-10-12_02-02-59.jpg\n", + "✅ Updated: ../downloads/2019-10-11_03-03-19.jpg\n", + "✅ Updated: ../downloads/2019-10-08_17-21-15.jpg\n", + "✅ Updated: ../downloads/2019-10-07_00-36-26.jpg\n", + "✅ Updated: ../downloads/2019-10-06_04-23-03.jpg\n", + "✅ Updated: ../downloads/2019-10-04_02-35-23.jpg\n", + "✅ Updated: ../downloads/2019-10-03_22-31-03.jpg\n", + "✅ Updated: ../downloads/2019-09-07_02-11-39.jpg\n", + "✅ Updated: ../downloads/2019-09-05_23-39-50.jpg\n", + "✅ Updated: ../downloads/2019-08-30_02-58-31.jpg\n", + "✅ Updated: ../downloads/2019-08-27_17-27-20.jpg\n", + "✅ Updated: ../downloads/2019-08-25_08-24-04.jpg\n", + "✅ Updated: ../downloads/2019-08-25_08-09-38.jpg\n", + "✅ Updated: ../downloads/2019-08-23_02-34-17.jpg\n", + "✅ Updated: ../downloads/2019-08-20_17-00-48.jpg\n", + "✅ Updated: ../downloads/2019-08-12_01-50-00.jpg\n", + "✅ Updated: ../downloads/2019-08-09_17-15-34.jpg\n", + "✅ Updated: ../downloads/2019-07-23_03-37-02.jpg\n", + "✅ Updated: ../downloads/2019-07-20_03-46-15.jpg\n", + "✅ Updated: ../downloads/2019-07-20_03-03-25.jpg\n", + "✅ Updated: ../downloads/2019-07-15_14-26-39.jpg\n", + "✅ Updated: ../downloads/2019-07-14_20-34-21.jpg\n", + "✅ Updated: ../downloads/2019-07-10_17-32-40.jpg\n", + "✅ Updated: ../downloads/2019-07-09_03-31-07.jpg\n", + "✅ Updated: ../downloads/2019-07-04_15-54-29.jpg\n", + "✅ Updated: ../downloads/2019-07-01_18-49-53.jpg\n", + "✅ Updated: ../downloads/2019-07-01_17-31-56.jpg\n", + "✅ Updated: ../downloads/2019-06-23_02-32-54.jpg\n", + "✅ Updated: ../downloads/2019-06-13_17-09-45.jpg\n", + "✅ Updated: ../downloads/2019-06-13_07-05-48.jpg\n", + "✅ Updated: ../downloads/2019-06-12_03-27-00.jpg\n", + "✅ Updated: ../downloads/2019-06-02_19-31-32.jpg\n", + "✅ Updated: ../downloads/2019-05-27_20-01-38.jpg\n", + "✅ Updated: ../downloads/2019-05-25_21-10-36.jpg\n", + "✅ Updated: ../downloads/2019-05-11_04-30-58.jpg\n", + "✅ Updated: ../downloads/2019-05-04_15-08-46.jpg\n", + "✅ Updated: ../downloads/2019-05-04_03-22-30.jpg\n", + "✅ Updated: ../downloads/2019-05-04_03-15-01.jpg\n", + "✅ Updated: ../downloads/2019-04-24_04-49-12.jpg\n", + "✅ Updated: ../downloads/2019-04-18_19-01-07.jpg\n", + "✅ Updated: ../downloads/2019-04-05_23-27-17.jpg\n", + "✅ Updated: ../downloads/2019-03-29_03-02-16.jpg\n", + "✅ Updated: ../downloads/2019-03-24_02-02-05.jpg\n", + "✅ Updated: ../downloads/2019-03-12_15-18-48.jpg\n", + "✅ Updated: ../downloads/2019-03-12_06-32-26.jpg\n", + "✅ Updated: ../downloads/2019-03-07_13-59-40.jpg\n", + "✅ Updated: ../downloads/2019-03-05_16-06-11.jpg\n", + "✅ Updated: ../downloads/2019-03-02_03-05-22.jpg\n", + "✅ Updated: ../downloads/2019-02-26_14-17-55.jpg\n", + "✅ Updated: ../downloads/2019-02-23_07-55-33.jpg\n", + "✅ Updated: ../downloads/2019-02-20_23-40-54.jpg\n", + "✅ Updated: ../downloads/2019-02-17_04-06-41.jpg\n", + "✅ Updated: ../downloads/2019-02-07_22-33-53.jpg\n", + "✅ Updated: ../downloads/2019-01-24_05-59-16.jpg\n", + "✅ Updated: ../downloads/2019-01-23_22-50-09.jpg\n", + "✅ Updated: ../downloads/2019-01-20_01-09-12.jpg\n", + "✅ Updated: ../downloads/2019-01-19_06-27-45.jpg\n", + "✅ Updated: ../downloads/2018-12-26_06-49-45.jpg\n", + "✅ Updated: ../downloads/2018-12-26_05-56-45.jpg\n", + "✅ Updated: ../downloads/2018-12-22_02-37-30.jpg\n", + "✅ Updated: ../downloads/2018-12-20_01-53-38.jpg\n", + "✅ Updated: ../downloads/2018-12-16_03-49-03.jpg\n", + "✅ Updated: ../downloads/2018-12-15_02-43-56.jpg\n", + "✅ Updated: ../downloads/2018-12-02_21-23-44.jpg\n", + "✅ Updated: ../downloads/2018-11-29_02-47-47.jpg\n", + "✅ Updated: ../downloads/2018-11-26_02-46-23.jpg\n", + "✅ Updated: ../downloads/2018-10-25_00-35-08.jpg\n", + "✅ Updated: ../downloads/2018-10-18_02-59-22.jpg\n", + "✅ Updated: ../downloads/2018-09-20_13-33-07.jpg\n", + "✅ Updated: ../downloads/2018-09-20_02-30-02.jpg\n", + "✅ Updated: ../downloads/2018-09-20_02-29-58.jpg\n", + "✅ Updated: ../downloads/2018-09-14_18-02-05.jpg\n", + "✅ Updated: ../downloads/2018-09-11_21-47-11.jpg\n", + "✅ Updated: ../downloads/2018-09-11_21-43-22.jpg\n", + "✅ Updated: ../downloads/2018-09-11_20-02-09.jpg\n", + "✅ Updated: ../downloads/2018-09-10_01-53-04.jpg\n", + "✅ Updated: ../downloads/2018-09-09_06-02-17.jpg\n", + "✅ Updated: ../downloads/2018-09-09_05-46-02.jpg\n", + "✅ Updated: ../downloads/2018-09-08_16-34-00.jpg\n", + "✅ Updated: ../downloads/2018-09-08_03-36-50.jpg\n", + "✅ Updated: ../downloads/2018-09-06_17-51-20.jpg\n", + "✅ Updated: ../downloads/2018-09-06_01-03-49.jpg\n", + "✅ Updated: ../downloads/2018-09-03_01-15-21.jpg\n", + "✅ Updated: ../downloads/2018-09-02_14-12-58.jpg\n", + "✅ Updated: ../downloads/2018-08-25_23-14-47.jpg\n", + "✅ Updated: ../downloads/2018-08-23_02-48-57.jpg\n", + "✅ Updated: ../downloads/2018-08-23_01-17-19.jpg\n", + "✅ Updated: ../downloads/2018-08-22_23-38-03.jpg\n", + "✅ Updated: ../downloads/2018-08-22_23-05-07.jpg\n", + "✅ Updated: ../downloads/2018-08-22_22-23-57.jpg\n", + "✅ Updated: ../downloads/2018-08-21_17-46-00.jpg\n", + "✅ Updated: ../downloads/2018-08-19_18-44-38.jpg\n", + "✅ Updated: ../downloads/2018-08-19_02-02-58.jpg\n", + "✅ Updated: ../downloads/2018-08-18_15-29-23.jpg\n", + "✅ Updated: ../downloads/2018-08-14_19-33-30.jpg\n", + "✅ Updated: ../downloads/2018-08-10_00-14-08.jpg\n", + "✅ Updated: ../downloads/2018-08-10_00-06-22.jpg\n", + "✅ Updated: ../downloads/2018-08-07_03-07-02.jpg\n", + "✅ Updated: ../downloads/2018-08-03_08-04-39.jpg\n", + "✅ Updated: ../downloads/2018-08-02_23-26-36.jpg\n", + "✅ Updated: ../downloads/2018-08-01_20-42-12.jpg\n", + "✅ Updated: ../downloads/2018-07-22_02-17-41.jpg\n", + "✅ Updated: ../downloads/2018-07-20_08-01-39.jpg\n", + "✅ Updated: ../downloads/2018-07-19_19-58-32.jpg\n", + "✅ Updated: ../downloads/2018-07-14_02-47-19.jpg\n", + "✅ Updated: ../downloads/2018-07-13_17-23-08.jpg\n", + "✅ Updated: ../downloads/2018-06-26_01-29-12.jpg\n", + "✅ Updated: ../downloads/2018-06-24_12-43-53.jpg\n", + "✅ Updated: ../downloads/2018-06-21_20-27-22.jpg\n", + "✅ Updated: ../downloads/2018-06-16_18-32-01.jpg\n", + "✅ Updated: ../downloads/2018-05-19_21-32-15.jpg\n", + "✅ Updated: ../downloads/2018-05-14_20-56-54.jpg\n", + "✅ Updated: ../downloads/2018-05-12_14-45-54.jpg\n", + "✅ Updated: ../downloads/2017-11-03_16-46-57.jpg\n", + "✅ Updated: ../downloads/2017-11-02_22-19-51.jpg\n", + "✅ Updated: ../downloads/2017-11-01_02-25-10.jpg\n", + "✅ Updated: ../downloads/2017-10-29_02-18-17.jpg\n", + "✅ Updated: ../downloads/2017-10-29_02-17-58.jpg\n", + "✅ Updated: ../downloads/2017-10-29_02-16-08.jpg\n", + "✅ Updated: ../downloads/2017-10-29_02-15-24.jpg\n", + "✅ Updated: ../downloads/2017-10-22_18-56-44.jpg\n", + "✅ Updated: ../downloads/2017-10-13_16-43-21.jpg\n", + "✅ Updated: ../downloads/2017-10-13_14-32-47.jpg\n", + "✅ Updated: ../downloads/2017-10-13_14-19-28.jpg\n", + "✅ Updated: ../downloads/2017-10-10_02-26-11.jpg\n", + "✅ Updated: ../downloads/2017-10-09_13-00-32.jpg\n", + "✅ Updated: ../downloads/2017-09-17_01-37-19.jpg\n", + "✅ Updated: ../downloads/2017-09-11_00-47-20.jpg\n", + "✅ Updated: ../downloads/2017-09-05_17-30-55.jpg\n", + "✅ Updated: ../downloads/2017-09-05_17-29-27.jpg\n", + "✅ Updated: ../downloads/2017-09-05_17-28-22.jpg\n", + "✅ Updated: ../downloads/2017-07-22_18-01-44.jpg\n", + "✅ Updated: ../downloads/2017-07-21_14-45-29.jpg\n", + "✅ Updated: ../downloads/2017-07-21_14-45-29.jpg\n", + "✅ Updated: ../downloads/2017-07-14_18-52-13.jpg\n", + "✅ Updated: ../downloads/2017-07-14_18-51-57.jpg\n", + "✅ Updated: ../downloads/2017-07-14_18-47-55.jpg\n", + "✅ Updated: ../downloads/2017-07-14_18-47-22.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-13-56.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-13-56.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-13-21.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-13-21.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-08-49.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-08-46.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-08-46.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-01-44.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-01-44.jpg\n", + "✅ Updated: ../downloads/2017-07-04_16-01-44.jpg\n", + "✅ Updated: ../downloads/2017-07-04_15-48-53.jpg\n", + "✅ Updated: ../downloads/2017-07-04_00-13-30.jpg\n", + "✅ Updated: ../downloads/2017-06-09_22-44-18.jpg\n", + "✅ Updated: ../downloads/2017-06-09_21-49-04.jpg\n", + "✅ Updated: ../downloads/2017-06-09_21-34-38.jpg\n", + "✅ Updated: ../downloads/2017-05-27_01-00-16.jpg\n", + "✅ Updated: ../downloads/2017-05-27_00-59-40.jpg\n", + "✅ Updated: ../downloads/2017-05-25_14-50-13.jpg\n" + ] + }, + { + "data": { + "text/plain": [ + "823 None\n", + "824 None\n", + "983 None\n", + "1498 None\n", + "1519 None\n", + " ... \n", + "3965 None\n", + "3966 None\n", + "3968 None\n", + "3969 None\n", + "3972 None\n", + "Length: 676, dtype: object" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img_errors.apply(update_exif_with_exiftool, axis=1)" + ] } ], "metadata": { diff --git a/notebooks/verify_metadata.ipynb b/notebooks/verify_metadata.ipynb index d772ce6..add0b30 100644 --- a/notebooks/verify_metadata.ipynb +++ b/notebooks/verify_metadata.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 8, + "execution_count": 22, "id": "cf03ce25", "metadata": {}, "outputs": [], @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 23, "id": "326f265c", "metadata": {}, "outputs": [], @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 24, "id": "d659da7f", "metadata": {}, "outputs": [ @@ -120,7 +120,7 @@ "9 ../downloads/2024-07-25_04-57-56.mp4" ] }, - "execution_count": 10, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -132,7 +132,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 25, "id": "10071159", "metadata": {}, "outputs": [], @@ -169,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 26, "id": "6faafde0", "metadata": {}, "outputs": [], @@ -179,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 27, "id": "e4389a3e", "metadata": {}, "outputs": [ @@ -311,7 +311,7 @@ "9 - - " ] }, - "execution_count": 13, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -322,7 +322,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 28, "id": "66c681e4", "metadata": {}, "outputs": [], diff --git a/requirements.txt b/requirements.txt index 98c642b..56ac553 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,8 @@ exif>=1.6.1 httpx>=0.28.1 pydantic>=2.12.0 tqdm>=4.67.1 +pillow +piexif # For development jupyter diff --git a/temp/filemetadata.csv b/temp/filemetadata.csv index ab80930..e4681cd 100644 --- a/temp/filemetadata.csv +++ b/temp/filemetadata.csv @@ -64,7 +64,7 @@ file#createdate#gpslatitude#gpslongitude ../downloads/2020-10-11_05-59-33.mp4#2020:10:11 05:59:33#-#- ../downloads/2023-10-14_16-19-21.mp4#2023:10:14 16:19:21#-#- ../downloads/2018-05-28_01-15-56.mp4#2018:05:28 01:15:56#-#- -../downloads/2022-07-19_17-53-02.jpg#2022:07:19 12:53:02#"40 deg 24' 39.19"" N"#"104 deg 41' 34.06"" W" +../downloads/2022-07-19_17-53-02.jpg#2022:07:19 12:53:02#"40 deg 25' 55.98"" N"#"104 deg 46' 11.14"" W" ../downloads/2022-07-09_01-56-38.jpg#2022:07:08 20:56:38#"40 deg 26' 30.73"" N"#"104 deg 47' 46.39"" W" ../downloads/2020-12-02_19-08-25.mp4#2020:12:02 19:08:25#-#- ../downloads/2020-11-08_06-37-39.mp4#2020:11:08 06:37:39#-#- @@ -305,7 +305,7 @@ file#createdate#gpslatitude#gpslongitude ../downloads/2023-09-04_16-12-37.jpg#2023:09:04 11:12:37#"43 deg 30' 9.76"" N"#"95 deg 41' 0.78"" W" ../downloads/2023-06-25_00-00-42.mp4#2023:06:25 00:00:42#-#- ../downloads/2019-06-13_17-09-45.jpg#-#-#- -../downloads/2023-09-02_16-34-44.jpg#2023:09:02 11:34:44#"40 deg 24' 39.67"" N"#"104 deg 41' 30.82"" W" +../downloads/2023-09-02_16-34-44.jpg#2023:09:02 11:34:44#"44 deg 3' 7.50"" N"#"94 deg 24' 13.86"" W" ../downloads/2022-04-07_06-23-43.mp4#2022:04:07 06:23:43#-#- ../downloads/2021-05-27_01-19-49.jpg#-#-#- ../downloads/2020-09-04_00-51-58.jpg#-#-#- @@ -2668,7 +2668,7 @@ file#createdate#gpslatitude#gpslongitude ../downloads/2019-07-24_05-54-22.mp4#2019:07:24 05:54:22#-#- ../downloads/2024-02-08_14-44-00.mp4#2024:02:08 14:44:00#-#- ../downloads/2025-05-01_22-29-02.mp4#2025:05:01 22:29:02#-#- -../downloads/2023-05-27_01-48-57.jpg#2023:05:26 20:48:57#"45 deg 46' 2.03"" N"#"94 deg 14' 1.90"" W" +../downloads/2023-05-27_01-48-57.jpg#2023:05:26 20:48:57#"45 deg 45' 47.17"" N"#"94 deg 13' 42.74"" W" ../downloads/2022-04-01_16-07-15.mp4#2022:04:01 16:07:15#-#- ../downloads/2021-02-08_03-16-42.mp4#2021:02:08 03:16:42#-#- ../downloads/2025-01-20_13-52-49.mp4#2025:01:20 13:52:49#-#-