image2prompt-be / src /streamlit_app.py
Jean888deeg's picture
Update src/streamlit_app.py
c53a0da verified
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)
@st.cache_resource
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"
)