Nymbo commited on
Commit
b86955f
·
verified ·
1 Parent(s): 5de9add

aight reverting for now

Browse files
Files changed (1) hide show
  1. app.py +296 -331
app.py CHANGED
@@ -4,50 +4,20 @@ import io
4
  import random
5
  import os
6
  import time
7
- import json
8
  from PIL import Image
 
9
 
10
  # Project by Nymbo
11
 
12
- # Retrieve the default API token from environment variables
13
- HF_TOKEN = os.getenv("HF_READ_TOKEN")
 
 
 
14
  # Timeout for requests
15
  timeout = 100
16
 
17
- # Provider-specific API handlers
18
- def query_hf_inference(prompt, model_path, headers, payload, timeout):
19
- """Handler for Hugging Face Inference API requests"""
20
- api_url = f"https://api-inference.huggingface.co/models/{model_path}"
21
- print(f"Making request to HF Inference API: {api_url}")
22
- return requests.post(api_url, headers=headers, json=payload, timeout=timeout)
23
-
24
- def query_fal_ai(prompt, model_path, headers, payload, timeout):
25
- """Handler for Fal AI API requests"""
26
- api_url = f"https://live.fal.ai/hugging-face/{model_path}"
27
- print(f"Making request to Fal AI: {api_url}")
28
- return requests.post(api_url, headers=headers, json=payload, timeout=timeout)
29
-
30
- def query_nebius(prompt, model_path, headers, payload, timeout):
31
- """Handler for Nebius API requests"""
32
- api_url = f"https://router.huggingface.co/nebius/v1/text-to-image/{model_path}"
33
- print(f"Making request to Nebius: {api_url}")
34
- return requests.post(api_url, headers=headers, json=payload, timeout=timeout)
35
-
36
- def query_replicate(prompt, model_path, headers, payload, timeout):
37
- """Handler for Replicate API requests"""
38
- api_url = f"https://router.huggingface.co/replicate/v1/text-to-image/{model_path}"
39
- print(f"Making request to Replicate: {api_url}")
40
- return requests.post(api_url, headers=headers, json=payload, timeout=timeout)
41
-
42
- def query_together(prompt, model_path, headers, payload, timeout):
43
- """Handler for Together API requests"""
44
- api_url = f"https://router.huggingface.co/together/v1/text-to-image/{model_path}"
45
- print(f"Making request to Together: {api_url}")
46
- return requests.post(api_url, headers=headers, json=payload, timeout=timeout)
47
-
48
- # Main query function
49
- def query(prompt, model, custom_lora, is_negative=False, steps=35, cfg_scale=7, sampler="DPM++ 2M Karras",
50
- seed=-1, strength=0.7, width=1024, height=1024, custom_api_key="", provider="hf-inference"):
51
  # Debug log to indicate function start
52
  print("Starting query function...")
53
  # Print the parameters for debugging purposes
@@ -55,8 +25,6 @@ def query(prompt, model, custom_lora, is_negative=False, steps=35, cfg_scale=7,
55
  print(f"Model: {model}")
56
  print(f"Custom LoRA: {custom_lora}")
57
  print(f"Parameters - Steps: {steps}, CFG Scale: {cfg_scale}, Seed: {seed}, Strength: {strength}, Width: {width}, Height: {height}")
58
- print(f"Provider: {provider}")
59
- print(f"Custom API Key provided: {bool(custom_api_key.strip())}") # Log whether a custom key was provided without printing the key
60
 
61
  # Check if the prompt is empty or None
62
  if prompt == "" or prompt is None:
@@ -67,222 +35,299 @@ def query(prompt, model, custom_lora, is_negative=False, steps=35, cfg_scale=7,
67
  key = random.randint(0, 999)
68
  print(f"Generated key: {key}") # Debug log
69
 
70
- # Determine which token to use - custom API key if provided, otherwise one of the environment variables
71
- if custom_api_key.strip() != "":
72
- print("USING CUSTOM API KEY: BYOK token provided by user is being used for authentication")
73
- API_TOKEN = custom_api_key.strip()
74
- else:
75
- if provider == "hf-inference":
76
- # Randomly select an API token from available options to distribute the load for HF Inference
77
- API_TOKEN = random.choice([os.getenv("HF_READ_TOKEN"), os.getenv("HF_READ_TOKEN_2"),
78
- os.getenv("HF_READ_TOKEN_3"), os.getenv("HF_READ_TOKEN_4"),
79
- os.getenv("HF_READ_TOKEN_5")])
80
- print("USING DEFAULT API KEY: Random environment variable token is being used for authentication")
81
- else:
82
- # For other providers, use the default HF token
83
- API_TOKEN = HF_TOKEN
84
- print("USING DEFAULT HF TOKEN: Environment variable HF_TOKEN is being used for authentication")
85
-
86
  headers = {"Authorization": f"Bearer {API_TOKEN}"}
 
87
 
88
  # Enhance the prompt with additional details for better quality
89
  prompt = f"{prompt} | ultra detail, ultra elaboration, ultra quality, perfect."
90
  print(f'Generation {key}: {prompt}') # Debug log
91
 
92
- # Set the model path based on the selected model or custom LoRA
93
  if custom_lora.strip() != "":
94
- model_path = custom_lora.strip()
95
  else:
96
- # Map to select the appropriate model path
97
- model_mapping = {
98
- 'Stable Diffusion XL': "stabilityai/stable-diffusion-xl-base-1.0",
99
- 'FLUX.1 [Dev]': "black-forest-labs/FLUX.1-dev",
100
- 'FLUX.1 [Schnell]': "black-forest-labs/FLUX.1-schnell",
101
- 'HiDream-I1-Full': "HiDream-ai/HiDream-I1-Full",
102
- 'HiDream-I1-Dev': "HiDream-ai/HiDream-I1-Dev",
103
- 'HiDream-I1-Fast': "HiDream-ai/HiDream-I1-Fast",
104
- 'Animagine 4.0': "cagliostrolab/animagine-xl-4.0",
105
- 'Flux Icon Kit': "strangerzonehf/Flux-Icon-Kit-LoRA",
106
- 'Pixel Background': "strangerzonehf/Flux-Pixel-Background-LoRA",
107
- 'Meme XD': "prithivMLmods/Flux-Meme-Xd-LoRA",
108
- 'Chill Guy': "prithivMLmods/Flux-Chill-Guy-Zone",
109
- 'Pepe': "openfree/pepe",
110
- 'NSFWmodel': "lexa862/NSFWmodel",
111
- 'Claude Art': "strangerzonehf/Flux-Claude-Art",
112
- 'Open Genmoji': "EvanZhouDev/open-genmoji",
113
- 'EBook Creative Cover': "prithivMLmods/EBook-Creative-Cover-Flux-LoRA",
114
- 'Flux Logo Design 2': "prithivMLmods/Logo-Design-Flux-LoRA",
115
- 'Isometric 3D': "strangerzonehf/Flux-Isometric-3D-LoRA",
116
- 'Flux Condensation': "fofr/flux-condensation",
117
- 'Flux Handwriting': "fofr/flux-handwriting",
118
- 'Shou Xin': "Datou1111/shou_xin",
119
- 'Sketch Smudge': "strangerzonehf/Flux-Sketch-Smudge-LoRA",
120
- '80s Cyberpunk': "fofr/flux-80s-cyberpunk",
121
- 'Coloring Book Flux': "renderartist/coloringbookflux",
122
- 'Flux Miniature LoRA': "gokaygokay/Flux-Miniature-LoRA",
123
- 'Sketch Paint': "strangerzonehf/Sketch-Paint",
124
- 'Flux UltraRealism 2.0': "prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0",
125
- 'Midjourney Mix': "strangerzonehf/Flux-Midjourney-Mix-LoRA",
126
- 'Midjourney Mix 2': "strangerzonehf/Flux-Midjourney-Mix2-LoRA",
127
- 'Flux Logo Design': "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design",
128
- 'Flux Uncensored': "enhanceaiteam/Flux-uncensored",
129
- 'Flux Uncensored V2': "enhanceaiteam/Flux-Uncensored-V2",
130
- 'Flux Tarot Cards': "prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA",
131
- 'Pixel Art Sprites': "sWizad/pokemon-trainer-sprites-pixelart-flux",
132
- '3D Sketchfab': "prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA",
133
- 'Retro Comic Flux': "renderartist/retrocomicflux",
134
- 'Caricature': "TheAwakenOne/caricature",
135
- 'Huggieverse': "Chunte/flux-lora-Huggieverse",
136
- 'Propaganda Poster': "AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion",
137
- 'Flux Game Assets V2': "gokaygokay/Flux-Game-Assets-LoRA-v2",
138
- 'SDXL HS Card Style': "Norod78/sdxl-hearthstone-card-style-lora",
139
- 'SLDR FLUX NSFW v2 Studio': "xey/sldr_flux_nsfw_v2-studio",
140
- 'SoftPasty Flux': "alvdansen/softpasty-flux-dev",
141
- 'Flux Stickers': "diabolic6045/Flux_Sticker_Lora",
142
- 'Flux Animex V2': "strangerzonehf/Flux-Animex-v2-LoRA",
143
- 'Flux Animeo V1': "strangerzonehf/Flux-Animeo-v1-LoRA",
144
- 'Movie Board': "prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA",
145
- 'Purple Dreamy': "prithivMLmods/Purple-Dreamy-Flux-LoRA",
146
- 'PS1 Style Flux': "veryVANYA/ps1-style-flux",
147
- 'Softserve Anime': "alvdansen/softserve_anime",
148
- 'Flux Tarot v1': "multimodalart/flux-tarot-v1",
149
- 'Half Illustration': "davisbro/half_illustration",
150
- 'OpenDalle v1.1': "dataautogpt3/OpenDalleV1.1",
151
- 'Flux Ghibsky Illustration': "aleksa-codes/flux-ghibsky-illustration",
152
- 'Flux Koda': "alvdansen/flux-koda",
153
- 'Soviet Diffusion XL': "openskyml/soviet-diffusion-xl",
154
- 'Flux Realism LoRA': "XLabs-AI/flux-RealismLora",
155
- 'Frosting Lane Flux': "alvdansen/frosting_lane_flux",
156
- 'Phantasma Anime': "alvdansen/phantasma-anime",
157
- 'Boreal': "kudzueye/Boreal",
158
- 'How2Draw': "glif/how2draw",
159
- 'Flux AestheticAnime': "dataautogpt3/FLUX-AestheticAnime",
160
- 'Fashion Hut Modeling LoRA': "prithivMLmods/Fashion-Hut-Modeling-LoRA",
161
- 'Flux SyntheticAnime': "dataautogpt3/FLUX-SyntheticAnime",
162
- 'Flux Midjourney Anime': "brushpenbob/flux-midjourney-anime",
163
- 'Coloring Book Generator': "robert123231/coloringbookgenerator",
164
- 'Collage Flux': "prithivMLmods/Castor-Collage-Dim-Flux-LoRA",
165
- 'Flux Product Ad Backdrop': "prithivMLmods/Flux-Product-Ad-Backdrop",
166
- 'Product Design': "multimodalart/product-design",
167
- '90s Anime Art': "glif/90s-anime-art",
168
- 'Brain Melt Acid Art': "glif/Brain-Melt-Acid-Art",
169
- 'Lustly Flux Uncensored v1': "lustlyai/Flux_Lustly.ai_Uncensored_nsfw_v1",
170
- 'NSFW Master Flux': "Keltezaa/NSFW_MASTER_FLUX",
171
- 'Flux Outfit Generator': "tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator",
172
- 'Midjourney': "Jovie/Midjourney",
173
- 'DreamPhotoGASM': "Yntec/DreamPhotoGASM",
174
- 'Flux Super Realism LoRA': "strangerzonehf/Flux-Super-Realism-LoRA",
175
- 'Stable Diffusion 2-1': "stabilityai/stable-diffusion-2-1-base",
176
- 'Stable Diffusion 3.5 Large': "stabilityai/stable-diffusion-3.5-large",
177
- 'Stable Diffusion 3.5 Large Turbo': "stabilityai/stable-diffusion-3.5-large-turbo",
178
- 'Stable Diffusion 3 Medium': "stabilityai/stable-diffusion-3-medium-diffusers",
179
- 'Duchaiten Real3D NSFW XL': "stablediffusionapi/duchaiten-real3d-nsfw-xl",
180
- 'Pixel Art XL': "nerijs/pixel-art-xl",
181
- 'Character Design': "KappaNeuro/character-design",
182
- 'Sketched Out Manga': "alvdansen/sketchedoutmanga",
183
- 'Archfey Anime': "alvdansen/archfey_anime",
184
- 'Lofi Cuties': "alvdansen/lofi-cuties",
185
- 'YiffyMix': "Yntec/YiffyMix",
186
- 'Analog Madness Realistic v7': "digiplay/AnalogMadness-realistic-model-v7",
187
- 'Selfie Photography': "artificialguybr/selfiephotographyredmond-selfie-photography-lora-for-sdxl",
188
- 'Filmgrain': "artificialguybr/filmgrain-redmond-filmgrain-lora-for-sdxl",
189
- 'Leonardo AI Style Illustration': "goofyai/Leonardo_Ai_Style_Illustration",
190
- 'Cyborg Style XL': "goofyai/cyborg_style_xl",
191
- 'Little Tinies': "alvdansen/littletinies",
192
- 'NSFW XL': "Dremmar/nsfw-xl",
193
- 'Analog Redmond': "artificialguybr/analogredmond",
194
- 'Pixel Art Redmond': "artificialguybr/PixelArtRedmond",
195
- 'Ascii Art': "CiroN2022/ascii-art",
196
- 'Analog': "Yntec/Analog",
197
- 'Maple Syrup': "Yntec/MapleSyrup",
198
- 'Perfect Lewd Fantasy': "digiplay/perfectLewdFantasy_v1.01",
199
- 'AbsoluteReality 1.8.1': "digiplay/AbsoluteReality_v1.8.1",
200
- 'Disney': "goofyai/disney_style_xl",
201
- 'Redmond SDXL': "artificialguybr/LogoRedmond-LogoLoraForSDXL-V2",
202
- 'epiCPhotoGasm': "Yntec/epiCPhotoGasm"
203
- }
204
-
205
- # Add special prompt prefixes for certain models
206
- prompt_prefixes = {
207
- 'Animagine 4.0': "masterpiece, high score, great score, absurdres, ",
208
- 'Flux Icon Kit': "Icon Kit, ",
209
- 'Pixel Background': "Pixel Background, ",
210
- 'Meme XD': "meme, ",
211
- 'Chill Guy': "chill guy, ",
212
- 'Pepe': "pepe, ",
213
- 'NSFWmodel': "nude, ",
214
- 'Claude Art': "claude art, ",
215
- 'Open Genmoji': "emoji, ",
216
- 'EBook Creative Cover': "EBook Cover, ",
217
- 'Flux Logo Design 2': "Logo Design, ",
218
- 'Isometric 3D': "Isometric 3D, ",
219
- 'Flux Condensation': "CONDENSATION, ",
220
- 'Flux Handwriting': "HWRIT handwriting, ",
221
- 'Shou Xin': "shou_xin, pencil sketch, ",
222
- 'Sketch Smudge': "Sketch Smudge, ",
223
- '80s Cyberpunk': "80s cyberpunk, ",
224
- 'Coloring Book Flux': "c0l0ringb00k, coloring book, coloring book page, ",
225
- 'Flux Miniature LoRA': "MNTR, miniature drawing, ",
226
- 'Sketch Paint': "Sketch paint, ",
227
- 'Flux UltraRealism 2.0': "Ultra realistic, ",
228
- 'Midjourney Mix': "midjourney mix, ",
229
- 'Midjourney Mix 2': "MJ v6, ",
230
- 'Flux Logo Design': "wablogo, logo, Minimalist, ",
231
- 'Flux Tarot Cards': "Tarot card, ",
232
- 'Pixel Art Sprites': "a pixel image, ",
233
- '3D Sketchfab': "3D Sketchfab, ",
234
- 'Retro Comic Flux': "c0m1c, comic book panel, ",
235
- 'Caricature': "CCTUR3, ",
236
- 'Huggieverse': "HGGRE, ",
237
- 'Propaganda Poster': "propaganda poster, ",
238
- 'Flux Game Assets V2': "wbgmsst, white background, ",
239
- 'SDXL HS Card Style': "Hearthstone Card, ",
240
- 'SoftPasty Flux': "araminta_illus illustration style, ",
241
- 'Flux Stickers': "5t1cker 5ty1e, ",
242
- 'Flux Animex V2': "Animex, ",
243
- 'Flux Animeo V1': "Animeo, ",
244
- 'Movie Board': "movieboard, ",
245
- 'Purple Dreamy': "Purple Dreamy, ",
246
- 'PS1 Style Flux': "ps1 game screenshot, ",
247
- 'Softserve Anime': "sftsrv style illustration, ",
248
- 'Flux Tarot v1': "in the style of TOK a trtcrd tarot style, ",
249
- 'Half Illustration': "in the style of TOK, ",
250
- 'Flux Ghibsky Illustration': "GHIBSKY style, ",
251
- 'Flux Koda': "flmft style, ",
252
- 'Soviet Diffusion XL': "soviet poster, ",
253
- 'Frosting Lane Flux': "frstingln illustration, ",
254
- 'Boreal': "photo, ",
255
- 'How2Draw': "How2Draw, ",
256
- 'Fashion Hut Modeling LoRA': "Modeling of, ",
257
- 'Flux SyntheticAnime': "1980s anime screengrab, VHS quality, syntheticanime, ",
258
- 'Flux Midjourney Anime': "egmid, ",
259
- 'Collage Flux': "collage, ",
260
- 'Flux Product Ad Backdrop': "Product Ad, ",
261
- 'Product Design': "product designed by prdsgn, ",
262
- 'Brain Melt Acid Art': "maximalism, in an acid surrealism style, ",
263
- 'NSFW Master Flux': "NSFW, ",
264
- 'Stable Diffusion 3 Medium': "A, ",
265
- 'Pixel Art XL': "pixel art, ",
266
- 'Character Design': "Character Design, ",
267
- 'Sketched Out Manga': "daiton, ",
268
- 'Selfie Photography': "instagram model, discord profile picture, ",
269
- 'Filmgrain': "Film Grain, FilmGrainAF, ",
270
- 'Leonardo AI Style Illustration': "leonardo style, illustration, vector art, ",
271
- 'Cyborg Style XL': "cyborg style, ",
272
- 'Analog Redmond': "timeless style, ",
273
- 'Pixel Art Redmond': "Pixel Art, ",
274
- 'Ascii Art': "ascii art, ",
275
- 'Disney': "Disney style, "
276
- }
277
-
278
- # Get the model path from the mapping
279
- model_path = model_mapping.get(model, "black-forest-labs/FLUX.1-schnell") # Default to FLUX.1 Schnell if not found
280
-
281
- # Add model-specific prefixes to prompt if needed
282
- if model in prompt_prefixes:
283
- prompt = f"{prompt_prefixes[model]}{prompt}"
284
-
285
- print(f"Model path: {model_path}") # Debug log
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
286
 
287
  # Define the payload for the request
288
  payload = {
@@ -299,21 +344,9 @@ def query(prompt, model, custom_lora, is_negative=False, steps=35, cfg_scale=7,
299
  }
300
  print(f"Payload: {json.dumps(payload, indent=2)}") # Debug log
301
 
302
- # Select the appropriate API handler based on the provider
303
- provider_handlers = {
304
- "hf-inference": query_hf_inference,
305
- "fal-ai": query_fal_ai,
306
- "nebius": query_nebius,
307
- "replicate": query_replicate,
308
- "together": query_together
309
- }
310
-
311
- # Get the appropriate handler for the selected provider
312
- handler = provider_handlers.get(provider, query_hf_inference)
313
-
314
- # Make a request to the API to generate the image using the selected handler
315
  try:
316
- response = handler(prompt, model_path, headers, payload, timeout)
317
  print(f"Response status code: {response.status_code}") # Debug log
318
  except requests.exceptions.RequestException as e:
319
  # Log any request exceptions and raise an error for the user
@@ -494,24 +527,6 @@ with gr.Blocks(theme='Nymbo/Nymbo_Theme_5') as dalle:
494
 
495
  # Tab for advanced settings
496
  with gr.Tab("Advanced Settings"):
497
- with gr.Row():
498
- # Provider selection
499
- provider_radio = gr.Radio(
500
- choices=["hf-inference", "fal-ai", "nebius", "replicate", "together"],
501
- value="hf-inference",
502
- label="Inference Provider",
503
- info="Select the provider to use for image generation"
504
- )
505
- with gr.Row():
506
- # BYOK (Bring Your Own Key) textbox
507
- byok_textbox = gr.Textbox(
508
- value="",
509
- label="BYOK (Bring Your Own Key)",
510
- info="Enter a custom API key here. When provided, this key will be used instead of the default keys.",
511
- placeholder="Enter your API token",
512
- type="password", # Hide the API key for security
513
- elem_id="byok-input"
514
- )
515
  with gr.Row():
516
  # Textbox for specifying elements to exclude from the image
517
  negative_prompt = gr.Textbox(label="Negative Prompt", placeholder="What should not be in the image", value="(deformed, distorted, disfigured), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, misspellings, typos", lines=3, elem_id="negative-prompt-text-input")
@@ -536,23 +551,6 @@ with gr.Blocks(theme='Nymbo/Nymbo_Theme_5') as dalle:
536
  # Radio buttons for selecting the sampling method
537
  method = gr.Radio(label="Sampling method", value="DPM++ 2M Karras", choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"])
538
 
539
- # Function to validate provider selection
540
- def validate_provider(api_key, provider):
541
- # If custom key is provided, any provider can be used
542
- if api_key.strip():
543
- return gr.update(value=provider, interactive=True)
544
- # If no custom key is provided, only HF Inference is allowed
545
- elif provider != "hf-inference":
546
- return gr.update(value="hf-inference", interactive=True)
547
- return gr.update(value=provider, interactive=True)
548
-
549
- # Connect the BYOK textbox to validate provider selection
550
- byok_textbox.change(
551
- fn=validate_provider,
552
- inputs=[byok_textbox, provider_radio],
553
- outputs=provider_radio
554
- )
555
-
556
  # Tab for image editing options
557
  with gr.Tab("Image Editor"):
558
  # Function to simulate a delay for processing
@@ -610,43 +608,10 @@ with gr.Blocks(theme='Nymbo/Nymbo_Theme_5') as dalle:
610
  """
611
  )
612
 
613
- # Accordion providing an overview of providers
614
- with gr.Accordion("Providers Information", open=False):
615
- gr.Markdown(
616
- """
617
- ## Inference Providers
618
-
619
- This application supports multiple inference providers for image generation:
620
-
621
- ### HF Inference
622
- ###### The default Hugging Face Inference API. This is a serverless solution that allows you to run model inference on Hugging Face's infrastructure. Free to use with limitations.
623
-
624
- ### Fal AI
625
- ###### Fal AI provides optimized inference for image generation models. May offer better performance for certain model types.
626
-
627
- ### Nebius
628
- ###### Nebius AI is a technology company specializing in AI-centric cloud platforms, offering scalable GPU clusters for inference.
629
-
630
- ### Replicate
631
- ###### Replicate's API makes it easy to run machine learning models in the cloud with a simple API.
632
-
633
- ### Together
634
- ###### Together AI offers high-performance inference for various AI models.
635
-
636
- When no custom API key is provided, only HF Inference can be used. For other providers, you must bring your own API key.
637
- """
638
- )
639
-
640
  # Accordion providing an overview of advanced settings
641
  with gr.Accordion("Advanced Settings Overview", open=False):
642
  gr.Markdown(
643
  """
644
- ## Inference Provider
645
- ###### Select which provider to use for image generation. Each provider has different performance characteristics and model availability.
646
-
647
- ## BYOK (Bring Your Own Key)
648
- ###### This allows you to use your own API key instead of the default keys. Enter your key here for direct access to models using your account's permissions and rate limits.
649
-
650
  ## Negative Prompt
651
  ###### This box is for telling the AI what you don't want in your images. Think of it as a way to avoid certain elements. For instance, if you don't want blurry images or extra limbs showing up, this is where you'd mention it.
652
 
@@ -679,8 +644,8 @@ with gr.Blocks(theme='Nymbo/Nymbo_Theme_5') as dalle:
679
  with gr.Row():
680
  image_output = gr.Image(type="pil", label="Image Output", elem_id="gallery")
681
 
682
- # Set up button click event to call the query function with the provider and BYOK parameters
683
- text_button.click(query, inputs=[text_prompt, model, custom_lora, negative_prompt, steps, cfg, method, seed, strength, width, height, byok_textbox, provider_radio], outputs=image_output)
684
 
685
  print("Launching Gradio interface...") # Debug log
686
  # Launch the Gradio interface without showing the API or sharing externally
 
4
  import random
5
  import os
6
  import time
 
7
  from PIL import Image
8
+ import json
9
 
10
  # Project by Nymbo
11
 
12
+ # Base API URL for Hugging Face inference
13
+ API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev"
14
+ # Retrieve the API token from environment variables
15
+ API_TOKEN = os.getenv("HF_READ_TOKEN")
16
+ headers = {"Authorization": f"Bearer {API_TOKEN}"}
17
  # Timeout for requests
18
  timeout = 100
19
 
20
+ def query(prompt, model, custom_lora, is_negative=False, steps=35, cfg_scale=7, sampler="DPM++ 2M Karras", seed=-1, strength=0.7, width=1024, height=1024):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  # Debug log to indicate function start
22
  print("Starting query function...")
23
  # Print the parameters for debugging purposes
 
25
  print(f"Model: {model}")
26
  print(f"Custom LoRA: {custom_lora}")
27
  print(f"Parameters - Steps: {steps}, CFG Scale: {cfg_scale}, Seed: {seed}, Strength: {strength}, Width: {width}, Height: {height}")
 
 
28
 
29
  # Check if the prompt is empty or None
30
  if prompt == "" or prompt is None:
 
35
  key = random.randint(0, 999)
36
  print(f"Generated key: {key}") # Debug log
37
 
38
+ # Randomly select an API token from available options to distribute the load
39
+ API_TOKEN = random.choice([os.getenv("HF_READ_TOKEN"), os.getenv("HF_READ_TOKEN_2"), os.getenv("HF_READ_TOKEN_3"), os.getenv("HF_READ_TOKEN_4"), os.getenv("HF_READ_TOKEN_5")])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  headers = {"Authorization": f"Bearer {API_TOKEN}"}
41
+ print(f"Selected API token: {API_TOKEN}") # Debug log
42
 
43
  # Enhance the prompt with additional details for better quality
44
  prompt = f"{prompt} | ultra detail, ultra elaboration, ultra quality, perfect."
45
  print(f'Generation {key}: {prompt}') # Debug log
46
 
47
+ # Set the API URL based on the selected model or custom LoRA
48
  if custom_lora.strip() != "":
49
+ API_URL = f"https://api-inference.huggingface.co/models/{custom_lora.strip()}"
50
  else:
51
+ if model == 'Stable Diffusion XL':
52
+ API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0"
53
+ if model == 'FLUX.1 [Dev]':
54
+ API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev"
55
+ if model == 'FLUX.1 [Schnell]':
56
+ API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell"
57
+ if model == 'HiDream-I1-Full':
58
+ API_URL = "https://api-inference.huggingface.co/models/HiDream-ai/HiDream-I1-Full"
59
+ if model == 'HiDream-I1-Dev':
60
+ API_URL = "https://api-inference.huggingface.co/models/HiDream-ai/HiDream-I1-Dev"
61
+ if model == 'HiDream-I1-Fast':
62
+ API_URL = "https://api-inference.huggingface.co/models/HiDream-ai/HiDream-I1-Fast"
63
+ if model == 'Animagine 4.0':
64
+ API_URL = "https://api-inference.huggingface.co/models/cagliostrolab/animagine-xl-4.0"
65
+ prompt = f"masterpiece, high score, great score, absurdres, {prompt}"
66
+ if model == 'Flux Icon Kit':
67
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Icon-Kit-LoRA"
68
+ prompt = f"Icon Kit, {prompt}"
69
+ if model == 'Pixel Background':
70
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Pixel-Background-LoRA"
71
+ prompt = f"Pixel Background, {prompt}"
72
+ if model == 'Meme XD':
73
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Flux-Meme-Xd-LoRA"
74
+ prompt = f"meme, {prompt}"
75
+ if model == 'Chill Guy':
76
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Flux-Chill-Guy-Zone"
77
+ prompt = f"chill guy, {prompt}"
78
+ if model == 'Pepe':
79
+ API_URL = "https://api-inference.huggingface.co/models/openfree/pepe"
80
+ prompt = f"pepe, {prompt}"
81
+ if model == 'NSFWmodel':
82
+ API_URL = "https://api-inference.huggingface.co/models/lexa862/NSFWmodel"
83
+ prompt = f"nude, {prompt}"
84
+ if model == 'Claude Art':
85
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Claude-Art"
86
+ prompt = f"claude art, {prompt}"
87
+ if model == 'Open Genmoji':
88
+ API_URL = "https://api-inference.huggingface.co/models/EvanZhouDev/open-genmoji"
89
+ prompt = f"emoji, {prompt}"
90
+ if model == 'EBook Creative Cover':
91
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/EBook-Creative-Cover-Flux-LoRA"
92
+ prompt = f"EBook Cover, {prompt}"
93
+ if model == 'Flux Logo Design 2':
94
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Logo-Design-Flux-LoRA"
95
+ prompt = f"Logo Design, {prompt}"
96
+ if model == 'Isometric 3D':
97
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Isometric-3D-LoRA"
98
+ prompt = f"Isometric 3D, {prompt}"
99
+ if model == 'Flux Condensation':
100
+ API_URL = "https://api-inference.huggingface.co/models/fofr/flux-condensation"
101
+ prompt = f"CONDENSATION, {prompt}"
102
+ if model == 'Flux Handwriting':
103
+ API_URL = "https://api-inference.huggingface.co/models/fofr/flux-handwriting"
104
+ prompt = f"HWRIT handwriting, {prompt}"
105
+ if model == 'Shou Xin':
106
+ API_URL = "https://api-inference.huggingface.co/models/Datou1111/shou_xin"
107
+ prompt = f"shou_xin, pencil sketch, {prompt}"
108
+ if model == 'Sketch Smudge':
109
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Sketch-Smudge-LoRA"
110
+ prompt = f"Sketch Smudge, {prompt}"
111
+ if model == '80s Cyberpunk':
112
+ API_URL = "https://api-inference.huggingface.co/models/fofr/flux-80s-cyberpunk"
113
+ prompt = f"80s cyberpunk, {prompt}"
114
+ if model == 'Coloring Book Flux':
115
+ API_URL = "https://api-inference.huggingface.co/models/renderartist/coloringbookflux"
116
+ prompt = f"c0l0ringb00k, coloring book, coloring book page, {prompt}"
117
+ if model == 'Flux Miniature LoRA':
118
+ API_URL = "https://api-inference.huggingface.co/models/gokaygokay/Flux-Miniature-LoRA"
119
+ prompt = f"MNTR, miniature drawing, {prompt}"
120
+ if model == 'Sketch Paint':
121
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Sketch-Paint"
122
+ prompt = f"Sketch paint, {prompt}"
123
+ if model == 'Flux UltraRealism 2.0':
124
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0"
125
+ prompt = f"Ultra realistic, {prompt}"
126
+ if model == 'Midjourney Mix':
127
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Midjourney-Mix-LoRA"
128
+ prompt = f"midjourney mix, {prompt}"
129
+ if model == 'Midjourney Mix 2':
130
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Midjourney-Mix2-LoRA"
131
+ prompt = f"MJ v6, {prompt}"
132
+ if model == 'Flux Logo Design':
133
+ API_URL = "https://api-inference.huggingface.co/models/Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design"
134
+ prompt = f"wablogo, logo, Minimalist, {prompt}"
135
+ if model == 'Flux Uncensored':
136
+ API_URL = "https://api-inference.huggingface.co/models/enhanceaiteam/Flux-uncensored"
137
+ if model == 'Flux Uncensored V2':
138
+ API_URL = "https://api-inference.huggingface.co/models/enhanceaiteam/Flux-Uncensored-V2"
139
+ if model == 'Flux Tarot Cards':
140
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Ton618-Tarot-Cards-Flux-LoRA"
141
+ prompt = f"Tarot card, {prompt}"
142
+ if model == 'Pixel Art Sprites':
143
+ API_URL = "https://api-inference.huggingface.co/models/sWizad/pokemon-trainer-sprites-pixelart-flux"
144
+ prompt = f"a pixel image, {prompt}"
145
+ if model == '3D Sketchfab':
146
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA"
147
+ prompt = f"3D Sketchfab, {prompt}"
148
+ if model == 'Retro Comic Flux':
149
+ API_URL = "https://api-inference.huggingface.co/models/renderartist/retrocomicflux"
150
+ prompt = f"c0m1c, comic book panel, {prompt}"
151
+ if model == 'Caricature':
152
+ API_URL = "https://api-inference.huggingface.co/models/TheAwakenOne/caricature"
153
+ prompt = f"CCTUR3, {prompt}"
154
+ if model == 'Huggieverse':
155
+ API_URL = "https://api-inference.huggingface.co/models/Chunte/flux-lora-Huggieverse"
156
+ prompt = f"HGGRE, {prompt}"
157
+ if model == 'Propaganda Poster':
158
+ API_URL = "https://api-inference.huggingface.co/models/AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion"
159
+ prompt = f"propaganda poster, {prompt}"
160
+ if model == 'Flux Game Assets V2':
161
+ API_URL = "https://api-inference.huggingface.co/models/gokaygokay/Flux-Game-Assets-LoRA-v2"
162
+ prompt = f"wbgmsst, white background, {prompt}"
163
+ if model == 'SDXL HS Card Style':
164
+ API_URL = "https://api-inference.huggingface.co/models/Norod78/sdxl-hearthstone-card-style-lora"
165
+ prompt = f"Hearthstone Card, {prompt}"
166
+ if model == 'SLDR FLUX NSFW v2 Studio':
167
+ API_URL = "https://api-inference.huggingface.co/models/xey/sldr_flux_nsfw_v2-studio"
168
+ if model == 'SoftPasty Flux':
169
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/softpasty-flux-dev"
170
+ prompt = f"araminta_illus illustration style, {prompt}"
171
+ if model == 'Flux Stickers':
172
+ API_URL = "https://api-inference.huggingface.co/models/diabolic6045/Flux_Sticker_Lora"
173
+ prompt = f"5t1cker 5ty1e, {prompt}"
174
+ if model == 'Flux Animex V2':
175
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Animex-v2-LoRA"
176
+ prompt = f"Animex, {prompt}"
177
+ if model == 'Flux Animeo V1':
178
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Animeo-v1-LoRA"
179
+ prompt = f"Animeo, {prompt}"
180
+ if model == 'Movie Board':
181
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Flux.1-Dev-Movie-Boards-LoRA"
182
+ prompt = f"movieboard, {prompt}"
183
+ if model == 'Purple Dreamy':
184
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Purple-Dreamy-Flux-LoRA"
185
+ prompt = f"Purple Dreamy, {prompt}"
186
+ if model == 'PS1 Style Flux':
187
+ API_URL = "https://api-inference.huggingface.co/models/veryVANYA/ps1-style-flux"
188
+ prompt = f"ps1 game screenshot, {prompt}"
189
+ if model == 'Softserve Anime':
190
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/softserve_anime"
191
+ prompt = f"sftsrv style illustration, {prompt}"
192
+ if model == 'Flux Tarot v1':
193
+ API_URL = "https://api-inference.huggingface.co/models/multimodalart/flux-tarot-v1"
194
+ prompt = f"in the style of TOK a trtcrd tarot style, {prompt}"
195
+ if model == 'Half Illustration':
196
+ API_URL = "https://api-inference.huggingface.co/models/davisbro/half_illustration"
197
+ prompt = f"in the style of TOK, {prompt}"
198
+ if model == 'OpenDalle v1.1':
199
+ API_URL = "https://api-inference.huggingface.co/models/dataautogpt3/OpenDalleV1.1"
200
+ if model == 'Flux Ghibsky Illustration':
201
+ API_URL = "https://api-inference.huggingface.co/models/aleksa-codes/flux-ghibsky-illustration"
202
+ prompt = f"GHIBSKY style, {prompt}"
203
+ if model == 'Flux Koda':
204
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/flux-koda"
205
+ prompt = f"flmft style, {prompt}"
206
+ if model == 'Soviet Diffusion XL':
207
+ API_URL = "https://api-inference.huggingface.co/models/openskyml/soviet-diffusion-xl"
208
+ prompt = f"soviet poster, {prompt}"
209
+ if model == 'Flux Realism LoRA':
210
+ API_URL = "https://api-inference.huggingface.co/models/XLabs-AI/flux-RealismLora"
211
+ if model == 'Frosting Lane Flux':
212
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/frosting_lane_flux"
213
+ prompt = f"frstingln illustration, {prompt}"
214
+ if model == 'Phantasma Anime':
215
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/phantasma-anime"
216
+ if model == 'Boreal':
217
+ API_URL = "https://api-inference.huggingface.co/models/kudzueye/Boreal"
218
+ prompt = f"photo, {prompt}"
219
+ if model == 'How2Draw':
220
+ API_URL = "https://api-inference.huggingface.co/models/glif/how2draw"
221
+ prompt = f"How2Draw, {prompt}"
222
+ if model == 'Flux AestheticAnime':
223
+ API_URL = "https://api-inference.huggingface.co/models/dataautogpt3/FLUX-AestheticAnime"
224
+ if model == 'Fashion Hut Modeling LoRA':
225
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Fashion-Hut-Modeling-LoRA"
226
+ prompt = f"Modeling of, {prompt}"
227
+ if model == 'Flux SyntheticAnime':
228
+ API_URL = "https://api-inference.huggingface.co/models/dataautogpt3/FLUX-SyntheticAnime"
229
+ prompt = f"1980s anime screengrab, VHS quality, syntheticanime, {prompt}"
230
+ if model == 'Flux Midjourney Anime':
231
+ API_URL = "https://api-inference.huggingface.co/models/brushpenbob/flux-midjourney-anime"
232
+ prompt = f"egmid, {prompt}"
233
+ if model == 'Coloring Book Generator':
234
+ API_URL = "https://api-inference.huggingface.co/models/robert123231/coloringbookgenerator"
235
+ if model == 'Collage Flux':
236
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Castor-Collage-Dim-Flux-LoRA"
237
+ prompt = f"collage, {prompt}"
238
+ if model == 'Flux Product Ad Backdrop':
239
+ API_URL = "https://api-inference.huggingface.co/models/prithivMLmods/Flux-Product-Ad-Backdrop"
240
+ prompt = f"Product Ad, {prompt}"
241
+ if model == 'Product Design':
242
+ API_URL = "https://api-inference.huggingface.co/models/multimodalart/product-design"
243
+ prompt = f"product designed by prdsgn, {prompt}"
244
+ if model == '90s Anime Art':
245
+ API_URL = "https://api-inference.huggingface.co/models/glif/90s-anime-art"
246
+ if model == 'Brain Melt Acid Art':
247
+ API_URL = "https://api-inference.huggingface.co/models/glif/Brain-Melt-Acid-Art"
248
+ prompt = f"maximalism, in an acid surrealism style, {prompt}"
249
+ if model == 'Lustly Flux Uncensored v1':
250
+ API_URL = "https://api-inference.huggingface.co/models/lustlyai/Flux_Lustly.ai_Uncensored_nsfw_v1"
251
+ if model == 'NSFW Master Flux':
252
+ API_URL = "https://api-inference.huggingface.co/models/Keltezaa/NSFW_MASTER_FLUX"
253
+ prompt = f"NSFW, {prompt}"
254
+ if model == 'Flux Outfit Generator':
255
+ API_URL = "https://api-inference.huggingface.co/models/tryonlabs/FLUX.1-dev-LoRA-Outfit-Generator"
256
+ if model == 'Midjourney':
257
+ API_URL = "https://api-inference.huggingface.co/models/Jovie/Midjourney"
258
+ if model == 'DreamPhotoGASM':
259
+ API_URL = "https://api-inference.huggingface.co/models/Yntec/DreamPhotoGASM"
260
+ if model == 'Flux Super Realism LoRA':
261
+ API_URL = "https://api-inference.huggingface.co/models/strangerzonehf/Flux-Super-Realism-LoRA"
262
+ if model == 'Stable Diffusion 2-1':
263
+ API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-2-1-base"
264
+ if model == 'Stable Diffusion 3.5 Large':
265
+ API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-3.5-large"
266
+ if model == 'Stable Diffusion 3.5 Large Turbo':
267
+ API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-3.5-large-turbo"
268
+ if model == 'Stable Diffusion 3 Medium':
269
+ API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-3-medium-diffusers"
270
+ prompt = f"A, {prompt}"
271
+ if model == 'Duchaiten Real3D NSFW XL':
272
+ API_URL = "https://api-inference.huggingface.co/models/stablediffusionapi/duchaiten-real3d-nsfw-xl"
273
+ if model == 'Pixel Art XL':
274
+ API_URL = "https://api-inference.huggingface.co/models/nerijs/pixel-art-xl"
275
+ prompt = f"pixel art, {prompt}"
276
+ if model == 'Character Design':
277
+ API_URL = "https://api-inference.huggingface.co/models/KappaNeuro/character-design"
278
+ prompt = f"Character Design, {prompt}"
279
+ if model == 'Sketched Out Manga':
280
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/sketchedoutmanga"
281
+ prompt = f"daiton, {prompt}"
282
+ if model == 'Archfey Anime':
283
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/archfey_anime"
284
+ if model == 'Lofi Cuties':
285
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/lofi-cuties"
286
+ if model == 'YiffyMix':
287
+ API_URL = "https://api-inference.huggingface.co/models/Yntec/YiffyMix"
288
+ if model == 'Analog Madness Realistic v7':
289
+ API_URL = "https://api-inference.huggingface.co/models/digiplay/AnalogMadness-realistic-model-v7"
290
+ if model == 'Selfie Photography':
291
+ API_URL = "https://api-inference.huggingface.co/models/artificialguybr/selfiephotographyredmond-selfie-photography-lora-for-sdxl"
292
+ prompt = f"instagram model, discord profile picture, {prompt}"
293
+ if model == 'Filmgrain':
294
+ API_URL = "https://api-inference.huggingface.co/models/artificialguybr/filmgrain-redmond-filmgrain-lora-for-sdxl"
295
+ prompt = f"Film Grain, FilmGrainAF, {prompt}"
296
+ if model == 'Leonardo AI Style Illustration':
297
+ API_URL = "https://api-inference.huggingface.co/models/goofyai/Leonardo_Ai_Style_Illustration"
298
+ prompt = f"leonardo style, illustration, vector art, {prompt}"
299
+ if model == 'Cyborg Style XL':
300
+ API_URL = "https://api-inference.huggingface.co/models/goofyai/cyborg_style_xl"
301
+ prompt = f"cyborg style, {prompt}"
302
+ if model == 'Little Tinies':
303
+ API_URL = "https://api-inference.huggingface.co/models/alvdansen/littletinies"
304
+ if model == 'NSFW XL':
305
+ API_URL = "https://api-inference.huggingface.co/models/Dremmar/nsfw-xl"
306
+ if model == 'Analog Redmond':
307
+ API_URL = "https://api-inference.huggingface.co/models/artificialguybr/analogredmond"
308
+ prompt = f"timeless style, {prompt}"
309
+ if model == 'Pixel Art Redmond':
310
+ API_URL = "https://api-inference.huggingface.co/models/artificialguybr/PixelArtRedmond"
311
+ prompt = f"Pixel Art, {prompt}"
312
+ if model == 'Ascii Art':
313
+ API_URL = "https://api-inference.huggingface.co/models/CiroN2022/ascii-art"
314
+ prompt = f"ascii art, {prompt}"
315
+ if model == 'Analog':
316
+ API_URL = "https://api-inference.huggingface.co/models/Yntec/Analog"
317
+ if model == 'Maple Syrup':
318
+ API_URL = "https://api-inference.huggingface.co/models/Yntec/MapleSyrup"
319
+ if model == 'Perfect Lewd Fantasy':
320
+ API_URL = "https://api-inference.huggingface.co/models/digiplay/perfectLewdFantasy_v1.01"
321
+ if model == 'AbsoluteReality 1.8.1':
322
+ API_URL = "https://api-inference.huggingface.co/models/digiplay/AbsoluteReality_v1.8.1"
323
+ if model == 'Disney':
324
+ API_URL = "https://api-inference.huggingface.co/models/goofyai/disney_style_xl"
325
+ prompt = f"Disney style, {prompt}"
326
+ if model == 'Redmond SDXL':
327
+ API_URL = "https://api-inference.huggingface.co/models/artificialguybr/LogoRedmond-LogoLoraForSDXL-V2"
328
+ if model == 'epiCPhotoGasm':
329
+ API_URL = "https://api-inference.huggingface.co/models/Yntec/epiCPhotoGasm"
330
+ print(f"API URL set to: {API_URL}") # Debug log
331
 
332
  # Define the payload for the request
333
  payload = {
 
344
  }
345
  print(f"Payload: {json.dumps(payload, indent=2)}") # Debug log
346
 
347
+ # Make a request to the API to generate the image
 
 
 
 
 
 
 
 
 
 
 
 
348
  try:
349
+ response = requests.post(API_URL, headers=headers, json=payload, timeout=timeout)
350
  print(f"Response status code: {response.status_code}") # Debug log
351
  except requests.exceptions.RequestException as e:
352
  # Log any request exceptions and raise an error for the user
 
527
 
528
  # Tab for advanced settings
529
  with gr.Tab("Advanced Settings"):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
530
  with gr.Row():
531
  # Textbox for specifying elements to exclude from the image
532
  negative_prompt = gr.Textbox(label="Negative Prompt", placeholder="What should not be in the image", value="(deformed, distorted, disfigured), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, misspellings, typos", lines=3, elem_id="negative-prompt-text-input")
 
551
  # Radio buttons for selecting the sampling method
552
  method = gr.Radio(label="Sampling method", value="DPM++ 2M Karras", choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"])
553
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
554
  # Tab for image editing options
555
  with gr.Tab("Image Editor"):
556
  # Function to simulate a delay for processing
 
608
  """
609
  )
610
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
611
  # Accordion providing an overview of advanced settings
612
  with gr.Accordion("Advanced Settings Overview", open=False):
613
  gr.Markdown(
614
  """
 
 
 
 
 
 
615
  ## Negative Prompt
616
  ###### This box is for telling the AI what you don't want in your images. Think of it as a way to avoid certain elements. For instance, if you don't want blurry images or extra limbs showing up, this is where you'd mention it.
617
 
 
644
  with gr.Row():
645
  image_output = gr.Image(type="pil", label="Image Output", elem_id="gallery")
646
 
647
+ # Set up button click event to call the query function
648
+ text_button.click(query, inputs=[text_prompt, model, custom_lora, negative_prompt, steps, cfg, method, seed, strength, width, height], outputs=image_output)
649
 
650
  print("Launching Gradio interface...") # Debug log
651
  # Launch the Gradio interface without showing the API or sharing externally