Spaces:
Sleeping
Sleeping
| import os | |
| import base64 | |
| from flask import Flask, render_template, request, jsonify | |
| from dotenv import load_dotenv | |
| from utils.inference import generate_image_from_sketch_bytes | |
| load_dotenv() | |
| ALLOWED_EXTENSIONS = {"png", "jpg", "jpeg", "webp"} | |
| app = Flask(__name__) | |
| app.config["MAX_CONTENT_LENGTH"] = int(os.getenv("MAX_CONTENT_LENGTH", 10 * 1024 * 1024)) | |
| def allowed_file(filename: str) -> bool: | |
| return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS | |
| def index(): | |
| return render_template("index.html", generated_image_url=None, error=None) | |
| def predict(): | |
| file = request.files.get("sketch") | |
| if not file or file.filename == "": | |
| return jsonify({"ok": False, "error": "Please upload a sketch image."}), 400 | |
| if not allowed_file(file.filename): | |
| return jsonify({"ok": False, "error": "Unsupported file type. Use PNG, JPG, JPEG, or WEBP."}), 400 | |
| try: | |
| output_bytes = generate_image_from_sketch_bytes(file.read()) | |
| except Exception as exc: | |
| return jsonify({"ok": False, "error": f"Inference failed: {exc}"}), 500 | |
| encoded = base64.b64encode(output_bytes).decode("ascii") | |
| generated_image_url = f"data:image/png;base64,{encoded}" | |
| return jsonify({"ok": True, "generated_image_url": generated_image_url}) | |
| def add_no_cache_headers(response): | |
| response.headers["Cache-Control"] = "no-store, no-cache, must-revalidate, max-age=0" | |
| response.headers["Pragma"] = "no-cache" | |
| response.headers["Expires"] = "0" | |
| return response | |
| if __name__ == "__main__": | |
| app.run( | |
| host=os.getenv("HOST", "0.0.0.0"), | |
| port=int(os.getenv("PORT", "5000")), | |
| debug=os.getenv("FLASK_DEBUG", "0") == "1", | |
| ) | |