diff --git a/src/controllers/render_controller.py b/src/controllers/render_controller.py index 5c2e9bacc2b0e78bec23d74e307db3fb5e6a7a5c..1fed7ce280bbc53bd1b9c5c8fda583d718568e40 100644 --- a/src/controllers/render_controller.py +++ b/src/controllers/render_controller.py @@ -1,19 +1,33 @@ import os +import tempfile from flask import jsonify, Response from gradio_client import Client, handle_file class RenderController: - def get_render(self, hf_token='', base_image_url='', + def post_render(self, hf_token='', base_image=None, prompt='A realistic photo of a building', negative_prompt="sketch, drawing", instruct_query='use everything from the image', scale=0.8, nfaa_negative_prompt='naked, bikini, skimpy, scanty, bare skin, lingerie, swimsuit, exposed, see-through') -> Response: + if not base_image: + return jsonify({"error": "Aucune image envoyée"}), 400 + + if base_image.filename == '': + return jsonify({"error": "Nom de fichier vide"}), 400 + + # Définir un chemin temporaire compatible avec tous les OS + temp_dir = tempfile.gettempdir() + temp_path = os.path.join(temp_dir, base_image.filename) + + # Sauvegarde temporaire + base_image.save(temp_path) + client = Client("unity/IP-Adapter-Instruct") result = client.predict( - images=handle_file(base_image_url), + images=handle_file(temp_path), prompt=prompt, negative_prompt=negative_prompt, instruct_query=instruct_query, @@ -22,4 +36,7 @@ class RenderController: api_name="/generate_image" ) + # Suppression du fichier temporaire après utilisation + os.remove(temp_path) + return jsonify({"result": result}) diff --git a/src/routes/router.py b/src/routes/router.py index 314864ede51b25c2f9820142038bcc4ce160e0aa..9a833d468ec81a93a954b65e7e845c3c68c16b36 100644 --- a/src/routes/router.py +++ b/src/routes/router.py @@ -1,4 +1,4 @@ -from flask import Blueprint, Response, request +from flask import Blueprint, Response, jsonify, request from controllers.gdrive_controller import GDriveController from controllers.glb_controller import GlbController from controllers.render_controller import RenderController @@ -33,20 +33,6 @@ def setup_routes(app): slat_sampling_steps, multiimage_algo, mesh_simplify, texture_size) - # Text + Sketch to image - @app.route('/render', methods=['GET']) - def get_render() -> Response: - hf_token = request.args.get('hf_token', '', type=str) - base_image_url = request.args.get('base_image_url', '', type=str) - prompt = request.args.get('prompt', 'A realistic photo of a building', type=str) - negative_prompt = request.args.get('negative_prompt', 'sketch, drawing', type=str) - instruct_query = request.args.get('instruct_query', 'use everything from the image', type=str) - scale = request.args.get('scale', 0.8, type=float) - nfaa_negative_prompt = request.args.get('nfaa_negative_prompt', 'naked, bikini, skimpy, scanty, bare skin, lingerie, swimsuit, exposed, see-through', type=str) - - return render_controller.get_render(hf_token, base_image_url, prompt, negative_prompt, - instruct_query, scale, nfaa_negative_prompt) - # Suggest @app.route('/suggest', methods=['GET']) def get_suggest() -> Response: @@ -71,3 +57,21 @@ def setup_routes(app): folder_id = request.form.get('folder_id', '', type=str) return gdrive_controller.post_gdrive(local_file_path, folder_id) + + # Text + Sketch to image + @app.route('/render', methods=['POST']) + def post_render() -> Response: + # Vérifier si un fichier est envoyé + if 'image' not in request.files: + return jsonify({"error": "Aucune image envoyée"}), 400 + + hf_token = request.form.get('hf_token', '', type=str) + base_image = request.files.get('image') + prompt = request.form.get('prompt', 'A realistic photo of a building', type=str) + negative_prompt = request.form.get('negative_prompt', 'sketch, drawing', type=str) + instruct_query = request.form.get('instruct_query', 'use everything from the image', type=str) + scale = request.form.get('scale', 0.8, type=float) + nfaa_negative_prompt = request.form.get('nfaa_negative_prompt', 'naked, bikini, skimpy, scanty, bare skin, lingerie, swimsuit, exposed, see-through', type=str) + + return render_controller.post_render(hf_token, base_image, prompt, negative_prompt, + instruct_query, scale, nfaa_negative_prompt)