card_generator_adapter.py had two mismatches with the training notebook:
1. LoRA loading: used pipe.load_lora_weights() (diffusers format) but the
adapter was saved with PEFT's save_pretrained() — keys didn't match,
so no LoRA weights were actually applied. Now uses
PeftModel.from_pretrained() + merge_and_unload().
2. Conditioning: built a natural language prompt, but the LoRA was trained
on json.dumps(meta) serialization. Now uses JSON serialization to match.
app.py relied on parsing stdout for the save path printed by the
pipeline. After PR #21 replaced that print with logger.info(), the
stdout parsing returned None, causing "Aucune image générée détectée".
Now check the known save path directly (APP_DIR / save_path) and
only fall back to stdout parsing if the file isn't found.
Replace 27 unconditional print() calls with Python's logging module.
Debug messages now use logger.debug() and the card-saved message uses
logger.info(). Only legitimate user-facing output (--print-json,
--print-clean-text) remains on stdout.
Fixes#3
Replace broad `except Exception` with `except ImportError` for the yake
import and `except (ValueError, TypeError)` for YAKE extraction. Add
logging so failures are no longer silently swallowed.
Fixes#4
_extract_image_from_stdout() failed to find the generated image because
the pipeline prints "Card generated and saved to: generated_card.png"
but the function only tried the full line as a path. Now also tries the
part after the last colon.
Fix two critical bugs that made the Streamlit app completely non-functional:
1. Split subprocess command into properly separated list elements and use
sys.executable instead of hardcoded "python" (#1)
2. Unpack all 3 return values from run_prompt_pipeline() (#2)
Closes#1, closes#2