vab42 commited on
Commit
14f4232
·
verified ·
1 Parent(s): aa605b2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -26
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 = 10, n_images: int = 1) -> list[Image.Image] or str:
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, # Dieser Wert kommt vom Slider
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 aufgebrauch."
90
- return f"Fehler bei der Bildgenerierung: {e}. Versuche es später erneut."
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 Learn.Create.Repeat.
 
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. Denke an mögliche Trigger-Words für das LORA-Modell!",
105
  lines=3
106
  )
107
  steps_slider = gr.Slider(
108
  minimum=1,
109
- maximum=50, # <-- ANGEPASST für Dev-Modell
110
- value=25, # <-- ANGEPASST für Dev-Modell
111
  step=1,
112
  label="Schritte (Steps)",
113
- info="Höhere Schritte können die Qualität verbessern, erhöhen aber die Generierungszeit."
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 (kann länger dauern)."
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():