66 lines
3.1 KiB
Python
66 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Update dates for UUID-named files in Immich."""
|
|
|
|
import subprocess
|
|
import json
|
|
from urllib.request import Request, urlopen
|
|
|
|
API_KEY = "GsWQUTR6EXlkKp1M82jDJ3KmzhM0fMAbbIbfHDyI"
|
|
API_URL = "http://localhost:2283/api"
|
|
|
|
# UUID files with their correct dates from Mylio XMP
|
|
files = {
|
|
"09C298F7-2237-4372-A99C-089BA7AE76A8.jpg": "2021-09-25T04:03:24.000Z",
|
|
"1BF9EA26-225E-4AAE-B27D-3750C8AAF67A.jpg": "2021-09-25T04:04:06.000Z",
|
|
"3CEFC5D9-B100-4AA3-9CCE-121F9CBEFB8C.jpg": "2021-10-04T03:55:08.000Z",
|
|
"3F53A10E-8403-4C05-B180-32482554CD0F.jpg": "2021-09-11T03:05:17.000Z",
|
|
"41F7B9E3-C476-460D-9A61-AC7794524864.jpg": "2021-12-28T16:57:59.000Z",
|
|
"44C13A26-F430-4018-9CD5-5C64A84D9BE1.jpg": "2021-09-23T14:21:59.000Z",
|
|
"507C94F6-EB74-4F6E-ACAF-F3D424DB5C30.jpg": "2021-12-28T16:58:36.000Z",
|
|
"57E09983-E365-4D55-A6BD-FD48C4E93823.jpg": "2021-09-11T03:05:31.000Z",
|
|
"73149BC3-657B-45E1-9F14-AF344CC17B74.jpg": "2021-12-28T16:57:26.000Z",
|
|
"80262004-01C7-465F-BFC4-AA822A36EFF2.jpg": "2021-09-25T04:04:32.000Z",
|
|
"8068628A-DF39-403E-A4FE-6095B59908D3.jpg": "2021-09-11T02:59:17.000Z",
|
|
"81B12ED7-9C2A-457F-86A7-9EDA320607A0.jpg": "2021-09-23T14:22:00.000Z",
|
|
"91E396CA-3528-4EDC-951E-FF70FD8768FD.jpg": "2021-12-28T16:57:51.000Z",
|
|
"A6AEF278-BB86-49F9-BD93-EE728780213E.jpg": "2021-09-23T14:22:07.000Z",
|
|
"B2AA2B92-F554-4E3F-90D3-AE59E3C41751.jpg": "2021-10-04T03:55:33.000Z",
|
|
"B4899F17-6BA5-4516-81BD-04CC119D2C3D.jpg": "2021-10-04T03:54:09.000Z",
|
|
"B9AD2FBE-5D33-426C-9F0C-08F4EAC27440.jpg": "2021-12-28T16:58:14.000Z",
|
|
"BE71C547-F247-4CFD-BF66-65438C45C6C0.jpg": "2021-10-04T03:54:45.000Z",
|
|
"CB381DB7-8B95-4581-B53A-D03B5B7EF94C.jpg": "2021-12-28T16:57:14.000Z",
|
|
"E2A04304-643D-4569-839A-60A0E6D8071A.jpg": "2021-12-28T16:57:02.000Z",
|
|
"ED522636-3584-4DD0-B176-BC0E5F8CCB88.jpg": "2021-10-04T03:54:33.000Z",
|
|
"EEE55391-320C-4399-8378-6A42A99617BB.jpg": "2021-12-28T16:57:42.000Z",
|
|
"F38214B0-166E-47B7-A2AE-328FB5DC8D8A.jpg": "2021-12-28T16:58:46.000Z",
|
|
"F91246B7-039C-4E78-BF15-350E65FDEF44.jpg": "2021-12-28T16:58:27.000Z",
|
|
"FB2BCD81-AD35-4A23-8EC2-CC8DAB42714E.jpg": "2021-10-04T03:54:26.000Z",
|
|
}
|
|
|
|
def get_asset_id(filename):
|
|
"""Get Immich asset ID from database."""
|
|
result = subprocess.run([
|
|
"docker", "exec", "immich_postgres", "psql", "-U", "postgres", "-d", "immich", "-t", "-c",
|
|
f"SELECT id FROM asset WHERE \"originalPath\" LIKE '%/2024/01/{filename}' AND \"deletedAt\" IS NULL;"
|
|
], capture_output=True, text=True)
|
|
return result.stdout.strip()
|
|
|
|
def update_date(asset_id, date):
|
|
"""Update asset date via Immich API."""
|
|
data = json.dumps({"dateTimeOriginal": date}).encode()
|
|
req = Request(f"{API_URL}/assets/{asset_id}", data=data, method="PUT",
|
|
headers={"x-api-key": API_KEY, "Content-Type": "application/json"})
|
|
urlopen(req)
|
|
|
|
updated = 0
|
|
for fname, date in files.items():
|
|
asset_id = get_asset_id(fname)
|
|
if asset_id:
|
|
update_date(asset_id, date)
|
|
print(f"Updated {fname} -> {date[:10]}")
|
|
updated += 1
|
|
else:
|
|
print(f"NOT FOUND: {fname}")
|
|
|
|
print(f"\nTotal updated: {updated}")
|