Update app.py
Browse files
app.py
CHANGED
@@ -21,7 +21,7 @@ WELCOME_MESSAGE = """
|
|
21 |
"""
|
22 |
|
23 |
WORLDVIEW_MESSAGE = """
|
24 |
-
##
|
25 |
|
26 |
온천천의 물줄기는 신성한 금샘에서 시작됩니다. 금샘은 생명과 창조의 원천이며,
|
27 |
천상의 생명이 지상에서 숨을 틔우는 자리입니다. 도시의 소음 속에서도 신성한 생명력을 느껴보세요.
|
@@ -374,6 +374,26 @@ def save_reflection_fixed(text, state):
|
|
374 |
print(f"Error saving reflection: {e}")
|
375 |
return state, state.get("reflections", [])
|
376 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
377 |
def create_interface():
|
378 |
db = SimpleDB()
|
379 |
|
@@ -384,10 +404,22 @@ def create_interface():
|
|
384 |
"wish": None,
|
385 |
"final_prompt": "",
|
386 |
"image_path": None,
|
387 |
-
"current_tab": 0
|
|
|
|
|
388 |
}
|
389 |
|
390 |
-
with gr.Blocks(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
state = gr.State(value=initial_state)
|
392 |
|
393 |
gr.Markdown("# 디지털 굿판")
|
@@ -415,12 +447,20 @@ def create_interface():
|
|
415 |
sources=["microphone"],
|
416 |
type="numpy",
|
417 |
streaming=False
|
|
|
|
|
418 |
)
|
419 |
set_baseline_btn = gr.Button("기준점 설정 완료", variant="primary")
|
420 |
baseline_status = gr.Markdown("")
|
421 |
|
422 |
with gr.TabItem("청신") as tab_listen:
|
423 |
gr.Markdown("## 청신 - 소리로 정화하기")
|
|
|
|
|
|
|
|
|
|
|
|
|
424 |
play_music_btn = gr.Button("온천천의 소리 듣기", variant="secondary")
|
425 |
with gr.Row():
|
426 |
audio = gr.Audio(
|
@@ -475,7 +515,7 @@ def create_interface():
|
|
475 |
)
|
476 |
|
477 |
with gr.TabItem("송신") as tab_send:
|
478 |
-
gr.Markdown("## 송신
|
479 |
final_prompt = gr.Textbox(
|
480 |
label="생성된 프롬프트",
|
481 |
interactive=False,
|
@@ -485,6 +525,8 @@ def create_interface():
|
|
485 |
result_image = gr.Image(
|
486 |
label="생성된 이미지",
|
487 |
show_download_button=True
|
|
|
|
|
488 |
)
|
489 |
|
490 |
gr.Markdown("## 온천천에 전하고 싶은 소원을 남겨주세요")
|
@@ -650,8 +692,16 @@ def create_interface():
|
|
650 |
if __name__ == "__main__":
|
651 |
demo = create_interface()
|
652 |
demo.launch(
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
"""
|
22 |
|
23 |
WORLDVIEW_MESSAGE = """
|
24 |
+
## 온천천 이야기 🌌
|
25 |
|
26 |
온천천의 물줄기는 신성한 금샘에서 시작됩니다. 금샘은 생명과 창조의 원천이며,
|
27 |
천상의 생명이 지상에서 숨을 틔우는 자리입니다. 도시의 소음 속에서도 신성한 생명력을 느껴보세요.
|
|
|
374 |
print(f"Error saving reflection: {e}")
|
375 |
return state, state.get("reflections", [])
|
376 |
|
377 |
+
def is_mobile(user_agent):
|
378 |
+
return any(device in user_agent.lower() for device in ['mobile', 'android', 'iphone'])
|
379 |
+
|
380 |
+
def handle_tab_change(tab_index, state):
|
381 |
+
"""탭 변경 시 상태 유지"""
|
382 |
+
state = {**state, "current_tab": tab_index}
|
383 |
+
return state
|
384 |
+
|
385 |
+
def safe_state_update(state, updates):
|
386 |
+
"""안전한 상태 업데이트"""
|
387 |
+
try:
|
388 |
+
new_state = {**state, **updates}
|
389 |
+
return new_state
|
390 |
+
except Exception as e:
|
391 |
+
print(f"State update error: {e}")
|
392 |
+
return state
|
393 |
+
|
394 |
+
# 상태 업데이트 시 사용
|
395 |
+
state = safe_state_update(state, {"user_name": name})
|
396 |
+
|
397 |
def create_interface():
|
398 |
db = SimpleDB()
|
399 |
|
|
|
404 |
"wish": None,
|
405 |
"final_prompt": "",
|
406 |
"image_path": None,
|
407 |
+
"current_tab": 0,
|
408 |
+
"is_mobile": False, # 모바일 여부
|
409 |
+
"session_active": True # 세션 상태
|
410 |
}
|
411 |
|
412 |
+
with gr.Blocks(
|
413 |
+
theme=gr.themes.Soft(),
|
414 |
+
css="""
|
415 |
+
@media (max-width: 600px) {
|
416 |
+
.container { padding: 10px; }
|
417 |
+
.gradio-row { flex-direction: column; }
|
418 |
+
.gradio-button { width: 100%; margin: 5px 0; }
|
419 |
+
.gradio-textbox { width: 100%; }
|
420 |
+
}
|
421 |
+
"""
|
422 |
+
) as app:
|
423 |
state = gr.State(value=initial_state)
|
424 |
|
425 |
gr.Markdown("# 디지털 굿판")
|
|
|
447 |
sources=["microphone"],
|
448 |
type="numpy",
|
449 |
streaming=False
|
450 |
+
min_width=300, # 최소 너비 설정
|
451 |
+
elem_id="audio-recorder" # CSS 식별자 추가
|
452 |
)
|
453 |
set_baseline_btn = gr.Button("기준점 설정 완료", variant="primary")
|
454 |
baseline_status = gr.Markdown("")
|
455 |
|
456 |
with gr.TabItem("청신") as tab_listen:
|
457 |
gr.Markdown("## 청신 - 소리로 정화하기")
|
458 |
+
gr.Markdown("""
|
459 |
+
온천천의 소리를 들으며 마음을 정화해보세요.
|
460 |
+
|
461 |
+
💫 이 앱은 온천천의 사운드스케이프를 녹음하여 제작되었으며,
|
462 |
+
온천천 온천장역에서 장전역까지 걸으며 더 깊은 체험이 가능합니다.
|
463 |
+
""")
|
464 |
play_music_btn = gr.Button("온천천의 소리 듣기", variant="secondary")
|
465 |
with gr.Row():
|
466 |
audio = gr.Audio(
|
|
|
515 |
)
|
516 |
|
517 |
with gr.TabItem("송신") as tab_send:
|
518 |
+
gr.Markdown("## 송신 -소지(소원지)를 그려 날려 태워봅시다")
|
519 |
final_prompt = gr.Textbox(
|
520 |
label="생성된 프롬프트",
|
521 |
interactive=False,
|
|
|
525 |
result_image = gr.Image(
|
526 |
label="생성된 이미지",
|
527 |
show_download_button=True
|
528 |
+
min_width=300,
|
529 |
+
elem_id="result-image"
|
530 |
)
|
531 |
|
532 |
gr.Markdown("## 온천천에 전하고 싶은 소원을 남겨주세요")
|
|
|
692 |
if __name__ == "__main__":
|
693 |
demo = create_interface()
|
694 |
demo.launch(
|
695 |
+
debug=True,
|
696 |
+
share=True,
|
697 |
+
server_name="0.0.0.0",
|
698 |
+
server_port=7860,
|
699 |
+
enable_queue=True, # 큐 활성화
|
700 |
+
cache_examples=True, # 캐시 활성화
|
701 |
+
max_threads=4, # 스레드 제한
|
702 |
+
show_error=True,
|
703 |
+
# 모바일 최적화를 위한 설정
|
704 |
+
height=None, # 자동 높이 조정
|
705 |
+
width="100%", # 전체 너비 사용
|
706 |
+
allow_flagging=False, # 불필요한 기능 비활성화
|
707 |
+
)
|