Spaces:
Runtime error
Runtime error
| import os | |
| import gradio as gr | |
| import numpy as np | |
| from rembg import remove | |
| import random | |
| from huggingface_hub import AsyncInferenceClient | |
| from translatepy import Translator | |
| from gradio_client import Client, handle_file | |
| from PIL import Image | |
| from huggingface_hub import login | |
| from themes import IndonesiaTheme # Import custom IndonesiaTheme | |
| from loras import loras | |
| MAX_SEED = np.iinfo(np.int32).max | |
| HF_TOKEN = os.getenv('HF_TOKEN_UPSCALER') | |
| HF_TOKEN_UPSCALER = os.getenv('HF_TOKEN_UPSCALER') | |
| qwen_client = Client("K00B404/HugChatWrap",hf_token=HF_TOKEN) | |
| loaded_loras=[] | |
| for lora in loras: | |
| print(lora.get('repo')) | |
| loaded_loras.append(lora.get('repo')) | |
| # Function to enable LoRA if selected | |
| def enable_lora(lora_add, basemodel): | |
| print(f"[-] Determining model: LoRA {'enabled' if lora_add else 'disabled'}, base model: {basemodel}") | |
| return basemodel if not lora_add else lora_add | |
| def generate_character_description(character_prompt, system_message = """ | |
| You are a character description generator. Create detailed, vivid descriptions | |
| of characters including their physical appearance, personality, and notable features. Keep the | |
| description focused on visual elements that could be used for image generation. | |
| """ | |
| ): | |
| """Generate detailed character description using K00B404/HugChatWrap space""" | |
| try: | |
| result = qwen_client.predict( | |
| message=character_prompt, | |
| param_2=system_message, | |
| param_3=100, | |
| param_4=0.9, | |
| param_5=0.99, | |
| api_name="/chat" | |
| ) | |
| return result | |
| except Exception as e: | |
| return f"Error generating description: {str(e)}" | |
| # Function to enable LoRA if selected | |
| def enable_lora(lora_add, basemodel): | |
| print(f"[-] Determining the model: LoRA {'activated' if lora_add else 'not activated'}, model dasar: {basemodel}") | |
| return basemodel if not lora_add else lora_add | |
| # Function to generate image | |
| async def generate_image(prompt, model, lora_word, width, height, scales, steps, seed): | |
| try: | |
| if seed == -1: | |
| seed = random.randint(0, MAX_SEED) | |
| seed = int(seed) | |
| print(f"[-] Menerjemahkan prompt: {prompt}") | |
| text = str(Translator().translate(prompt, 'English')) + "," + lora_word | |
| print(f"[-] Generating image with prompt: {text}, model: {model}") | |
| client = AsyncInferenceClient() | |
| image = await client.text_to_image(prompt=text, height=height, width=width, guidance_scale=scales, num_inference_steps=steps, model=model) | |
| return image, seed | |
| except Exception as e: | |
| print(f"[-] Error generating image: {e}") | |
| return None, None | |
| # Function to upscale image | |
| def get_upscale_finegrain(prompt, img_path, upscale_factor): | |
| try: | |
| print(f"[-] Memulai proses upscaling dengan faktor {upscale_factor} untuk gambar {img_path}") | |
| client = Client("finegrain/finegrain-image-enhancer", hf_token=HF_TOKEN_UPSCALER) | |
| result = client.predict( | |
| input_image=handle_file(img_path), | |
| prompt=prompt, | |
| negative_prompt="worst quality, low quality, normal quality", | |
| upscale_factor=upscale_factor, | |
| controlnet_scale=0.6, | |
| controlnet_decay=1, | |
| condition_scale=6, | |
| denoise_strength=0.35, | |
| num_inference_steps=18, | |
| solver="DDIM", | |
| api_name="/process" | |
| ) | |
| print(f"[-] Proses upscaling berhasil.") | |
| return result[1] # Return upscale image path | |
| except Exception as e: | |
| print(f"[-] Error scaling image: {e}") | |
| return None | |
| # Main function to generate images and optionally upscale | |
| async def gen(prompt, basemodel, width, height, scales, steps, seed, upscale_factor, process_upscale, lora_model, process_lora): | |
| print(f"[-] Memulai generasi gambar dengan prompt: {prompt}") | |
| model = enable_lora(lora_model, basemodel) if process_lora else basemodel | |
| print(f"[-] Menggunakan model: {model}") | |
| image, seed = await generate_image(prompt, model, "", width, height, scales, steps, seed) | |
| if image is None: | |
| print("[-] Image generation failed.") | |
| return [] | |
| image_path = "temp_image.jpg" | |
| print(f"[-] Menyimpan gambar sementara di: {image_path}") | |
| image.save(image_path, format="JPEG") | |
| upscale_image_path = None | |
| if process_upscale: | |
| print(f"[-] Memproses upscaling dengan faktor: {upscale_factor}") | |
| upscale_image_path = get_upscale_finegrain(prompt, image_path, upscale_factor) | |
| if upscale_image_path is not None and os.path.exists(upscale_image_path): | |
| print(f"[-] Proses upscaling selesai. Gambar tersimpan di: {upscale_image_path}") | |
| return [image_path, upscale_image_path] # Return both images | |
| else: | |
| print("[-] Upscaling failed, upscale image path not found") | |
| return [image_path] | |
| # CSS for styling the interface | |
| css = """ | |
| #col-left, #col-mid, #col-right { | |
| margin: 0 auto; | |
| max-width: 400px; | |
| padding: 10px; | |
| border-radius: 15px; | |
| background-color: #f9f9f9; | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); | |
| } | |
| #banner { | |
| width: 100%; | |
| text-align: center; | |
| margin-bottom: 20px; | |
| } | |
| #run-button { | |
| background-color: #ff4b5c; | |
| color: white; | |
| font-weight: bold; | |
| padding: 10px; | |
| border-radius: 10px; | |
| cursor: pointer; | |
| box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
| } | |
| #footer { | |
| text-align: center; | |
| margin-top: 20px; | |
| color: silver; | |
| } | |
| """ | |
| flux_lora_models = [ | |
| "strangerzonehf/Flux-Super-Realism-LoRA", | |
| "prithivMLmods/Flux-Dalle-Mix-LoRA", | |
| "strangerzonehf/Flux-Animeo-v1-LoRA", | |
| "strangerzonehf/Flux-Animex-v2-LoRA", | |
| "strangerzonehf/Flux-Super-Portrait-LoRA", | |
| "strangerzonehf/Flux-Super-Blend-LoRA", | |
| "strangerzonehf/Flux-3DXL-Partfile-0001", | |
| "strangerzonehf/Flux-Midjourney-Mix2-LoRA", | |
| "prithivMLmods/Flux-Long-Toon-LoRA", | |
| "strangerzonehf/Flux-Isometric-3D-Cinematography", | |
| "strangerzonehf/Flux-Cute-3D-Kawaii-LoRA", | |
| "strangerzonehf/Flux-Isometric-3D-LoRA", | |
| "prithivMLmods/Flux-Toonic-2.5D-LoRA", | |
| "strangerzonehf/Flux-YWL-Realism-LoRA", | |
| "prithivMLmods/Flux-Chill-Guy-Zone", | |
| "p1atdev/flux.1-schnell-pvc-style-lora", | |
| "strangerzonehf/Flux-C4C-Design-LoRA", | |
| "prithivMLmods/Purple-Dreamy-Flux-LoRA", | |
| "prithivMLmods/Canopus-LoRA-Flux-FaceRealism", | |
| "alvdansen/softserve_anime", | |
| "prithivMLmods/Fashion-Hut-Modeling-LoRA", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-One-Click-Creative-Template", | |
| "prithivMLmods/Canopus-LoRA-Flux-UltraRealism-2.0", | |
| "gokaygokay/Flux-Game-Assets-LoRA-v2", | |
| "alvdansen/softpasty-flux-dev", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-add-details", | |
| "prithivMLmods/Canopus-LoRA-Flux-Anime", | |
| "aleksa-codes/flux-ghibsky-illustration", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-Dark-Fantasy", | |
| "Norod78/Flux_1_Dev_LoRA_Paper-Cutout-Style", | |
| "alvdansen/mooniverse", | |
| "alvdansen/pola-photo-flux", | |
| "multimodalart/flux-tarot-v1", | |
| "prithivMLmods/Flux-Dev-Real-Anime-LoRA", | |
| "diabolic6045/Flux_Sticker_Lora", | |
| "XLabs-AI/flux-RealismLora", | |
| "alvdansen/flux-koda", | |
| "mgwr/Cine-Aesthetic", | |
| "SebastianBodza/flux_cute3D", | |
| "bingbangboom/flux_dreamscape", | |
| "prithivMLmods/Canopus-Cute-Kawaii-Flux-LoRA", | |
| "Raelina/Flux-Pastel-Anime", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-Vector-Journey", | |
| "bingbangboom/flux-miniature-worlds", | |
| "glif-loradex-trainer/bingbangboom_flux_surf", | |
| "prithivMLmods/Canopus-Snoopy-Charlie-Brown-Flux-LoRA", | |
| "alvdansen/sonny-anime-fixed", | |
| "davisbro/flux-multi-angle", | |
| "glif/how2draw", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-Text-Poster", | |
| "SebastianBodza/Flux_Aquarell_Watercolor_v2", | |
| "Purz/face-projection", | |
| "martintomov/ecom-flux-v2", | |
| "TheAwakenOne/max-headroom", | |
| "renderartist/toyboxflux", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-live-3D", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-Garbage-Bag-Art", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design", | |
| "punzel/flux_sadie_sink", | |
| "punzel/flux_jenna_ortega", | |
| "Wakkamaruh/balatro-poker-cards", | |
| "lichorosario/flux-cubist-cartoon", | |
| "iliketoasters/miniature-people", | |
| "ampp/rough-kids-illustrations", | |
| "lichorosario/flux-lora-tstvctr", | |
| "lichorosario/flux-lora-gliff-tosti-vector-no-captions-2500s", | |
| "AlekseyCalvin/Propaganda_Poster_Schnell_by_doctor_diffusion", | |
| "WizWhite/Wiz-PunchOut_Ringside_Portrait", | |
| "glif-loradex-trainer/kklors_flux_dev_long_exposure", | |
| "DamarJati/streetwear-flux", | |
| "strangerzonehf/Flux-NTFv4-Designs-LoRA", | |
| "multimodalart/product-design", | |
| "prithivMLmods/Canopus-LoRA-Flux-Typography-ASCII", | |
| "mateo-19182/mosoco", | |
| "jakedahn/flux-latentpop", | |
| "glif-loradex-trainer/ddickinson_dstyl3xl", | |
| "TDN-M/RetouchFLux", | |
| "glif/anime-blockprint-style", | |
| "renderartist/weirdthingsflux", | |
| "lucataco/ReplicateFluxLoRA", | |
| "alvdansen/haunted_linework_flux", | |
| "fofr/flux-cassette-futurism", | |
| "Wadaka/Mojo_Style_LoRA", | |
| "Norod78/JojosoStyle-flux-lora", | |
| "Chunte/flux-lora-Huggieverse", | |
| "diabolic6045/Flux_Wallpaper_Lora", | |
| "bingbangboom/flux_geopop", | |
| "bingbangboom/flux_colorscape", | |
| "dvyio/flux-lora-thermal-image", | |
| "prithivMLmods/Canopus-Clothing-Flux-LoRA", | |
| "dvyio/flux-lora-stippled-illustration", | |
| "wayned/fruitlabels", | |
| "punzel/flux_margot_robbie", | |
| "glif/Brain-Melt-Acid-Art", | |
| "jeremytai/enso-zen", | |
| "veryVANYA/opus-ascii-flux", | |
| "crystantine/cybrpnkz", | |
| "fyp1/pattern_generation", | |
| "TheAwakenOne/caricature", | |
| "strangerzonehf/Flux-3DXL-Partfile-C0001", | |
| "Purz/neon-sign", | |
| "WizWhite/wizard-s-vintage-sardine-tins", | |
| "TheAwakenOne/mtdp-balloon-character", | |
| "glif/golden-haggadah", | |
| "glif-loradex-trainer/usernametaken420__oz_ftw_balaclava", | |
| "AlloReview/flux-lora-undraw", | |
| "Disra/lora-anime-test-02", | |
| "wanghaofan/Black-Myth-Wukong-FLUX-LoRA", | |
| "nerijs/pastelcomic-flux", | |
| "RareConcepts/Flux.1-dev-LoKr-Moonman", | |
| "martintomov/ascii-flux-v1", | |
| "Omarito2412/Stars-Galaxy-Flux", | |
| "brushpenbob/flux-pencil-v2", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-Children-Simple-Sketch", | |
| "victor/contemporarink", | |
| "wavymulder/OverlordStyleFLUX", | |
| "marceloxp/canny-quest", | |
| "busetolunay/building_flux_lora_v1", | |
| "Omarito2412/Tinker-Bell-Flux", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-playful-metropolis", | |
| "prithivMLmods/Castor-Character-Polygon-Flux-LoRA", | |
| "prithivMLmods/Castor-Gta6-Theme-Flux-LoRA", | |
| "prithivMLmods/Castor-Flux-Concept-Gta6-Character-Design", | |
| "prithivMLmods/Castor-3D-Sketchfab-Flux-LoRA", | |
| "prithivMLmods/Castor-Collage-Dim-Flux-LoRA", | |
| "brushpenbob/flux-midjourney-anime", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-add-details", | |
| "XLabs-AI/flux-RealismLora", | |
| "prashanth970/flux-lora-uncensored" | |
| ] | |
| # Creating Gradio interface | |
| with gr.Blocks(css=css, theme=IndonesiaTheme()) as WallpaperFluxMaker: | |
| # Displaying the application title | |
| gr.HTML('<div id="banner">✨ Flux MultiMode Generator + Upscaler ✨</div>') | |
| with gr.Column(elem_id="col-container"): | |
| # Output section (replacing ImageSlider with gr.Gallery) | |
| with gr.Row(): | |
| output_res = gr.Gallery(label="⚡ Flux / Upscaled Image ⚡", elem_id="output-res", columns=2, height="auto") | |
| # User input section split into two columns | |
| with gr.Row(): | |
| # Column 1: Input prompt, LoRA, and base model | |
| with gr.Column(scale=1, elem_id="col-left"): | |
| prompt = gr.Textbox( | |
| label="📜 Describe the image", | |
| placeholder="Write your prompt in any language, and it will be directly translated into English..", | |
| elem_id="textbox-prompt" | |
| ) | |
| basemodel_choice = gr.Dropdown( | |
| label="🖼️ Select Model", | |
| choices=[ | |
| "black-forest-labs/FLUX.1-schnell", | |
| "black-forest-labs/FLUX.1-DEV", | |
| "enhanceaiteam/Flux-uncensored", | |
| "Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro", | |
| "Shakker-Labs/FLUX.1-dev-LoRA-add-details", | |
| "city96/FLUX.1-dev-gguf", | |
| "city96/FLUX.1-schnell-gguf" | |
| ], | |
| value="city96/FLUX.1-dev-gguf" | |
| ) | |
| lora_model_choice = gr.Dropdown( | |
| label="🎨 Select LoRA", | |
| choices=sorted(flux_lora_models), | |
| value="XLabs-AI/flux-RealismLora" | |
| ) | |
| process_lora = gr.Checkbox(label="🎨 Use LoRA") | |
| process_upscale = gr.Checkbox(label="🔍 Enable Resolution Enhancement") | |
| upscale_factor = gr.Radio(label="🔍Upscale factor", choices=[2, 4, 8], value=2) | |
| # Column 2: Advanced options (always open) | |
| with gr.Column(scale=1, elem_id="col-right"): | |
| with gr.Accordion(label="⚙️ Advanced Options", open=True): | |
| width = gr.Slider(label="Width", minimum=512, maximum=1280, step=8, value=1280) | |
| height = gr.Slider(label="Height", minimum=512, maximum=1280, step=8, value=768) | |
| scales = gr.Slider(label="Scale", minimum=1, maximum=20, step=1, value=8) | |
| steps = gr.Slider(label="Steps", minimum=1, maximum=100, step=1, value=8) | |
| seed = gr.Number(label="Seed", value=-1) | |
| # Button to generate image | |
| btn = gr.Button("🚀Generate Image", elem_id="generate-btn") | |
| # Running the `gen` function when "Generate" button is pressed | |
| btn.click(fn=gen, inputs=[ | |
| prompt, basemodel_choice, width, height, scales, steps, seed, upscale_factor, process_upscale, lora_model_choice, process_lora | |
| ], outputs=output_res) | |
| # Launching the Gradio app | |
| WallpaperFluxMaker.queue(api_open=True).launch(show_api=True) |