oopshnik commited on
Commit
68b014f
Β·
1 Parent(s): 871e175
Files changed (5) hide show
  1. .devcontainer/devcontainer.json +33 -0
  2. .gitignore +16 -0
  3. .python-version +1 -0
  4. __init__.py +0 -0
  5. app.py +23 -23
.devcontainer/devcontainer.json ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "Python 3",
3
+ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
4
+ "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye",
5
+ "customizations": {
6
+ "codespaces": {
7
+ "openFiles": [
8
+ "README.md",
9
+ "images.py"
10
+ ]
11
+ },
12
+ "vscode": {
13
+ "settings": {},
14
+ "extensions": [
15
+ "ms-python.python",
16
+ "ms-python.vscode-pylance"
17
+ ]
18
+ }
19
+ },
20
+ "updateContentCommand": "[ -f packages.txt ] && sudo apt update && sudo apt upgrade -y && sudo xargs apt install -y <packages.txt; [ -f requirements.txt ] && pip3 install --user -r requirements.txt; pip3 install --user streamlit; echo 'βœ… Packages installed and Requirements met'",
21
+ "postAttachCommand": {
22
+ "server": "streamlit run images.py --server.enableCORS false --server.enableXsrfProtection false"
23
+ },
24
+ "portsAttributes": {
25
+ "8501": {
26
+ "label": "Application",
27
+ "onAutoForward": "openPreview"
28
+ }
29
+ },
30
+ "forwardPorts": [
31
+ 8501
32
+ ]
33
+ }
.gitignore ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Secrets
10
+ *.env
11
+
12
+ # Other stuffs
13
+ .devcotainer/
14
+ images/
15
+ # Virtual environments
16
+ .venv
.python-version ADDED
@@ -0,0 +1 @@
 
 
1
+ 3.11
__init__.py ADDED
File without changes
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import streamlit as st
2
  import requests
3
  import subprocess
 
4
  from urllib.parse import quote
5
  from io import BytesIO
6
 
@@ -38,17 +39,21 @@ st.markdown("""
38
  </style>
39
  """, unsafe_allow_html=True)
40
 
41
- st.markdown("<h1 class='title-text'>🎨 AI Image Generator</h1>", unsafe_allow_html=True)
42
 
43
  with st.sidebar:
44
  st.header("βš™οΈ Settings")
45
 
46
- width = st.slider("Width:", 256, 2048, 1024, step=64)
47
- height = st.slider("Height:", 256, 2048, 1024, step=64)
48
 
49
- if "seed" not in st.session_state:
50
- st.session_state.seed = 42 # Default seed
51
- seed = st.number_input("Seed:", value=st.session_state.seed, min_value=0, step=1)
 
 
 
 
52
 
53
  model = st.selectbox("Model:", ["flux", "flux-pro", "flux-realism", "flux-anime", "flux-3d", "flux-cablyai", "turbo"], index=0)
54
 
@@ -56,12 +61,16 @@ with st.sidebar:
56
  nologo = st.checkbox("Remove Watermark", value=True)
57
  private = st.checkbox("Keep image private", value=True)
58
  enhance = st.checkbox("Enhance prompt", value=True)
 
59
 
60
  st.subheader("ℹ️ About")
61
  st.markdown("""
62
- [![Powered by Pollinations.ai](https://img.shields.io/badge/Powered%20by-Pollinations.ai-blue?style=for-the-badge&logo=appveyor&borderRadius=50)](https://pollinations.ai)
63
  [![Source Code](https://img.shields.io/badge/Source%20Code-GitHub-black?style=for-the-badge&logo=github&borderRadius=50)](https://github.com/oopshnik/image_gen)
64
- [![Developer](https://img.shields.io/badge/Developer-Contact-green?style=for-the-badge&logo=telegram&borderRadius=50)](https://t.me/pr_ogr)
 
 
 
65
  """, unsafe_allow_html=True)
66
 
67
  st.markdown("<h3 style='text-align: center;'>Enter Your Image Prompt</h3>", unsafe_allow_html=True)
@@ -69,7 +78,6 @@ col1, col2, col3 = st.columns([1, 3, 1])
69
  with col2:
70
  prompt = st.text_input("Prompt:", placeholder="A futuristic city at sunset πŸŒ‡", label_visibility="collapsed")
71
 
72
-
73
  col1, col2, col3 = st.columns([1, 2, 1])
74
 
75
  with col2:
@@ -87,24 +95,16 @@ with col2:
87
  "private": str(private).lower(),
88
  "enhance": str(enhance).lower(),
89
  "model": model,
90
- "safe": "true"
91
  }
92
  url = f"{base_url}{encoded_prompt}?" + "&".join([f"{k}={v}" for k, v in params.items()])
93
-
94
  response = requests.get(url)
95
 
96
  if response.status_code == 200:
97
- img_bytes = BytesIO(response.content)
98
- process = subprocess.run(["curl", "-f", "-X", "POST", "-F", "file=@-", "https://0x0.st"],
99
- input=img_bytes.getvalue(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
100
-
101
- if process.returncode == 0:
102
- upload_url = process.stdout.decode().strip()
103
-
104
-
105
- st.image(response.content, caption=f"✨ Generated Image \nπŸ”— {upload_url}", use_container_width=True)
106
- st.success(f"βœ… Image generated successfully! Seed used: {seed} | Width: {width} | Height: {height}\n {upload_url}")
107
-
108
 
 
 
 
109
  else:
110
- st.error(f"❌ Failed to generate image. Status code: {response.status_code}")
 
1
  import streamlit as st
2
  import requests
3
  import subprocess
4
+ import random
5
  from urllib.parse import quote
6
  from io import BytesIO
7
 
 
39
  </style>
40
  """, unsafe_allow_html=True)
41
 
42
+ st.markdown("<h1 style='background: linear-gradient(90deg, #ff7eb3, #ff758c); -webkit-background-clip: text; -webkit-text-fill-color: transparent;' class='title-text'>🎨 AI Image Generator</h1>", unsafe_allow_html=True)
43
 
44
  with st.sidebar:
45
  st.header("βš™οΈ Settings")
46
 
47
+ width = st.slider("Width:", 256, 2048, 512, step=1)
48
+ height = st.slider("Height:", 256, 2048, 512, step=1)
49
 
50
+ random_seed = st.checkbox("Use Random Seed", value=True)
51
+ if random_seed:
52
+ seed = random.randint(1, 1337)
53
+ else:
54
+ if "seed" not in st.session_state:
55
+ st.session_state.seed = 42
56
+ seed = st.number_input("Seed:", value=st.session_state.seed, min_value=1, max_value=1337, step=1)
57
 
58
  model = st.selectbox("Model:", ["flux", "flux-pro", "flux-realism", "flux-anime", "flux-3d", "flux-cablyai", "turbo"], index=0)
59
 
 
61
  nologo = st.checkbox("Remove Watermark", value=True)
62
  private = st.checkbox("Keep image private", value=True)
63
  enhance = st.checkbox("Enhance prompt", value=True)
64
+ safe = st.checkbox("Safe", value=True)
65
 
66
  st.subheader("ℹ️ About")
67
  st.markdown("""
68
+ [![Powered by Pollinations.ai](https://img.shields.io/badge/Powered%20by-Pollinations.ai-blue?style=for-the-badge&logo=rocket&borderRadius=50)](https://pollinations.ai)
69
  [![Source Code](https://img.shields.io/badge/Source%20Code-GitHub-black?style=for-the-badge&logo=github&borderRadius=50)](https://github.com/oopshnik/image_gen)
70
+ [![Hugging Face Spaces](https://img.shields.io/badge/Hugging%20Face-Spaces-blue?style=for-the-badge&logo=huggingface&borderRadius=50)](https://huggingface.co/spaces/oopshnik/image_gen)
71
+ \n
72
+ [![Developer](https://img.shields.io/badge/Developer-Contact-green?style=for-the-badge&logo=telegram&borderRadius=50)](https://t.me/pr_ogr)
73
+
74
  """, unsafe_allow_html=True)
75
 
76
  st.markdown("<h3 style='text-align: center;'>Enter Your Image Prompt</h3>", unsafe_allow_html=True)
 
78
  with col2:
79
  prompt = st.text_input("Prompt:", placeholder="A futuristic city at sunset πŸŒ‡", label_visibility="collapsed")
80
 
 
81
  col1, col2, col3 = st.columns([1, 2, 1])
82
 
83
  with col2:
 
95
  "private": str(private).lower(),
96
  "enhance": str(enhance).lower(),
97
  "model": model,
98
+ "safe": str(safe).lower()
99
  }
100
  url = f"{base_url}{encoded_prompt}?" + "&".join([f"{k}={v}" for k, v in params.items()])
101
+
102
  response = requests.get(url)
103
 
104
  if response.status_code == 200:
 
 
 
 
 
 
 
 
 
 
 
105
 
106
+ st.image(response.content, caption=f"✨ Generated Image", width=width)
107
+ st.download_button('πŸ“₯ Download Image', data=response.content, file_name=prompt+".png", mime="image/png")
108
+ st.code("")
109
  else:
110
+ st.error(f"❌ Failed to generate image. Status code: {response.status_code}")