diff --git a/main.py b/main.py index 19a19d1..f1a0c52 100644 --- a/main.py +++ b/main.py @@ -1,51 +1,61 @@ # main.py - +import os from flask import Flask, request, render_template -from immich_selfie_timelapse import process_faces +from timelapse import process_faces app = Flask(__name__) +# Read critical parameters from environment variables +DEFAULT_API_KEY = os.environ.get("IMMICH_API_KEY", "") +DEFAULT_BASE_URL = os.environ.get("IMMICH_BASE_URL", "") +DEFAULT_OUTPUT_FOLDER = os.environ.get("IMMICH_OUTPUT_FOLDER", "output") + @app.route("/", methods=["GET", "POST"]) def index(): result = None + error = None if request.method == "POST": - # Read form fields, converting as necessary. - api_key = request.form["api_key"] - base_url = request.form["base_url"] - person_id = request.form["person_id"] - output_folder = request.form.get("output_folder", "output") - padding_percent = float(request.form.get("padding_percent", 0.3)) - resize_width = int(request.form.get("resize_width", 512)) - resize_height = int(request.form.get("resize_height", 512)) - min_face_width = int(request.form.get("min_face_width", 128)) - min_face_height = int(request.form.get("min_face_height", 128)) - pose_threshold = float(request.form.get("pose_threshold", 25)) - desired_left_eye_x = float(request.form.get("desired_left_eye_x", 0.35)) - desired_left_eye_y = float(request.form.get("desired_left_eye_y", 0.45)) - max_workers = int(request.form.get("max_workers", 4)) - face_detect_model_path = request.form.get("face_detect_model_path", "mmod_human_face_detector.dat") - landmark_model_path = request.form.get("landmark_model_path", "shape_predictor_68_face_landmarks.dat") + try: + # Use environment variable defaults if form fields are empty + api_key = request.form.get("api_key") or DEFAULT_API_KEY + base_url = request.form.get("base_url") or DEFAULT_BASE_URL + output_folder = request.form.get("output_folder") or DEFAULT_OUTPUT_FOLDER + person_id = request.form["person_id"] - # Run the process_faces function with provided parameters - processed_files = process_faces( - api_key=api_key, - base_url=base_url, - person_id=person_id, - output_folder=output_folder, - padding_percent=padding_percent, - resize_width=resize_width, - resize_height=resize_height, - min_face_width=min_face_width, - min_face_height=min_face_height, - pose_threshold=pose_threshold, - desired_left_eye=(desired_left_eye_x, desired_left_eye_y), - max_workers=max_workers, - face_detect_model_path=face_detect_model_path, - landmark_model_path=landmark_model_path - ) - result = f"Finished processing. {len(processed_files)} images saved in {output_folder}" - return render_template("index.html", result=result) + # Convert numeric parameters with defaults if conversion fails + padding_percent = float(request.form.get("padding_percent", 0.3)) + resize_width = int(request.form.get("resize_width", 512)) + resize_height = int(request.form.get("resize_height", 512)) + min_face_width = int(request.form.get("min_face_width", 128)) + min_face_height = int(request.form.get("min_face_height", 128)) + pose_threshold = float(request.form.get("pose_threshold", 25)) + desired_left_eye_x = float(request.form.get("desired_left_eye_x", 0.35)) + desired_left_eye_y = float(request.form.get("desired_left_eye_y", 0.45)) + max_workers = int(request.form.get("max_workers", 4)) + face_detect_model_path = request.form.get("face_detect_model_path", "mmod_human_face_detector.dat") + landmark_model_path = request.form.get("landmark_model_path", "shape_predictor_68_face_landmarks.dat") + + processed_files = process_faces( + api_key=api_key, + base_url=base_url, + person_id=person_id, + output_folder=output_folder, + padding_percent=padding_percent, + resize_width=resize_width, + resize_height=resize_height, + min_face_width=min_face_width, + min_face_height=min_face_height, + pose_threshold=pose_threshold, + desired_left_eye=(desired_left_eye_x, desired_left_eye_y), + max_workers=max_workers, + face_detect_model_path=face_detect_model_path, + landmark_model_path=landmark_model_path + ) + result = f"Finished processing. {len(processed_files)} images saved in '{output_folder}'." + except Exception as e: + error = f"Error processing request: {e}" + return render_template("index.html", result=result, error=error) if __name__ == "__main__": diff --git a/templates/index.html b/templates/index.html index a0a6e74..61ab142 100644 --- a/templates/index.html +++ b/templates/index.html @@ -5,22 +5,53 @@

Create a Selfie Timelapse

+ {% if error %} +

{{ error }}

+ {% endif %}
-

-

+

+

+



-

-

-

-

-

-

-

-

-

-

-

-

+

+

+

+

+

+

+

+

+

+

+

{% if result %} diff --git a/immich_selfie_timelapse.py b/timelapse.py similarity index 100% rename from immich_selfie_timelapse.py rename to timelapse.py