diff --git a/server/server.py b/server/server.py index fcfce51..a499727 100644 --- a/server/server.py +++ b/server/server.py @@ -393,6 +393,24 @@ def preview_random(): return preview_photo(chosen.name) +@app.route("/api/photos//geometry") +def photo_geometry(name: str): + """Return source image dimensions and the computed crop/fit geometry.""" + fname = secure_filename(name) + path = PHOTOS_DIR / fname + if not path.exists(): + return jsonify({"error": "not found"}), 404 + img = Image.open(path) + lw, lh = get_logical_dimensions() + return jsonify({ + "source_width": img.width, + "source_height": img.height, + "logical_width": lw, + "logical_height": lh, + "logical_aspect": lw / lh, + }) + + @app.route("/simulate/") def simulate_page(name: str): fname = secure_filename(name) @@ -401,8 +419,10 @@ def simulate_page(name: str): return "", 404 settings = get_image_settings(fname) orientation = frame_settings.get("orientation", "landscape") + lw, lh = get_logical_dimensions() return render_template_string(SIMULATE_UI, photo_name=fname, - settings=settings, orientation=orientation) + settings=settings, orientation=orientation, + logical_w=lw, logical_h=lh) SIMULATE_UI = """ @@ -410,156 +430,284 @@ SIMULATE_UI = """ -E-Paper Simulator — {{ photo_name }} +{{ photo_name }} — Frame Preview -

E-Paper Display Simulator

-
- E-paper preview +
+ ← Gallery + {{ photo_name }} +
+ +
+ +
-
-

Display Settings

- -
- - -
- -
-
- - - {{ '%.0f' % (settings.pan_x * 100) }}% -
-
- - - {{ '%.0f' % (settings.pan_y * 100) }}% -
-
- -
- - - Rendering... +
+
+
+ +
+
+
+
+
- ← Back to gallery +
+ E-Paper Preview +
+ +
+ +
+