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.