Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,260 +1,135 @@
|
|
1 |
import gradio as gr
|
2 |
-
import time
|
3 |
|
4 |
-
# CSS for styling
|
5 |
css = """
|
6 |
-
.
|
7 |
-
|
8 |
-
|
9 |
-
padding: 20px;
|
10 |
text-align: center;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
color: white;
|
12 |
-
|
|
|
13 |
}
|
14 |
|
15 |
-
.
|
16 |
-
color:
|
17 |
-
font-
|
18 |
-
|
19 |
-
|
20 |
}
|
21 |
|
22 |
-
.link
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
}
|
25 |
|
26 |
-
.
|
27 |
-
|
28 |
-
|
29 |
-
border-radius: 8px;
|
30 |
-
padding: 15px;
|
31 |
-
margin: 10px 0;
|
32 |
}
|
|
|
33 |
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
text-align: center;
|
40 |
-
animation: pulse 2s infinite;
|
41 |
}
|
42 |
|
43 |
-
|
44 |
-
0%
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
}
|
50 |
-
100% {
|
51 |
-
box-shadow: 0 0 0 0 rgba(23, 162, 184, 0);
|
52 |
-
}
|
53 |
}
|
54 |
|
55 |
-
.
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
right: 0;
|
60 |
-
bottom: 0;
|
61 |
-
background: rgba(0, 0, 0, 0.7);
|
62 |
-
display: flex;
|
63 |
-
justify-content: center;
|
64 |
-
align-items: center;
|
65 |
-
z-index: 1000;
|
66 |
}
|
67 |
|
68 |
-
.
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
text-align: center;
|
74 |
}
|
75 |
-
"""
|
76 |
|
77 |
-
|
78 |
-
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
|
81 |
-
|
82 |
-
|
83 |
-
|
|
|
|
|
84 |
|
85 |
-
# Gradio
|
86 |
-
with gr.Blocks(css=css, title="
|
87 |
-
gr.Markdown("# 🔗 Gradio 링크 안내 예제")
|
88 |
-
|
89 |
-
# 방법 1: Markdown을 사용한 링크
|
90 |
-
gr.Markdown("""
|
91 |
-
## 방법 1: Markdown 링크
|
92 |
-
|
93 |
-
👉 **중요 공지**: [여기를 클릭하여 공식 웹사이트를 방문하세요](https://www.example.com)
|
94 |
-
|
95 |
-
⚡ **특별 이벤트**: [지금 바로 참여하기](https://www.example.com/event) - 선착순 100명!
|
96 |
-
""")
|
97 |
-
|
98 |
-
# 방법 2: HTML을 사용한 스타일링된 링크
|
99 |
-
gr.HTML("""
|
100 |
-
<div class="link-box">
|
101 |
-
<h3>🎁 특별 혜택 안내</h3>
|
102 |
-
<p>아래 링크를 클릭하여 특별 혜택을 받으세요!</p>
|
103 |
-
<a href="https://www.example.com" target="_blank">✨ 특별 혜택 받기 ✨</a>
|
104 |
-
</div>
|
105 |
-
""")
|
106 |
-
|
107 |
-
# 방법 3: 중요 알림 스타일
|
108 |
-
gr.HTML("""
|
109 |
-
<div class="important-link">
|
110 |
-
<h3>⚠️ 필수 확인 사항</h3>
|
111 |
-
<p>서비스 이용을 위해 반드시 ��래 링크를 확인해주세요:</p>
|
112 |
-
<a href="https://www.example.com/terms" target="_blank" style="font-size: 1.2em; color: #007bff;">
|
113 |
-
📋 이용약관 확인하기
|
114 |
-
</a>
|
115 |
-
</div>
|
116 |
-
""")
|
117 |
-
|
118 |
-
# 방법 4: 버튼 클릭 시 링크 안내
|
119 |
-
with gr.Row():
|
120 |
-
with gr.Column():
|
121 |
-
gr.Markdown("### 방법 4: 버튼 클릭으로 링크 안내")
|
122 |
-
show_link_btn = gr.Button("🔗 중요 링크 보기", variant="primary")
|
123 |
-
|
124 |
-
link_notification = gr.HTML(
|
125 |
-
"""
|
126 |
-
<div class="popup-style">
|
127 |
-
<h4>📢 중요 안내</h4>
|
128 |
-
<p>아래 링크를 클릭하여 추가 정보를 확인하세요:</p>
|
129 |
-
<ul>
|
130 |
-
<li><a href="https://www.example.com/guide" target="_blank">📖 사용 가이드</a></li>
|
131 |
-
<li><a href="https://www.example.com/faq" target="_blank">❓ 자주 묻는 질문</a></li>
|
132 |
-
<li><a href="https://www.example.com/contact" target="_blank">📞 문의하기</a></li>
|
133 |
-
</ul>
|
134 |
-
</div>
|
135 |
-
""",
|
136 |
-
visible=False
|
137 |
-
)
|
138 |
-
|
139 |
-
close_btn = gr.Button("닫기", visible=False)
|
140 |
-
|
141 |
-
# 방법 5: 자동 팝업 스타일 (페이지 로드 시 표시)
|
142 |
-
gr.HTML("""
|
143 |
-
<script>
|
144 |
-
// 페이지 로드 후 3초 뒤에 알림 표시
|
145 |
-
setTimeout(function() {
|
146 |
-
// 실제로는 모달 창을 띄우거나 알림을 표시할 수 있습니다
|
147 |
-
console.log("링크 클릭 안내: https://www.example.com");
|
148 |
-
}, 3000);
|
149 |
-
</script>
|
150 |
-
""")
|
151 |
-
|
152 |
-
# 방법 6: Info 메시지로 링크 안내
|
153 |
-
with gr.Row():
|
154 |
-
with gr.Column():
|
155 |
-
gr.Markdown("### 방법 5: 작업 완료 후 링크 안내")
|
156 |
-
|
157 |
-
def process_and_show_link(text):
|
158 |
-
# 어떤 처리를 수행
|
159 |
-
time.sleep(1) # 처리 시뮬레이션
|
160 |
-
|
161 |
-
# 처리 완료 후 링크 안내
|
162 |
-
result = f"처리 완료: {text}"
|
163 |
-
link_msg = """
|
164 |
-
<div style='background: #d4edda; border: 1px solid #c3e6cb;
|
165 |
-
border-radius: 5px; padding: 15px; margin-top: 10px;'>
|
166 |
-
<strong>✅ 작업이 완료되었습니다!</strong><br>
|
167 |
-
결과를 확인하려면 <a href='https://www.example.com/results'
|
168 |
-
target='_blank' style='color: #155724; font-weight: bold;'>
|
169 |
-
여기를 클릭</a>하세요.
|
170 |
-
</div>
|
171 |
-
"""
|
172 |
-
return result, link_msg
|
173 |
-
|
174 |
-
input_text = gr.Textbox(label="텍스트 입력", placeholder="처리할 텍스트를 입력하세요")
|
175 |
-
process_btn = gr.Button("처리하기", variant="primary")
|
176 |
-
output_text = gr.Textbox(label="처리 결과")
|
177 |
-
link_message = gr.HTML()
|
178 |
-
|
179 |
-
# 방법 7: 조건부 링크 표시
|
180 |
-
with gr.Row():
|
181 |
-
with gr.Column():
|
182 |
-
gr.Markdown("### 방법 6: 조건부 링크 안내")
|
183 |
-
|
184 |
-
def check_and_show_link(agree):
|
185 |
-
if agree:
|
186 |
-
return """
|
187 |
-
<div style='background: #cfe2ff; border: 1px solid #6ea8fe;
|
188 |
-
border-radius: 5px; padding: 15px;'>
|
189 |
-
<strong>감사합니다!</strong><br>
|
190 |
-
이제 <a href='https://www.example.com/start' target='_blank'
|
191 |
-
style='color: #084298; font-weight: bold;'>시작하기</a>
|
192 |
-
링크를 클릭하여 진행하세요.
|
193 |
-
</div>
|
194 |
-
"""
|
195 |
-
else:
|
196 |
-
return """
|
197 |
-
<div style='background: #f8d7da; border: 1px solid #f5c2c7;
|
198 |
-
border-radius: 5px; padding: 15px;'>
|
199 |
-
동의하지 않으셨습니다. 서비스를 이용하려면 약관에 동의해주세요.
|
200 |
-
</div>
|
201 |
-
"""
|
202 |
-
|
203 |
-
agree_checkbox = gr.Checkbox(label="이용약관에 동의합니다")
|
204 |
-
conditional_link = gr.HTML()
|
205 |
-
|
206 |
-
# 이벤트 연결
|
207 |
-
show_link_btn.click(
|
208 |
-
lambda: (gr.update(visible=True), gr.update(visible=True)),
|
209 |
-
outputs=[link_notification, close_btn]
|
210 |
-
)
|
211 |
-
|
212 |
-
close_btn.click(
|
213 |
-
lambda: (gr.update(visible=False), gr.update(visible=False)),
|
214 |
-
outputs=[link_notification, close_btn]
|
215 |
-
)
|
216 |
-
|
217 |
-
process_btn.click(
|
218 |
-
process_and_show_link,
|
219 |
-
inputs=[input_text],
|
220 |
-
outputs=[output_text, link_message]
|
221 |
-
)
|
222 |
-
|
223 |
-
agree_checkbox.change(
|
224 |
-
check_and_show_link,
|
225 |
-
inputs=[agree_checkbox],
|
226 |
-
outputs=[conditional_link]
|
227 |
-
)
|
228 |
-
|
229 |
-
# 추가 예제: 모달 스타일 팝업
|
230 |
gr.HTML("""
|
231 |
-
<div
|
232 |
-
<div class="
|
233 |
-
<
|
234 |
-
<p
|
235 |
-
<a href="https://
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
프리미엄 가입하기
|
240 |
</a>
|
241 |
-
<br><br>
|
242 |
-
<button onclick="document.getElementById('modal').style.display='none'"
|
243 |
-
style="padding: 5px 15px; cursor: pointer;">
|
244 |
-
닫기
|
245 |
-
</button>
|
246 |
</div>
|
247 |
</div>
|
248 |
-
|
249 |
-
<script>
|
250 |
-
// 모달 표시 함수
|
251 |
-
function showModal() {
|
252 |
-
document.getElementById('modal').style.display = 'flex';
|
253 |
-
}
|
254 |
-
|
255 |
-
// 원하는 시점에 showModal() 호출
|
256 |
-
// 예: setTimeout(showModal, 5000); // 5초 후 표시
|
257 |
-
</script>
|
258 |
""")
|
259 |
|
260 |
demo.launch()
|
|
|
1 |
import gradio as gr
|
|
|
2 |
|
3 |
+
# Simple CSS for styling
|
4 |
css = """
|
5 |
+
.main-container {
|
6 |
+
max-width: 800px;
|
7 |
+
margin: 0 auto;
|
8 |
+
padding: 40px 20px;
|
9 |
text-align: center;
|
10 |
+
}
|
11 |
+
|
12 |
+
.redirect-box {
|
13 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
14 |
+
border-radius: 20px;
|
15 |
+
padding: 60px 40px;
|
16 |
+
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
17 |
+
margin: 20px auto;
|
18 |
+
}
|
19 |
+
|
20 |
+
.redirect-box h1 {
|
21 |
color: white;
|
22 |
+
font-size: 2.5em;
|
23 |
+
margin-bottom: 20px;
|
24 |
}
|
25 |
|
26 |
+
.redirect-box p {
|
27 |
+
color: white;
|
28 |
+
font-size: 1.3em;
|
29 |
+
margin-bottom: 30px;
|
30 |
+
opacity: 0.95;
|
31 |
}
|
32 |
|
33 |
+
.redirect-link {
|
34 |
+
display: inline-block;
|
35 |
+
background: white;
|
36 |
+
color: #667eea;
|
37 |
+
padding: 15px 40px;
|
38 |
+
border-radius: 30px;
|
39 |
+
text-decoration: none;
|
40 |
+
font-size: 1.2em;
|
41 |
+
font-weight: bold;
|
42 |
+
transition: all 0.3s ease;
|
43 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
44 |
}
|
45 |
|
46 |
+
.redirect-link:hover {
|
47 |
+
transform: translateY(-3px);
|
48 |
+
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
|
|
|
|
|
|
|
49 |
}
|
50 |
+
"""
|
51 |
|
52 |
+
# Create Gradio app
|
53 |
+
with gr.Blocks(css=css, title="Redirect to FLUX VIDEO") as demo:
|
54 |
+
gr.HTML("""
|
55 |
+
<div class="main-container">
|
56 |
+
<div class="redirect-box">
|
57 |
+
<h1>🎨 Welcome to FLUX VIDEO Generation</h1>
|
58 |
+
<p>Please visit our latest version for the best experience</p>
|
59 |
+
<a href="https://huggingface.co/spaces/ginigen/Flux-VIDEO"
|
60 |
+
target="_blank"
|
61 |
+
class="redirect-link">
|
62 |
+
Go to FLUX VIDEO →
|
63 |
+
</a>
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
""")
|
67 |
+
|
68 |
+
demo.launch()import gradio as gr
|
69 |
+
|
70 |
+
# Simple CSS for styling
|
71 |
+
css = """
|
72 |
+
.main-container {
|
73 |
+
max-width: 800px;
|
74 |
+
margin: 0 auto;
|
75 |
+
padding: 40px 20px;
|
76 |
text-align: center;
|
|
|
77 |
}
|
78 |
|
79 |
+
.redirect-box {
|
80 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
81 |
+
border-radius: 20px;
|
82 |
+
padding: 60px 40px;
|
83 |
+
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
84 |
+
margin: 20px auto;
|
|
|
|
|
|
|
|
|
85 |
}
|
86 |
|
87 |
+
.redirect-box h1 {
|
88 |
+
color: white;
|
89 |
+
font-size: 2.5em;
|
90 |
+
margin-bottom: 20px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
|
93 |
+
.redirect-box p {
|
94 |
+
color: white;
|
95 |
+
font-size: 1.3em;
|
96 |
+
margin-bottom: 30px;
|
97 |
+
opacity: 0.95;
|
|
|
98 |
}
|
|
|
99 |
|
100 |
+
.redirect-link {
|
101 |
+
display: inline-block;
|
102 |
+
background: white;
|
103 |
+
color: #667eea;
|
104 |
+
padding: 15px 40px;
|
105 |
+
border-radius: 30px;
|
106 |
+
text-decoration: none;
|
107 |
+
font-size: 1.2em;
|
108 |
+
font-weight: bold;
|
109 |
+
transition: all 0.3s ease;
|
110 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
111 |
+
}
|
112 |
|
113 |
+
.redirect-link:hover {
|
114 |
+
transform: translateY(-3px);
|
115 |
+
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
|
116 |
+
}
|
117 |
+
"""
|
118 |
|
119 |
+
# Create Gradio app
|
120 |
+
with gr.Blocks(css=css, title="Redirect to FLUX VIDEO") as demo:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
gr.HTML("""
|
122 |
+
<div class="main-container">
|
123 |
+
<div class="redirect-box">
|
124 |
+
<h1>🎨 Welcome to FLUX VIDEO Generation</h1>
|
125 |
+
<p>Please visit our latest version for the best experience</p>
|
126 |
+
<a href="https://huggingface.co/spaces/ginigen/Flux-VIDEO"
|
127 |
+
target="_blank"
|
128 |
+
class="redirect-link">
|
129 |
+
Go to FLUX VIDEO →
|
|
|
130 |
</a>
|
|
|
|
|
|
|
|
|
|
|
131 |
</div>
|
132 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
""")
|
134 |
|
135 |
demo.launch()
|