#!/usr/bin/env python3 """Generate HTML gallery for indkorsel person-detection snapshots. Called via shell_command after each new snapshot is saved. Output: /config/www/snapshots/indkorsel_gallery.html """ import os import glob from datetime import datetime SNAPSHOT_DIR = "/config/www/snapshots/indkorsel" OUTPUT_FILE = "/config/www/snapshots/indkorsel_gallery.html" LOADER_FILE = "/config/www/snapshots/indkorsel_loader.html" MAX_SNAPSHOTS = 500 def parse_timestamp(filename): base = os.path.basename(filename).replace(".jpg", "") try: dt = datetime.strptime(base, "%Y-%m-%d_%H-%M-%S") return dt.strftime("%-d. %b %Y %H:%M:%S") except Exception: return base os.makedirs(SNAPSHOT_DIR, exist_ok=True) files = sorted( [f for f in glob.glob(os.path.join(SNAPSHOT_DIR, "*.jpg")) if os.path.basename(f) != "latest.jpg"], reverse=True )[:MAX_SNAPSHOTS] items_html = "" images_js = [] # [{src, ts}, ...] for JS navigation for f in files: rel = "/local/snapshots/indkorsel/" + os.path.basename(f) ts = parse_timestamp(f) idx = len(images_js) items_html += f"""
{ts}
{ts}
""" images_js.append({"src": rel, "ts": ts}) import json as _json images_js_str = _json.dumps(images_js) version = datetime.now().strftime("%Y%m%d%H%M%S") html = f""" Indkorsel snapshots

Viser {len(files)} person-snapshots – Indkorsel

{"
" + items_html + "
" if files else "
Ingen snapshots endnu.
"}
Nye billeder – tryk for at opdatere
""" with open(OUTPUT_FILE, "w", encoding="utf-8") as fh: fh.write(html) # Write a tiny loader page that always redirects to gallery with current timestamp # so the iframe in HA never serves a cached version cache_bust = version loader = f""" """ with open(LOADER_FILE, "w", encoding="utf-8") as fh: fh.write(loader) print(f"Gallery updated: {len(files)} snapshots -> {OUTPUT_FILE}")