vab42 commited on
Commit
9dcb97b
·
verified ·
1 Parent(s): d5cc769

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +105 -0
app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from together import Together
3
+ import os
4
+ import io
5
+ from PIL import Image
6
+ import base64
7
+
8
+ # --- Konfiguration ---
9
+ # Hole den Together API Key aus den Umgebungsvariablen (wird als Secret gesetzt)
10
+ TOGETHER_API_KEY = os.environ.get("TOGETHER_API_KEY")
11
+
12
+ # Das FLUX-Modell, das du über Together.ai nutzen möchtest
13
+ FLUX_MODEL = "black-forest-labs/FLUX.1-schnell-Free"
14
+
15
+ # Initialisiere den Together.ai Client
16
+ try:
17
+ client = Together(api_key=TOGETHER_API_KEY)
18
+ except Exception as e:
19
+ # Gib eine Fehlermeldung aus, falls der API-Key nicht geladen werden kann
20
+ print(f"Fehler beim Initialisieren des Together.ai Clients: {e}")
21
+ # Setze client auf None, um spätere Fehler bei der Generierung zu vermeiden
22
+ client = None
23
+
24
+ # --- Bildgenerierungsfunktion ---
25
+ def generate_image(prompt: str, steps: int = 10, n_images: int = 1) -> list[Image.Image] or str:
26
+ """
27
+ Generiert Bilder mit dem FLUX-Modell über Together.ai.
28
+ Gibt eine Liste von PIL.Image-Objekten oder eine Fehlermeldung zurück.
29
+ """
30
+ if not client:
31
+ return "Fehler: Together.ai Client konnte nicht initialisiert werden. Bitte API-Key prüfen."
32
+ if not prompt:
33
+ return "Bitte geben Sie einen Prompt ein."
34
+
35
+ try:
36
+ response = client.images.generations(
37
+ model=FLUX_MODEL,
38
+ prompt=prompt,
39
+ steps=steps,
40
+ n=n_images
41
+ )
42
+
43
+ images = []
44
+ for image_data in response.data:
45
+ # Together.ai gibt Base64-codierte Bilder zurück
46
+ img_bytes = base64.b64decode(image_data.b64_json)
47
+ img = Image.open(io.BytesIO(img_bytes))
48
+ images.append(img)
49
+ return images
50
+ except Exception as e:
51
+ # Hier könnten spezifischere Fehler abgefangen werden (z.B. Rate Limits)
52
+ print(f"Fehler bei der Bildgenerierung: {e}")
53
+ return f"Fehler bei der Bildgenerierung: {e}. Eventuell Limit erreicht oder Prompt ungültig."
54
+
55
+ # --- Gradio Interface Definition ---
56
+ with gr.Blocks() as demo:
57
+ gr.Markdown(
58
+ """
59
+ # FLUX.1 [schnell] Bildgenerator
60
+ Generiere Bilder mit dem FLUX.1-Modell von Black Forest Labs über Together.ai.
61
+ Dies ist eine schnelle, kostenlose API-Integration für dein Projekt.
62
+ """
63
+ )
64
+ with gr.Row():
65
+ with gr.Column():
66
+ prompt_input = gr.Textbox(
67
+ label="Prompt",
68
+ placeholder="Gib deinen Prompt hier ein, z.B. 'Ein futuristischer Roboter in einem tropischen Wald'",
69
+ lines=3
70
+ )
71
+ steps_slider = gr.Slider(
72
+ minimum=1,
73
+ maximum=50, # FLUX.1-schnell hat meistens ca. 10-20 Steps optimal
74
+ value=10,
75
+ step=1,
76
+ label="Schritte (Steps)",
77
+ info="Höhere Schritte können die Qualität leicht verbessern, erhöhen aber die Generierungszeit."
78
+ )
79
+ num_images_slider = gr.Slider(
80
+ minimum=1,
81
+ maximum=4, # Begrenzt auf 4, da FLUX.1 n=4 zulässt und Gradio gut mit Listen umgeht
82
+ value=1,
83
+ step=1,
84
+ label="Anzahl der Bilder",
85
+ info="Wie viele Bilder gleichzeitig generiert werden sollen (kann länger dauern)."
86
+ )
87
+ generate_button = gr.Button("Bilder generieren")
88
+ with gr.Column():
89
+ output_gallery = gr.Gallery(
90
+ label="Generierte Bilder",
91
+ show_label=False,
92
+ elem_id="gallery",
93
+ height="auto" # Passt sich der Höhe der Bilder an
94
+ )
95
+
96
+ # Verknüpfung der Eingaben mit der Generierungsfunktion
97
+ generate_button.click(
98
+ fn=generate_image,
99
+ inputs=[prompt_input, steps_slider, num_images_slider],
100
+ outputs=[output_gallery]
101
+ )
102
+
103
+ # Startet die Gradio-Anwendung
104
+ if __name__ == "__main__":
105
+ demo.launch()