import os
import streamlit as st
from openai import OpenAI
from dotenv import load_dotenv
from emojis import emojis
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=api_key)
# set streamlit wide mode
st.set_page_config(layout="wide")
PROMPT = """A line drawing for a 4 year old childe to color in of these emojis: {emoji}
no internal lines, no background, no color, outside lines only
no writing, no numbers, no letters, no symbols, no words
do not combine images or add additional elements
do not crop the image, leave good margins around the image
do not make the lines too thin, they should be easy to color in
all of the images should be white or outline
make separate images for each emoji, same number of images as emojis
based on these emojis: {emoji}
"""
# Function to simulate generating an image based on emoji and audio input
def generate_image(emoji):
response = client.images.generate(
model="dall-e-3",
prompt=PROMPT.format(emoji=emoji),
n=1,
size="1024x1024",
quality="standard",
)
image_url = response.data[0].url
return image_url
# Set page title
# st.title("Emoji and Audio Image Generator")
# emojis = random.sample(emojis, 10)
n_columns = 6
# make a grid shape using st.container and st.columns
left, right = st.columns([1, 2])
st.markdown(
"""
""",
unsafe_allow_html=True,
)
st.header("🎨 Click your favorite 3 emojis to generate a coloring in page\n\n")
@st.experimental_dialog("image generation")
def dialog():
emojis = st.session_state.selected_emoji
st.text("+".join(emojis))
with st.spinner("Generating..."):
image = generate_image(emojis)
st.markdown(f"", unsafe_allow_html=True)
st.session_state.selected_emoji = ""
# st.write("Choose an emoji")
# Create a container for the emojis
container = st.container()
# Create a row of columns
columns = [container.columns(n_columns) for _ in range(len(emojis) // n_columns + 1)]
# Fill the columns with emojis
selected_emoji = st.session_state.get("selected_emoji", "")
st.session_state.selected_emoji = "".join(selected_emoji)
for i, emoji in enumerate(emojis):
row = i // n_columns
col = i % n_columns
with columns[row][col]:
if st.button(emoji, key=i):
if emoji not in st.session_state.selected_emoji:
st.session_state.selected_emoji = (
st.session_state.selected_emoji + emoji
)
if len(st.session_state.selected_emoji) >= 3:
dialog()