Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from PIL import Image, ImageOps | |
| from internal.api import APIClient | |
| import os | |
| client = APIClient("https://collage-ai.onrender.com") | |
| # client = APIClient("http://localhost:3000") | |
| def gallery(column, images): | |
| groups = [] | |
| for i in range(0, len(images), column): | |
| groups.append(images[i:i+column]) | |
| for group in groups: | |
| cols = st.columns(column) | |
| for i, image in enumerate(group): | |
| cols[i].image(image) | |
| def resize_image(image_file): | |
| image = Image.open(image_file) | |
| resized = image.resize((224, 224)) | |
| print(f"Resized image: {resized}") | |
| resized.save(image_file.name) | |
| return open(image_file.name, 'rb') | |
| st.title('CollageAI') | |
| user_images = None | |
| user_prompt = None | |
| uploaded_images = None | |
| captions = [] | |
| keywords = [] | |
| submitted = False | |
| with st.form("user_input_form"): | |
| user_images = st.file_uploader( | |
| "Choose your photos", | |
| accept_multiple_files=True | |
| ) | |
| user_prompt = st.text_area( | |
| "Describe the design you'd like to create:", | |
| placeholder="For our anniversary, I want to write a card to my partner to celebrate our love and share all the things I adore about them." | |
| ) | |
| submitted = st.form_submit_button("Generate") | |
| # Check form | |
| if submitted: | |
| if user_images: | |
| with st.container(): | |
| with st.spinner('Uploading images...'): | |
| try: | |
| resized_images = [resize_image(image) for image in user_images] | |
| uploaded_images = client.upload_images(resized_images) | |
| # delete resized image files | |
| for image in resized_images: | |
| image.close() | |
| os.remove(image.name) | |
| except Exception as e: | |
| st.error(f"Error uploading images: {e}") | |
| # Display the photo gallery | |
| st.subheader('Your photos:') | |
| images = [Image.open(image) for image in user_images] | |
| images = [ImageOps.exif_transpose(image) for image in images] | |
| gallery(4, images) | |
| else: | |
| st.warning('Please upload at least one image before submitting.') | |
| if user_prompt: | |
| if uploaded_images: | |
| # Analysis | |
| with st.spinner('Analyzing prompt...'): | |
| try: | |
| analysis = client.analyze_prompt(user_prompt, uploaded_images) | |
| keywords = analysis.get("keywords") | |
| captions = analysis.get("captions") | |
| if captions: | |
| st.subheader('Captions of your photos') | |
| st.write(captions) | |
| if keywords: | |
| st.subheader('Keywords based on your photos and prompt') | |
| st.write(keywords) | |
| else: | |
| st.warning('No keywords were generated. Please try again with a different prompt.') | |
| except Exception as e: | |
| st.error(f"Error analyzing prompt: {e}") | |
| # Stickers | |
| with st.container(): | |
| with st.spinner('Generating stickers...'): | |
| try: | |
| sticker_image_urls = client.suggest_stickers(user_prompt, captions) | |
| if sticker_image_urls: | |
| st.subheader('Stickers suggestions') | |
| gallery(4, sticker_image_urls[:8]) | |
| else: | |
| st.warning('No images were generated. Please try again with a different prompt.') | |
| except Exception as e: | |
| st.error(f"Error generating stickers: {e}") | |
| # Templates | |
| with st.container(): | |
| with st.spinner('Generating templates...'): | |
| try: | |
| template_image_urls = client.suggest_templates(user_prompt, captions) | |
| if template_image_urls: | |
| st.subheader('Template suggestions') | |
| gallery(4, template_image_urls[:8]) | |
| else: | |
| st.warning('No images were generated. Please try again with a different prompt.') | |
| except Exception as e: | |
| st.error(f"Error generating templates: {e}") | |
| else: | |
| st.warning('Please enter a prompt before submitting.') | |