Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,7 +1,8 @@
|
|
1 |
import gradio as gr
|
2 |
from transformers import MarianMTModel, MarianTokenizer
|
|
|
3 |
|
4 |
-
# 1) โหลดโมเดลแปล (MarianMT)
|
5 |
model_name = "Helsinki-NLP/opus-mt-th-en"
|
6 |
tokenizer = MarianTokenizer.from_pretrained(model_name)
|
7 |
model = MarianMTModel.from_pretrained(model_name)
|
@@ -86,7 +87,30 @@ def generate_monster_lab(
|
|
86 |
|
87 |
return desc_th, prompt_en
|
88 |
|
89 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
css_code = """
|
91 |
body {
|
92 |
background-color: #FFF7EA;
|
@@ -131,7 +155,7 @@ body {
|
|
131 |
"""
|
132 |
|
133 |
def initial_text():
|
134 |
-
return "ยังไม่ได้สร้างมอนสเตอร์ ลองเลือกหรือพิมพ์ แล้วกด 'สร้างมอนสเตอร์!'"
|
135 |
|
136 |
# สร้างปุ่ม Copy ด้วย HTML + JS
|
137 |
copy_button_html = """
|
@@ -140,16 +164,13 @@ copy_button_html = """
|
|
140 |
onclick="copyPromptText()">
|
141 |
Copy Prompt
|
142 |
</button>
|
143 |
-
|
144 |
<script>
|
145 |
function copyPromptText() {
|
146 |
-
// หยิบ Textbox 'prompt-en' (ภายใน Gradio) โดย id
|
147 |
const promptBox = document.querySelector('#prompt-en textarea');
|
148 |
if (!promptBox) {
|
149 |
alert('ไม่พบข้อความ Prompt!');
|
150 |
return;
|
151 |
}
|
152 |
-
// Copy
|
153 |
const promptText = promptBox.value;
|
154 |
navigator.clipboard.writeText(promptText);
|
155 |
alert('คัดลอก Prompt แล้ว!');
|
@@ -162,9 +183,10 @@ with gr.Blocks(css=css_code) as demo:
|
|
162 |
gr.Markdown("""
|
163 |
<div class="game-desc">
|
164 |
<p>หนูน้อยจ๊ะ เลือกได้ว่าจะใช้ค่าใน <strong>Dropdown</strong> หรือจะ <strong>พิมพ์เอง</strong></p>
|
165 |
-
<p
|
166 |
-
<p
|
167 |
-
<p
|
|
|
168 |
</div>
|
169 |
""")
|
170 |
|
@@ -190,14 +212,31 @@ with gr.Blocks(css=css_code) as demo:
|
|
190 |
mood_dd = gr.Dropdown(moods_th, label="อารมณ์", value=moods_th[0])
|
191 |
mood_tb = gr.Textbox(label="หรือพิมพ์เอง", placeholder="ขี้เล่นเป็นพิเศษ...")
|
192 |
|
193 |
-
|
|
|
|
|
194 |
|
195 |
monster_desc_th = gr.Textbox(label="รายละเอียด (ภาษาไทย)", interactive=False, elem_id="desc-th")
|
196 |
monster_prompt_en = gr.Textbox(label="Prompt (English)", interactive=False, elem_id="prompt-en")
|
197 |
|
198 |
-
#
|
199 |
gr.HTML(copy_button_html)
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
create_btn.click(
|
202 |
fn=generate_monster_lab,
|
203 |
inputs=[
|
|
|
1 |
import gradio as gr
|
2 |
from transformers import MarianMTModel, MarianTokenizer
|
3 |
+
import random
|
4 |
|
5 |
+
# 1) โหลดโมเดลแปล (MarianMT)
|
6 |
model_name = "Helsinki-NLP/opus-mt-th-en"
|
7 |
tokenizer = MarianTokenizer.from_pretrained(model_name)
|
8 |
model = MarianMTModel.from_pretrained(model_name)
|
|
|
87 |
|
88 |
return desc_th, prompt_en
|
89 |
|
90 |
+
# 3.1) ฟังก์ชันสุ่มค่าจาก Dropdown
|
91 |
+
def random_monster():
|
92 |
+
"""
|
93 |
+
สุ่มค่า Dropdown ทั้ง 6 หมวด, พร้อมเคลียร์ช่อง Textbox ทั้ง 6
|
94 |
+
"""
|
95 |
+
bd = random.choice(body_shapes_th)
|
96 |
+
hd = random.choice(heads_th)
|
97 |
+
ar = random.choice(arms_legs_th)
|
98 |
+
sk = random.choice(skin_patterns_th)
|
99 |
+
ab = random.choice(abilities_th)
|
100 |
+
md = random.choice(moods_th)
|
101 |
+
|
102 |
+
# แต่ละหมวดมี 2 ช่อง (Dropdown, Textbox) => รวม 12 ค่า
|
103 |
+
# Dropdown = ค่าที่สุ่มได้, Textbox = ""
|
104 |
+
return (
|
105 |
+
bd, "", # body_dd, body_tb
|
106 |
+
hd, "", # head_dd, head_tb
|
107 |
+
ar, "", # arms_dd, arms_tb
|
108 |
+
sk, "", # skin_dd, skin_tb
|
109 |
+
ab, "", # ability_dd, ability_tb
|
110 |
+
md, "" # mood_dd, mood_tb
|
111 |
+
)
|
112 |
+
|
113 |
+
# 4) สร้าง UI Gradio
|
114 |
css_code = """
|
115 |
body {
|
116 |
background-color: #FFF7EA;
|
|
|
155 |
"""
|
156 |
|
157 |
def initial_text():
|
158 |
+
return "ยังไม่ได้สร้างมอนสเตอร์ ลองเลือกหรือพิมพ์ แล้วกด 'สร้างมอนสเตอร์!' หรือกดสุ่มดูสิจ๊ะ!"
|
159 |
|
160 |
# สร้างปุ่ม Copy ด้วย HTML + JS
|
161 |
copy_button_html = """
|
|
|
164 |
onclick="copyPromptText()">
|
165 |
Copy Prompt
|
166 |
</button>
|
|
|
167 |
<script>
|
168 |
function copyPromptText() {
|
|
|
169 |
const promptBox = document.querySelector('#prompt-en textarea');
|
170 |
if (!promptBox) {
|
171 |
alert('ไม่พบข้อความ Prompt!');
|
172 |
return;
|
173 |
}
|
|
|
174 |
const promptText = promptBox.value;
|
175 |
navigator.clipboard.writeText(promptText);
|
176 |
alert('คัดลอก Prompt แล้ว!');
|
|
|
183 |
gr.Markdown("""
|
184 |
<div class="game-desc">
|
185 |
<p>หนูน้อยจ๊ะ เลือกได้ว่าจะใช้ค่าใน <strong>Dropdown</strong> หรือจะ <strong>พิมพ์เอง</strong></p>
|
186 |
+
<p>ถ้าอยากลุ้นโชค กดปุ่ม <strong>"สุ่มมอนสเตอร์สุดเซอร์ไพรส์!"</strong> ดูสิ!</p>
|
187 |
+
<p>เมื่อพร้อมแล้ว กด <strong>"สร้างมอนสเตอร์!"</strong> เพื่อดูรายละเอียด (ไทย) และ Prompt (อังกฤษ)</p>
|
188 |
+
<p>อย่าลืมกด <strong>"Copy Prompt"</strong> (ปุ่มชมพู) เพื่อคัดลอกไป AI เจนภาพอื่นนะจ๊ะ</p>
|
189 |
+
<p><strong>ZenityX</strong> ยินดีต้อนรับทุกคนจ้า!</p>
|
190 |
</div>
|
191 |
""")
|
192 |
|
|
|
212 |
mood_dd = gr.Dropdown(moods_th, label="อารมณ์", value=moods_th[0])
|
213 |
mood_tb = gr.Textbox(label="หรือพิมพ์เอง", placeholder="ขี้เล่นเป็นพิเศษ...")
|
214 |
|
215 |
+
with gr.Row():
|
216 |
+
random_btn = gr.Button("สุ่มมอนสเตอร์สุดเซอร์ไพรส์!", elem_classes="monster-btn")
|
217 |
+
create_btn = gr.Button("สร้างมอนสเตอร์!", elem_classes="monster-btn")
|
218 |
|
219 |
monster_desc_th = gr.Textbox(label="รายละเอียด (ภาษาไทย)", interactive=False, elem_id="desc-th")
|
220 |
monster_prompt_en = gr.Textbox(label="Prompt (English)", interactive=False, elem_id="prompt-en")
|
221 |
|
222 |
+
# ปุ่ม Copy Prompt (HTML + JS)
|
223 |
gr.HTML(copy_button_html)
|
224 |
|
225 |
+
# ปุ่มสุ่ม: คืนค่าทั้ง 12 ตัว (6 Dropdown, 6 Textbox)
|
226 |
+
random_btn.click(
|
227 |
+
fn=random_monster,
|
228 |
+
inputs=[],
|
229 |
+
outputs=[
|
230 |
+
body_dd, body_tb,
|
231 |
+
head_dd, head_tb,
|
232 |
+
arms_dd, arms_tb,
|
233 |
+
skin_dd, skin_tb,
|
234 |
+
ability_dd, ability_tb,
|
235 |
+
mood_dd, mood_tb
|
236 |
+
]
|
237 |
+
)
|
238 |
+
|
239 |
+
# ปุ่มสร้าง Prompt
|
240 |
create_btn.click(
|
241 |
fn=generate_monster_lab,
|
242 |
inputs=[
|