File size: 3,395 Bytes
469b107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50d46df
469b107
 
 
50d46df
469b107
 
 
 
68961de
469b107
68961de
469b107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from dotenv import load_dotenv
import streamlit as st
import os
import google.generativeai as genai
from PIL import Image

load_dotenv()

genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))

# Function to get response from Gemini model
def get_gemini_response(input_prompt, image_data, genre, length, language, mood):
    model = genai.GenerativeModel('gemini-pro-vision')
    if image_data:
        full_prompt = f"""
        You are a creative writer. Look at the image provided and create a {length} {genre} in {language}. The {genre} should be {mood}. The {genre} should be based on the image and contain realistic and emotional elements.
        """
        response = model.generate_content([full_prompt, image_data[0]])
    else:
        full_prompt = f"""
        You are a creative writer. Create a {length} {genre} in {language}. The {genre} should be {mood}. The {genre} should be based on the following prompt:
        
        "{input_prompt}"
        
        Make sure it contains realistic and emotional elements.
        """
        response = model.generate_content([full_prompt])
    
    # Check if response is valid and return text
    if response and response.parts:
        return response.parts[0].text
    else:
        raise ValueError("Sorry, But please try a different combination of inputs.")

# Function to setup uploaded image
def input_image_setup(uploaded_file):
    if uploaded_file is not None:
        bytes_data = uploaded_file.getvalue()
        image_parts = [
            {
                "mime_type": uploaded_file.type,
                "data": bytes_data
            }
        ]
        return image_parts
    else:
        return None

# Initialize Streamlit app
st.set_page_config(page_title="Histoire Poetique", page_icon=":pencil:")

# Main UI components
st.title("Générateur d'histoires aléatoires")
st.markdown("### Téléchargez votre image ou écrivez un prompt pour créer une histoire autour de celle-ci : ")

input_prompt = st.text_input("Input Prompt (optional):", placeholder="Enter your prompt here...")
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])

genre = st.selectbox("Select Genre:", ["story", "poem", "quote"])
length = st.selectbox("Select Length:", ["short", "long"])
language = st.selectbox("Select Language:", ["English", "French"])
mood = st.selectbox("Select Mood:", ["emotional", "sad", "happy", "horror", "comedy", "romantic"])

image = None

if uploaded_file is not None:
    image = Image.open(uploaded_file)
    st.image(image, caption="Uploaded Image", use_column_width=True)

submit = st.button("Generate")

# Handle submit action
if submit:
    if uploaded_file or input_prompt:
        try:
            image_data = input_image_setup(uploaded_file)
            response = get_gemini_response(input_prompt, image_data, genre, length, language, mood)
            st.subheader("Generated Content:")
            st.write(response)
        except ValueError as e:
            st.error(f"Error: {str(e)}")
    else:
        st.error("Please upload an image or provide a prompt.")

st.sidebar.title("About")
st.sidebar.info("This app uses AI to create stories, shayari, sher, ghazal, poems, or quotes based on an uploaded image or a provided prompt. "
                "Upload an image or enter a prompt, and select the genre, length, language, and mood to generate your content.")