akhaliq HF Staff commited on
Commit
9a223bb
·
verified ·
1 Parent(s): 173c4b5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +612 -6
app.py CHANGED
@@ -1,8 +1,614 @@
1
- **Fixed Issues:**
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- 1. **Removed invalid theme parameter**: Removed `button_primary_background_fill_active` which doesn't exist in Gradio 6's theme system
4
- 2. **Maintained Gradio 6 syntax**: All parameters correctly placed in `demo.launch()` instead of `gr.Blocks()`
5
- 3. **Preserved Apple-style design**: The theme still maintains the clean Apple aesthetic with proper color scheme
6
- 4. **Kept all functionality**: The app should now run without the theme error
7
 
8
- The error was caused by using an invalid parameter name in the theme customization. Gradio 6 has specific parameter names for theme customization, and `button_primary_background_fill_active` is not one of them. The corrected code removes this parameter while maintaining all other theme customizations.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+ import torch, random, json, spaces, time
4
+ from ulid import ULID
5
+ from diffsynth.pipelines.qwen_image import (
6
+ QwenImagePipeline, ModelConfig,
7
+ QwenImageUnit_Image2LoRAEncode, QwenImageUnit_Image2LoRADecode
8
+ )
9
+ from safetensors.torch import save_file
10
+ import torch
11
+ from PIL import Image
12
+ from utils import repo_utils, image_utils, prompt_utils
13
 
 
 
 
 
14
 
15
+ # repo_utils.clone_repo_if_not_exists("git clone https://huggingface.co/DiffSynth-Studio/General-Image-Encoders", "app/repos")
16
+ # repo_utils.clone_repo_if_not_exists("https://huggingface.co/apple/starflow", "app/models")
17
+
18
+ URL_PUBLIC = "https://huggingface.co/spaces/AiSudo/Qwen-Image-to-LoRA/blob/main"
19
+ DTYPE = torch.bfloat16
20
+ MAX_SEED = np.iinfo(np.int32).max
21
+
22
+ vram_config_disk_offload = {
23
+ "offload_dtype": "disk",
24
+ "offload_device": "disk",
25
+ "onload_dtype": "disk",
26
+ "onload_device": "disk",
27
+ "preparing_dtype": torch.bfloat16,
28
+ "preparing_device": "cuda",
29
+ "computation_dtype": torch.bfloat16,
30
+ "computation_device": "cuda",
31
+ }
32
+
33
+ # Load models
34
+ pipe_lora = QwenImagePipeline.from_pretrained(
35
+ torch_dtype=torch.bfloat16,
36
+ device="cuda",
37
+ model_configs=[
38
+ ModelConfig(
39
+ download_source="huggingface",
40
+ model_id="DiffSynth-Studio/General-Image-Encoders",
41
+ origin_file_pattern="SigLIP2-G384/model.safetensors",
42
+ **vram_config_disk_offload
43
+ ),
44
+ ModelConfig(
45
+ download_source="huggingface",
46
+ model_id="DiffSynth-Studio/General-Image-Encoders",
47
+ origin_file_pattern="DINOv3-7B/model.safetensors",
48
+ **vram_config_disk_offload
49
+ ),
50
+ ModelConfig(
51
+ download_source="huggingface",
52
+ model_id="DiffSynth-Studio/Qwen-Image-i2L",
53
+ origin_file_pattern="Qwen-Image-i2L-Style.safetensors",
54
+ **vram_config_disk_offload
55
+ ),
56
+ ],
57
+ processor_config=ModelConfig(model_id="Qwen/Qwen-Image-Edit", origin_file_pattern="processor/"),
58
+ vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5,
59
+ )
60
+
61
+ vram_config = {
62
+ "offload_dtype": "disk",
63
+ "offload_device": "disk",
64
+ "onload_dtype": torch.bfloat16,
65
+ "onload_device": "cuda",
66
+ "preparing_dtype": torch.bfloat16,
67
+ "preparing_device": "cuda",
68
+ "computation_dtype": torch.bfloat16,
69
+ "computation_device": "cuda",
70
+ }
71
+
72
+ pipe_imagen = QwenImagePipeline.from_pretrained(
73
+ torch_dtype=torch.bfloat16,
74
+ device="cuda",
75
+ model_configs=[
76
+ ModelConfig(download_source="huggingface", model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config),
77
+ ModelConfig(download_source="huggingface", model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config),
78
+ ModelConfig(download_source="huggingface", model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config),
79
+ ],
80
+ tokenizer_config=ModelConfig(download_source="huggingface", model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"),
81
+ vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5,
82
+ )
83
+
84
+
85
+ @spaces.GPU
86
+ def generate_lora(
87
+ input_images,
88
+ progress=gr.Progress(track_tqdm=True),
89
+ ):
90
+
91
+ ulid = str(ULID()).lower()[:12]
92
+ print(f"ulid: {ulid}")
93
+
94
+ if not input_images:
95
+ print("images are empty.")
96
+ return False
97
+
98
+ input_images = [Image.open(filepath).convert("RGB") for filepath, _ in input_images]
99
+
100
+ # Model inference
101
+ with torch.no_grad():
102
+ embs = QwenImageUnit_Image2LoRAEncode().process(pipe_lora, image2lora_images=input_images)
103
+ lora = QwenImageUnit_Image2LoRADecode().process(pipe_lora, **embs)["lora"]
104
+
105
+ lora_name = f"{ulid}.safetensors"
106
+ lora_path = f"loras/{lora_name}"
107
+
108
+ save_file(lora, lora_path)
109
+
110
+ return lora_name, gr.update(interactive=True, value=lora_path), gr.update(interactive=True)
111
+
112
+ @spaces.GPU
113
+ def generate_image(
114
+ lora_name,
115
+ prompt,
116
+ negative_prompt="blurry ugly bad",
117
+ width=1024,
118
+ height=1024,
119
+ seed=42,
120
+ randomize_seed=True,
121
+ guidance_scale=3.5,
122
+ num_inference_steps=8,
123
+ progress=gr.Progress(track_tqdm=True),
124
+ ):
125
+ lora_path = f"loras/{lora_name}"
126
+ pipe_imagen.clear_lora()
127
+ pipe_imagen.load_lora(pipe_imagen.dit, lora_path)
128
+
129
+ if randomize_seed:
130
+ seed = random.randint(0, MAX_SEED)
131
+
132
+ generator = torch.Generator().manual_seed(seed)
133
+
134
+ output_image = pipe_imagen(
135
+ prompt=prompt,
136
+ negative_prompt=negative_prompt,
137
+ num_inference_steps=num_inference_steps,
138
+ width=width,
139
+ height=height,
140
+ # generator=generator,
141
+ # true_cfg_scale=guidance_scale,
142
+ # guidance_scale=1.0 # Use a fixed default for distilled guidance
143
+ )
144
+
145
+ return output_image, seed
146
+
147
+ return True
148
+
149
+
150
+ def read_file(path: str) -> str:
151
+ with open(path, 'r', encoding='utf-8') as f:
152
+ content = f.read()
153
+ return content
154
+
155
+ # Enhanced Apple-style CSS - more minimalist and clean
156
+ css = """
157
+ /* Pure Apple Design System */
158
+ .gradio-container {
159
+ font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", Helvetica, Arial, sans-serif !important;
160
+ background: #ffffff !important;
161
+ color: #1d1d1f !important;
162
+ line-height: 1.47059 !important;
163
+ font-weight: 400 !important;
164
+ letter-spacing: -.022em !important;
165
+ }
166
+
167
+ #col-container {
168
+ margin: 0 auto;
169
+ max-width: 980px;
170
+ padding: 40px 20px;
171
+ }
172
+
173
+ /* Ultra-minimalist header */
174
+ .gradio-container .gr-block-header {
175
+ background: transparent !important;
176
+ border: none !important;
177
+ padding: 0 !important;
178
+ margin-bottom: 60px !important;
179
+ box-shadow: none !important;
180
+ }
181
+
182
+ .gradio-container h1 {
183
+ font-weight: 600 !important;
184
+ font-size: 3rem !important;
185
+ color: #1d1d1f !important;
186
+ text-align: center !important;
187
+ margin-bottom: 16px !important;
188
+ letter-spacing: -.003em !important;
189
+ }
190
+
191
+ .gradio-container .subtitle {
192
+ font-size: 1.25rem !important;
193
+ font-weight: 400 !important;
194
+ color: #6e6e73 !important;
195
+ text-align: center !important;
196
+ margin-bottom: 8px !important;
197
+ line-height: 1.4 !important;
198
+ }
199
+
200
+ /* Clean card sections */
201
+ .section-card {
202
+ background: #f2f2f7 !important;
203
+ border-radius: 18px !important;
204
+ padding: 32px !important;
205
+ margin-bottom: 32px !important;
206
+ border: none !important;
207
+ box-shadow: none !important;
208
+ }
209
+
210
+ /* Apple-style buttons */
211
+ .gradio-container .gr-button {
212
+ background: #007aff !important;
213
+ border: none !important;
214
+ border-radius: 8px !important;
215
+ color: white !important;
216
+ font-weight: 500 !important;
217
+ font-size: 17px !important;
218
+ padding: 16px 32px !important;
219
+ min-height: 44px !important;
220
+ transition: all 0.15s ease !important;
221
+ box-shadow: none !important;
222
+ letter-spacing: -.022em !important;
223
+ }
224
+
225
+ .gradio-container .gr-button:hover {
226
+ background: #0051d5 !important;
227
+ transform: none !important;
228
+ box-shadow: none !important;
229
+ }
230
+
231
+ .gradio-container .gr-button:active {
232
+ background: #004bb8 !important;
233
+ transform: scale(0.98) !important;
234
+ }
235
+
236
+ /* Clean input fields */
237
+ .gradio-container .gr-textbox,
238
+ .gradio-container .gr-slider {
239
+ background: #ffffff !important;
240
+ border: 1px solid #d2d2d7 !important;
241
+ border-radius: 10px !important;
242
+ padding: 12px 16px !important;
243
+ font-size: 17px !important;
244
+ color: #1d1d1f !important;
245
+ transition: all 0.15s ease !important;
246
+ min-height: 44px !important;
247
+ }
248
+
249
+ .gradio-container .gr-textbox:focus,
250
+ .gradio-container .gr-slider:focus {
251
+ border-color: #007aff !important;
252
+ box-shadow: 0 0 0 3px rgba(0, 122, 255, 0.1) !important;
253
+ outline: none !important;
254
+ }
255
+
256
+ /* Gallery styling */
257
+ .gradio-container .gr-gallery {
258
+ border-radius: 12px !important;
259
+ border: 1px solid #d2d2d7 !important;
260
+ background: #ffffff !important;
261
+ overflow: hidden !important;
262
+ }
263
+
264
+ /* Image output */
265
+ .gradio-container .gr-image {
266
+ border-radius: 12px !important;
267
+ border: 1px solid #d2d2d7 !important;
268
+ background: #ffffff !important;
269
+ overflow: hidden !important;
270
+ }
271
+
272
+ /* Accordion - Apple style */
273
+ .gradio-container .gr-accordion {
274
+ background: #f2f2f7 !important;
275
+ border: none !important;
276
+ border-radius: 12px !important;
277
+ padding: 0 !important;
278
+ margin-top: 24px !important;
279
+ }
280
+
281
+ .gradio-container .gr-accordion .gr-accordion-button {
282
+ background: transparent !important;
283
+ border: none !important;
284
+ padding: 16px !important;
285
+ font-weight: 500 !important;
286
+ color: #1d1d1f !important;
287
+ }
288
+
289
+ /* Download button */
290
+ .gradio-container .gr-download-button {
291
+ background: #34c759 !important;
292
+ border: none !important;
293
+ border-radius: 8px !important;
294
+ color: white !important;
295
+ font-weight: 500 !important;
296
+ font-size: 17px !important;
297
+ padding: 16px 32px !important;
298
+ min-height: 44px !important;
299
+ }
300
+
301
+ .gradio-container .gr-download-button:hover {
302
+ background: #30a14a !important;
303
+ }
304
+
305
+ /* Checkbox styling */
306
+ .gradio-container .gr-checkbox {
307
+ background: #ffffff !important;
308
+ border: 2px solid #d2d2d7 !important;
309
+ border-radius: 6px !important;
310
+ width: 24px !important;
311
+ height: 24px !important;
312
+ }
313
+
314
+ .gradio-container .gr-checkbox.checked {
315
+ background: #007aff !important;
316
+ border-color: #007aff !important;
317
+ }
318
+
319
+ /* Examples section */
320
+ .gradio-container .gr-examples {
321
+ background: #f2f2f7 !important;
322
+ border-radius: 18px !important;
323
+ padding: 24px !important;
324
+ border: none !important;
325
+ }
326
+
327
+ /* Label styling */
328
+ .gradio-container .gr-label {
329
+ font-weight: 600 !important;
330
+ color: #1d1d1f !important;
331
+ font-size: 17px !important;
332
+ margin-bottom: 8px !important;
333
+ letter-spacing: -.022em !important;
334
+ }
335
+
336
+ /* Mobile responsiveness */
337
+ @media (max-width: 768px) {
338
+ #col-container {
339
+ padding: 20px 16px !important;
340
+ max-width: 100% !important;
341
+ }
342
+
343
+ .gradio-container h1 {
344
+ font-size: 2rem !important;
345
+ margin-bottom: 12px !important;
346
+ }
347
+
348
+ .gradio-container .subtitle {
349
+ font-size: 1.1rem !important;
350
+ }
351
+
352
+ .section-card {
353
+ padding: 24px !important;
354
+ margin-bottom: 24px !important;
355
+ }
356
+
357
+ .gradio-container .gr-button {
358
+ padding: 14px 28px !important;
359
+ font-size: 16px !important;
360
+ }
361
+
362
+ .gradio-container .gr-gallery {
363
+ height: 200px !important;
364
+ columns: 2 !important;
365
+ }
366
+
367
+ .gradio-container .gr-row {
368
+ flex-direction: column !important;
369
+ gap: 20px !important;
370
+ }
371
+ }
372
+
373
+ @media (max-width: 480px) {
374
+ .gradio-container h1 {
375
+ font-size: 1.75rem !important;
376
+ }
377
+
378
+ .section-card {
379
+ padding: 20px !important;
380
+ }
381
+
382
+ .gradio-container .gr-gallery {
383
+ height: 180px !important;
384
+ columns: 1 !important;
385
+ }
386
+ }
387
+
388
+ /* Remove all animations for Apple-like snappiness */
389
+ .gradio-container * {
390
+ transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease !important;
391
+ }
392
+
393
+ /* Hide unnecessary elements */
394
+ .gradio-container .gr-footer,
395
+ .gradio-container .gr-header {
396
+ display: none !important;
397
+ }
398
+
399
+ /* Clean scrollbar */
400
+ .gradio-container ::-webkit-scrollbar {
401
+ width: 3px !important;
402
+ }
403
+
404
+ .gradio-container ::-webkit-scrollbar-track {
405
+ background: transparent !important;
406
+ }
407
+
408
+ .gradio-container ::-webkit-scrollbar-thumb {
409
+ background: #d2d2d7 !important;
410
+ border-radius: 3px !important;
411
+ }
412
+
413
+ .gradio-container ::-webkit-scrollbar-thumb:hover {
414
+ background: #007aff !important;
415
+ }
416
+ """
417
+
418
+
419
+
420
+ with open('examples/0_examples.json', 'r') as file: examples = json.load(file)
421
+ print(examples)
422
+
423
+ # Gradio 6 syntax - no parameters in Blocks()
424
+ with gr.Blocks() as demo:
425
+ with gr.Column(elem_id="col-container"):
426
+ with gr.Column():
427
+ # Ultra-minimalist Apple-style header
428
+ gr.HTML("""
429
+ <div style="text-align: center; max-width: 600px; margin: 0 auto;">
430
+ <h1>Qwen Image to LoRA</h1>
431
+ <p class="subtitle">Generate custom LoRA models from your images</p>
432
+ <p style="font-size: 14px; color: #86868b; margin-top: 16px;">
433
+ Demo by <a href="https://aisudo.com/" target="_blank" style="color: #007aff; text-decoration: none;">AiSudo</a> •
434
+ <a href="https://huggingface.co/spaces/akhaliq/anycoder" target="_blank" style="color: #007aff; text-decoration: none;">Built with anycoder</a>
435
+ </p>
436
+ </div>
437
+ """)
438
+
439
+ with gr.Row():
440
+ with gr.Column(elem_classes=["section-card"]):
441
+ input_images = gr.Gallery(
442
+ label="Input Images",
443
+ file_types=["image"],
444
+ show_label=True,
445
+ columns=2,
446
+ object_fit="cover",
447
+ height=250)
448
+
449
+ lora_button = gr.Button("Generate LoRA", size="lg")
450
+
451
+ with gr.Column(elem_classes=["section-card"]):
452
+ lora_name = gr.Textbox(
453
+ label="Generated LoRA",
454
+ lines=2,
455
+ interactive=False,
456
+ placeholder="Your LoRA will appear here..."
457
+ )
458
+ lora_download = gr.DownloadButton(
459
+ label="Download LoRA",
460
+ interactive=False,
461
+ size="lg"
462
+ )
463
+
464
+ with gr.Column(elem_classes=["section-card"]) as imagen_container:
465
+ gr.Markdown("### Generate Images")
466
+ with gr.Row():
467
+ with gr.Column():
468
+ prompt = gr.Textbox(
469
+ label="Prompt",
470
+ lines=2,
471
+ placeholder="Describe what you want to generate...",
472
+ value="a person in a fishing boat.",
473
+ )
474
+
475
+ imagen_button = gr.Button("Generate Image", interactive=False, size="lg")
476
+
477
+ with gr.Accordion("Settings", open=False):
478
+ negative_prompt = gr.Textbox(
479
+ label="Negative Prompt",
480
+ lines=1,
481
+ placeholder="What to avoid...",
482
+ value="blurry, low quality"
483
+ )
484
+ num_inference_steps = gr.Slider(
485
+ label="Steps",
486
+ minimum=1,
487
+ maximum=50,
488
+ step=1,
489
+ value=25,
490
+ )
491
+ guidance_scale = gr.Slider(
492
+ label="Guidance Scale",
493
+ minimum=1.0,
494
+ maximum=10.0,
495
+ step=0.1,
496
+ value=3.5,
497
+ )
498
+ with gr.Row():
499
+ width = gr.Slider(
500
+ label="Width",
501
+ minimum=512,
502
+ maximum=1280,
503
+ step=32,
504
+ value=768,
505
+ )
506
+ height = gr.Slider(
507
+ label="Height",
508
+ minimum=512,
509
+ maximum=1280,
510
+ step=32,
511
+ value=1024,
512
+ )
513
+ seed = gr.Slider(
514
+ label="Seed",
515
+ minimum=0,
516
+ maximum=MAX_SEED,
517
+ step=1,
518
+ value=42,
519
+ )
520
+ randomize_seed = gr.Checkbox(label="Randomize Seed", value=False)
521
+
522
+ with gr.Column():
523
+ output_image = gr.Image(
524
+ label="Generated Image",
525
+ height=350
526
+ )
527
+
528
+ gr.Examples(
529
+ examples=examples,
530
+ inputs=[input_images],
531
+ label="Examples"
532
+ )
533
+ gr.Markdown(read_file("static/footer.md"))
534
+
535
+ lora_button.click(
536
+ fn=generate_lora,
537
+ inputs=[
538
+ input_images
539
+ ],
540
+ outputs=[lora_name, lora_download, imagen_button],
541
+ api_visibility="public"
542
+ )
543
+ imagen_button.click(
544
+ fn=generate_image,
545
+ inputs=[
546
+ lora_name,
547
+ prompt,
548
+ negative_prompt,
549
+ width,
550
+ height,
551
+ seed,
552
+ randomize_seed,
553
+ guidance_scale,
554
+ num_inference_steps,
555
+ ],
556
+ outputs=[output_image, seed],
557
+ api_visibility="public"
558
+ )
559
+
560
+
561
+ if __name__ == "__main__":
562
+ # Gradio 6 syntax - all launch parameters go here
563
+ demo.launch(
564
+ css=css, # Moved from Blocks() to launch() - Gradio 6 syntax
565
+ mcp_server=True,
566
+ theme=gr.themes.Base(
567
+ primary_hue="blue",
568
+ secondary_hue="gray",
569
+ neutral_hue="gray",
570
+ font=[
571
+ gr.themes.GoogleFont("Inter"),
572
+ "ui-sans-serif",
573
+ "system-ui",
574
+ "sans-serif"
575
+ ],
576
+ font_mono=[
577
+ gr.themes.GoogleFont("JetBrains Mono"),
578
+ "ui-monospace",
579
+ "Consolas",
580
+ "monospace"
581
+ ]
582
+ ).set(
583
+ body_background_fill="white",
584
+ body_background_fill_dark="#000000",
585
+ button_primary_background_fill="#007aff",
586
+ button_primary_background_fill_hover="#0051d5",
587
+ button_primary_text_color="white",
588
+ button_secondary_background_fill="#f2f2f7",
589
+ button_secondary_background_fill_hover="#e5e5ea",
590
+ block_background_fill="white",
591
+ block_background_fill_dark="#1c1c1e",
592
+ block_border_width="0px",
593
+ block_border_color="#d2d2d7",
594
+ block_border_color_dark="#38383a",
595
+ block_radius="18px",
596
+ block_shadow="none",
597
+ block_label_text_color="#1d1d1f",
598
+ block_label_text_color_dark="#f2f2f2",
599
+ block_title_text_color="#1d1d1f",
600
+ block_title_text_color_dark="#f2f2f2",
601
+ input_background_fill="white",
602
+ input_background_fill_dark="#1c1c1e",
603
+ input_border_color="#d2d2d7",
604
+ input_border_color_dark="#38383a",
605
+ input_border_width="1px",
606
+ input_radius="10px",
607
+ input_shadow="none",
608
+ input_text_color="#1d1d1f",
609
+ input_text_color_dark="#f2f2f2",
610
+ ),
611
+ footer_links=[
612
+ {"label": "Built with anycoder", "url": "https://huggingface.co/spaces/akhaliq/anycoder"}
613
+ ]
614
+ )