Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -15,6 +15,11 @@ IMG_SIZE = 512
|
|
| 15 |
|
| 16 |
print(f"Running on: {device}")
|
| 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
# === TEXT INTEGRATION IMPORT ===
|
| 19 |
from text_integration import (
|
| 20 |
add_text_to_image,
|
|
@@ -190,8 +195,17 @@ def update_live_preview(image, bbox_x1, bbox_y1, bbox_x2, bbox_y2, face_preserve
|
|
| 190 |
|
| 191 |
return create_preview_image(image, bbox_coords, face_preserve, mode_color)
|
| 192 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 193 |
|
| 194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
|
| 196 |
def process_image_upload(image):
|
| 197 |
"""Verarbeitet Bild-Upload und gibt Bild + Koordinaten zurück"""
|
|
@@ -377,7 +391,7 @@ def main_ui():
|
|
| 377 |
<div style="font-size: 1.2em; font-weight: bold; color: #4F46E5; margin-bottom: 15px;"><strong>🎯 Projekt & Kompetenzen</strong></div>
|
| 378 |
Dieses 4-Wochen-Projekt ist ein kleines <strong>Demo</strong> um meine zentralen Kompetenzen als <strong>AI-Engineer</strong> – sowohl in der technischen Umsetzung <br>
|
| 379 |
als auch in der strukturierten Entwicklung komplexer Workflows zu präsentieren. Es bildet <strong>grundlegende Stable-Diffusion-Prozesse</strong> ab, während ich in anderen <br>
|
| 380 |
-
GPU-basierten Umgebungen <strong>
|
| 381 |
<strong>multi-modalen Modellen mit höherer Parameteranzahl</strong> wird eine deutlich detailliertere und kontrolliertere Bildgenerierung ermöglicht.
|
| 382 |
</div>
|
| 383 |
<br>
|
|
@@ -432,6 +446,10 @@ def main_ui():
|
|
| 432 |
2. Gezielte Transformation über <strong>Bild-zu-Bild</strong><br>
|
| 433 |
3. Optionale Textintegration auf generierten oder originalen Basis-Bildern<br>
|
| 434 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 435 |
<strong>Die Textintegration </strong> ist verfügbar für generierte Bilder in beiden Arbeitsbereichen sowie für externe Bildquellen im Arbeitsbereich Bild zu Bild.<br>
|
| 436 |
Es werden alle gängigen Bildformate (JPG, PNG, WEBP, BMP, TIFF) unterstützt. Die maximale Dateigröße beträgt 15 MB.
|
| 437 |
</div>
|
|
@@ -472,7 +490,7 @@ def main_ui():
|
|
| 472 |
with gr.Column(visible=False) as content_area:
|
| 473 |
|
| 474 |
# === TAB: TEXT ZU BILD ===
|
| 475 |
-
with gr.Tab("Text zu Bild"):
|
| 476 |
gr.Markdown("**Beschreibe dein gewünschtes Bild:**")
|
| 477 |
|
| 478 |
with gr.Row():
|
|
@@ -514,6 +532,30 @@ def main_ui():
|
|
| 514 |
height=400,
|
| 515 |
sources=[] #Button verschwinden, download trotzdem möglich! Gradio-Problem
|
| 516 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 517 |
|
| 518 |
# TEXT INTEGRATION UNTERHALB DER BILDER
|
| 519 |
with gr.Row():
|
|
@@ -623,7 +665,7 @@ def main_ui():
|
|
| 623 |
)
|
| 624 |
|
| 625 |
# === TAB: BILD ZU BILD ===
|
| 626 |
-
with gr.Tab("Bild zu Bild"):
|
| 627 |
gr.Markdown("**Lade ein Bild hoch und beschreibe die gewünschte Veränderung:**")
|
| 628 |
|
| 629 |
with gr.Row():
|
|
@@ -841,6 +883,12 @@ def main_ui():
|
|
| 841 |
outputs=[img_input, img_output]
|
| 842 |
)
|
| 843 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 844 |
# === START-BUTTON HANDLER ===
|
| 845 |
info_components = [child for child in demo.children if child != content_area]
|
| 846 |
|
|
|
|
| 15 |
|
| 16 |
print(f"Running on: {device}")
|
| 17 |
|
| 18 |
+
|
| 19 |
+
# === AUDIO-URL ===
|
| 20 |
+
AUDIO_URL = "https://dn721801.ca.archive.org/0/items/emotional-soft-piano-music-413513-2/emotional-soft-piano-music-413513%202.mp3"
|
| 21 |
+
|
| 22 |
+
|
| 23 |
# === TEXT INTEGRATION IMPORT ===
|
| 24 |
from text_integration import (
|
| 25 |
add_text_to_image,
|
|
|
|
| 195 |
|
| 196 |
return create_preview_image(image, bbox_coords, face_preserve, mode_color)
|
| 197 |
|
| 198 |
+
# === AUDIO-FUNKTION ===
|
| 199 |
+
def play_audio_on_image_click():
|
| 200 |
+
"""Startet die Musikwiedergabe bei Klick auf das Bild"""
|
| 201 |
+
print("🎵 Musikwiedergabe wird gestartet...")
|
| 202 |
+
return gr.Audio(AUDIO_URL, autoplay=True, visible=True, label="Hintergrundmusik")
|
| 203 |
|
| 204 |
+
# === NEUE FUNKTION: STOP AUDIO BEIM TAB-WECHSEL ===
|
| 205 |
+
def stop_audio_on_tab_change():
|
| 206 |
+
"""Stoppt die Musik beim Tab-Wechsel"""
|
| 207 |
+
print("🔇 Musik wird beim Tab-Wechsel gestoppt")
|
| 208 |
+
return None
|
| 209 |
|
| 210 |
def process_image_upload(image):
|
| 211 |
"""Verarbeitet Bild-Upload und gibt Bild + Koordinaten zurück"""
|
|
|
|
| 391 |
<div style="font-size: 1.2em; font-weight: bold; color: #4F46E5; margin-bottom: 15px;"><strong>🎯 Projekt & Kompetenzen</strong></div>
|
| 392 |
Dieses 4-Wochen-Projekt ist ein kleines <strong>Demo</strong> um meine zentralen Kompetenzen als <strong>AI-Engineer</strong> – sowohl in der technischen Umsetzung <br>
|
| 393 |
als auch in der strukturierten Entwicklung komplexer Workflows zu präsentieren. Es bildet <strong>grundlegende Stable-Diffusion-Prozesse</strong> ab, während ich in anderen <br>
|
| 394 |
+
GPU-basierten Umgebungen <strong>erweitered Text-to-Image und Image-to-Image-Pipelines mit präzisem Inpainting über ControlNet</strong> realisiere. Durch den Einsatz von <br>
|
| 395 |
<strong>multi-modalen Modellen mit höherer Parameteranzahl</strong> wird eine deutlich detailliertere und kontrolliertere Bildgenerierung ermöglicht.
|
| 396 |
</div>
|
| 397 |
<br>
|
|
|
|
| 446 |
2. Gezielte Transformation über <strong>Bild-zu-Bild</strong><br>
|
| 447 |
3. Optionale Textintegration auf generierten oder originalen Basis-Bildern<br>
|
| 448 |
|
| 449 |
+
<strong>Audio-Unterstützung:</strong><br>
|
| 450 |
+
Im Arbeitsbereich Text-zu-Bild steht eine <strong>Hintergrundmusik-Funktion</strong> zur Verfügung, die die Generierungszeit überbrückt. Der integrierte Audio-Player <br>
|
| 451 |
+
wird beim Tab-Wechsel unterbrochen.<br>
|
| 452 |
+
|
| 453 |
<strong>Die Textintegration </strong> ist verfügbar für generierte Bilder in beiden Arbeitsbereichen sowie für externe Bildquellen im Arbeitsbereich Bild zu Bild.<br>
|
| 454 |
Es werden alle gängigen Bildformate (JPG, PNG, WEBP, BMP, TIFF) unterstützt. Die maximale Dateigröße beträgt 15 MB.
|
| 455 |
</div>
|
|
|
|
| 490 |
with gr.Column(visible=False) as content_area:
|
| 491 |
|
| 492 |
# === TAB: TEXT ZU BILD ===
|
| 493 |
+
with gr.Tab("Text zu Bild") as tab_text_to_image:
|
| 494 |
gr.Markdown("**Beschreibe dein gewünschtes Bild:**")
|
| 495 |
|
| 496 |
with gr.Row():
|
|
|
|
| 532 |
height=400,
|
| 533 |
sources=[] #Button verschwinden, download trotzdem möglich! Gradio-Problem
|
| 534 |
)
|
| 535 |
+
|
| 536 |
+
|
| 537 |
+
# SICHTBARER AUDIO-PLAYER FÜR TEXT-ZU-BILD
|
| 538 |
+
hidden_audio_t2i = gr.Audio(
|
| 539 |
+
visible=True,
|
| 540 |
+
label="🎵 Hintergrundmusik zur Überbrückung der Wartezeit",
|
| 541 |
+
autoplay=True # WICHTIG: Hier autoplay setzen
|
| 542 |
+
)
|
| 543 |
+
|
| 544 |
+
|
| 545 |
+
# Klickbarer Bereich um das Bild
|
| 546 |
+
with gr.Row():
|
| 547 |
+
music_btn = gr.Button(
|
| 548 |
+
"🎵 Musik abspielen",
|
| 549 |
+
variant="secondary",
|
| 550 |
+
size="sm"
|
| 551 |
+
)
|
| 552 |
+
|
| 553 |
+
# Klick-Event für den Button
|
| 554 |
+
music_btn.click(
|
| 555 |
+
fn=play_audio_on_image_click,
|
| 556 |
+
outputs=hidden_audio_t2i
|
| 557 |
+
)
|
| 558 |
+
|
| 559 |
|
| 560 |
# TEXT INTEGRATION UNTERHALB DER BILDER
|
| 561 |
with gr.Row():
|
|
|
|
| 665 |
)
|
| 666 |
|
| 667 |
# === TAB: BILD ZU BILD ===
|
| 668 |
+
with gr.Tab("Bild zu Bild") as tab_image_to_image:
|
| 669 |
gr.Markdown("**Lade ein Bild hoch und beschreibe die gewünschte Veränderung:**")
|
| 670 |
|
| 671 |
with gr.Row():
|
|
|
|
| 883 |
outputs=[img_input, img_output]
|
| 884 |
)
|
| 885 |
|
| 886 |
+
# === NEUER EVENT-HANDLER: STOP AUDIO BEIM TAB-WECHSEL ===
|
| 887 |
+
tab_image_to_image.select(
|
| 888 |
+
fn=stop_audio_on_tab_change,
|
| 889 |
+
outputs=hidden_audio_t2i
|
| 890 |
+
)
|
| 891 |
+
|
| 892 |
# === START-BUTTON HANDLER ===
|
| 893 |
info_components = [child for child in demo.children if child != content_area]
|
| 894 |
|