From 4317085bd79af523f1c2c409219d799deb423d04 Mon Sep 17 00:00:00 2001 From: Kristian Date: Mon, 11 May 2026 23:25:53 +0200 Subject: [PATCH 1/2] replace `photo_renamer.py` script with a Jupyter notebook for improved readability and interactivity --- ledsa/tools/photo_renamer.ipynb | 928 ++++++++++++++++++++++++++++++++ ledsa/tools/photo_renamer.py | 159 ------ 2 files changed, 928 insertions(+), 159 deletions(-) create mode 100644 ledsa/tools/photo_renamer.ipynb delete mode 100644 ledsa/tools/photo_renamer.py diff --git a/ledsa/tools/photo_renamer.ipynb b/ledsa/tools/photo_renamer.ipynb new file mode 100644 index 0000000..a28c90c --- /dev/null +++ b/ledsa/tools/photo_renamer.ipynb @@ -0,0 +1,928 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a1b2c3d4e5f60001", + "metadata": {}, + "source": [ + "# Photo Renamer\n", + "\n", + "Renames a set of images by their EXIF capture date. Images are renamed to `_.`, ordered chronologically. Secondary-format images (e.g. JPEGs created alongside RAW files with the same stem) are renamed to match." + ] + }, + { + "cell_type": "markdown", + "id": "a1b2c3d4e5f60002", + "metadata": {}, + "source": [ + "# Dependencies" + ] + }, + { + "cell_type": "code", + "id": "a1b2c3d4e5f60003", + "metadata": { + "ExecuteTime": { + "end_time": "2026-05-11T21:21:35.446112Z", + "start_time": "2026-05-11T21:21:35.040845Z" + } + }, + "source": [ + "import os\n", + "from datetime import datetime\n", + "from ledsa.core.image_reading import get_exif_entry" + ], + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "markdown", + "id": "a1b2c3d4e5f60004", + "metadata": {}, + "source": [ + "# Configuration" + ] + }, + { + "cell_type": "code", + "id": "a1b2c3d4e5f60005", + "metadata": { + "ExecuteTime": { + "end_time": "2026-05-11T21:21:37.467230Z", + "start_time": "2026-05-11T21:21:37.450192Z" + } + }, + "source": [ + "# Directory containing the images to rename\n", + "working_dir = \"/path/to/your/images\"\n", + "\n", + "# Base name used for renamed files\n", + "name = \"IMG\"\n", + "\n", + "# Primary file type (e.g. CR3, CR2, RAW) — these are sorted by EXIF capture date\n", + "primary_ext = \"CR3\"\n", + "\n", + "# Secondary file type sharing the same stem as each primary file (e.g. JPG) — set to None to skip\n", + "secondary_ext = \"JPG\"\n", + "\n", + "# Zero-padding width for the numeric counter (e.g. 4 → IMG_0001.CR3)\n", + "padding = 4" + ], + "outputs": [], + "execution_count": 2 + }, + { + "cell_type": "markdown", + "id": "a1b2c3d4e5f60006", + "metadata": {}, + "source": [ + "# Scan and Sort Images" + ] + }, + { + "cell_type": "code", + "id": "a1b2c3d4e5f60007", + "metadata": { + "ExecuteTime": { + "end_time": "2026-05-11T21:21:42.627656Z", + "start_time": "2026-05-11T21:21:41.832034Z" + } + }, + "source": [ + "primary_ext_norm = primary_ext.lstrip('.')\n", + "secondary_ext_norm = secondary_ext.lstrip('.') if secondary_ext else None\n", + "\n", + "# Collect all primary files\n", + "primary_files = [\n", + " f for f in os.listdir(working_dir)\n", + " if f.upper().endswith('.' + primary_ext_norm.upper())\n", + "]\n", + "\n", + "if not primary_files:\n", + " raise FileNotFoundError(f\"No .{primary_ext_norm} files found in {working_dir}\")\n", + "\n", + "print(f\"Found {len(primary_files)} .{primary_ext_norm} file(s). Reading EXIF capture dates...\\n\")\n", + "\n", + "# Read capture date for each primary file\n", + "records = []\n", + "failed = []\n", + "for fname in primary_files:\n", + " fpath = os.path.join(working_dir, fname)\n", + " try:\n", + " raw_date = get_exif_entry(fpath, 'DateTimeOriginal')\n", + " capture_dt = datetime.strptime(raw_date.strip(), \"%Y:%m:%d %H:%M:%S\")\n", + " records.append((fname, capture_dt))\n", + " except Exception as e:\n", + " failed.append((fname, str(e)))\n", + "\n", + "if failed:\n", + " print(\"WARNING: Could not read capture date for the following files (they will be skipped):\")\n", + " for fname, err in failed:\n", + " print(f\" {fname}: {err}\")\n", + " print()\n", + "\n", + "# Sort by capture date\n", + "records.sort(key=lambda x: x[1])\n", + "\n", + "# Build rename plan\n", + "rename_plan = [] # list of (old_path, new_path, old_secondary_path, new_secondary_path)\n", + "\n", + "for idx, (fname, capture_dt) in enumerate(records, start=1):\n", + " stem = os.path.splitext(fname)[0]\n", + " new_stem = f\"{name}_{idx:0{padding}d}\"\n", + "\n", + " old_primary = os.path.join(working_dir, fname)\n", + " new_primary = os.path.join(working_dir, f\"{new_stem}.{primary_ext_norm}\")\n", + "\n", + " old_secondary = None\n", + " new_secondary = None\n", + " if secondary_ext_norm:\n", + " # Try both the same case and upper/lower variants\n", + " for sec_candidate in [f\"{stem}.{secondary_ext_norm}\",\n", + " f\"{stem}.{secondary_ext_norm.upper()}\",\n", + " f\"{stem}.{secondary_ext_norm.lower()}\"]:\n", + " candidate_path = os.path.join(working_dir, sec_candidate)\n", + " if os.path.exists(candidate_path):\n", + " ext_used = os.path.splitext(sec_candidate)[1].lstrip('.')\n", + " old_secondary = candidate_path\n", + " new_secondary = os.path.join(working_dir, f\"{new_stem}.{ext_used}\")\n", + " break\n", + "\n", + " rename_plan.append((old_primary, new_primary, old_secondary, new_secondary, capture_dt))\n", + "\n", + "# Print renaming report\n", + "col_w = max(len(os.path.basename(r[0])) for r in rename_plan)\n", + "print(f\"{'Original':<{col_w}} {'Capture date':<22} {'New name'}\")\n", + "print(\"-\" * (col_w + 22 + 20))\n", + "for old_p, new_p, old_s, new_s, dt in rename_plan:\n", + " old_name = os.path.basename(old_p)\n", + " new_name = os.path.basename(new_p)\n", + " date_str = dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n", + " sec_info = f\" + {os.path.basename(old_s)} → {os.path.basename(new_s)}\" if old_s else \"\"\n", + " print(f\"{old_name:<{col_w}} {date_str:<22} {new_name}{sec_info}\")\n", + "\n", + "print(f\"\\nTotal: {len(rename_plan)} primary file(s) to rename\" +\n", + " (f\", {sum(1 for r in rename_plan if r[2])} with a matching {secondary_ext_norm} file\" if secondary_ext_norm else \"\") + \".\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 667 .CR2 file(s). Reading EXIF capture dates...\n", + "\n", + "Original Capture date New name\n", + "------------------------------------------------------\n", + "IMG_6493.CR2 2026-05-04 13:53:16 V001_0001.CR2 + IMG_6493.JPG → V001_0001.JPG\n", + "IMG_6494.CR2 2026-05-04 13:53:35 V001_0002.CR2 + IMG_6494.JPG → V001_0002.JPG\n", + "IMG_6495.CR2 2026-05-04 13:53:50 V001_0003.CR2 + IMG_6495.JPG → V001_0003.JPG\n", + "IMG_6496.CR2 2026-05-04 13:53:58 V001_0004.CR2 + IMG_6496.JPG → V001_0004.JPG\n", + "IMG_6497.CR2 2026-05-04 13:54:18 V001_0005.CR2 + IMG_6497.JPG → V001_0005.JPG\n", + "IMG_6498.CR2 2026-05-04 13:54:25 V001_0006.CR2 + IMG_6498.JPG → V001_0006.JPG\n", + "IMG_6499.CR2 2026-05-04 13:55:22 V001_0007.CR2 + IMG_6499.JPG → V001_0007.JPG\n", + "IMG_6500.CR2 2026-05-04 13:55:33 V001_0008.CR2 + IMG_6500.JPG → V001_0008.JPG\n", + "IMG_6501.CR2 2026-05-04 13:57:08 V001_0009.CR2 + IMG_6501.JPG → V001_0009.JPG\n", + "IMG_6502.CR2 2026-05-04 13:57:14 V001_0010.CR2 + IMG_6502.JPG → V001_0010.JPG\n", + "IMG_6503.CR2 2026-05-04 13:57:40 V001_0011.CR2 + IMG_6503.JPG → V001_0011.JPG\n", + "IMG_6504.CR2 2026-05-04 13:57:55 V001_0012.CR2 + IMG_6504.JPG → V001_0012.JPG\n", + "IMG_6505.CR2 2026-05-04 13:58:01 V001_0013.CR2 + IMG_6505.JPG → V001_0013.JPG\n", + "IMG_6506.CR2 2026-05-04 13:58:07 V001_0014.CR2 + IMG_6506.JPG → V001_0014.JPG\n", + "IMG_6507.CR2 2026-05-04 13:58:12 V001_0015.CR2 + IMG_6507.JPG → V001_0015.JPG\n", + "IMG_6508.CR2 2026-05-04 13:58:18 V001_0016.CR2 + IMG_6508.JPG → V001_0016.JPG\n", + "IMG_6509.CR2 2026-05-04 13:58:23 V001_0017.CR2 + IMG_6509.JPG → V001_0017.JPG\n", + "IMG_6510.CR2 2026-05-04 13:58:28 V001_0018.CR2 + IMG_6510.JPG → V001_0018.JPG\n", + "IMG_6511.CR2 2026-05-04 15:04:24 V001_0019.CR2 + IMG_6511.JPG → V001_0019.JPG\n", + "IMG_6512.CR2 2026-05-04 15:05:15 V001_0020.CR2 + IMG_6512.JPG → V001_0020.JPG\n", + "IMG_6513.CR2 2026-05-04 15:05:31 V001_0021.CR2 + IMG_6513.JPG → V001_0021.JPG\n", + "IMG_6514.CR2 2026-05-04 15:05:37 V001_0022.CR2 + IMG_6514.JPG → V001_0022.JPG\n", + "IMG_6515.CR2 2026-05-04 15:06:26 V001_0023.CR2 + IMG_6515.JPG → V001_0023.JPG\n", + "IMG_6516.CR2 2026-05-04 15:06:28 V001_0024.CR2 + IMG_6516.JPG → V001_0024.JPG\n", + "IMG_6517.CR2 2026-05-04 15:06:39 V001_0025.CR2 + IMG_6517.JPG → V001_0025.JPG\n", + "IMG_6518.CR2 2026-05-04 15:06:42 V001_0026.CR2 + IMG_6518.JPG → V001_0026.JPG\n", + "IMG_6519.CR2 2026-05-04 15:06:46 V001_0027.CR2 + IMG_6519.JPG → V001_0027.JPG\n", + "IMG_6520.CR2 2026-05-04 15:07:07 V001_0028.CR2 + IMG_6520.JPG → V001_0028.JPG\n", + "IMG_6521.CR2 2026-05-04 15:07:22 V001_0029.CR2 + IMG_6521.JPG → V001_0029.JPG\n", + "IMG_6522.CR2 2026-05-04 15:07:25 V001_0030.CR2 + IMG_6522.JPG → V001_0030.JPG\n", + "IMG_6523.CR2 2026-05-04 15:07:28 V001_0031.CR2 + IMG_6523.JPG → V001_0031.JPG\n", + "IMG_6524.CR2 2026-05-04 15:20:10 V001_0032.CR2 + IMG_6524.JPG → V001_0032.JPG\n", + "IMG_6525.CR2 2026-05-04 15:20:11 V001_0033.CR2 + IMG_6525.JPG → V001_0033.JPG\n", + "IMG_6526.CR2 2026-05-04 15:25:10 V001_0034.CR2 + IMG_6526.JPG → V001_0034.JPG\n", + "IMG_6527.CR2 2026-05-04 15:25:12 V001_0035.CR2 + IMG_6527.JPG → V001_0035.JPG\n", + "IMG_6528.CR2 2026-05-04 15:25:16 V001_0036.CR2 + IMG_6528.JPG → V001_0036.JPG\n", + "IMG_6529.CR2 2026-05-04 15:25:26 V001_0037.CR2 + IMG_6529.JPG → V001_0037.JPG\n", + "IMG_6530.CR2 2026-05-04 15:32:06 V001_0038.CR2 + IMG_6530.JPG → V001_0038.JPG\n", + "IMG_6531.CR2 2026-05-04 15:33:34 V001_0039.CR2 + IMG_6531.JPG → V001_0039.JPG\n", + "IMG_6532.CR2 2026-05-04 15:34:31 V001_0040.CR2 + IMG_6532.JPG → V001_0040.JPG\n", + "IMG_6533.CR2 2026-05-04 15:34:35 V001_0041.CR2 + IMG_6533.JPG → V001_0041.JPG\n", + "IMG_6534.CR2 2026-05-04 15:34:39 V001_0042.CR2 + IMG_6534.JPG → V001_0042.JPG\n", + "IMG_6535.CR2 2026-05-04 15:34:42 V001_0043.CR2 + IMG_6535.JPG → V001_0043.JPG\n", + "IMG_6536.CR2 2026-05-04 15:34:46 V001_0044.CR2 + IMG_6536.JPG → V001_0044.JPG\n", + "IMG_6537.CR2 2026-05-04 15:34:50 V001_0045.CR2 + IMG_6537.JPG → V001_0045.JPG\n", + "IMG_6538.CR2 2026-05-04 15:34:55 V001_0046.CR2 + IMG_6538.JPG → V001_0046.JPG\n", + "IMG_6539.CR2 2026-05-04 15:34:59 V001_0047.CR2 + IMG_6539.JPG → V001_0047.JPG\n", + "IMG_6540.CR2 2026-05-04 15:35:03 V001_0048.CR2 + IMG_6540.JPG → V001_0048.JPG\n", + "IMG_6541.CR2 2026-05-04 15:35:06 V001_0049.CR2 + IMG_6541.JPG → V001_0049.JPG\n", + "IMG_6542.CR2 2026-05-04 15:35:10 V001_0050.CR2 + IMG_6542.JPG → V001_0050.JPG\n", + "IMG_6543.CR2 2026-05-04 15:35:14 V001_0051.CR2 + IMG_6543.JPG → V001_0051.JPG\n", + "IMG_6544.CR2 2026-05-04 15:35:19 V001_0052.CR2 + IMG_6544.JPG → V001_0052.JPG\n", + "IMG_6545.CR2 2026-05-04 15:35:23 V001_0053.CR2 + IMG_6545.JPG → V001_0053.JPG\n", + "IMG_6546.CR2 2026-05-04 15:35:27 V001_0054.CR2 + IMG_6546.JPG → V001_0054.JPG\n", + "IMG_6547.CR2 2026-05-04 15:35:31 V001_0055.CR2 + IMG_6547.JPG → V001_0055.JPG\n", + "IMG_6548.CR2 2026-05-04 15:35:34 V001_0056.CR2 + IMG_6548.JPG → V001_0056.JPG\n", + "IMG_6549.CR2 2026-05-04 15:35:38 V001_0057.CR2 + IMG_6549.JPG → V001_0057.JPG\n", + "IMG_6550.CR2 2026-05-04 15:35:43 V001_0058.CR2 + IMG_6550.JPG → V001_0058.JPG\n", + "IMG_6551.CR2 2026-05-04 15:35:47 V001_0059.CR2 + IMG_6551.JPG → V001_0059.JPG\n", + "IMG_6552.CR2 2026-05-04 15:35:51 V001_0060.CR2 + IMG_6552.JPG → V001_0060.JPG\n", + "IMG_6553.CR2 2026-05-04 15:35:54 V001_0061.CR2 + IMG_6553.JPG → V001_0061.JPG\n", + "IMG_6554.CR2 2026-05-04 15:35:58 V001_0062.CR2 + IMG_6554.JPG → V001_0062.JPG\n", + "IMG_6555.CR2 2026-05-04 15:36:02 V001_0063.CR2 + IMG_6555.JPG → V001_0063.JPG\n", + "IMG_6556.CR2 2026-05-04 15:36:06 V001_0064.CR2 + IMG_6556.JPG → V001_0064.JPG\n", + "IMG_6557.CR2 2026-05-04 15:36:11 V001_0065.CR2 + IMG_6557.JPG → V001_0065.JPG\n", + "IMG_6558.CR2 2026-05-04 15:36:15 V001_0066.CR2 + IMG_6558.JPG → V001_0066.JPG\n", + "IMG_6559.CR2 2026-05-04 15:36:18 V001_0067.CR2 + IMG_6559.JPG → V001_0067.JPG\n", + "IMG_6560.CR2 2026-05-04 15:36:22 V001_0068.CR2 + IMG_6560.JPG → V001_0068.JPG\n", + "IMG_6561.CR2 2026-05-04 15:36:26 V001_0069.CR2 + IMG_6561.JPG → V001_0069.JPG\n", + "IMG_6562.CR2 2026-05-04 15:36:30 V001_0070.CR2 + IMG_6562.JPG → V001_0070.JPG\n", + "IMG_6563.CR2 2026-05-04 15:36:35 V001_0071.CR2 + IMG_6563.JPG → V001_0071.JPG\n", + "IMG_6564.CR2 2026-05-04 15:36:39 V001_0072.CR2 + IMG_6564.JPG → V001_0072.JPG\n", + "IMG_6565.CR2 2026-05-04 15:36:42 V001_0073.CR2 + IMG_6565.JPG → V001_0073.JPG\n", + "IMG_6566.CR2 2026-05-04 15:36:46 V001_0074.CR2 + IMG_6566.JPG → V001_0074.JPG\n", + "IMG_6567.CR2 2026-05-04 15:36:50 V001_0075.CR2 + IMG_6567.JPG → V001_0075.JPG\n", + "IMG_6568.CR2 2026-05-04 15:36:54 V001_0076.CR2 + IMG_6568.JPG → V001_0076.JPG\n", + "IMG_6569.CR2 2026-05-04 15:36:59 V001_0077.CR2 + IMG_6569.JPG → V001_0077.JPG\n", + "IMG_6570.CR2 2026-05-04 15:37:03 V001_0078.CR2 + IMG_6570.JPG → V001_0078.JPG\n", + "IMG_6571.CR2 2026-05-04 15:37:06 V001_0079.CR2 + IMG_6571.JPG → V001_0079.JPG\n", + "IMG_6572.CR2 2026-05-04 15:37:10 V001_0080.CR2 + IMG_6572.JPG → V001_0080.JPG\n", + "IMG_6573.CR2 2026-05-04 15:37:14 V001_0081.CR2 + IMG_6573.JPG → V001_0081.JPG\n", + "IMG_6574.CR2 2026-05-04 15:37:18 V001_0082.CR2 + IMG_6574.JPG → V001_0082.JPG\n", + "IMG_6575.CR2 2026-05-04 15:37:23 V001_0083.CR2 + IMG_6575.JPG → V001_0083.JPG\n", + "IMG_6576.CR2 2026-05-04 15:37:27 V001_0084.CR2 + IMG_6576.JPG → V001_0084.JPG\n", + "IMG_6577.CR2 2026-05-04 15:37:30 V001_0085.CR2 + IMG_6577.JPG → V001_0085.JPG\n", + "IMG_6578.CR2 2026-05-04 15:37:34 V001_0086.CR2 + IMG_6578.JPG → V001_0086.JPG\n", + "IMG_6579.CR2 2026-05-04 15:37:38 V001_0087.CR2 + IMG_6579.JPG → V001_0087.JPG\n", + "IMG_6580.CR2 2026-05-04 15:37:42 V001_0088.CR2 + IMG_6580.JPG → V001_0088.JPG\n", + "IMG_6581.CR2 2026-05-04 15:37:47 V001_0089.CR2 + IMG_6581.JPG → V001_0089.JPG\n", + "IMG_6582.CR2 2026-05-04 15:37:51 V001_0090.CR2 + IMG_6582.JPG → V001_0090.JPG\n", + "IMG_6583.CR2 2026-05-04 15:37:55 V001_0091.CR2 + IMG_6583.JPG → V001_0091.JPG\n", + "IMG_6584.CR2 2026-05-04 15:37:58 V001_0092.CR2 + IMG_6584.JPG → V001_0092.JPG\n", + "IMG_6585.CR2 2026-05-04 15:38:02 V001_0093.CR2 + IMG_6585.JPG → V001_0093.JPG\n", + "IMG_6586.CR2 2026-05-04 15:38:06 V001_0094.CR2 + IMG_6586.JPG → V001_0094.JPG\n", + "IMG_6587.CR2 2026-05-04 15:38:11 V001_0095.CR2 + IMG_6587.JPG → V001_0095.JPG\n", + "IMG_6588.CR2 2026-05-04 15:38:15 V001_0096.CR2 + IMG_6588.JPG → V001_0096.JPG\n", + "IMG_6589.CR2 2026-05-04 15:38:19 V001_0097.CR2 + IMG_6589.JPG → V001_0097.JPG\n", + "IMG_6590.CR2 2026-05-04 15:38:22 V001_0098.CR2 + IMG_6590.JPG → V001_0098.JPG\n", + "IMG_6591.CR2 2026-05-04 15:38:26 V001_0099.CR2 + IMG_6591.JPG → V001_0099.JPG\n", + "IMG_6592.CR2 2026-05-04 15:38:30 V001_0100.CR2 + IMG_6592.JPG → V001_0100.JPG\n", + "IMG_6593.CR2 2026-05-04 15:38:35 V001_0101.CR2 + IMG_6593.JPG → V001_0101.JPG\n", + "IMG_6594.CR2 2026-05-04 15:38:39 V001_0102.CR2 + IMG_6594.JPG → V001_0102.JPG\n", + "IMG_6595.CR2 2026-05-04 15:38:43 V001_0103.CR2 + IMG_6595.JPG → V001_0103.JPG\n", + "IMG_6596.CR2 2026-05-04 15:38:46 V001_0104.CR2 + IMG_6596.JPG → V001_0104.JPG\n", + "IMG_6597.CR2 2026-05-04 15:38:50 V001_0105.CR2 + IMG_6597.JPG → V001_0105.JPG\n", + "IMG_6598.CR2 2026-05-04 15:38:54 V001_0106.CR2 + IMG_6598.JPG → V001_0106.JPG\n", + "IMG_6599.CR2 2026-05-04 15:38:54 V001_0107.CR2 + IMG_6599.JPG → V001_0107.JPG\n", + "IMG_6600.CR2 2026-05-04 15:38:59 V001_0108.CR2 + IMG_6600.JPG → V001_0108.JPG\n", + "IMG_6601.CR2 2026-05-04 15:39:03 V001_0109.CR2 + IMG_6601.JPG → V001_0109.JPG\n", + "IMG_6602.CR2 2026-05-04 15:39:07 V001_0110.CR2 + IMG_6602.JPG → V001_0110.JPG\n", + "IMG_6603.CR2 2026-05-04 15:39:10 V001_0111.CR2 + IMG_6603.JPG → V001_0111.JPG\n", + "IMG_6604.CR2 2026-05-04 15:39:14 V001_0112.CR2 + IMG_6604.JPG → V001_0112.JPG\n", + "IMG_6605.CR2 2026-05-04 15:39:18 V001_0113.CR2 + IMG_6605.JPG → V001_0113.JPG\n", + "IMG_6606.CR2 2026-05-04 15:39:23 V001_0114.CR2 + IMG_6606.JPG → V001_0114.JPG\n", + "IMG_6607.CR2 2026-05-04 15:39:27 V001_0115.CR2 + IMG_6607.JPG → V001_0115.JPG\n", + "IMG_6608.CR2 2026-05-04 15:39:31 V001_0116.CR2 + IMG_6608.JPG → V001_0116.JPG\n", + "IMG_6609.CR2 2026-05-04 15:39:34 V001_0117.CR2 + IMG_6609.JPG → V001_0117.JPG\n", + "IMG_6610.CR2 2026-05-04 15:39:38 V001_0118.CR2 + IMG_6610.JPG → V001_0118.JPG\n", + "IMG_6611.CR2 2026-05-04 15:39:42 V001_0119.CR2 + IMG_6611.JPG → V001_0119.JPG\n", + "IMG_6612.CR2 2026-05-04 15:39:47 V001_0120.CR2 + IMG_6612.JPG → V001_0120.JPG\n", + "IMG_6613.CR2 2026-05-04 15:39:51 V001_0121.CR2 + IMG_6613.JPG → V001_0121.JPG\n", + "IMG_6614.CR2 2026-05-04 15:39:55 V001_0122.CR2 + IMG_6614.JPG → V001_0122.JPG\n", + "IMG_6615.CR2 2026-05-04 15:39:58 V001_0123.CR2 + IMG_6615.JPG → V001_0123.JPG\n", + "IMG_6616.CR2 2026-05-04 15:40:02 V001_0124.CR2 + IMG_6616.JPG → V001_0124.JPG\n", + "IMG_6617.CR2 2026-05-04 15:40:06 V001_0125.CR2 + IMG_6617.JPG → V001_0125.JPG\n", + "IMG_6618.CR2 2026-05-04 15:40:11 V001_0126.CR2 + IMG_6618.JPG → V001_0126.JPG\n", + "IMG_6619.CR2 2026-05-04 15:40:15 V001_0127.CR2 + IMG_6619.JPG → V001_0127.JPG\n", + "IMG_6620.CR2 2026-05-04 15:40:19 V001_0128.CR2 + IMG_6620.JPG → V001_0128.JPG\n", + "IMG_6621.CR2 2026-05-04 15:40:22 V001_0129.CR2 + IMG_6621.JPG → V001_0129.JPG\n", + "IMG_6622.CR2 2026-05-04 15:40:26 V001_0130.CR2 + IMG_6622.JPG → V001_0130.JPG\n", + "IMG_6623.CR2 2026-05-04 15:40:30 V001_0131.CR2 + IMG_6623.JPG → V001_0131.JPG\n", + "IMG_6624.CR2 2026-05-04 15:40:35 V001_0132.CR2 + IMG_6624.JPG → V001_0132.JPG\n", + "IMG_6625.CR2 2026-05-04 15:40:39 V001_0133.CR2 + IMG_6625.JPG → V001_0133.JPG\n", + "IMG_6626.CR2 2026-05-04 15:40:43 V001_0134.CR2 + IMG_6626.JPG → V001_0134.JPG\n", + "IMG_6627.CR2 2026-05-04 15:40:46 V001_0135.CR2 + IMG_6627.JPG → V001_0135.JPG\n", + "IMG_6628.CR2 2026-05-04 15:40:50 V001_0136.CR2 + IMG_6628.JPG → V001_0136.JPG\n", + "IMG_6629.CR2 2026-05-04 15:40:54 V001_0137.CR2 + IMG_6629.JPG → V001_0137.JPG\n", + "IMG_6630.CR2 2026-05-04 15:40:59 V001_0138.CR2 + IMG_6630.JPG → V001_0138.JPG\n", + "IMG_6631.CR2 2026-05-04 15:41:03 V001_0139.CR2 + IMG_6631.JPG → V001_0139.JPG\n", + "IMG_6632.CR2 2026-05-04 15:41:07 V001_0140.CR2 + IMG_6632.JPG → V001_0140.JPG\n", + "IMG_6633.CR2 2026-05-04 15:41:11 V001_0141.CR2 + IMG_6633.JPG → V001_0141.JPG\n", + "IMG_6634.CR2 2026-05-04 15:41:14 V001_0142.CR2 + IMG_6634.JPG → V001_0142.JPG\n", + "IMG_6635.CR2 2026-05-04 15:41:18 V001_0143.CR2 + IMG_6635.JPG → V001_0143.JPG\n", + "IMG_6636.CR2 2026-05-04 15:41:23 V001_0144.CR2 + IMG_6636.JPG → V001_0144.JPG\n", + "IMG_6637.CR2 2026-05-04 15:41:27 V001_0145.CR2 + IMG_6637.JPG → V001_0145.JPG\n", + "IMG_6638.CR2 2026-05-04 15:41:31 V001_0146.CR2 + IMG_6638.JPG → V001_0146.JPG\n", + "IMG_6639.CR2 2026-05-04 15:41:35 V001_0147.CR2 + IMG_6639.JPG → V001_0147.JPG\n", + "IMG_6640.CR2 2026-05-04 15:41:38 V001_0148.CR2 + IMG_6640.JPG → V001_0148.JPG\n", + "IMG_6641.CR2 2026-05-04 15:41:42 V001_0149.CR2 + IMG_6641.JPG → V001_0149.JPG\n", + "IMG_6642.CR2 2026-05-04 15:41:47 V001_0150.CR2 + IMG_6642.JPG → V001_0150.JPG\n", + "IMG_6643.CR2 2026-05-04 15:41:51 V001_0151.CR2 + IMG_6643.JPG → V001_0151.JPG\n", + "IMG_6644.CR2 2026-05-04 15:41:55 V001_0152.CR2 + IMG_6644.JPG → V001_0152.JPG\n", + "IMG_6645.CR2 2026-05-04 15:41:59 V001_0153.CR2 + IMG_6645.JPG → V001_0153.JPG\n", + "IMG_6646.CR2 2026-05-04 15:42:02 V001_0154.CR2 + IMG_6646.JPG → V001_0154.JPG\n", + "IMG_6647.CR2 2026-05-04 15:42:06 V001_0155.CR2 + IMG_6647.JPG → V001_0155.JPG\n", + "IMG_6648.CR2 2026-05-04 15:42:11 V001_0156.CR2 + IMG_6648.JPG → V001_0156.JPG\n", + "IMG_6649.CR2 2026-05-04 15:42:14 V001_0157.CR2 + IMG_6649.JPG → V001_0157.JPG\n", + "IMG_6650.CR2 2026-05-04 15:42:19 V001_0158.CR2 + IMG_6650.JPG → V001_0158.JPG\n", + "IMG_6651.CR2 2026-05-04 15:42:23 V001_0159.CR2 + IMG_6651.JPG → V001_0159.JPG\n", + "IMG_6652.CR2 2026-05-04 15:42:26 V001_0160.CR2 + IMG_6652.JPG → V001_0160.JPG\n", + "IMG_6653.CR2 2026-05-04 15:42:30 V001_0161.CR2 + IMG_6653.JPG → V001_0161.JPG\n", + "IMG_6654.CR2 2026-05-04 15:42:34 V001_0162.CR2 + IMG_6654.JPG → V001_0162.JPG\n", + "IMG_6655.CR2 2026-05-04 15:42:39 V001_0163.CR2 + IMG_6655.JPG → V001_0163.JPG\n", + "IMG_6656.CR2 2026-05-04 15:42:43 V001_0164.CR2 + IMG_6656.JPG → V001_0164.JPG\n", + "IMG_6657.CR2 2026-05-04 15:42:47 V001_0165.CR2 + IMG_6657.JPG → V001_0165.JPG\n", + "IMG_6658.CR2 2026-05-04 15:42:50 V001_0166.CR2 + IMG_6658.JPG → V001_0166.JPG\n", + "IMG_6659.CR2 2026-05-04 15:42:54 V001_0167.CR2 + IMG_6659.JPG → V001_0167.JPG\n", + "IMG_6660.CR2 2026-05-04 15:42:58 V001_0168.CR2 + IMG_6660.JPG → V001_0168.JPG\n", + "IMG_6661.CR2 2026-05-04 15:43:03 V001_0169.CR2 + IMG_6661.JPG → V001_0169.JPG\n", + "IMG_6662.CR2 2026-05-04 15:43:07 V001_0170.CR2 + IMG_6662.JPG → V001_0170.JPG\n", + "IMG_6663.CR2 2026-05-04 15:43:11 V001_0171.CR2 + IMG_6663.JPG → V001_0171.JPG\n", + "IMG_6664.CR2 2026-05-04 15:43:14 V001_0172.CR2 + IMG_6664.JPG → V001_0172.JPG\n", + "IMG_6665.CR2 2026-05-04 15:43:18 V001_0173.CR2 + IMG_6665.JPG → V001_0173.JPG\n", + "IMG_6666.CR2 2026-05-04 15:43:22 V001_0174.CR2 + IMG_6666.JPG → V001_0174.JPG\n", + "IMG_6667.CR2 2026-05-04 15:43:27 V001_0175.CR2 + IMG_6667.JPG → V001_0175.JPG\n", + "IMG_6668.CR2 2026-05-04 15:43:31 V001_0176.CR2 + IMG_6668.JPG → V001_0176.JPG\n", + "IMG_6669.CR2 2026-05-04 15:43:35 V001_0177.CR2 + IMG_6669.JPG → V001_0177.JPG\n", + "IMG_6670.CR2 2026-05-04 15:43:38 V001_0178.CR2 + IMG_6670.JPG → V001_0178.JPG\n", + "IMG_6671.CR2 2026-05-04 15:43:42 V001_0179.CR2 + IMG_6671.JPG → V001_0179.JPG\n", + "IMG_6672.CR2 2026-05-04 15:43:46 V001_0180.CR2 + IMG_6672.JPG → V001_0180.JPG\n", + "IMG_6673.CR2 2026-05-04 15:43:51 V001_0181.CR2 + IMG_6673.JPG → V001_0181.JPG\n", + "IMG_6674.CR2 2026-05-04 15:43:55 V001_0182.CR2 + IMG_6674.JPG → V001_0182.JPG\n", + "IMG_6675.CR2 2026-05-04 15:43:59 V001_0183.CR2 + IMG_6675.JPG → V001_0183.JPG\n", + "IMG_6676.CR2 2026-05-04 15:44:02 V001_0184.CR2 + IMG_6676.JPG → V001_0184.JPG\n", + "IMG_6677.CR2 2026-05-04 15:44:06 V001_0185.CR2 + IMG_6677.JPG → V001_0185.JPG\n", + "IMG_6678.CR2 2026-05-04 15:44:10 V001_0186.CR2 + IMG_6678.JPG → V001_0186.JPG\n", + "IMG_6679.CR2 2026-05-04 15:44:15 V001_0187.CR2 + IMG_6679.JPG → V001_0187.JPG\n", + "IMG_6680.CR2 2026-05-04 15:44:19 V001_0188.CR2 + IMG_6680.JPG → V001_0188.JPG\n", + "IMG_6681.CR2 2026-05-04 15:44:23 V001_0189.CR2 + IMG_6681.JPG → V001_0189.JPG\n", + "IMG_6682.CR2 2026-05-04 15:44:26 V001_0190.CR2 + IMG_6682.JPG → V001_0190.JPG\n", + "IMG_6683.CR2 2026-05-04 15:44:30 V001_0191.CR2 + IMG_6683.JPG → V001_0191.JPG\n", + "IMG_6684.CR2 2026-05-04 15:44:34 V001_0192.CR2 + IMG_6684.JPG → V001_0192.JPG\n", + "IMG_6685.CR2 2026-05-04 15:44:39 V001_0193.CR2 + IMG_6685.JPG → V001_0193.JPG\n", + "IMG_6686.CR2 2026-05-04 15:44:43 V001_0194.CR2 + IMG_6686.JPG → V001_0194.JPG\n", + "IMG_6687.CR2 2026-05-04 15:44:47 V001_0195.CR2 + IMG_6687.JPG → V001_0195.JPG\n", + "IMG_6688.CR2 2026-05-04 15:44:51 V001_0196.CR2 + IMG_6688.JPG → V001_0196.JPG\n", + "IMG_6689.CR2 2026-05-04 15:44:54 V001_0197.CR2 + IMG_6689.JPG → V001_0197.JPG\n", + "IMG_6690.CR2 2026-05-04 15:44:58 V001_0198.CR2 + IMG_6690.JPG → V001_0198.JPG\n", + "IMG_6691.CR2 2026-05-04 15:45:03 V001_0199.CR2 + IMG_6691.JPG → V001_0199.JPG\n", + "IMG_6692.CR2 2026-05-04 15:45:07 V001_0200.CR2 + IMG_6692.JPG → V001_0200.JPG\n", + "IMG_6693.CR2 2026-05-04 15:45:11 V001_0201.CR2 + IMG_6693.JPG → V001_0201.JPG\n", + "IMG_6694.CR2 2026-05-04 15:45:15 V001_0202.CR2 + IMG_6694.JPG → V001_0202.JPG\n", + "IMG_6695.CR2 2026-05-04 15:45:18 V001_0203.CR2 + IMG_6695.JPG → V001_0203.JPG\n", + "IMG_6696.CR2 2026-05-04 15:45:22 V001_0204.CR2 + IMG_6696.JPG → V001_0204.JPG\n", + "IMG_6697.CR2 2026-05-04 15:45:27 V001_0205.CR2 + IMG_6697.JPG → V001_0205.JPG\n", + "IMG_6698.CR2 2026-05-04 15:45:31 V001_0206.CR2 + IMG_6698.JPG → V001_0206.JPG\n", + "IMG_6699.CR2 2026-05-04 15:45:35 V001_0207.CR2 + IMG_6699.JPG → V001_0207.JPG\n", + "IMG_6700.CR2 2026-05-04 15:45:39 V001_0208.CR2 + IMG_6700.JPG → V001_0208.JPG\n", + "IMG_6701.CR2 2026-05-04 15:45:39 V001_0209.CR2 + IMG_6701.JPG → V001_0209.JPG\n", + "IMG_6702.CR2 2026-05-04 15:45:42 V001_0210.CR2 + IMG_6702.JPG → V001_0210.JPG\n", + "IMG_6703.CR2 2026-05-04 15:45:46 V001_0211.CR2 + IMG_6703.JPG → V001_0211.JPG\n", + "IMG_6704.CR2 2026-05-04 15:45:46 V001_0212.CR2 + IMG_6704.JPG → V001_0212.JPG\n", + "IMG_6705.CR2 2026-05-04 15:45:51 V001_0213.CR2 + IMG_6705.JPG → V001_0213.JPG\n", + "IMG_6706.CR2 2026-05-04 15:45:55 V001_0214.CR2 + IMG_6706.JPG → V001_0214.JPG\n", + "IMG_6707.CR2 2026-05-04 15:45:59 V001_0215.CR2 + IMG_6707.JPG → V001_0215.JPG\n", + "IMG_6708.CR2 2026-05-04 15:46:03 V001_0216.CR2 + IMG_6708.JPG → V001_0216.JPG\n", + "IMG_6709.CR2 2026-05-04 15:46:06 V001_0217.CR2 + IMG_6709.JPG → V001_0217.JPG\n", + "IMG_6710.CR2 2026-05-04 15:46:10 V001_0218.CR2 + IMG_6710.JPG → V001_0218.JPG\n", + "IMG_6711.CR2 2026-05-04 15:46:15 V001_0219.CR2 + IMG_6711.JPG → V001_0219.JPG\n", + "IMG_6712.CR2 2026-05-04 15:46:19 V001_0220.CR2 + IMG_6712.JPG → V001_0220.JPG\n", + "IMG_6713.CR2 2026-05-04 15:46:23 V001_0221.CR2 + IMG_6713.JPG → V001_0221.JPG\n", + "IMG_6714.CR2 2026-05-04 15:46:27 V001_0222.CR2 + IMG_6714.JPG → V001_0222.JPG\n", + "IMG_6715.CR2 2026-05-04 15:46:30 V001_0223.CR2 + IMG_6715.JPG → V001_0223.JPG\n", + "IMG_6716.CR2 2026-05-04 15:46:34 V001_0224.CR2 + IMG_6716.JPG → V001_0224.JPG\n", + "IMG_6717.CR2 2026-05-04 15:46:39 V001_0225.CR2 + IMG_6717.JPG → V001_0225.JPG\n", + "IMG_6718.CR2 2026-05-04 15:46:43 V001_0226.CR2 + IMG_6718.JPG → V001_0226.JPG\n", + "IMG_6719.CR2 2026-05-04 15:46:47 V001_0227.CR2 + IMG_6719.JPG → V001_0227.JPG\n", + "IMG_6720.CR2 2026-05-04 15:46:51 V001_0228.CR2 + IMG_6720.JPG → V001_0228.JPG\n", + "IMG_6721.CR2 2026-05-04 15:46:54 V001_0229.CR2 + IMG_6721.JPG → V001_0229.JPG\n", + "IMG_6722.CR2 2026-05-04 15:46:58 V001_0230.CR2 + IMG_6722.JPG → V001_0230.JPG\n", + "IMG_6723.CR2 2026-05-04 15:47:03 V001_0231.CR2 + IMG_6723.JPG → V001_0231.JPG\n", + "IMG_6724.CR2 2026-05-04 15:47:07 V001_0232.CR2 + IMG_6724.JPG → V001_0232.JPG\n", + "IMG_6725.CR2 2026-05-04 15:47:11 V001_0233.CR2 + IMG_6725.JPG → V001_0233.JPG\n", + "IMG_6726.CR2 2026-05-04 15:47:15 V001_0234.CR2 + IMG_6726.JPG → V001_0234.JPG\n", + "IMG_6727.CR2 2026-05-04 15:47:18 V001_0235.CR2 + IMG_6727.JPG → V001_0235.JPG\n", + "IMG_6728.CR2 2026-05-04 15:47:22 V001_0236.CR2 + IMG_6728.JPG → V001_0236.JPG\n", + "IMG_6729.CR2 2026-05-04 15:47:27 V001_0237.CR2 + IMG_6729.JPG → V001_0237.JPG\n", + "IMG_6730.CR2 2026-05-04 15:47:31 V001_0238.CR2 + IMG_6730.JPG → V001_0238.JPG\n", + "IMG_6731.CR2 2026-05-04 15:47:35 V001_0239.CR2 + IMG_6731.JPG → V001_0239.JPG\n", + "IMG_6732.CR2 2026-05-04 15:47:39 V001_0240.CR2 + IMG_6732.JPG → V001_0240.JPG\n", + "IMG_6733.CR2 2026-05-04 15:47:42 V001_0241.CR2 + IMG_6733.JPG → V001_0241.JPG\n", + "IMG_6734.CR2 2026-05-04 15:47:46 V001_0242.CR2 + IMG_6734.JPG → V001_0242.JPG\n", + "IMG_6735.CR2 2026-05-04 15:47:51 V001_0243.CR2 + IMG_6735.JPG → V001_0243.JPG\n", + "IMG_6736.CR2 2026-05-04 15:47:55 V001_0244.CR2 + IMG_6736.JPG → V001_0244.JPG\n", + "IMG_6737.CR2 2026-05-04 15:47:59 V001_0245.CR2 + IMG_6737.JPG → V001_0245.JPG\n", + "IMG_6738.CR2 2026-05-04 15:48:03 V001_0246.CR2 + IMG_6738.JPG → V001_0246.JPG\n", + "IMG_6739.CR2 2026-05-04 15:48:07 V001_0247.CR2 + IMG_6739.JPG → V001_0247.JPG\n", + "IMG_6740.CR2 2026-05-04 15:48:10 V001_0248.CR2 + IMG_6740.JPG → V001_0248.JPG\n", + "IMG_6741.CR2 2026-05-04 15:48:15 V001_0249.CR2 + IMG_6741.JPG → V001_0249.JPG\n", + "IMG_6742.CR2 2026-05-04 15:48:19 V001_0250.CR2 + IMG_6742.JPG → V001_0250.JPG\n", + "IMG_6743.CR2 2026-05-04 15:48:23 V001_0251.CR2 + IMG_6743.JPG → V001_0251.JPG\n", + "IMG_6744.CR2 2026-05-04 15:48:27 V001_0252.CR2 + IMG_6744.JPG → V001_0252.JPG\n", + "IMG_6745.CR2 2026-05-04 15:48:31 V001_0253.CR2 + IMG_6745.JPG → V001_0253.JPG\n", + "IMG_6746.CR2 2026-05-04 15:48:34 V001_0254.CR2 + IMG_6746.JPG → V001_0254.JPG\n", + "IMG_6747.CR2 2026-05-04 15:48:38 V001_0255.CR2 + IMG_6747.JPG → V001_0255.JPG\n", + "IMG_6748.CR2 2026-05-04 15:48:42 V001_0256.CR2 + IMG_6748.JPG → V001_0256.JPG\n", + "IMG_6749.CR2 2026-05-04 15:48:47 V001_0257.CR2 + IMG_6749.JPG → V001_0257.JPG\n", + "IMG_6750.CR2 2026-05-04 15:48:51 V001_0258.CR2 + IMG_6750.JPG → V001_0258.JPG\n", + "IMG_6751.CR2 2026-05-04 15:48:55 V001_0259.CR2 + IMG_6751.JPG → V001_0259.JPG\n", + "IMG_6752.CR2 2026-05-04 15:48:58 V001_0260.CR2 + IMG_6752.JPG → V001_0260.JPG\n", + "IMG_6753.CR2 2026-05-04 15:49:02 V001_0261.CR2 + IMG_6753.JPG → V001_0261.JPG\n", + "IMG_6754.CR2 2026-05-04 15:49:06 V001_0262.CR2 + IMG_6754.JPG → V001_0262.JPG\n", + "IMG_6755.CR2 2026-05-04 15:49:11 V001_0263.CR2 + IMG_6755.JPG → V001_0263.JPG\n", + "IMG_6756.CR2 2026-05-04 15:49:15 V001_0264.CR2 + IMG_6756.JPG → V001_0264.JPG\n", + "IMG_6757.CR2 2026-05-04 15:49:19 V001_0265.CR2 + IMG_6757.JPG → V001_0265.JPG\n", + "IMG_6758.CR2 2026-05-04 15:49:22 V001_0266.CR2 + IMG_6758.JPG → V001_0266.JPG\n", + "IMG_6759.CR2 2026-05-04 15:49:26 V001_0267.CR2 + IMG_6759.JPG → V001_0267.JPG\n", + "IMG_6760.CR2 2026-05-04 15:49:31 V001_0268.CR2 + IMG_6760.JPG → V001_0268.JPG\n", + "IMG_6761.CR2 2026-05-04 15:49:35 V001_0269.CR2 + IMG_6761.JPG → V001_0269.JPG\n", + "IMG_6762.CR2 2026-05-04 15:49:39 V001_0270.CR2 + IMG_6762.JPG → V001_0270.JPG\n", + "IMG_6763.CR2 2026-05-04 15:49:43 V001_0271.CR2 + IMG_6763.JPG → V001_0271.JPG\n", + "IMG_6764.CR2 2026-05-04 15:49:46 V001_0272.CR2 + IMG_6764.JPG → V001_0272.JPG\n", + "IMG_6765.CR2 2026-05-04 15:49:50 V001_0273.CR2 + IMG_6765.JPG → V001_0273.JPG\n", + "IMG_6766.CR2 2026-05-04 15:49:55 V001_0274.CR2 + IMG_6766.JPG → V001_0274.JPG\n", + "IMG_6767.CR2 2026-05-04 15:49:59 V001_0275.CR2 + IMG_6767.JPG → V001_0275.JPG\n", + "IMG_6768.CR2 2026-05-04 15:50:03 V001_0276.CR2 + IMG_6768.JPG → V001_0276.JPG\n", + "IMG_6769.CR2 2026-05-04 15:50:07 V001_0277.CR2 + IMG_6769.JPG → V001_0277.JPG\n", + "IMG_6770.CR2 2026-05-04 15:50:10 V001_0278.CR2 + IMG_6770.JPG → V001_0278.JPG\n", + "IMG_6771.CR2 2026-05-04 15:50:14 V001_0279.CR2 + IMG_6771.JPG → V001_0279.JPG\n", + "IMG_6772.CR2 2026-05-04 15:50:19 V001_0280.CR2 + IMG_6772.JPG → V001_0280.JPG\n", + "IMG_6773.CR2 2026-05-04 15:50:23 V001_0281.CR2 + IMG_6773.JPG → V001_0281.JPG\n", + "IMG_6774.CR2 2026-05-04 15:50:27 V001_0282.CR2 + IMG_6774.JPG → V001_0282.JPG\n", + "IMG_6775.CR2 2026-05-04 15:50:31 V001_0283.CR2 + IMG_6775.JPG → V001_0283.JPG\n", + "IMG_6776.CR2 2026-05-04 15:50:34 V001_0284.CR2 + IMG_6776.JPG → V001_0284.JPG\n", + "IMG_6777.CR2 2026-05-04 15:50:38 V001_0285.CR2 + IMG_6777.JPG → V001_0285.JPG\n", + "IMG_6778.CR2 2026-05-04 15:50:43 V001_0286.CR2 + IMG_6778.JPG → V001_0286.JPG\n", + "IMG_6779.CR2 2026-05-04 15:50:47 V001_0287.CR2 + IMG_6779.JPG → V001_0287.JPG\n", + "IMG_6780.CR2 2026-05-04 15:50:51 V001_0288.CR2 + IMG_6780.JPG → V001_0288.JPG\n", + "IMG_6781.CR2 2026-05-04 15:50:55 V001_0289.CR2 + IMG_6781.JPG → V001_0289.JPG\n", + "IMG_6782.CR2 2026-05-04 15:50:58 V001_0290.CR2 + IMG_6782.JPG → V001_0290.JPG\n", + "IMG_6783.CR2 2026-05-04 15:51:01 V001_0291.CR2 + IMG_6783.JPG → V001_0291.JPG\n", + "IMG_6784.CR2 2026-05-04 15:51:07 V001_0292.CR2 + IMG_6784.JPG → V001_0292.JPG\n", + "IMG_6785.CR2 2026-05-04 15:51:11 V001_0293.CR2 + IMG_6785.JPG → V001_0293.JPG\n", + "IMG_6786.CR2 2026-05-04 15:51:15 V001_0294.CR2 + IMG_6786.JPG → V001_0294.JPG\n", + "IMG_6787.CR2 2026-05-04 15:51:19 V001_0295.CR2 + IMG_6787.JPG → V001_0295.JPG\n", + "IMG_6788.CR2 2026-05-04 15:51:23 V001_0296.CR2 + IMG_6788.JPG → V001_0296.JPG\n", + "IMG_6789.CR2 2026-05-04 15:51:26 V001_0297.CR2 + IMG_6789.JPG → V001_0297.JPG\n", + "IMG_6790.CR2 2026-05-04 15:51:31 V001_0298.CR2 + IMG_6790.JPG → V001_0298.JPG\n", + "IMG_6791.CR2 2026-05-04 15:51:35 V001_0299.CR2 + IMG_6791.JPG → V001_0299.JPG\n", + "IMG_6792.CR2 2026-05-04 15:51:39 V001_0300.CR2 + IMG_6792.JPG → V001_0300.JPG\n", + "IMG_6793.CR2 2026-05-04 15:51:43 V001_0301.CR2 + IMG_6793.JPG → V001_0301.JPG\n", + "IMG_6794.CR2 2026-05-04 15:51:47 V001_0302.CR2 + IMG_6794.JPG → V001_0302.JPG\n", + "IMG_6795.CR2 2026-05-04 15:51:50 V001_0303.CR2 + IMG_6795.JPG → V001_0303.JPG\n", + "IMG_6796.CR2 2026-05-04 15:51:55 V001_0304.CR2 + IMG_6796.JPG → V001_0304.JPG\n", + "IMG_6797.CR2 2026-05-04 15:51:59 V001_0305.CR2 + IMG_6797.JPG → V001_0305.JPG\n", + "IMG_6798.CR2 2026-05-04 15:52:03 V001_0306.CR2 + IMG_6798.JPG → V001_0306.JPG\n", + "IMG_6799.CR2 2026-05-04 15:52:07 V001_0307.CR2 + IMG_6799.JPG → V001_0307.JPG\n", + "IMG_6800.CR2 2026-05-04 15:52:11 V001_0308.CR2 + IMG_6800.JPG → V001_0308.JPG\n", + "IMG_6801.CR2 2026-05-04 15:52:14 V001_0309.CR2 + IMG_6801.JPG → V001_0309.JPG\n", + "IMG_6802.CR2 2026-05-04 15:52:19 V001_0310.CR2 + IMG_6802.JPG → V001_0310.JPG\n", + "IMG_6803.CR2 2026-05-04 15:52:23 V001_0311.CR2 + IMG_6803.JPG → V001_0311.JPG\n", + "IMG_6804.CR2 2026-05-04 15:52:27 V001_0312.CR2 + IMG_6804.JPG → V001_0312.JPG\n", + "IMG_6805.CR2 2026-05-04 15:52:31 V001_0313.CR2 + IMG_6805.JPG → V001_0313.JPG\n", + "IMG_6806.CR2 2026-05-04 15:52:35 V001_0314.CR2 + IMG_6806.JPG → V001_0314.JPG\n", + "IMG_6807.CR2 2026-05-04 15:52:38 V001_0315.CR2 + IMG_6807.JPG → V001_0315.JPG\n", + "IMG_6808.CR2 2026-05-04 15:52:43 V001_0316.CR2 + IMG_6808.JPG → V001_0316.JPG\n", + "IMG_6809.CR2 2026-05-04 15:52:46 V001_0317.CR2 + IMG_6809.JPG → V001_0317.JPG\n", + "IMG_6810.CR2 2026-05-04 15:52:51 V001_0318.CR2 + IMG_6810.JPG → V001_0318.JPG\n", + "IMG_6811.CR2 2026-05-04 15:52:55 V001_0319.CR2 + IMG_6811.JPG → V001_0319.JPG\n", + "IMG_6812.CR2 2026-05-04 15:52:59 V001_0320.CR2 + IMG_6812.JPG → V001_0320.JPG\n", + "IMG_6813.CR2 2026-05-04 15:53:02 V001_0321.CR2 + IMG_6813.JPG → V001_0321.JPG\n", + "IMG_6814.CR2 2026-05-04 15:53:07 V001_0322.CR2 + IMG_6814.JPG → V001_0322.JPG\n", + "IMG_6815.CR2 2026-05-04 15:53:11 V001_0323.CR2 + IMG_6815.JPG → V001_0323.JPG\n", + "IMG_6816.CR2 2026-05-04 15:53:15 V001_0324.CR2 + IMG_6816.JPG → V001_0324.JPG\n", + "IMG_6817.CR2 2026-05-04 15:53:19 V001_0325.CR2 + IMG_6817.JPG → V001_0325.JPG\n", + "IMG_6818.CR2 2026-05-04 15:53:23 V001_0326.CR2 + IMG_6818.JPG → V001_0326.JPG\n", + "IMG_6819.CR2 2026-05-04 15:53:26 V001_0327.CR2 + IMG_6819.JPG → V001_0327.JPG\n", + "IMG_6820.CR2 2026-05-04 15:53:26 V001_0328.CR2 + IMG_6820.JPG → V001_0328.JPG\n", + "IMG_6821.CR2 2026-05-04 15:53:31 V001_0329.CR2 + IMG_6821.JPG → V001_0329.JPG\n", + "IMG_6822.CR2 2026-05-04 15:53:35 V001_0330.CR2 + IMG_6822.JPG → V001_0330.JPG\n", + "IMG_6823.CR2 2026-05-04 15:53:39 V001_0331.CR2 + IMG_6823.JPG → V001_0331.JPG\n", + "IMG_6824.CR2 2026-05-04 15:53:42 V001_0332.CR2 + IMG_6824.JPG → V001_0332.JPG\n", + "IMG_6825.CR2 2026-05-04 15:53:47 V001_0333.CR2 + IMG_6825.JPG → V001_0333.JPG\n", + "IMG_6826.CR2 2026-05-04 15:53:50 V001_0334.CR2 + IMG_6826.JPG → V001_0334.JPG\n", + "IMG_6827.CR2 2026-05-04 15:53:55 V001_0335.CR2 + IMG_6827.JPG → V001_0335.JPG\n", + "IMG_6828.CR2 2026-05-04 15:53:59 V001_0336.CR2 + IMG_6828.JPG → V001_0336.JPG\n", + "IMG_6829.CR2 2026-05-04 15:53:59 V001_0337.CR2 + IMG_6829.JPG → V001_0337.JPG\n", + "IMG_6830.CR2 2026-05-04 15:54:03 V001_0338.CR2 + IMG_6830.JPG → V001_0338.JPG\n", + "IMG_6831.CR2 2026-05-04 15:54:03 V001_0339.CR2 + IMG_6831.JPG → V001_0339.JPG\n", + "IMG_6832.CR2 2026-05-04 15:54:07 V001_0340.CR2 + IMG_6832.JPG → V001_0340.JPG\n", + "IMG_6833.CR2 2026-05-04 15:54:11 V001_0341.CR2 + IMG_6833.JPG → V001_0341.JPG\n", + "IMG_6835.CR2 2026-05-04 15:54:11 V001_0342.CR2 + IMG_6835.JPG → V001_0342.JPG\n", + "IMG_6834.CR2 2026-05-04 15:54:11 V001_0343.CR2 + IMG_6834.JPG → V001_0343.JPG\n", + "IMG_6836.CR2 2026-05-04 15:54:14 V001_0344.CR2 + IMG_6836.JPG → V001_0344.JPG\n", + "IMG_6837.CR2 2026-05-04 15:54:19 V001_0345.CR2 + IMG_6837.JPG → V001_0345.JPG\n", + "IMG_6838.CR2 2026-05-04 15:54:23 V001_0346.CR2 + IMG_6838.JPG → V001_0346.JPG\n", + "IMG_6839.CR2 2026-05-04 15:54:27 V001_0347.CR2 + IMG_6839.JPG → V001_0347.JPG\n", + "IMG_6841.CR2 2026-05-04 15:54:31 V001_0348.CR2 + IMG_6841.JPG → V001_0348.JPG\n", + "IMG_6840.CR2 2026-05-04 15:54:31 V001_0349.CR2 + IMG_6840.JPG → V001_0349.JPG\n", + "IMG_6842.CR2 2026-05-04 15:54:35 V001_0350.CR2 + IMG_6842.JPG → V001_0350.JPG\n", + "IMG_6843.CR2 2026-05-04 15:54:39 V001_0351.CR2 + IMG_6843.JPG → V001_0351.JPG\n", + "IMG_6844.CR2 2026-05-04 15:54:43 V001_0352.CR2 + IMG_6844.JPG → V001_0352.JPG\n", + "IMG_6845.CR2 2026-05-04 15:54:47 V001_0353.CR2 + IMG_6845.JPG → V001_0353.JPG\n", + "IMG_6846.CR2 2026-05-04 15:54:51 V001_0354.CR2 + IMG_6846.JPG → V001_0354.JPG\n", + "IMG_6847.CR2 2026-05-04 15:54:54 V001_0355.CR2 + IMG_6847.JPG → V001_0355.JPG\n", + "IMG_6848.CR2 2026-05-04 15:54:59 V001_0356.CR2 + IMG_6848.JPG → V001_0356.JPG\n", + "IMG_6849.CR2 2026-05-04 15:55:02 V001_0357.CR2 + IMG_6849.JPG → V001_0357.JPG\n", + "IMG_6850.CR2 2026-05-04 15:55:06 V001_0358.CR2 + IMG_6850.JPG → V001_0358.JPG\n", + "IMG_6851.CR2 2026-05-04 15:55:06 V001_0359.CR2 + IMG_6851.JPG → V001_0359.JPG\n", + "IMG_6852.CR2 2026-05-04 15:55:11 V001_0360.CR2 + IMG_6852.JPG → V001_0360.JPG\n", + "IMG_6853.CR2 2026-05-04 15:55:15 V001_0361.CR2 + IMG_6853.JPG → V001_0361.JPG\n", + "IMG_6854.CR2 2026-05-04 15:55:19 V001_0362.CR2 + IMG_6854.JPG → V001_0362.JPG\n", + "IMG_6855.CR2 2026-05-04 15:55:23 V001_0363.CR2 + IMG_6855.JPG → V001_0363.JPG\n", + "IMG_6856.CR2 2026-05-04 15:55:27 V001_0364.CR2 + IMG_6856.JPG → V001_0364.JPG\n", + "IMG_6857.CR2 2026-05-04 15:55:30 V001_0365.CR2 + IMG_6857.JPG → V001_0365.JPG\n", + "IMG_6858.CR2 2026-05-04 15:55:35 V001_0366.CR2 + IMG_6858.JPG → V001_0366.JPG\n", + "IMG_6859.CR2 2026-05-04 15:55:39 V001_0367.CR2 + IMG_6859.JPG → V001_0367.JPG\n", + "IMG_6860.CR2 2026-05-04 15:55:43 V001_0368.CR2 + IMG_6860.JPG → V001_0368.JPG\n", + "IMG_6863.CR2 2026-05-04 15:55:47 V001_0369.CR2 + IMG_6863.JPG → V001_0369.JPG\n", + "IMG_6862.CR2 2026-05-04 15:55:47 V001_0370.CR2 + IMG_6862.JPG → V001_0370.JPG\n", + "IMG_6861.CR2 2026-05-04 15:55:47 V001_0371.CR2 + IMG_6861.JPG → V001_0371.JPG\n", + "IMG_6864.CR2 2026-05-04 15:55:51 V001_0372.CR2 + IMG_6864.JPG → V001_0372.JPG\n", + "IMG_6865.CR2 2026-05-04 15:55:54 V001_0373.CR2 + IMG_6865.JPG → V001_0373.JPG\n", + "IMG_6866.CR2 2026-05-04 15:55:59 V001_0374.CR2 + IMG_6866.JPG → V001_0374.JPG\n", + "IMG_6867.CR2 2026-05-04 15:55:59 V001_0375.CR2 + IMG_6867.JPG → V001_0375.JPG\n", + "IMG_6869.CR2 2026-05-04 15:56:03 V001_0376.CR2 + IMG_6869.JPG → V001_0376.JPG\n", + "IMG_6868.CR2 2026-05-04 15:56:03 V001_0377.CR2 + IMG_6868.JPG → V001_0377.JPG\n", + "IMG_6870.CR2 2026-05-04 15:56:07 V001_0378.CR2 + IMG_6870.JPG → V001_0378.JPG\n", + "IMG_6871.CR2 2026-05-04 15:56:11 V001_0379.CR2 + IMG_6871.JPG → V001_0379.JPG\n", + "IMG_6872.CR2 2026-05-04 15:56:15 V001_0380.CR2 + IMG_6872.JPG → V001_0380.JPG\n", + "IMG_6873.CR2 2026-05-04 15:56:18 V001_0381.CR2 + IMG_6873.JPG → V001_0381.JPG\n", + "IMG_6874.CR2 2026-05-04 15:56:23 V001_0382.CR2 + IMG_6874.JPG → V001_0382.JPG\n", + "IMG_6875.CR2 2026-05-04 15:56:27 V001_0383.CR2 + IMG_6875.JPG → V001_0383.JPG\n", + "IMG_6876.CR2 2026-05-04 15:56:31 V001_0384.CR2 + IMG_6876.JPG → V001_0384.JPG\n", + "IMG_6877.CR2 2026-05-04 15:56:35 V001_0385.CR2 + IMG_6877.JPG → V001_0385.JPG\n", + "IMG_6878.CR2 2026-05-04 15:56:39 V001_0386.CR2 + IMG_6878.JPG → V001_0386.JPG\n", + "IMG_6879.CR2 2026-05-04 15:56:42 V001_0387.CR2 + IMG_6879.JPG → V001_0387.JPG\n", + "IMG_6880.CR2 2026-05-04 15:56:47 V001_0388.CR2 + IMG_6880.JPG → V001_0388.JPG\n", + "IMG_6881.CR2 2026-05-04 15:56:51 V001_0389.CR2 + IMG_6881.JPG → V001_0389.JPG\n", + "IMG_6882.CR2 2026-05-04 15:56:51 V001_0390.CR2 + IMG_6882.JPG → V001_0390.JPG\n", + "IMG_6883.CR2 2026-05-04 15:56:55 V001_0391.CR2 + IMG_6883.JPG → V001_0391.JPG\n", + "IMG_6884.CR2 2026-05-04 15:56:59 V001_0392.CR2 + IMG_6884.JPG → V001_0392.JPG\n", + "IMG_6885.CR2 2026-05-04 15:57:03 V001_0393.CR2 + IMG_6885.JPG → V001_0393.JPG\n", + "IMG_6886.CR2 2026-05-04 15:57:06 V001_0394.CR2 + IMG_6886.JPG → V001_0394.JPG\n", + "IMG_6887.CR2 2026-05-04 15:57:11 V001_0395.CR2 + IMG_6887.JPG → V001_0395.JPG\n", + "IMG_6888.CR2 2026-05-04 15:57:15 V001_0396.CR2 + IMG_6888.JPG → V001_0396.JPG\n", + "IMG_6889.CR2 2026-05-04 15:57:19 V001_0397.CR2 + IMG_6889.JPG → V001_0397.JPG\n", + "IMG_6890.CR2 2026-05-04 15:57:23 V001_0398.CR2 + IMG_6890.JPG → V001_0398.JPG\n", + "IMG_6891.CR2 2026-05-04 15:57:27 V001_0399.CR2 + IMG_6891.JPG → V001_0399.JPG\n", + "IMG_6892.CR2 2026-05-04 15:57:30 V001_0400.CR2 + IMG_6892.JPG → V001_0400.JPG\n", + "IMG_6893.CR2 2026-05-04 15:57:35 V001_0401.CR2 + IMG_6893.JPG → V001_0401.JPG\n", + "IMG_6894.CR2 2026-05-04 15:57:39 V001_0402.CR2 + IMG_6894.JPG → V001_0402.JPG\n", + "IMG_6895.CR2 2026-05-04 15:57:43 V001_0403.CR2 + IMG_6895.JPG → V001_0403.JPG\n", + "IMG_6896.CR2 2026-05-04 15:57:47 V001_0404.CR2 + IMG_6896.JPG → V001_0404.JPG\n", + "IMG_6897.CR2 2026-05-04 15:57:51 V001_0405.CR2 + IMG_6897.JPG → V001_0405.JPG\n", + "IMG_6898.CR2 2026-05-04 15:57:54 V001_0406.CR2 + IMG_6898.JPG → V001_0406.JPG\n", + "IMG_6899.CR2 2026-05-04 15:57:59 V001_0407.CR2 + IMG_6899.JPG → V001_0407.JPG\n", + "IMG_6900.CR2 2026-05-04 15:58:03 V001_0408.CR2 + IMG_6900.JPG → V001_0408.JPG\n", + "IMG_6901.CR2 2026-05-04 15:58:07 V001_0409.CR2 + IMG_6901.JPG → V001_0409.JPG\n", + "IMG_6902.CR2 2026-05-04 15:58:11 V001_0410.CR2 + IMG_6902.JPG → V001_0410.JPG\n", + "IMG_6903.CR2 2026-05-04 15:58:15 V001_0411.CR2 + IMG_6903.JPG → V001_0411.JPG\n", + "IMG_6904.CR2 2026-05-04 15:58:18 V001_0412.CR2 + IMG_6904.JPG → V001_0412.JPG\n", + "IMG_6905.CR2 2026-05-04 15:58:23 V001_0413.CR2 + IMG_6905.JPG → V001_0413.JPG\n", + "IMG_6906.CR2 2026-05-04 15:58:27 V001_0414.CR2 + IMG_6906.JPG → V001_0414.JPG\n", + "IMG_6907.CR2 2026-05-04 15:58:31 V001_0415.CR2 + IMG_6907.JPG → V001_0415.JPG\n", + "IMG_6908.CR2 2026-05-04 15:58:35 V001_0416.CR2 + IMG_6908.JPG → V001_0416.JPG\n", + "IMG_6909.CR2 2026-05-04 15:58:39 V001_0417.CR2 + IMG_6909.JPG → V001_0417.JPG\n", + "IMG_6910.CR2 2026-05-04 15:58:43 V001_0418.CR2 + IMG_6910.JPG → V001_0418.JPG\n", + "IMG_6911.CR2 2026-05-04 15:58:47 V001_0419.CR2 + IMG_6911.JPG → V001_0419.JPG\n", + "IMG_6912.CR2 2026-05-04 15:58:51 V001_0420.CR2 + IMG_6912.JPG → V001_0420.JPG\n", + "IMG_6913.CR2 2026-05-04 15:58:55 V001_0421.CR2 + IMG_6913.JPG → V001_0421.JPG\n", + "IMG_6914.CR2 2026-05-04 15:58:59 V001_0422.CR2 + IMG_6914.JPG → V001_0422.JPG\n", + "IMG_6916.CR2 2026-05-04 15:59:03 V001_0423.CR2 + IMG_6916.JPG → V001_0423.JPG\n", + "IMG_6915.CR2 2026-05-04 15:59:03 V001_0424.CR2 + IMG_6915.JPG → V001_0424.JPG\n", + "IMG_6917.CR2 2026-05-04 15:59:07 V001_0425.CR2 + IMG_6917.JPG → V001_0425.JPG\n", + "IMG_6918.CR2 2026-05-04 15:59:11 V001_0426.CR2 + IMG_6918.JPG → V001_0426.JPG\n", + "IMG_6919.CR2 2026-05-04 15:59:15 V001_0427.CR2 + IMG_6919.JPG → V001_0427.JPG\n", + "IMG_6920.CR2 2026-05-04 15:59:15 V001_0428.CR2 + IMG_6920.JPG → V001_0428.JPG\n", + "IMG_6922.CR2 2026-05-04 15:59:19 V001_0429.CR2 + IMG_6922.JPG → V001_0429.JPG\n", + "IMG_6921.CR2 2026-05-04 15:59:19 V001_0430.CR2 + IMG_6921.JPG → V001_0430.JPG\n", + "IMG_6924.CR2 2026-05-04 15:59:23 V001_0431.CR2 + IMG_6924.JPG → V001_0431.JPG\n", + "IMG_6923.CR2 2026-05-04 15:59:23 V001_0432.CR2 + IMG_6923.JPG → V001_0432.JPG\n", + "IMG_6925.CR2 2026-05-04 15:59:27 V001_0433.CR2 + IMG_6925.JPG → V001_0433.JPG\n", + "IMG_6926.CR2 2026-05-04 15:59:27 V001_0434.CR2 + IMG_6926.JPG → V001_0434.JPG\n", + "IMG_6927.CR2 2026-05-04 15:59:31 V001_0435.CR2 + IMG_6927.JPG → V001_0435.JPG\n", + "IMG_6928.CR2 2026-05-04 15:59:35 V001_0436.CR2 + IMG_6928.JPG → V001_0436.JPG\n", + "IMG_6929.CR2 2026-05-04 15:59:39 V001_0437.CR2 + IMG_6929.JPG → V001_0437.JPG\n", + "IMG_6930.CR2 2026-05-04 15:59:43 V001_0438.CR2 + IMG_6930.JPG → V001_0438.JPG\n", + "IMG_6931.CR2 2026-05-04 15:59:47 V001_0439.CR2 + IMG_6931.JPG → V001_0439.JPG\n", + "IMG_6933.CR2 2026-05-04 15:59:51 V001_0440.CR2 + IMG_6933.JPG → V001_0440.JPG\n", + "IMG_6932.CR2 2026-05-04 15:59:51 V001_0441.CR2 + IMG_6932.JPG → V001_0441.JPG\n", + "IMG_6935.CR2 2026-05-04 15:59:55 V001_0442.CR2 + IMG_6935.JPG → V001_0442.JPG\n", + "IMG_6934.CR2 2026-05-04 15:59:55 V001_0443.CR2 + IMG_6934.JPG → V001_0443.JPG\n", + "IMG_6936.CR2 2026-05-04 15:59:59 V001_0444.CR2 + IMG_6936.JPG → V001_0444.JPG\n", + "IMG_6937.CR2 2026-05-04 16:00:03 V001_0445.CR2 + IMG_6937.JPG → V001_0445.JPG\n", + "IMG_6938.CR2 2026-05-04 16:00:07 V001_0446.CR2 + IMG_6938.JPG → V001_0446.JPG\n", + "IMG_6939.CR2 2026-05-04 16:00:11 V001_0447.CR2 + IMG_6939.JPG → V001_0447.JPG\n", + "IMG_6940.CR2 2026-05-04 16:00:15 V001_0448.CR2 + IMG_6940.JPG → V001_0448.JPG\n", + "IMG_6941.CR2 2026-05-04 16:00:19 V001_0449.CR2 + IMG_6941.JPG → V001_0449.JPG\n", + "IMG_6942.CR2 2026-05-04 16:00:19 V001_0450.CR2 + IMG_6942.JPG → V001_0450.JPG\n", + "IMG_6943.CR2 2026-05-04 16:00:23 V001_0451.CR2 + IMG_6943.JPG → V001_0451.JPG\n", + "IMG_6944.CR2 2026-05-04 16:00:27 V001_0452.CR2 + IMG_6944.JPG → V001_0452.JPG\n", + "IMG_6945.CR2 2026-05-04 16:00:31 V001_0453.CR2 + IMG_6945.JPG → V001_0453.JPG\n", + "IMG_6946.CR2 2026-05-04 16:00:35 V001_0454.CR2 + IMG_6946.JPG → V001_0454.JPG\n", + "IMG_6947.CR2 2026-05-04 16:00:39 V001_0455.CR2 + IMG_6947.JPG → V001_0455.JPG\n", + "IMG_6950.CR2 2026-05-04 16:00:39 V001_0456.CR2 + IMG_6950.JPG → V001_0456.JPG\n", + "IMG_6948.CR2 2026-05-04 16:00:39 V001_0457.CR2 + IMG_6948.JPG → V001_0457.JPG\n", + "IMG_6949.CR2 2026-05-04 16:00:39 V001_0458.CR2 + IMG_6949.JPG → V001_0458.JPG\n", + "IMG_6951.CR2 2026-05-04 16:00:43 V001_0459.CR2 + IMG_6951.JPG → V001_0459.JPG\n", + "IMG_6952.CR2 2026-05-04 16:00:47 V001_0460.CR2 + IMG_6952.JPG → V001_0460.JPG\n", + "IMG_6953.CR2 2026-05-04 16:00:51 V001_0461.CR2 + IMG_6953.JPG → V001_0461.JPG\n", + "IMG_6954.CR2 2026-05-04 16:00:55 V001_0462.CR2 + IMG_6954.JPG → V001_0462.JPG\n", + "IMG_6955.CR2 2026-05-04 16:00:59 V001_0463.CR2 + IMG_6955.JPG → V001_0463.JPG\n", + "IMG_6956.CR2 2026-05-04 16:00:59 V001_0464.CR2 + IMG_6956.JPG → V001_0464.JPG\n", + "IMG_6957.CR2 2026-05-04 16:01:03 V001_0465.CR2 + IMG_6957.JPG → V001_0465.JPG\n", + "IMG_6959.CR2 2026-05-04 16:01:07 V001_0466.CR2 + IMG_6959.JPG → V001_0466.JPG\n", + "IMG_6958.CR2 2026-05-04 16:01:07 V001_0467.CR2 + IMG_6958.JPG → V001_0467.JPG\n", + "IMG_6960.CR2 2026-05-04 16:01:08 V001_0468.CR2 + IMG_6960.JPG → V001_0468.JPG\n", + "IMG_6961.CR2 2026-05-04 16:01:11 V001_0469.CR2 + IMG_6961.JPG → V001_0469.JPG\n", + "IMG_6962.CR2 2026-05-04 16:01:15 V001_0470.CR2 + IMG_6962.JPG → V001_0470.JPG\n", + "IMG_6964.CR2 2026-05-04 16:01:18 V001_0471.CR2 + IMG_6964.JPG → V001_0471.JPG\n", + "IMG_6963.CR2 2026-05-04 16:01:18 V001_0472.CR2 + IMG_6963.JPG → V001_0472.JPG\n", + "IMG_6965.CR2 2026-05-04 16:01:20 V001_0473.CR2 + IMG_6965.JPG → V001_0473.JPG\n", + "IMG_6966.CR2 2026-05-04 16:01:23 V001_0474.CR2 + IMG_6966.JPG → V001_0474.JPG\n", + "IMG_6967.CR2 2026-05-04 16:01:27 V001_0475.CR2 + IMG_6967.JPG → V001_0475.JPG\n", + "IMG_6968.CR2 2026-05-04 16:01:28 V001_0476.CR2 + IMG_6968.JPG → V001_0476.JPG\n", + "IMG_6969.CR2 2026-05-04 16:01:31 V001_0477.CR2 + IMG_6969.JPG → V001_0477.JPG\n", + "IMG_6970.CR2 2026-05-04 16:01:33 V001_0478.CR2 + IMG_6970.JPG → V001_0478.JPG\n", + "IMG_6971.CR2 2026-05-04 16:01:34 V001_0479.CR2 + IMG_6971.JPG → V001_0479.JPG\n", + "IMG_6972.CR2 2026-05-04 16:01:37 V001_0480.CR2 + IMG_6972.JPG → V001_0480.JPG\n", + "IMG_6973.CR2 2026-05-04 16:01:38 V001_0481.CR2 + IMG_6973.JPG → V001_0481.JPG\n", + "IMG_6974.CR2 2026-05-04 16:01:43 V001_0482.CR2 + IMG_6974.JPG → V001_0482.JPG\n", + "IMG_6975.CR2 2026-05-04 16:01:47 V001_0483.CR2 + IMG_6975.JPG → V001_0483.JPG\n", + "IMG_6976.CR2 2026-05-04 16:01:51 V001_0484.CR2 + IMG_6976.JPG → V001_0484.JPG\n", + "IMG_6977.CR2 2026-05-04 16:01:55 V001_0485.CR2 + IMG_6977.JPG → V001_0485.JPG\n", + "IMG_6978.CR2 2026-05-04 16:01:58 V001_0486.CR2 + IMG_6978.JPG → V001_0486.JPG\n", + "IMG_6979.CR2 2026-05-04 16:02:03 V001_0487.CR2 + IMG_6979.JPG → V001_0487.JPG\n", + "IMG_6980.CR2 2026-05-04 16:02:07 V001_0488.CR2 + IMG_6980.JPG → V001_0488.JPG\n", + "IMG_6981.CR2 2026-05-04 16:02:11 V001_0489.CR2 + IMG_6981.JPG → V001_0489.JPG\n", + "IMG_6982.CR2 2026-05-04 16:02:15 V001_0490.CR2 + IMG_6982.JPG → V001_0490.JPG\n", + "IMG_6983.CR2 2026-05-04 16:02:19 V001_0491.CR2 + IMG_6983.JPG → V001_0491.JPG\n", + "IMG_6984.CR2 2026-05-04 16:02:22 V001_0492.CR2 + IMG_6984.JPG → V001_0492.JPG\n", + "IMG_6985.CR2 2026-05-04 16:02:27 V001_0493.CR2 + IMG_6985.JPG → V001_0493.JPG\n", + "IMG_6986.CR2 2026-05-04 16:02:31 V001_0494.CR2 + IMG_6986.JPG → V001_0494.JPG\n", + "IMG_6987.CR2 2026-05-04 16:02:35 V001_0495.CR2 + IMG_6987.JPG → V001_0495.JPG\n", + "IMG_6988.CR2 2026-05-04 16:02:39 V001_0496.CR2 + IMG_6988.JPG → V001_0496.JPG\n", + "IMG_6989.CR2 2026-05-04 16:02:43 V001_0497.CR2 + IMG_6989.JPG → V001_0497.JPG\n", + "IMG_6990.CR2 2026-05-04 16:02:46 V001_0498.CR2 + IMG_6990.JPG → V001_0498.JPG\n", + "IMG_6991.CR2 2026-05-04 16:02:51 V001_0499.CR2 + IMG_6991.JPG → V001_0499.JPG\n", + "IMG_6992.CR2 2026-05-04 16:02:55 V001_0500.CR2 + IMG_6992.JPG → V001_0500.JPG\n", + "IMG_6993.CR2 2026-05-04 16:02:58 V001_0501.CR2 + IMG_6993.JPG → V001_0501.JPG\n", + "IMG_6994.CR2 2026-05-04 16:03:03 V001_0502.CR2 + IMG_6994.JPG → V001_0502.JPG\n", + "IMG_6995.CR2 2026-05-04 16:03:07 V001_0503.CR2 + IMG_6995.JPG → V001_0503.JPG\n", + "IMG_6996.CR2 2026-05-04 16:03:11 V001_0504.CR2 + IMG_6996.JPG → V001_0504.JPG\n", + "IMG_6997.CR2 2026-05-04 16:03:15 V001_0505.CR2 + IMG_6997.JPG → V001_0505.JPG\n", + "IMG_6998.CR2 2026-05-04 16:03:19 V001_0506.CR2 + IMG_6998.JPG → V001_0506.JPG\n", + "IMG_6999.CR2 2026-05-04 16:03:23 V001_0507.CR2 + IMG_6999.JPG → V001_0507.JPG\n", + "IMG_7000.CR2 2026-05-04 16:03:27 V001_0508.CR2 + IMG_7000.JPG → V001_0508.JPG\n", + "IMG_7001.CR2 2026-05-04 16:03:31 V001_0509.CR2 + IMG_7001.JPG → V001_0509.JPG\n", + "IMG_7002.CR2 2026-05-04 16:03:35 V001_0510.CR2 + IMG_7002.JPG → V001_0510.JPG\n", + "IMG_7003.CR2 2026-05-04 16:03:39 V001_0511.CR2 + IMG_7003.JPG → V001_0511.JPG\n", + "IMG_7004.CR2 2026-05-04 16:03:43 V001_0512.CR2 + IMG_7004.JPG → V001_0512.JPG\n", + "IMG_7005.CR2 2026-05-04 16:03:47 V001_0513.CR2 + IMG_7005.JPG → V001_0513.JPG\n", + "IMG_7006.CR2 2026-05-04 16:03:51 V001_0514.CR2 + IMG_7006.JPG → V001_0514.JPG\n", + "IMG_7007.CR2 2026-05-04 16:03:55 V001_0515.CR2 + IMG_7007.JPG → V001_0515.JPG\n", + "IMG_7008.CR2 2026-05-04 16:03:59 V001_0516.CR2 + IMG_7008.JPG → V001_0516.JPG\n", + "IMG_7009.CR2 2026-05-04 16:04:03 V001_0517.CR2 + IMG_7009.JPG → V001_0517.JPG\n", + "IMG_7010.CR2 2026-05-04 16:04:07 V001_0518.CR2 + IMG_7010.JPG → V001_0518.JPG\n", + "IMG_7011.CR2 2026-05-04 16:04:11 V001_0519.CR2 + IMG_7011.JPG → V001_0519.JPG\n", + "IMG_7012.CR2 2026-05-04 16:04:15 V001_0520.CR2 + IMG_7012.JPG → V001_0520.JPG\n", + "IMG_7013.CR2 2026-05-04 16:04:19 V001_0521.CR2 + IMG_7013.JPG → V001_0521.JPG\n", + "IMG_7014.CR2 2026-05-04 16:04:23 V001_0522.CR2 + IMG_7014.JPG → V001_0522.JPG\n", + "IMG_7015.CR2 2026-05-04 16:04:27 V001_0523.CR2 + IMG_7015.JPG → V001_0523.JPG\n", + "IMG_7016.CR2 2026-05-04 16:04:31 V001_0524.CR2 + IMG_7016.JPG → V001_0524.JPG\n", + "IMG_7017.CR2 2026-05-04 16:04:35 V001_0525.CR2 + IMG_7017.JPG → V001_0525.JPG\n", + "IMG_7018.CR2 2026-05-04 16:04:39 V001_0526.CR2 + IMG_7018.JPG → V001_0526.JPG\n", + "IMG_7019.CR2 2026-05-04 16:04:43 V001_0527.CR2 + IMG_7019.JPG → V001_0527.JPG\n", + "IMG_7020.CR2 2026-05-04 16:04:47 V001_0528.CR2 + IMG_7020.JPG → V001_0528.JPG\n", + "IMG_7021.CR2 2026-05-04 16:04:51 V001_0529.CR2 + IMG_7021.JPG → V001_0529.JPG\n", + "IMG_7022.CR2 2026-05-04 16:04:55 V001_0530.CR2 + IMG_7022.JPG → V001_0530.JPG\n", + "IMG_7023.CR2 2026-05-04 16:04:59 V001_0531.CR2 + IMG_7023.JPG → V001_0531.JPG\n", + "IMG_7024.CR2 2026-05-04 16:05:03 V001_0532.CR2 + IMG_7024.JPG → V001_0532.JPG\n", + "IMG_7025.CR2 2026-05-04 16:05:07 V001_0533.CR2 + IMG_7025.JPG → V001_0533.JPG\n", + "IMG_7026.CR2 2026-05-04 16:05:11 V001_0534.CR2 + IMG_7026.JPG → V001_0534.JPG\n", + "IMG_7027.CR2 2026-05-04 16:05:15 V001_0535.CR2 + IMG_7027.JPG → V001_0535.JPG\n", + "IMG_7028.CR2 2026-05-04 16:05:19 V001_0536.CR2 + IMG_7028.JPG → V001_0536.JPG\n", + "IMG_7029.CR2 2026-05-04 16:05:23 V001_0537.CR2 + IMG_7029.JPG → V001_0537.JPG\n", + "IMG_7030.CR2 2026-05-04 16:05:27 V001_0538.CR2 + IMG_7030.JPG → V001_0538.JPG\n", + "IMG_7031.CR2 2026-05-04 16:05:31 V001_0539.CR2 + IMG_7031.JPG → V001_0539.JPG\n", + "IMG_7032.CR2 2026-05-04 16:05:35 V001_0540.CR2 + IMG_7032.JPG → V001_0540.JPG\n", + "IMG_7033.CR2 2026-05-04 16:05:39 V001_0541.CR2 + IMG_7033.JPG → V001_0541.JPG\n", + "IMG_7034.CR2 2026-05-04 16:05:43 V001_0542.CR2 + IMG_7034.JPG → V001_0542.JPG\n", + "IMG_7035.CR2 2026-05-04 16:05:47 V001_0543.CR2 + IMG_7035.JPG → V001_0543.JPG\n", + "IMG_7036.CR2 2026-05-04 16:05:51 V001_0544.CR2 + IMG_7036.JPG → V001_0544.JPG\n", + "IMG_7037.CR2 2026-05-04 16:05:55 V001_0545.CR2 + IMG_7037.JPG → V001_0545.JPG\n", + "IMG_7038.CR2 2026-05-04 16:05:59 V001_0546.CR2 + IMG_7038.JPG → V001_0546.JPG\n", + "IMG_7039.CR2 2026-05-04 16:06:03 V001_0547.CR2 + IMG_7039.JPG → V001_0547.JPG\n", + "IMG_7040.CR2 2026-05-04 16:06:07 V001_0548.CR2 + IMG_7040.JPG → V001_0548.JPG\n", + "IMG_7041.CR2 2026-05-04 16:06:11 V001_0549.CR2 + IMG_7041.JPG → V001_0549.JPG\n", + "IMG_7042.CR2 2026-05-04 16:06:15 V001_0550.CR2 + IMG_7042.JPG → V001_0550.JPG\n", + "IMG_7043.CR2 2026-05-04 16:06:19 V001_0551.CR2 + IMG_7043.JPG → V001_0551.JPG\n", + "IMG_7044.CR2 2026-05-04 16:06:23 V001_0552.CR2 + IMG_7044.JPG → V001_0552.JPG\n", + "IMG_7045.CR2 2026-05-04 16:06:27 V001_0553.CR2 + IMG_7045.JPG → V001_0553.JPG\n", + "IMG_7046.CR2 2026-05-04 16:06:31 V001_0554.CR2 + IMG_7046.JPG → V001_0554.JPG\n", + "IMG_7047.CR2 2026-05-04 16:06:35 V001_0555.CR2 + IMG_7047.JPG → V001_0555.JPG\n", + "IMG_7048.CR2 2026-05-04 16:06:39 V001_0556.CR2 + IMG_7048.JPG → V001_0556.JPG\n", + "IMG_7049.CR2 2026-05-04 16:06:43 V001_0557.CR2 + IMG_7049.JPG → V001_0557.JPG\n", + "IMG_7050.CR2 2026-05-04 16:06:47 V001_0558.CR2 + IMG_7050.JPG → V001_0558.JPG\n", + "IMG_7051.CR2 2026-05-04 16:06:51 V001_0559.CR2 + IMG_7051.JPG → V001_0559.JPG\n", + "IMG_7052.CR2 2026-05-04 16:06:55 V001_0560.CR2 + IMG_7052.JPG → V001_0560.JPG\n", + "IMG_7053.CR2 2026-05-04 16:06:59 V001_0561.CR2 + IMG_7053.JPG → V001_0561.JPG\n", + "IMG_7054.CR2 2026-05-04 16:07:03 V001_0562.CR2 + IMG_7054.JPG → V001_0562.JPG\n", + "IMG_7055.CR2 2026-05-04 16:07:07 V001_0563.CR2 + IMG_7055.JPG → V001_0563.JPG\n", + "IMG_7056.CR2 2026-05-04 16:07:11 V001_0564.CR2 + IMG_7056.JPG → V001_0564.JPG\n", + "IMG_7057.CR2 2026-05-04 16:07:15 V001_0565.CR2 + IMG_7057.JPG → V001_0565.JPG\n", + "IMG_7058.CR2 2026-05-04 16:07:19 V001_0566.CR2 + IMG_7058.JPG → V001_0566.JPG\n", + "IMG_7059.CR2 2026-05-04 16:07:23 V001_0567.CR2 + IMG_7059.JPG → V001_0567.JPG\n", + "IMG_7060.CR2 2026-05-04 16:07:27 V001_0568.CR2 + IMG_7060.JPG → V001_0568.JPG\n", + "IMG_7061.CR2 2026-05-04 16:07:31 V001_0569.CR2 + IMG_7061.JPG → V001_0569.JPG\n", + "IMG_7062.CR2 2026-05-04 16:07:35 V001_0570.CR2 + IMG_7062.JPG → V001_0570.JPG\n", + "IMG_7063.CR2 2026-05-04 16:07:39 V001_0571.CR2 + IMG_7063.JPG → V001_0571.JPG\n", + "IMG_7064.CR2 2026-05-04 16:07:43 V001_0572.CR2 + IMG_7064.JPG → V001_0572.JPG\n", + "IMG_7065.CR2 2026-05-04 16:07:47 V001_0573.CR2 + IMG_7065.JPG → V001_0573.JPG\n", + "IMG_7066.CR2 2026-05-04 16:07:51 V001_0574.CR2 + IMG_7066.JPG → V001_0574.JPG\n", + "IMG_7067.CR2 2026-05-04 16:07:55 V001_0575.CR2 + IMG_7067.JPG → V001_0575.JPG\n", + "IMG_7068.CR2 2026-05-04 16:07:59 V001_0576.CR2 + IMG_7068.JPG → V001_0576.JPG\n", + "IMG_7069.CR2 2026-05-04 16:08:03 V001_0577.CR2 + IMG_7069.JPG → V001_0577.JPG\n", + "IMG_7070.CR2 2026-05-04 16:08:07 V001_0578.CR2 + IMG_7070.JPG → V001_0578.JPG\n", + "IMG_7071.CR2 2026-05-04 16:08:11 V001_0579.CR2 + IMG_7071.JPG → V001_0579.JPG\n", + "IMG_7072.CR2 2026-05-04 16:08:15 V001_0580.CR2 + IMG_7072.JPG → V001_0580.JPG\n", + "IMG_7073.CR2 2026-05-04 16:08:19 V001_0581.CR2 + IMG_7073.JPG → V001_0581.JPG\n", + "IMG_7074.CR2 2026-05-04 16:08:23 V001_0582.CR2 + IMG_7074.JPG → V001_0582.JPG\n", + "IMG_7075.CR2 2026-05-04 16:08:27 V001_0583.CR2 + IMG_7075.JPG → V001_0583.JPG\n", + "IMG_7076.CR2 2026-05-04 16:08:31 V001_0584.CR2 + IMG_7076.JPG → V001_0584.JPG\n", + "IMG_7077.CR2 2026-05-04 16:08:35 V001_0585.CR2 + IMG_7077.JPG → V001_0585.JPG\n", + "IMG_7078.CR2 2026-05-04 16:08:39 V001_0586.CR2 + IMG_7078.JPG → V001_0586.JPG\n", + "IMG_7079.CR2 2026-05-04 16:08:43 V001_0587.CR2 + IMG_7079.JPG → V001_0587.JPG\n", + "IMG_7080.CR2 2026-05-04 16:08:47 V001_0588.CR2 + IMG_7080.JPG → V001_0588.JPG\n", + "IMG_7081.CR2 2026-05-04 16:08:51 V001_0589.CR2 + IMG_7081.JPG → V001_0589.JPG\n", + "IMG_7082.CR2 2026-05-04 16:08:55 V001_0590.CR2 + IMG_7082.JPG → V001_0590.JPG\n", + "IMG_7083.CR2 2026-05-04 16:08:59 V001_0591.CR2 + IMG_7083.JPG → V001_0591.JPG\n", + "IMG_7084.CR2 2026-05-04 16:09:03 V001_0592.CR2 + IMG_7084.JPG → V001_0592.JPG\n", + "IMG_7085.CR2 2026-05-04 16:09:07 V001_0593.CR2 + IMG_7085.JPG → V001_0593.JPG\n", + "IMG_7086.CR2 2026-05-04 16:09:11 V001_0594.CR2 + IMG_7086.JPG → V001_0594.JPG\n", + "IMG_7087.CR2 2026-05-04 16:09:15 V001_0595.CR2 + IMG_7087.JPG → V001_0595.JPG\n", + "IMG_7088.CR2 2026-05-04 16:09:19 V001_0596.CR2 + IMG_7088.JPG → V001_0596.JPG\n", + "IMG_7089.CR2 2026-05-04 16:09:23 V001_0597.CR2 + IMG_7089.JPG → V001_0597.JPG\n", + "IMG_7090.CR2 2026-05-04 16:09:27 V001_0598.CR2 + IMG_7090.JPG → V001_0598.JPG\n", + "IMG_7091.CR2 2026-05-04 16:09:31 V001_0599.CR2 + IMG_7091.JPG → V001_0599.JPG\n", + "IMG_7092.CR2 2026-05-04 16:09:35 V001_0600.CR2 + IMG_7092.JPG → V001_0600.JPG\n", + "IMG_7093.CR2 2026-05-04 16:09:39 V001_0601.CR2 + IMG_7093.JPG → V001_0601.JPG\n", + "IMG_7094.CR2 2026-05-04 16:09:43 V001_0602.CR2 + IMG_7094.JPG → V001_0602.JPG\n", + "IMG_7095.CR2 2026-05-04 16:09:47 V001_0603.CR2 + IMG_7095.JPG → V001_0603.JPG\n", + "IMG_7096.CR2 2026-05-04 16:09:51 V001_0604.CR2 + IMG_7096.JPG → V001_0604.JPG\n", + "IMG_7097.CR2 2026-05-04 16:09:55 V001_0605.CR2 + IMG_7097.JPG → V001_0605.JPG\n", + "IMG_7098.CR2 2026-05-04 16:09:59 V001_0606.CR2 + IMG_7098.JPG → V001_0606.JPG\n", + "IMG_7099.CR2 2026-05-04 16:10:03 V001_0607.CR2 + IMG_7099.JPG → V001_0607.JPG\n", + "IMG_7100.CR2 2026-05-04 16:10:07 V001_0608.CR2 + IMG_7100.JPG → V001_0608.JPG\n", + "IMG_7101.CR2 2026-05-04 16:10:11 V001_0609.CR2 + IMG_7101.JPG → V001_0609.JPG\n", + "IMG_7102.CR2 2026-05-04 16:10:15 V001_0610.CR2 + IMG_7102.JPG → V001_0610.JPG\n", + "IMG_7103.CR2 2026-05-04 16:10:19 V001_0611.CR2 + IMG_7103.JPG → V001_0611.JPG\n", + "IMG_7104.CR2 2026-05-04 16:10:23 V001_0612.CR2 + IMG_7104.JPG → V001_0612.JPG\n", + "IMG_7105.CR2 2026-05-04 16:10:27 V001_0613.CR2 + IMG_7105.JPG → V001_0613.JPG\n", + "IMG_7106.CR2 2026-05-04 16:10:31 V001_0614.CR2 + IMG_7106.JPG → V001_0614.JPG\n", + "IMG_7107.CR2 2026-05-04 16:10:35 V001_0615.CR2 + IMG_7107.JPG → V001_0615.JPG\n", + "IMG_7108.CR2 2026-05-04 16:10:39 V001_0616.CR2 + IMG_7108.JPG → V001_0616.JPG\n", + "IMG_7109.CR2 2026-05-04 16:10:43 V001_0617.CR2 + IMG_7109.JPG → V001_0617.JPG\n", + "IMG_7110.CR2 2026-05-04 16:10:47 V001_0618.CR2 + IMG_7110.JPG → V001_0618.JPG\n", + "IMG_7111.CR2 2026-05-04 16:10:51 V001_0619.CR2 + IMG_7111.JPG → V001_0619.JPG\n", + "IMG_7112.CR2 2026-05-04 16:10:55 V001_0620.CR2 + IMG_7112.JPG → V001_0620.JPG\n", + "IMG_7113.CR2 2026-05-04 16:10:59 V001_0621.CR2 + IMG_7113.JPG → V001_0621.JPG\n", + "IMG_7114.CR2 2026-05-04 16:11:03 V001_0622.CR2 + IMG_7114.JPG → V001_0622.JPG\n", + "IMG_7115.CR2 2026-05-04 16:11:07 V001_0623.CR2 + IMG_7115.JPG → V001_0623.JPG\n", + "IMG_7116.CR2 2026-05-04 16:11:11 V001_0624.CR2 + IMG_7116.JPG → V001_0624.JPG\n", + "IMG_7117.CR2 2026-05-04 16:11:15 V001_0625.CR2 + IMG_7117.JPG → V001_0625.JPG\n", + "IMG_7118.CR2 2026-05-04 16:11:19 V001_0626.CR2 + IMG_7118.JPG → V001_0626.JPG\n", + "IMG_7119.CR2 2026-05-04 16:11:23 V001_0627.CR2 + IMG_7119.JPG → V001_0627.JPG\n", + "IMG_7120.CR2 2026-05-04 16:11:27 V001_0628.CR2 + IMG_7120.JPG → V001_0628.JPG\n", + "IMG_7121.CR2 2026-05-04 16:11:31 V001_0629.CR2 + IMG_7121.JPG → V001_0629.JPG\n", + "IMG_7122.CR2 2026-05-04 16:11:35 V001_0630.CR2 + IMG_7122.JPG → V001_0630.JPG\n", + "IMG_7123.CR2 2026-05-04 16:11:39 V001_0631.CR2 + IMG_7123.JPG → V001_0631.JPG\n", + "IMG_7124.CR2 2026-05-04 16:11:43 V001_0632.CR2 + IMG_7124.JPG → V001_0632.JPG\n", + "IMG_7125.CR2 2026-05-04 16:11:47 V001_0633.CR2 + IMG_7125.JPG → V001_0633.JPG\n", + "IMG_7126.CR2 2026-05-04 16:11:51 V001_0634.CR2 + IMG_7126.JPG → V001_0634.JPG\n", + "IMG_7127.CR2 2026-05-04 16:11:55 V001_0635.CR2 + IMG_7127.JPG → V001_0635.JPG\n", + "IMG_7128.CR2 2026-05-04 16:11:59 V001_0636.CR2 + IMG_7128.JPG → V001_0636.JPG\n", + "IMG_7129.CR2 2026-05-04 16:12:03 V001_0637.CR2 + IMG_7129.JPG → V001_0637.JPG\n", + "IMG_7130.CR2 2026-05-04 16:12:07 V001_0638.CR2 + IMG_7130.JPG → V001_0638.JPG\n", + "IMG_7131.CR2 2026-05-04 16:12:11 V001_0639.CR2 + IMG_7131.JPG → V001_0639.JPG\n", + "IMG_7132.CR2 2026-05-04 16:12:15 V001_0640.CR2 + IMG_7132.JPG → V001_0640.JPG\n", + "IMG_7133.CR2 2026-05-04 16:12:19 V001_0641.CR2 + IMG_7133.JPG → V001_0641.JPG\n", + "IMG_7134.CR2 2026-05-04 16:12:23 V001_0642.CR2 + IMG_7134.JPG → V001_0642.JPG\n", + "IMG_7135.CR2 2026-05-04 16:12:27 V001_0643.CR2 + IMG_7135.JPG → V001_0643.JPG\n", + "IMG_7136.CR2 2026-05-04 16:12:31 V001_0644.CR2 + IMG_7136.JPG → V001_0644.JPG\n", + "IMG_7137.CR2 2026-05-04 16:12:35 V001_0645.CR2 + IMG_7137.JPG → V001_0645.JPG\n", + "IMG_7138.CR2 2026-05-04 16:12:39 V001_0646.CR2 + IMG_7138.JPG → V001_0646.JPG\n", + "IMG_7139.CR2 2026-05-04 16:12:43 V001_0647.CR2 + IMG_7139.JPG → V001_0647.JPG\n", + "IMG_7140.CR2 2026-05-04 16:12:47 V001_0648.CR2 + IMG_7140.JPG → V001_0648.JPG\n", + "IMG_7141.CR2 2026-05-04 16:12:51 V001_0649.CR2 + IMG_7141.JPG → V001_0649.JPG\n", + "IMG_7142.CR2 2026-05-04 16:12:55 V001_0650.CR2 + IMG_7142.JPG → V001_0650.JPG\n", + "IMG_7143.CR2 2026-05-04 16:12:59 V001_0651.CR2 + IMG_7143.JPG → V001_0651.JPG\n", + "IMG_7144.CR2 2026-05-04 16:13:03 V001_0652.CR2 + IMG_7144.JPG → V001_0652.JPG\n", + "IMG_7145.CR2 2026-05-04 16:13:07 V001_0653.CR2 + IMG_7145.JPG → V001_0653.JPG\n", + "IMG_7146.CR2 2026-05-04 16:13:11 V001_0654.CR2 + IMG_7146.JPG → V001_0654.JPG\n", + "IMG_7147.CR2 2026-05-04 16:13:15 V001_0655.CR2 + IMG_7147.JPG → V001_0655.JPG\n", + "IMG_7148.CR2 2026-05-04 16:13:19 V001_0656.CR2 + IMG_7148.JPG → V001_0656.JPG\n", + "IMG_7149.CR2 2026-05-04 16:26:41 V001_0657.CR2 + IMG_7149.JPG → V001_0657.JPG\n", + "IMG_7150.CR2 2026-05-04 16:26:43 V001_0658.CR2 + IMG_7150.JPG → V001_0658.JPG\n", + "IMG_7151.CR2 2026-05-04 16:47:46 V001_0659.CR2 + IMG_7151.JPG → V001_0659.JPG\n", + "IMG_7152.CR2 2026-05-04 16:47:50 V001_0660.CR2 + IMG_7152.JPG → V001_0660.JPG\n", + "IMG_7153.CR2 2026-05-04 16:48:32 V001_0661.CR2 + IMG_7153.JPG → V001_0661.JPG\n", + "IMG_7154.CR2 2026-05-04 16:48:36 V001_0662.CR2 + IMG_7154.JPG → V001_0662.JPG\n", + "IMG_7155.CR2 2026-05-04 16:49:13 V001_0663.CR2 + IMG_7155.JPG → V001_0663.JPG\n", + "IMG_7156.CR2 2026-05-04 16:49:17 V001_0664.CR2 + IMG_7156.JPG → V001_0664.JPG\n", + "IMG_7157.CR2 2026-05-04 16:49:37 V001_0665.CR2 + IMG_7157.JPG → V001_0665.JPG\n", + "IMG_7158.CR2 2026-05-04 16:49:46 V001_0666.CR2 + IMG_7158.JPG → V001_0666.JPG\n", + "IMG_7159.CR2 2026-05-04 16:50:00 V001_0667.CR2 + IMG_7159.JPG → V001_0667.JPG\n", + "\n", + "Total: 667 primary file(s) to rename, 667 with a matching JPG file.\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "markdown", + "id": "a1b2c3d4e5f60008", + "metadata": {}, + "source": [ + "# Rename Images\n", + "\n", + "Run this cell to apply the renaming shown above. You will be asked to confirm before any files are changed." + ] + }, + { + "cell_type": "code", + "id": "a1b2c3d4e5f60009", + "metadata": { + "ExecuteTime": { + "end_time": "2026-05-11T21:22:39.654386Z", + "start_time": "2026-05-11T21:22:33.861159Z" + } + }, + "source": [ + "answer = input(\"Proceed with renaming? Type 'yes' to confirm: \").strip().lower()\n", + "\n", + "if answer != 'yes':\n", + " print(\"Renaming cancelled.\")\n", + "else:\n", + " renamed_primary = 0\n", + " renamed_secondary = 0\n", + " errors = []\n", + "\n", + " for old_p, new_p, old_s, new_s, _ in rename_plan:\n", + " try:\n", + " if old_p != new_p:\n", + " os.rename(old_p, new_p)\n", + " renamed_primary += 1\n", + " except Exception as e:\n", + " errors.append(f\" {os.path.basename(old_p)} → {os.path.basename(new_p)}: {e}\")\n", + "\n", + " if old_s and new_s:\n", + " try:\n", + " if old_s != new_s:\n", + " os.rename(old_s, new_s)\n", + " renamed_secondary += 1\n", + " except Exception as e:\n", + " errors.append(f\" {os.path.basename(old_s)} → {os.path.basename(new_s)}: {e}\")\n", + "\n", + " print(f\"Done. Renamed {renamed_primary} primary file(s)\" +\n", + " (f\" and {renamed_secondary} secondary file(s)\" if secondary_ext_norm else \"\") + \".\")\n", + "\n", + " if errors:\n", + " print(\"\\nErrors encountered:\")\n", + " for err in errors:\n", + " print(err)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done. Renamed 667 primary file(s) and 667 secondary file(s).\n" + ] + } + ], + "execution_count": 4 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.10.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/ledsa/tools/photo_renamer.py b/ledsa/tools/photo_renamer.py deleted file mode 100644 index 2ed0f50..0000000 --- a/ledsa/tools/photo_renamer.py +++ /dev/null @@ -1,159 +0,0 @@ -import glob -import os -from datetime import datetime -from os import path -import csv -import pandas as pd - -from ledsa.core.image_reading import get_exif_entry - -def set_working_dir(): - """ - Prompts user for directory path and changes to that directory if it exists. - Exits program if directory is invalid. - """ - working_dir = input("Set Working directory:") - if path.exists(working_dir): - os.chdir(working_dir) - print("Working directory is set to \"{0}\"".format(os.getcwd())) - else: - print("\"{0}\" does not exist!".format(os.getcwd())) - exit() - - -def get_files(): - """ - Prompts user for image and raw file types to process. - Extracts capture date from EXIF data of images. - Finds corresponding raw files if they exist. - - Returns: - pd.DataFrame: DataFrame containing image filenames as index and columns for - capture date and associated raw filenames, sorted by capture date. - """ - # Get file type inputs from user - image_types = input("What image types do you want to take into account? (Seperate by \",\"):") - raw_types = input("What raw types do you want to take into account? (Seperate by \",\"):") - image_types = [x.strip() for x in image_types.split(',')] - raw_types = [x.strip() for x in raw_types.split(',')] - image_dict = {} - image_files = [] - - # Find all matching image files - for file_type in image_types: - image_files.extend(glob.glob('*.{}'.format(file_type))) - - # Process each image file - for image in image_files: - # Extract EXIF datetime data - with open(image, 'rb') as image_file: - tag_datetime = 'DateTimeOriginal' - tag_subsectime = 'SubSecTimeDigitized' - capture_date = get_exif_entry(image, tag_datetime) - try: - # Try parsing with subsecond precision - subsec_time = get_exif_entry(image, tag_subsectime) - datetime_object = datetime.strptime(capture_date + "." + subsec_time, '%Y:%m:%d %H:%M:%S.%f') - except: - # Fall back to second precision - datetime_object = datetime.strptime(capture_date, '%Y:%m:%d %H:%M:%S') - - # Find matching raw file if it exists - for file_type in raw_types: - raw_file = image.rsplit(".", 1)[0] + "." + file_type - if path.isfile(raw_file): - raw_file = raw_file - break - else: - raw_file = "NaT" - - image_dict[image] = [datetime_object, raw_file] - - # Create and sort DataFrame - image_df = pd.DataFrame.from_dict(image_dict, columns=["capture_date", "raw_file"], orient='index') - image_df = image_df.sort_values(by=['capture_date'], ascending=True) - return image_df - - -def rename_images_by_date(image_df): - """ - Rename image and raw files based on capture date and user-provided name. - - Creates a log file of all renames. After previewing changes, user can choose - to proceed with renaming or cancel. User can also choose to keep or delete - the log file afterwards. - - Args: - image_df (pd.DataFrame): DataFrame containing image metadata and filenames - to be processed. - """ - # Get base name from user and setup logging - name = input("Please enter name for image:") - print("Files are renamed as follows:") - count = 1 - now = datetime.now() - now_str = now.strftime("%Y_%m_%d_%H_%M_%S") - filename = f"{now_str}_{name}_rename_log.csv" - - # Preview rename changes and write to log - with open(filename, 'w') as log_file: - writer = csv.writer(log_file) - writer.writerow(("old_image_name", "new_image_name", "old_raw_name", "new_raw_name")) - for index, row in image_df.iterrows(): - image_year = row['capture_date'].strftime('%-y%m%d') - raw_old_name = row['raw_file'] - - # Generate new filenames - if pd.isnull(raw_old_name): - raw_new_name = "NaT" - else: - file_extension = raw_old_name.split('.')[-1] - raw_new_name = "{0}_{1}_{2}.{3}".format(image_year, name, count, file_extension) - new_image_name = "{0}_{1}_{2}.jpg".format(image_year, name, count) - print("{0} --> {1} {2} --> {3}".format(index, new_image_name, raw_old_name, raw_new_name)) - writer.writerow((index, new_image_name, raw_old_name, raw_new_name)) - count += 1 - - # Process user choice to proceed or cancel - while True: - continue_rename = input("Do you want to continue? yes[y] or no[n]") - if continue_rename == "y": - # Perform the actual renaming - count = 1 - for index, row in image_df.iterrows(): - image_year = row['capture_date'].strftime('%-y%m%d') - raw_old_name = row['raw_file'] - - if not pd.isnull(raw_old_name): - file_extension = raw_old_name.split('.')[-1] - raw_new_name = "{0}_{1}_{2}.{3}".format(image_year, name, count, file_extension) - os.rename(raw_old_name, raw_new_name) - new_image_name = "{0}_{1}_{2}.jpg".format(image_year, name, count) - os.rename(index, new_image_name) - count += 1 - print("Files successfully renamed!".format(count)) - - # Handle log file retention - keep_log = input("Do you want to keep the changelog? yes[y] or no[n]") - if keep_log == 'y': - print(f"{filename} saved!") - exit() - elif keep_log == 'n': - os.remove(filename) - print("Changelog deleted!") - exit() - elif continue_rename == "n": - print("No files were renamed!") - exit() - else: - continue - - -def main(): - set_working_dir() - image_df = get_files() - rename_images_by_date(image_df) - - -if __name__ == '__main__': - main() From 90bafc004454b8189d9d1ce206b28bc76dd26b45 Mon Sep 17 00:00:00 2001 From: Kristian Date: Mon, 11 May 2026 23:33:21 +0200 Subject: [PATCH 2/2] remove unused tools-related parser arguments and functions to streamline code --- ledsa/__main__.py | 6 ++---- ledsa/core/parser_arguments_declaration.py | 13 ------------- ledsa/core/parser_arguments_run.py | 13 ------------- 3 files changed, 2 insertions(+), 30 deletions(-) diff --git a/ledsa/__main__.py b/ledsa/__main__.py index 7d30c79..09b158c 100644 --- a/ledsa/__main__.py +++ b/ledsa/__main__.py @@ -3,9 +3,9 @@ import sys from typing import List -from ledsa.core.parser_arguments_declaration import (add_parser_arguments_tools, add_parser_arguments_data_extraction, +from ledsa.core.parser_arguments_declaration import (add_parser_arguments_data_extraction, add_parser_arguments_testing, add_parser_arguments_demo, add_parser_argument_analysis) -from ledsa.core.parser_arguments_run import run_tools_arguments, run_data_extraction_arguments, run_testing_arguments, run_demo_arguments, \ +from ledsa.core.parser_arguments_run import run_data_extraction_arguments, run_testing_arguments, run_demo_arguments, \ run_analysis_arguments, run_analysis_arguments_with_extinction_coefficient, run_stacked_analysis @@ -18,7 +18,6 @@ def main(argv: List[str]) -> None: """ parser = argparse.ArgumentParser(description= 'Allows the analysis of light dampening of LEDs behind a smoke screen.') - add_parser_arguments_tools(parser) add_parser_arguments_data_extraction(parser) add_parser_argument_analysis(parser) add_parser_arguments_demo(parser) @@ -36,7 +35,6 @@ def main(argv: List[str]) -> None: if args.demo: run_demo_arguments(args, parser) else: - run_tools_arguments(args) run_data_extraction_arguments(args) run_analysis_arguments(args) run_analysis_arguments_with_extinction_coefficient(args) diff --git a/ledsa/core/parser_arguments_declaration.py b/ledsa/core/parser_arguments_declaration.py index f5eb885..8143c75 100644 --- a/ledsa/core/parser_arguments_declaration.py +++ b/ledsa/core/parser_arguments_declaration.py @@ -1,19 +1,6 @@ import argparse -def add_parser_arguments_tools(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: - """ - Add parser arguments related to tools. - - :param parser: ArgumentParser object to which the arguments are added. - :type parser: argparse.ArgumentParser - :return: Modified ArgumentParser object with added arguments. - :rtype: argparse.ArgumentParser - """ - - parser.add_argument('--prepare_images', action='store_true') - return parser - def add_parser_arguments_data_extraction(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: """ diff --git a/ledsa/core/parser_arguments_run.py b/ledsa/core/parser_arguments_run.py index 76ec77b..57a945a 100644 --- a/ledsa/core/parser_arguments_run.py +++ b/ledsa/core/parser_arguments_run.py @@ -1,7 +1,6 @@ import argparse import os -from ledsa.tools.photo_renamer import set_working_dir, get_files, rename_images_by_date from ledsa.analysis import ExtinctionCoefficientsNonLinear as ECN from ledsa.analysis import ExtinctionCoefficientsLinear as ECA @@ -17,18 +16,6 @@ from ledsa.data_extraction.DataExtractor import DataExtractor -def run_tools_arguments(args: argparse.Namespace) -> None: - """ - Execute actions based on tools arguments. - - :param args: Parsed command line arguments. - :type args: argparse.Namespace - """ - if args.prepare_images: - set_working_dir() - image_df = get_files() - rename_images_by_date(image_df) - def run_data_extraction_arguments(args: argparse.Namespace) -> None: """