Spaces:
Running
Running
| import streamlit as st | |
| from transformers import pipeline | |
| from PIL import Image | |
| import torch | |
| # --- Config --- | |
| st.set_page_config(page_title="Image β Prompt", page_icon="πΌοΈ", layout="centered") | |
| # Laad model (gecached) | |
| def load_model(): | |
| return pipeline( | |
| "image-to-text", | |
| model="llava-hf/llava-v1.6-34b-hf", | |
| torch_dtype=torch.float16, | |
| device_map="auto" | |
| ) | |
| pipe = load_model() | |
| # Stijlen | |
| STIJLEN = { | |
| "Realistisch": ", fotorealistisch, 8k, scherp, natuurlijk licht", | |
| "Anime": ", anime stijl, gedetailleerde ogen, Studio Ghibli, 4k", | |
| "Olieverf": ", olieverf op doek, impressionistisch, Van Gogh stijl", | |
| "Cyberpunk": ", cyberpunk, neon lichten, regenachtige straten, Blade Runner", | |
| "Geen stijl": "" | |
| } | |
| # --- UI --- | |
| st.title("πΌοΈ Image β Prompt Generator") | |
| st.markdown("*Upload een foto, kies een stijl, krijg een perfecte AI-prompt.*") | |
| col1, col2 = st.columns([1, 1]) | |
| with col1: | |
| uploaded_file = st.file_uploader("Kies een afbeelding", type=["png", "jpg", "jpeg"]) | |
| with col2: | |
| stijl = st.selectbox("Kies een stijl", options=list(STIJLEN.keys())) | |
| if uploaded_file: | |
| image = Image.open(uploaded_file).convert("RGB") | |
| st.image(image, caption="Jouw afbeelding", use_column_width=True) | |
| with st.spinner("Prompt genereren..."): | |
| result = pipe(image) | |
| raw_prompt = result[0]["generated_text"] | |
| # Optimaliseer | |
| final_prompt = ( | |
| raw_prompt | |
| .replace("a photo of", "") | |
| .replace("an image of", "") | |
| .strip() | |
| .capitalize() | |
| ) | |
| final_prompt += STIJLEN[stijl] | |
| st.success("**Prompt:**") | |
| st.code(final_prompt, language=None) | |
| st.download_button( | |
| "π₯ Download prompt", | |
| final_prompt, | |
| file_name="prompt.txt", | |
| mime="text/plain" | |
| ) |