|
|
import streamlit as st |
|
|
import os |
|
|
from PIL import Image |
|
|
import io |
|
|
from utils.gemini_utils import get_meme_template_description |
|
|
from utils.meme_utils import generate_meme_text |
|
|
|
|
|
def main(): |
|
|
st.title("Meme Generator") |
|
|
|
|
|
|
|
|
st.header("Meme Template Gallery") |
|
|
meme_templates = [f for f in os.listdir("meme_templates") if f.endswith(('.png', '.jpg', '.jpeg'))] |
|
|
|
|
|
|
|
|
if 'selected_template' not in st.session_state: |
|
|
st.session_state.selected_template = None |
|
|
|
|
|
|
|
|
cols = st.columns(4) |
|
|
|
|
|
for idx, template in enumerate(meme_templates): |
|
|
col = cols[idx % 4] |
|
|
image_path = os.path.join("meme_templates", template) |
|
|
with Image.open(image_path) as img: |
|
|
col.image(img, use_column_width=True) |
|
|
if col.button(f"Select {template}", key=f"btn_{template}"): |
|
|
st.session_state.selected_template = template |
|
|
|
|
|
|
|
|
if st.session_state.selected_template: |
|
|
st.subheader(f"Selected Template: {st.session_state.selected_template}") |
|
|
image_path = os.path.join("meme_templates", st.session_state.selected_template) |
|
|
with Image.open(image_path) as img: |
|
|
st.image(img, caption=st.session_state.selected_template, use_column_width=True) |
|
|
|
|
|
|
|
|
topic = st.text_input("Enter a topic for your meme:") |
|
|
|
|
|
if st.button("Generate Meme"): |
|
|
with st.spinner("Generating meme..."): |
|
|
|
|
|
with open(image_path, "rb") as img_file: |
|
|
img_bytes = img_file.read() |
|
|
|
|
|
meme_description = get_meme_template_description(img_bytes) |
|
|
|
|
|
|
|
|
meme_text = generate_meme_text(meme_description, topic) |
|
|
|
|
|
|
|
|
st.subheader("Generated Meme Text:") |
|
|
st.write(meme_text) |
|
|
|
|
|
st.subheader("Meme Template Description:") |
|
|
st.write(meme_description) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |