diff --git a/visual_workflow_builder/backend/api_v3/learned_workflows.py b/visual_workflow_builder/backend/api_v3/learned_workflows.py index e9a63c359..9b0757fc4 100644 --- a/visual_workflow_builder/backend/api_v3/learned_workflows.py +++ b/visual_workflow_builder/backend/api_v3/learned_workflows.py @@ -330,7 +330,8 @@ def import_learned_workflow(workflow_id: str): # Extraire et sauvegarder le screenshot d'ancre si présent anchor_b64 = params.pop("_anchor_image_base64", None) - params.pop("_anchor_bbox", None) + # NE PAS supprimer _anchor_bbox : on le conserve dans params pour que le frontend puisse lire x_pct/y_pct + # et afficher la zone ciblée, au lieu de le jeter et de créer une bbox factice. if anchor_b64: try: from services.anchor_image_service import ( @@ -344,6 +345,8 @@ def import_learned_workflow(workflow_id: str): anchor_b64 = anchor_b64.split(',', 1)[1] img_data = b64mod.b64decode(anchor_b64) img = Image.open(BytesIO(img_data)) + # Fallback sécurisé pour le service de crop si _anchor_bbox n'a pas le format attendu, + # mais les données x_pct/y_pct restent intactes dans params pour le frontend. bbox = { "x": 0, "y": 0, "width": img.width, "height": img.height