Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -7,7 +7,7 @@ import requests
|
|
7 |
import replicate
|
8 |
from transformers import pipeline as transformers_pipeline
|
9 |
from gradio_client import Client
|
10 |
-
from PIL import Image
|
11 |
|
12 |
# ββββββββββββββββββ νκ²½ λ³μ ββββββββββββββββββ
|
13 |
TOKEN = os.getenv("DISCORD_TOKEN")
|
@@ -98,57 +98,82 @@ class ImageBot(discord.Client):
|
|
98 |
await message.reply("β οΈ μ΄λ―Έμ§ μμ± μ€ν¨!")
|
99 |
return
|
100 |
|
101 |
-
#
|
102 |
if isinstance(result, list):
|
103 |
result = result[0]
|
104 |
|
105 |
-
# βββββββββββββ
|
106 |
-
url = None
|
107 |
-
if isinstance(result, dict):
|
108 |
-
url = result.get("url")
|
109 |
-
if url and url.startswith("/"):
|
110 |
-
url = urljoin(GRADIO_URL, url)
|
111 |
-
elif isinstance(result, str) and result.startswith(("http", "/")):
|
112 |
-
url = result if result.startswith("http") else urljoin(GRADIO_URL, result)
|
113 |
-
|
114 |
-
if url:
|
115 |
-
await message.reply(content=url) # Discordκ° embed 미리보기
|
116 |
-
return
|
117 |
-
|
118 |
-
# βββββββββββββ μ²¨λΆ νμΌ μ€λΉ βββββββββββββ
|
119 |
data = None
|
120 |
-
|
|
|
|
|
121 |
if isinstance(result, dict):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
path = result.get("path")
|
123 |
if path:
|
124 |
-
# Gradio νμΌ
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
if os.path.isfile(path):
|
130 |
with open(path, "rb") as f:
|
131 |
data = f.read()
|
132 |
-
|
133 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
try:
|
135 |
-
|
136 |
-
|
|
|
|
|
137 |
except Exception as e:
|
138 |
-
logging.warning(f"
|
139 |
|
140 |
if not data:
|
141 |
await message.reply("β οΈ μ΄λ―Έμ§λ₯Ό μ μ‘ν μ μμ΅λλ€.")
|
142 |
return
|
143 |
|
144 |
-
# βββββββββββββ WEBP β PNG λ³ν
|
145 |
buf = io.BytesIO()
|
146 |
try:
|
147 |
Image.open(io.BytesIO(data)).convert("RGB").save(buf, format="PNG")
|
148 |
buf.seek(0)
|
149 |
await message.reply(files=[discord.File(buf, filename="image.png")])
|
150 |
-
except Exception:
|
151 |
-
|
|
|
152 |
await message.reply(files=[discord.File(io.BytesIO(data), filename="image.webp")])
|
153 |
|
154 |
# ββββββββββββββββββ μ€ν ββββββββββββββββββββββββ
|
|
|
7 |
import replicate
|
8 |
from transformers import pipeline as transformers_pipeline
|
9 |
from gradio_client import Client
|
10 |
+
from PIL import Image # WEBP β PNG λ³νμ©
|
11 |
|
12 |
# ββββββββββββββββββ νκ²½ λ³μ ββββββββββββββββββ
|
13 |
TOKEN = os.getenv("DISCORD_TOKEN")
|
|
|
98 |
await message.reply("β οΈ μ΄λ―Έμ§ μμ± μ€ν¨!")
|
99 |
return
|
100 |
|
101 |
+
# κ²°κ³Ό μ κ·ν(list β 첫 μμ)
|
102 |
if isinstance(result, list):
|
103 |
result = result[0]
|
104 |
|
105 |
+
# βββββββββββββ μ΄λ―Έμ§ λ°μ΄ν° ν보 βββββββββββββ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
data = None
|
107 |
+
candidate_urls = []
|
108 |
+
|
109 |
+
# dict κ²°κ³Ό μ²λ¦¬
|
110 |
if isinstance(result, dict):
|
111 |
+
# url νλ
|
112 |
+
url = result.get("url")
|
113 |
+
if url:
|
114 |
+
if url.startswith("/"):
|
115 |
+
url = urljoin(GRADIO_URL, url)
|
116 |
+
candidate_urls.append(url)
|
117 |
+
# path νλ
|
118 |
path = result.get("path")
|
119 |
if path:
|
120 |
+
# β μ격 Gradio νμΌ κ²½λ‘
|
121 |
+
candidate_urls.append(urljoin(GRADIO_URL, f"/gradio_api/file={quote_plus(path)}"))
|
122 |
+
# β‘ λ‘컬 νμΌ κ²½λ‘
|
123 |
+
if os.path.isfile(path):
|
124 |
+
try:
|
|
|
125 |
with open(path, "rb") as f:
|
126 |
data = f.read()
|
127 |
+
except Exception as e:
|
128 |
+
logging.warning(f"λ‘컬 νμΌ μ΄κΈ° μ€ν¨: {e}")
|
129 |
+
|
130 |
+
# str κ²°κ³Ό μ²λ¦¬
|
131 |
+
elif isinstance(result, str):
|
132 |
+
s = result.strip()
|
133 |
+
if s.startswith("data:"):
|
134 |
+
# data URI
|
135 |
+
try:
|
136 |
+
data = base64.b64decode(re.sub(r"^data:image/[^;]+;base64,", "", s))
|
137 |
+
except Exception as e:
|
138 |
+
logging.warning(f"base64 λμ½λ© μ€ν¨: {e}")
|
139 |
+
elif s.startswith("http"):
|
140 |
+
candidate_urls.append(s)
|
141 |
+
elif s.startswith("/"):
|
142 |
+
candidate_urls.append(urljoin(GRADIO_URL, s))
|
143 |
+
else: # λ‘컬/μ격 tmp κ²½λ‘
|
144 |
+
candidate_urls.append(urljoin(GRADIO_URL, f"/gradio_api/file={quote_plus(s)}"))
|
145 |
+
if os.path.isfile(s):
|
146 |
+
try:
|
147 |
+
with open(s, "rb") as f:
|
148 |
+
data = f.read()
|
149 |
+
except Exception as e:
|
150 |
+
logging.warning(f"λ‘컬 νμΌ μ΄κΈ° μ€ν¨: {e}")
|
151 |
+
|
152 |
+
# URL λͺ©λ‘μμ λ€μ΄λ‘λ
|
153 |
+
for u in candidate_urls:
|
154 |
+
if data:
|
155 |
+
break
|
156 |
try:
|
157 |
+
r = requests.get(u, timeout=10)
|
158 |
+
if r.ok and r.headers.get("content-type", "").startswith("image/"):
|
159 |
+
data = r.content
|
160 |
+
break
|
161 |
except Exception as e:
|
162 |
+
logging.warning(f"URL λ€μ΄λ‘λ μ€ν¨({u}): {e}")
|
163 |
|
164 |
if not data:
|
165 |
await message.reply("β οΈ μ΄λ―Έμ§λ₯Ό μ μ‘ν μ μμ΅λλ€.")
|
166 |
return
|
167 |
|
168 |
+
# βββββββββββββ WEBP β PNG λ³ν βββββββββββββ
|
169 |
buf = io.BytesIO()
|
170 |
try:
|
171 |
Image.open(io.BytesIO(data)).convert("RGB").save(buf, format="PNG")
|
172 |
buf.seek(0)
|
173 |
await message.reply(files=[discord.File(buf, filename="image.png")])
|
174 |
+
except Exception as e:
|
175 |
+
logging.warning(f"PNG λ³ν μ€ν¨: {e}")
|
176 |
+
# λ³ν μ€ν¨ β μλ³Έ νμ₯μ μ μ§
|
177 |
await message.reply(files=[discord.File(io.BytesIO(data), filename="image.webp")])
|
178 |
|
179 |
# ββββββββββββββββββ μ€ν ββββββββββββββββββββββββ
|