app.py: check the known save path directly instead of parsing stdout
(broken after PR #21 removed the print statement).
card_generator_adapter.py: 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.
Now uses PeftModel.from_pretrained() + merge_and_unload().
2. Conditioning built a natural language prompt, but the LoRA was trained
on json.dumps(meta). Now uses JSON serialization to match.
_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