Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -11,12 +11,8 @@ logging.basicConfig(level=logging.INFO)
|
|
11 |
logger = logging.getLogger(__name__)
|
12 |
|
13 |
# --- Konfiguration ---
|
14 |
-
# Hole den Together API Key aus den Umgebungsvariablen (wird als Secret gesetzt)
|
15 |
TOGETHER_API_KEY = os.environ.get("TOGETHER_API_KEY")
|
16 |
-
|
17 |
-
# Das FLUX-Modell, das du über Together.ai nutzen möchtest
|
18 |
-
# KORREKTER MODELLNAME FÜR FLUX.1-dev-lora
|
19 |
-
FLUX_MODEL = "black-forest-labs/FLUX.1-dev-lora"
|
20 |
|
21 |
# Initialisiere den Together.ai Client
|
22 |
client = None
|
@@ -36,28 +32,34 @@ else:
|
|
36 |
logger.warning("WARNUNG: TOGETHER_API_KEY ist NICHT gesetzt. Bilder können nicht generiert werden.")
|
37 |
|
38 |
# --- Bildgenerierungsfunktion ---
|
39 |
-
def generate_image(prompt: str, steps: int =
|
40 |
-
"""
|
41 |
-
Generiert Bilder mit dem FLUX-Modell über Together.ai.
|
42 |
-
Gibt eine Liste von PIL.Image-Objekten oder eine Fehlermeldung zurück.
|
43 |
-
"""
|
44 |
if not client:
|
45 |
logger.error("generate_image: Client ist nicht initialisiert.")
|
46 |
return "Fehler: Together.ai Client konnte nicht initialisiert werden. Bitte API-Key prüfen und sicherstellen, dass er gesetzt ist."
|
47 |
if not prompt:
|
48 |
return "Bitte geben Sie einen Prompt ein."
|
49 |
|
50 |
-
# Hinweis: FLUX.1-dev-lora erlaubt wahrscheinlich mehr Schritte als die 'schnell-Free'-Version.
|
51 |
-
# Hier keine feste Validierung mehr, da der Slider dies steuern sollte.
|
52 |
-
# Eine clientseitige Validierung ist nur sinnvoll, wenn die API-Doku des Modells das explizit erfordert.
|
53 |
-
|
54 |
try:
|
55 |
logger.info(f"Versuche, Bildgenerierung mit Modell {FLUX_MODEL} zu starten über client.images.generate()...")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
response = client.images.generate(
|
57 |
model=FLUX_MODEL,
|
58 |
prompt=prompt,
|
59 |
-
steps=steps,
|
60 |
-
n=n_images
|
|
|
61 |
)
|
62 |
logger.info(f"Bildgenerierung erfolgreich angefordert. Antwort-Typ: {type(response)}")
|
63 |
|
@@ -76,7 +78,7 @@ def generate_image(prompt: str, steps: int = 10, n_images: int = 1) -> list[Imag
|
|
76 |
|
77 |
if not images:
|
78 |
logger.warning("Keine Bilder erfolgreich dekodiert oder erhalten.")
|
79 |
-
return "Keine Bilder generiert. Möglicherweise ungültige Prompt-Antwort, API-Problem oder Guthaben aufgebraucht."
|
80 |
|
81 |
return images
|
82 |
else:
|
@@ -86,31 +88,32 @@ def generate_image(prompt: str, steps: int = 10, n_images: int = 1) -> list[Imag
|
|
86 |
except Exception as e:
|
87 |
logger.error(f"FEHLER bei der Bildgenerierung: {e}", exc_info=True)
|
88 |
if "rate limit" in str(e).lower() or "billing" in str(e).lower():
|
89 |
-
return f"Fehler bei der Bildgenerierung: {e}. Dein Together.ai API-Limit wurde möglicherweise erreicht oder dein Guthaben ist
|
90 |
-
return f"Fehler bei der Bildgenerierung: {e}.
|
91 |
|
92 |
-
# --- Gradio Interface Definition ---
|
93 |
with gr.Blocks() as demo:
|
94 |
gr.Markdown(
|
95 |
"""
|
96 |
# FLUX.1 Dev LORA Bildgenerator
|
97 |
-
Generiere Bilder mit dem FLUX.1 Dev LORA-Modell von Black Forest Labs über
|
|
|
98 |
"""
|
99 |
)
|
100 |
with gr.Row():
|
101 |
with gr.Column():
|
102 |
prompt_input = gr.Textbox(
|
103 |
label="Prompt",
|
104 |
-
placeholder="Gib deinen Prompt hier ein.
|
105 |
lines=3
|
106 |
)
|
107 |
steps_slider = gr.Slider(
|
108 |
minimum=1,
|
109 |
-
maximum=50,
|
110 |
-
value=25,
|
111 |
step=1,
|
112 |
label="Schritte (Steps)",
|
113 |
-
info="Höhere Schritte können die Qualität verbessern
|
114 |
)
|
115 |
num_images_slider = gr.Slider(
|
116 |
minimum=1,
|
@@ -118,7 +121,7 @@ with gr.Blocks() as demo:
|
|
118 |
value=1,
|
119 |
step=1,
|
120 |
label="Anzahl der Bilder",
|
121 |
-
info="Wie viele Bilder gleichzeitig generiert werden sollen
|
122 |
)
|
123 |
generate_button = gr.Button("Bilder generieren")
|
124 |
with gr.Column():
|
|
|
11 |
logger = logging.getLogger(__name__)
|
12 |
|
13 |
# --- Konfiguration ---
|
|
|
14 |
TOGETHER_API_KEY = os.environ.get("TOGETHER_API_KEY")
|
15 |
+
FLUX_MODEL = "black-forest-labs/FLUX.1-dev-lora" # Dein gewähltes Modell
|
|
|
|
|
|
|
16 |
|
17 |
# Initialisiere den Together.ai Client
|
18 |
client = None
|
|
|
32 |
logger.warning("WARNUNG: TOGETHER_API_KEY ist NICHT gesetzt. Bilder können nicht generiert werden.")
|
33 |
|
34 |
# --- Bildgenerierungsfunktion ---
|
35 |
+
def generate_image(prompt: str, steps: int = 25, n_images: int = 1) -> list[Image.Image] or str:
|
|
|
|
|
|
|
|
|
36 |
if not client:
|
37 |
logger.error("generate_image: Client ist nicht initialisiert.")
|
38 |
return "Fehler: Together.ai Client konnte nicht initialisiert werden. Bitte API-Key prüfen und sicherstellen, dass er gesetzt ist."
|
39 |
if not prompt:
|
40 |
return "Bitte geben Sie einen Prompt ein."
|
41 |
|
|
|
|
|
|
|
|
|
42 |
try:
|
43 |
logger.info(f"Versuche, Bildgenerierung mit Modell {FLUX_MODEL} zu starten über client.images.generate()...")
|
44 |
+
|
45 |
+
# VERSUCH: Einen Dummy-LoRA-Eintrag hinzufügen.
|
46 |
+
# OHNE SPEZIFISCHES LORA WIRD DIESES MODELL KEINE BILDER GENERIEREN!
|
47 |
+
# Zusammen mit Together.ai müsstest du hier einen echten, von Together.ai unterstützten LoRA-Namen angeben.
|
48 |
+
# Dies ist nur ein Test, um zu sehen, ob das Fehlen des 'image_loras'-Parameters das Problem ist.
|
49 |
+
lora_params = [] # Standardmäßig leer lassen, wenn keine spezifischen LoRAs genutzt werden
|
50 |
+
|
51 |
+
# WICHTIG: Wenn du einen echten LoRA verwenden möchtest, musst du hier den korrekten Namen/Pfad eingeben.
|
52 |
+
# Diesen müsstest du von Together.ai erfahren oder in ihrer Doku finden.
|
53 |
+
# Beispiel (NICHT GARANTIERT DASS ES FUNKTIONIERT OHNE ECHTEN LORA-NAMEN):
|
54 |
+
# lora_params = [{"path": "togethercomputer/lora-pixel-art", "scale": 0.8}]
|
55 |
+
# Oder einfach weglassen, wenn das Modell ohne spezifisches LoRA arbeiten sollte (was es nicht zu scheinen tut).
|
56 |
+
|
57 |
response = client.images.generate(
|
58 |
model=FLUX_MODEL,
|
59 |
prompt=prompt,
|
60 |
+
steps=steps,
|
61 |
+
n=n_images,
|
62 |
+
# image_loras=lora_params # <--- DIESE ZEILE WÜRDE HIER EINGEFÜGT, WENN WIR EINEN ECHTEN LORA HÄTTEN
|
63 |
)
|
64 |
logger.info(f"Bildgenerierung erfolgreich angefordert. Antwort-Typ: {type(response)}")
|
65 |
|
|
|
78 |
|
79 |
if not images:
|
80 |
logger.warning("Keine Bilder erfolgreich dekodiert oder erhalten.")
|
81 |
+
return "Keine Bilder generiert. Möglicherweise ungültige Prompt-Antwort, API-Problem oder Guthaben aufgebraucht. Für LORA-Modelle ist oft ein spezifischer 'image_loras'-Parameter erforderlich!"
|
82 |
|
83 |
return images
|
84 |
else:
|
|
|
88 |
except Exception as e:
|
89 |
logger.error(f"FEHLER bei der Bildgenerierung: {e}", exc_info=True)
|
90 |
if "rate limit" in str(e).lower() or "billing" in str(e).lower():
|
91 |
+
return f"Fehler bei der Bildgenerierung: {e}. Dein Together.ai API-Limit wurde möglicherweise erreicht oder dein Guthaben ist aufgebraucht."
|
92 |
+
return f"Fehler bei der Bildgenerierung: {e}. Together.ai erwartet möglicherweise den 'image_loras'-Parameter oder es gibt ein anderes Problem."
|
93 |
|
94 |
+
# --- Gradio Interface Definition (unverändert) ---
|
95 |
with gr.Blocks() as demo:
|
96 |
gr.Markdown(
|
97 |
"""
|
98 |
# FLUX.1 Dev LORA Bildgenerator
|
99 |
+
Generiere Bilder mit dem FLUX.1 Dev LORA-Modell von Black Forest Labs über Together.ai.
|
100 |
+
Beachte: Für LORA-Modelle ist oft ein spezifischer 'image_loras'-Parameter erforderlich!
|
101 |
"""
|
102 |
)
|
103 |
with gr.Row():
|
104 |
with gr.Column():
|
105 |
prompt_input = gr.Textbox(
|
106 |
label="Prompt",
|
107 |
+
placeholder="Gib deinen Prompt hier ein. Du benötigst möglicherweise einen Trigger-Word und ein LoRA-Modell!",
|
108 |
lines=3
|
109 |
)
|
110 |
steps_slider = gr.Slider(
|
111 |
minimum=1,
|
112 |
+
maximum=50,
|
113 |
+
value=25,
|
114 |
step=1,
|
115 |
label="Schritte (Steps)",
|
116 |
+
info="Höhere Schritte können die Qualität verbessern."
|
117 |
)
|
118 |
num_images_slider = gr.Slider(
|
119 |
minimum=1,
|
|
|
121 |
value=1,
|
122 |
step=1,
|
123 |
label="Anzahl der Bilder",
|
124 |
+
info="Wie viele Bilder gleichzeitig generiert werden sollen."
|
125 |
)
|
126 |
generate_button = gr.Button("Bilder generieren")
|
127 |
with gr.Column():
|