Spaces:
Runtime error
Runtime error
Commit
Β·
2522610
1
Parent(s):
cf99266
feat: first commit
Browse files- app.py +101 -0
- emojis.py +103 -0
- requirements.txt +3 -0
app.py
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
|
3 |
+
import streamlit as st
|
4 |
+
from openai import OpenAI
|
5 |
+
from dotenv import load_dotenv
|
6 |
+
|
7 |
+
from emojis import emojis
|
8 |
+
|
9 |
+
load_dotenv()
|
10 |
+
|
11 |
+
api_key = os.getenv("OPENAI_API_KEY")
|
12 |
+
|
13 |
+
client = OpenAI(api_key=api_key)
|
14 |
+
|
15 |
+
# set streamlit wide mode
|
16 |
+
st.set_page_config(layout="wide")
|
17 |
+
|
18 |
+
PROMPT = """A line drawing for a 4 year old childe to color in of these emojis: {emoji}
|
19 |
+
no internal lines, no background, no color, outside lines only
|
20 |
+
no writing, no numbers, no letters, no symbols, no words
|
21 |
+
do not combine images or add additional elements
|
22 |
+
do not crop the image, leave good margins around the image
|
23 |
+
do not make the lines too thin, they should be easy to color in
|
24 |
+
all of the images should be white or outline
|
25 |
+
make separate images for each emoji, same number of images as emojis
|
26 |
+
based on these emojis: {emoji}
|
27 |
+
"""
|
28 |
+
|
29 |
+
|
30 |
+
# Function to simulate generating an image based on emoji and audio input
|
31 |
+
def generate_image(emoji):
|
32 |
+
response = client.images.generate(
|
33 |
+
model="dall-e-3",
|
34 |
+
prompt=PROMPT.format(emoji=emoji),
|
35 |
+
n=1,
|
36 |
+
size="1024x1024",
|
37 |
+
quality="standard",
|
38 |
+
)
|
39 |
+
image_url = response.data[0].url
|
40 |
+
return image_url
|
41 |
+
|
42 |
+
|
43 |
+
# Set page title
|
44 |
+
# st.title("Emoji and Audio Image Generator")
|
45 |
+
|
46 |
+
# emojis = random.sample(emojis, 10)
|
47 |
+
n_columns = 4
|
48 |
+
# make a grid shape using st.container and st.columns
|
49 |
+
|
50 |
+
left, right = st.columns([1, 2])
|
51 |
+
st.markdown(
|
52 |
+
"""
|
53 |
+
<style>
|
54 |
+
button {
|
55 |
+
height: auto;
|
56 |
+
padding-top: 10px !important;
|
57 |
+
padding-bottom: 10px !important;
|
58 |
+
}
|
59 |
+
button p {
|
60 |
+
font-size: 80px;
|
61 |
+
margin: 0;
|
62 |
+
padding: 0;
|
63 |
+
}
|
64 |
+
</style>
|
65 |
+
""",
|
66 |
+
unsafe_allow_html=True,
|
67 |
+
)
|
68 |
+
|
69 |
+
|
70 |
+
@st.experimental_dialog("image generation")
|
71 |
+
def dialog():
|
72 |
+
emojis = st.session_state.selected_emoji
|
73 |
+
st.text("+".join(emojis))
|
74 |
+
with st.spinner("Generating..."):
|
75 |
+
image = generate_image(emojis)
|
76 |
+
st.markdown(f"<img src='{image}'/>", unsafe_allow_html=True)
|
77 |
+
st.session_state.selected_emoji = ""
|
78 |
+
|
79 |
+
|
80 |
+
# st.write("Choose an emoji")
|
81 |
+
# Create a container for the emojis
|
82 |
+
container = st.container()
|
83 |
+
# Create a row of columns
|
84 |
+
columns = [container.columns(n_columns) for _ in range(len(emojis) // n_columns + 1)]
|
85 |
+
# Fill the columns with emojis
|
86 |
+
|
87 |
+
selected_emoji = st.session_state.get("selected_emoji", "")
|
88 |
+
|
89 |
+
st.session_state.selected_emoji = "".join(selected_emoji)
|
90 |
+
|
91 |
+
for i, emoji in enumerate(emojis):
|
92 |
+
row = i // n_columns
|
93 |
+
col = i % n_columns
|
94 |
+
with columns[row][col]:
|
95 |
+
if st.button(emoji, key=i):
|
96 |
+
if emoji not in st.session_state.selected_emoji:
|
97 |
+
st.session_state.selected_emoji = (
|
98 |
+
st.session_state.selected_emoji + emoji
|
99 |
+
)
|
100 |
+
if len(st.session_state.selected_emoji) >= 3:
|
101 |
+
dialog()
|
emojis.py
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
emojis = [
|
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 |
+
"π¦",
|
89 |
+
"π¦",
|
90 |
+
"π¦",
|
91 |
+
"π¦",
|
92 |
+
"π¦
",
|
93 |
+
"π¦",
|
94 |
+
"π¦",
|
95 |
+
"π¦",
|
96 |
+
"π¦",
|
97 |
+
"π¦",
|
98 |
+
"π¦",
|
99 |
+
"π¦",
|
100 |
+
"π¦",
|
101 |
+
"π¦",
|
102 |
+
"π¦",
|
103 |
+
]
|
requirements.txt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
openai
|
2 |
+
python-dotenv
|
3 |
+
streamlit
|