| import gradio as gr |
| import requests |
| import time |
| import base64 |
| import urllib.parse |
| import random |
| import os |
| from io import BytesIO |
| from PIL import Image |
| from gradio_client import Client |
| import concurrent.futures |
|
|
| |
| |
| |
| KEYS = { |
| "segmind": "SG_8d03bc9ab924555c", |
| "getimg": "sk_6bdYCHa5p3E3dFJKIFuQI_8788b3203803717ab8980138a9a13625f1b4bc2419322bf1ad5e593a6734add2", |
| "google": "AIzaSyBdEqDB6SFI2uQ-5FBr-cCeRj-dkiv8pFY", |
| "stablehorde": "56kkbwcSPfHIr2YsDkpNDQ", |
| "modelslab": "42zL3I6pH7Mv94jhNf4RGyuKGGT3GoEhfXZv47WwmQsfyhgC8XNttfOpvMKL", |
| |
| |
| "huggingface": os.environ.get("HF_TOKEN") |
| } |
|
|
| HEADERS_DEFAULT = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"} |
|
|
| def get_image_from_url(url): |
| res = requests.get(url, headers=HEADERS_DEFAULT, timeout=15) |
| if res.status_code == 200: return Image.open(BytesIO(res.content)) |
| raise Exception(f"URL Error {res.status_code}") |
|
|
| |
| |
| |
| def generate_hercai(p, w, h, ar): |
| url = f"https://hercai.onrender.com/v3/text2image?prompt={urllib.parse.quote(p)}" |
| res = requests.get(url, headers=HEADERS_DEFAULT, timeout=15) |
| if res.status_code == 200: return get_image_from_url(res.json().get("url")) |
| raise Exception("Hercai Error") |
|
|
| def generate_pollinations(p, w, h, ar): |
| url = f"https://image.pollinations.ai/prompt/{urllib.parse.quote(p)}?width={w}&height={h}&nologo=true" |
| res = requests.get(url, headers=HEADERS_DEFAULT, timeout=15) |
| if res.status_code == 200: return Image.open(BytesIO(res.content)) |
| raise Exception("Pollinations Error") |
|
|
| def generate_google_imagen(p, w, h, ar): |
| res = requests.post(f"https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-001:predict?key={KEYS['google']}", json={"instances": [{"prompt": p}]}, timeout=15) |
| if res.status_code == 200: return Image.open(BytesIO(base64.b64decode(res.json()['predictions'][0]['bytesBase64Encoded']))) |
| raise Exception("Google Error") |
|
|
| def generate_segmind(p, w, h, ar): |
| res = requests.post("https://api.segmind.com/v1/sdxl1.0-txt2img", headers={"x-api-key": KEYS['segmind']}, json={"prompt": p, "samples": 1, "width": w, "height": h}, timeout=15) |
| if res.status_code == 200: return Image.open(BytesIO(res.content)) |
| raise Exception("Segmind Error") |
|
|
| def generate_getimg(p, w, h, ar): |
| res = requests.post("https://api.getimg.ai/v1/essential/text-to-image", headers={"Authorization": f"Bearer {KEYS['getimg']}"}, json={"prompt": p, "width": w, "height": h}, timeout=15) |
| if res.status_code == 200: return Image.open(BytesIO(base64.b64decode(res.json()["image"]))) |
| raise Exception("GetImg Error") |
|
|
| def generate_modelslab(p, w, h, ar): |
| res = requests.post("https://modelslab.com/api/v6/images/text2img", json={"key": KEYS['modelslab'], "prompt": p, "width": str(w), "height": str(h)}, timeout=15) |
| if res.status_code == 200 and "output" in res.json(): return get_image_from_url(res.json()["output"][0]) |
| raise Exception("ModelsLab Error") |
|
|
| def generate_stable_horde(p, w, h, ar): |
| res = requests.post("https://stablehorde.net/api/v2/generate/async", headers={"apikey": KEYS['stablehorde']}, json={"prompt": p, "params": {"n": 1, "width": 512, "height": 512}}, timeout=10) |
| if res.status_code == 202: |
| job_id = res.json()['id'] |
| for _ in range(8): |
| time.sleep(2) |
| check = requests.get(f"https://stablehorde.net/api/v2/generate/status/{job_id}", timeout=10) |
| if check.status_code == 200 and check.json().get("done", False): return get_image_from_url(check.json()['generations'][0]['img']) |
| raise Exception("Horde Timeout") |
|
|
| def generate_hf_api(prompt, model_id, w, h): |
| url = f"https://api-inference.huggingface.co/models/{model_id}" |
| headers = {"Authorization": f"Bearer {KEYS['huggingface']}"} if KEYS.get('huggingface') else {} |
| payload = {"inputs": prompt, "parameters": {"width": w, "height": h}} |
| res = requests.post(url, headers=headers, json=payload, timeout=20) |
| |
| if res.status_code != 200: |
| res = requests.post(url, headers=headers, json={"inputs": prompt}, timeout=20) |
| |
| if res.status_code == 200: return Image.open(BytesIO(res.content)) |
| raise Exception(f"HF Rate Limit") |
|
|
| |
| |
| |
| ALL_APIS = { |
| "Pollinations AI (Unlimited)": generate_pollinations, |
| "Hercai AI (Unlimited)": generate_hercai, |
| "Google Imagen (Daily)": generate_google_imagen, |
| "Segmind (Daily)": generate_segmind, |
| "GetImg AI (Monthly)": generate_getimg, |
| "ModelsLab (Daily)": generate_modelslab, |
| "Stable Horde (Unlimited)": generate_stable_horde |
| } |
|
|
| hf_models_list = [ |
| ("DreamShaper XL", "Lykon/dreamshaper-xl-1.0"), ("RealVisXL V4.0", "SG161222/RealVisXL_V4.0"), ("OpenJourney", "prompthero/openjourney"), |
| ("Midjourney V4", "prompthero/midjourney-v4-diffusion"), ("Animagine XL 3.1", "cagliostrolab/animagine-xl-3.1"), ("Playground v2.5", "playgroundai/playground-v2.5-1024px-aesthetic"), |
| ("Realistic Vision V5", "SG161222/Realistic_Vision_V5.1_noVAE"), ("Anything V5", "stablediffusionapi/anything-v5"), ("Anything V4", "andite/anything-v4.0"), |
| ("Anything V3", "Linaqruf/anything-v3.0"), ("Waifu Diffusion", "hakurei/waifu-diffusion"), ("Disney Pixar", "stablediffusionapi/disney-pixar-cartoon"), |
| ("CyberRealistic", "stablediffusionapi/cyberrealistic"), ("Absolute Reality", "stablediffusionapi/absolute-reality-v181"), ("Juggernaut XL", "stablediffusionapi/juggernaut-xl-v5"), |
| ("SDXL Base 1.0", "stabilityai/stable-diffusion-xl-base-1.0"), ("Stable Diffusion 1.5", "runwayml/stable-diffusion-v1-5"), ("Stable Diffusion 1.4", "CompVis/stable-diffusion-v1-4"), |
| ("Stable Diffusion 2.1", "stabilityai/stable-diffusion-2-1"), ("EpicRealism", "emilianJR/epiCRealism"), ("Deliberate", "XpucT/Deliberate"), |
| ("MeinaMix V11", "Meina/MeinaMix_V11"), ("DreamShaper 8", "Lykon/dreamshaper-8"), ("GhostMix", "GhostMix/GhostMix-V2.0"), |
| ("Pastel-Mix", "andite/pastel-mix"), ("Protogen x3.4", "darkstorm2150/Protogen_x3.4_Official_Release"), ("RevAnimated", "stablediffusionapi/rev-animated"), |
| ("Comic Babes", "stablediffusionapi/comic-babes"), ("3D Animation Style", "stablediffusionapi/3d-animation-style"), ("NeverEnding Dream", "stablediffusionapi/neverending-dream"), |
| ("Reliberate", "stablediffusionapi/reliberate"), ("Edge of Realism", "stablediffusionapi/edge-of-realism"), ("AOM3", "stablediffusionapi/abyssorangemix3"), |
| ("AnyLoRA", "stablediffusionapi/anylora"), ("Counterfeit V3", "stablediffusionapi/counterfeit-v30"), ("Dark Sushi Mix", "stablediffusionapi/dark-sushi-mix"), |
| ("Photoreal 2.0", "dreamlike-art/dreamlike-photoreal-2.0"), ("Dreamlike Anime", "dreamlike-art/dreamlike-anime-1.0"), ("Dreamlike Diffusion", "dreamlike-art/dreamlike-diffusion-1.0"), |
| ("OpenDalle V1.1", "dataautogpt3/OpenDalleV1.1"), ("Nitro Diffusion", "nitrosocke/Nitro-Diffusion"), ("Arcane Diffusion", "nitrosocke/Arcane-Diffusion"), |
| ("Mo-Di Diffusion", "nitrosocke/mo-di-diffusion"), ("Elden Ring", "nitrosocke/elden-ring-diffusion"), ("Spider-Verse", "nitrosocke/spider-verse-diffusion"), |
| ("Analog Diffusion", "wavymulder/Analog-Diffusion"), ("PaperCut Style", "Fictiverse/Stable_Diffusion_PaperCut_Model"), ("Studio Ghibli", "nitrosocke/Ghibli-Diffusion"), |
| ("Classic Animation", "nitrosocke/classic-anim-diffusion"), ("Redshift 3D", "nitrosocke/redshift-diffusion"), ("Van Gogh Style", "dallinmackay/Van-Gogh-diffusion"), |
| ("Tron Legacy", "dallinmackay/Tron-Legacy-diffusion"), ("Trinart V2", "naclbit/trinart_stable_diffusion_v2"), ("Epic Diffusion", "johnslegers/epic-diffusion"), |
| ("Photorealistic Fuen", "claudfuen/photorealistic-fuen-v1"), ("RPG Artist", "XpucT/RPG"), ("All 526 Animated", "stablediffusionapi/all-526-animated"), |
| ("Am I Real", "stablediffusionapi/am-i-real"), ("Analog Diffusion API", "stablediffusionapi/analog-diffusion"), ("AnyGen", "stablediffusionapi/anygen"), |
| ("BG Dream", "stablediffusionapi/bg-dream-dir"), ("CetusMix", "stablediffusionapi/cetusmix"), ("Chilled Re-Generic", "stablediffusionapi/chilled-re-generic"), |
| ("Children's 3D", "stablediffusionapi/childrens-stories-3d"), ("Complex Lineart", "stablediffusionapi/complex-lineart"), ("Dark Victorian", "stablediffusionapi/dark-victorian-style"), |
| ("Dreamshaper V6", "stablediffusionapi/dreamshaper-v6"), ("DucHaiten AI Art", "stablediffusionapi/duchaiten-aiart"), ("DVArch", "stablediffusionapi/dvarch"), |
| ("Fantasy World", "stablediffusionapi/fantasy-world"), ("Grapefruit Anime", "stablediffusionapi/grapefruit"), ("Guweiz Style", "stablediffusionapi/guweiz-style"), |
| ("Hassaku Anime", "stablediffusionapi/hassaku-hentai-model"), ("MajicMix Realistic", "stablediffusionapi/majicmix-realistic"), ("MeinaMix V9", "stablediffusionapi/meinamix-v9"), |
| ("Meina Unreal", "stablediffusionapi/meina-unreal"), ("Meina Pastel", "stablediffusionapi/meina-pastel"), ("MoXin Chinese Art", "stablediffusionapi/moxin"), |
| ("Pastel Mix Stylized", "stablediffusionapi/pastel-mix-stylized-anime"), ("Perfect World", "stablediffusionapi/perfect-world"), ("Portrait Plus", "stablediffusionapi/portrait-plus"), |
| ("Realistic Vision V2", "stablediffusionapi/realistic-vision-v20"), ("Realistic Vision V4", "stablediffusionapi/realistic-vision-v40"), ("Beautiful People", "stablediffusionapi/shonin-beautiful-people"), |
| ("Synthwave Punk", "stablediffusionapi/synthwave-punk-v2"), ("The Ally's Mix III", "stablediffusionapi/the-allys-mix-iii"), ("ToonYou", "stablediffusionapi/toonyou"), |
| ("Vintedois", "stablediffusionapi/vintedois-diffusion"), ("Waifu Diffusion V1.4", "stablediffusionapi/waifu-diffusion-v14"), ("Small SD", "OFA-Sys/small-stable-diffusion-v0"), |
| ("Realistic Vision V3", "stablediffusionapi/realistic-vision-v30"), ("Realistic Vision V5.0", "stablediffusionapi/realistic-vision-v50"), ("Dreamshaper V7", "stablediffusionapi/dreamshaper-v7"), |
| ("MeinaMix V10", "stablediffusionapi/meinamix-v10"), ("Blood Orange Mix", "stablediffusionapi/blood-orange-mix"), ("Abyss Orange Mix 2", "stablediffusionapi/abyssorangemix2"), |
| ("Anything V4.5", "stablediffusionapi/anything-v45"), ("Anything V5 Ink", "stablediffusionapi/anything-v5-ink"), ("AZ Ovya CG Art", "stablediffusionapi/a-z-ovya-cg-art"), |
| ("Art Diffusion", "stablediffusionapi/art-diffusion"), ("Asian Model", "stablediffusionapi/asian-model"), ("Beautiful Realistic Asian", "stablediffusionapi/beautiful-realistic-asian"), |
| ("Chillout App", "stablediffusionapi/chillout-app-factory"), ("ChilloutMix", "stablediffusionapi/chilloutmix"), ("ChilloutMix Ni", "stablediffusionapi/chilloutmix-ni"), |
| ("Cosplay Mix", "stablediffusionapi/cosplay-mix"), ("Cyberpunk Anime 2", "stablediffusionapi/cyberpunk-anime"), ("Dark Sushi 2.5D", "stablediffusionapi/dark-sushi-25d"), |
| ("Deliberate V2", "stablediffusionapi/deliberate-v2"), ("Deliberate V3", "stablediffusionapi/deliberate-v3"), ("Disney Pixar B", "stablediffusionapi/disney-pixar-cartoon-b"), |
| ("EpicRealism Natural", "stablediffusionapi/epicrealism-natural"), ("Fantasy Mix", "stablediffusionapi/fantasy-mix"), ("Flat 2D Animerge", "stablediffusionapi/flat-2d-animerge"), |
| ("Galaxy Time Machine", "stablediffusionapi/galaxy-time-machine"), ("GhostMix V1.2", "stablediffusionapi/ghostmix-v12"), ("Hesemix", "stablediffusionapi/hesemix"), |
| ("ICBINP", "stablediffusionapi/icbinp"), ("ICBINP Relapse", "stablediffusionapi/icbinp-relapse"), ("Illuminati", "stablediffusionapi/illuminati-diffusion"), |
| ("Korean 2.5D", "stablediffusionapi/korean-25d"), ("Liberty", "stablediffusionapi/liberty"), ("Lyriel", "stablediffusionapi/lyriel"), |
| ("MajicMix Fantasy", "stablediffusionapi/majicmix-fantasy"), ("MajicMix Sombre", "stablediffusionapi/majicmix-sombre"), ("Meina Alter", "stablediffusionapi/meina-alter"), |
| ("Meina Unreal V4", "stablediffusionapi/meina-unreal-v4"), ("Mix Pro V4", "stablediffusionapi/mix-pro-v4"), ("NeverEnding Dream NED", "stablediffusionapi/neverending-dream-ned"), |
| ("OpenJourney V4", "stablediffusionapi/openjourney-v4"), ("Perfect World V4", "stablediffusionapi/perfect-world-v4"), ("ReV Animated V1.2", "stablediffusionapi/rev-animated-v12"), |
| ("RPG V4", "stablediffusionapi/rpg-v4"), ("Samdoesarts", "stablediffusionapi/samdoesarts"), ("Shonin Beautiful 2", "stablediffusionapi/shonin-beautiful-people"), |
| ("Something V2", "stablediffusionapi/something-v2"), ("TMND Mix", "stablediffusionapi/tmnd-mix"), ("ToonYou Beta", "stablediffusionapi/toonyou-beta"), |
| ("Yohan Diffusion", "stablediffusionapi/yohan-diffusion"), ("YungZ Anime", "stablediffusionapi/yungz-anime"), ("Anime Pastel Dream", "Lykon/anime-pastel-dream"), |
| ("Anyhentai", "stablediffusionapi/anyhentai"), ("AOM3A3", "stablediffusionapi/abyssorangemix3a3"), ("CamelliaMix", "stablediffusionapi/camelliamix"), |
| ("Cardos Anime", "stablediffusionapi/cardos-anime"), ("CetusMix Whimsical", "stablediffusionapi/cetusmix-whimsical"), ("ColorBox", "stablediffusionapi/colorbox"), |
| ("Counterfeit V2", "stablediffusionapi/counterfeit-v20"), ("CuteYukiMix", "stablediffusionapi/cuteyukimix"), ("Darkest Anime", "stablediffusionapi/darkest-anime"), |
| ("Dreamlike Photoreal", "dreamlike-art/dreamlike-photoreal-1.0"), ("Eimis Anime Models", "stablediffusionapi/eimis-anime-models"), ("Elegance", "stablediffusionapi/elegance"), |
| ("EpiCRealism Pure", "stablediffusionapi/epicrealism-pure"), ("Ether Real Mix", "stablediffusionapi/ether-real-mix"), ("FaceBomb", "stablediffusionapi/facebomb"), |
| ("Galena", "stablediffusionapi/galena"), ("Ghibli Background", "stablediffusionapi/ghibli-background"), ("HassanBlend", "stablediffusionapi/hassanblend"), |
| ("Hentai Diffusion", "stablediffusionapi/hentai-diffusion"), ("KawaMix", "stablediffusionapi/kawamix"), ("Ligne Claire", "stablediffusionapi/ligne-claire"), |
| ("Lumina", "stablediffusionapi/lumina"), ("Magical Mix", "stablediffusionapi/magical-mix"), ("MechaMix", "stablediffusionapi/mechamix"), |
| ("Midnight Mixer", "stablediffusionapi/midnight-mixer"), ("Mix Pro V3", "stablediffusionapi/mix-pro-v3"), ("Niji Journey", "stablediffusionapi/niji-journey"), |
| ("OnlyAnime", "stablediffusionapi/onlyanime"), ("Pastel Boys", "stablediffusionapi/pastel-boys"), ("Pixar Style", "stablediffusionapi/pixar-style"), |
| ("Realism Engine", "stablediffusionapi/realism-engine"), ("Retro Anime", "stablediffusionapi/retro-anime"), ("SakuraMix", "stablediffusionapi/sakuramix"), |
| ("Sci-Fi Anime", "stablediffusionapi/sci-fi-anime"), ("Smooth Anime", "stablediffusionapi/smooth-anime"), ("Steampunk Anime", "stablediffusionapi/steampunk-anime"), |
| ("Vaporwave", "stablediffusionapi/vaporwave"), ("Vintage Anime", "stablediffusionapi/vintage-anime"), ("Watercolor Anime", "stablediffusionapi/watercolor-anime") |
| ] |
|
|
| def make_hf_func(model_id): |
| return lambda p, w, h, ar: generate_hf_api(p, model_id, w, h) |
|
|
| for name, model_id in hf_models_list: |
| ALL_APIS[f"HF: {name}"] = make_hf_func(model_id) |
|
|
| |
| |
| |
| def fetch_api_task(api_name, api_func, prompt, w, h, ar): |
| try: |
| img = api_func(prompt, w, h, ar) |
| return img, api_name, None |
| except Exception as e: |
| return None, api_name, str(e) |
|
|
| def generate_image_logic(prompt, style, size, selected_api): |
| if not prompt.strip(): |
| yield None, "⚠️ **দয়া করে একটি প্রম্পট লিখুন!**" |
| return |
|
|
| if size == "ল্যান্ডস্কেপ (16:9) - YouTube": w, h, ar = 1024, 576, "16:9" |
| elif size == "পোর্ট্রেট (9:16) - TikTok": w, h, ar = 576, 1024, "9:16" |
| else: w, h, ar = 1024, 1024, "1:1" |
|
|
| style_modifiers = { |
| "ফটোরিয়ালিস্টিক (Photorealistic)": ", ultra realistic, highly detailed, photorealistic, 8k resolution, raw photo, masterpiece, soft cinematic lighting", |
| "এনিমে (Anime)": ", high quality anime style, studio ghibli, masterpiece, vibrant colors, detailed shading", |
| "থ্রিডি আর্ট (3D)": ", 3d render, unreal engine 5, octane render, beautiful 3d masterpiece", |
| "ডিফল্ট (Default)": "" |
| } |
| enhanced_prompt = f"{prompt.strip()}{style_modifiers.get(style, '')}, aspect ratio {ar}" |
|
|
| |
| if selected_api == "অটোমেটিক (Auto Fallback)": |
| yield None, "⏳ গ্যারান্টিড আনলিমিটেড সার্ভারের সাথে কানেক্ট করা হচ্ছে..." |
| |
| |
| guaranteed_batch = [ |
| ("Pollinations AI (Unlimited)", ALL_APIS["Pollinations AI (Unlimited)"]), |
| ("Hercai AI (Unlimited)", ALL_APIS["Hercai AI (Unlimited)"]) |
| ] |
| |
| |
| hf_only_items = [item for item in ALL_APIS.items() if "HF:" in item[0]] |
| random_hf_batch = random.sample(hf_only_items, 2) |
| |
| |
| final_test_batch = guaranteed_batch + random_hf_batch |
| |
| successful_images = [] |
| successful_names = [] |
| error_logs = [] |
| |
| with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: |
| futures = {executor.submit(fetch_api_task, name, func, enhanced_prompt, w, h, ar): name for name, func in final_test_batch} |
| |
| for future in concurrent.futures.as_completed(futures): |
| img, name, err = future.result() |
| if img: |
| successful_images.append(img) |
| successful_names.append(name) |
| else: |
| error_logs.append(f"{name[:10]}") |
| |
| if successful_images: |
| source_text = ", ".join(successful_names) |
| yield successful_images, f"✅ **সফল!** ছবি তৈরি হয়েছে।\n(উৎস: {source_text})" |
| return |
| |
| yield None, f"🚫 **নেটওয়ার্ক সমস্যা!** দয়া করে আবার চেষ্টা করুন। লগ: {error_logs}" |
|
|
| |
| else: |
| yield None, f"⏳ শুধুমাত্র **{selected_api}**-এ কল করা হচ্ছে..." |
| api_func = ALL_APIS[selected_api] |
| try: |
| image = api_func(enhanced_prompt, w, h, ar) |
| if image: yield [image], f"✅ **সফল!** আপনি ম্যানুয়ালি {selected_api} ব্যবহার করেছেন।" |
| else: yield None, f"❌ **দুঃখিত!** {selected_api} বর্তমানে ডাউন।" |
| except Exception as e: |
| yield None, f"❌ **ব্যর্থ!** কোটা শেষ বা সার্ভার ডাউন। অন্য একটি ট্রাই করুন।" |
|
|
| |
| |
| |
| api_choices = ["অটোমেটিক (Auto Fallback)"] + list(ALL_APIS.keys()) |
|
|
| with gr.Blocks(theme=gr.themes.Soft()) as demo: |
| gr.Markdown("<h1 style='text-align: center;'>🎨 Mega AI Image Generator (Guaranteed Routing)</h1>") |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| prompt_input = gr.Textbox(label="ইমেজের বর্ণনা লিখুন (Prompt)", placeholder="A highly detailed futuristic city...", lines=3) |
| |
| with gr.Row(): |
| style_input = gr.Dropdown( |
| choices=["ফটোরিয়ালিস্টিক (Photorealistic)", "এনিমে (Anime)", "থ্রিডি আর্ট (3D)", "ডিফল্ট (Default)"], |
| label="ছবির স্টাইল (Style)", value="ফটোরিয়ালিস্টিক (Photorealistic)" |
| ) |
| size_input = gr.Dropdown( |
| choices=["স্কয়ার (1:1) - Instagram", "ল্যান্ডস্কেপ (16:9) - YouTube", "পোর্ট্রেট (9:16) - TikTok"], |
| label="ছবির সাইজ (Size)", value="স্কয়ার (1:1) - Instagram" |
| ) |
| |
| api_selector = gr.Dropdown( |
| choices=api_choices, label="সার্ভার সিলেক্ট করুন (ডিফল্ট: অটোমেটিক)", value="অটোমেটিক (Auto Fallback)", interactive=True |
| ) |
| |
| generate_btn = gr.Button("Generate Image", variant="primary") |
| log_box = gr.Markdown("স্ট্যাটাস: অপেক্ষমান...") |
| |
| with gr.Column(scale=1): |
| image_output = gr.Gallery(label="জেনারেট হওয়া ছবি (একাধিক হতে পারে)", columns=2, object_fit="contain", height="auto") |
|
|
| generate_btn.click( |
| fn=generate_image_logic, |
| inputs=[prompt_input, style_input, size_input, api_selector], |
| outputs=[image_output, log_box] |
| ) |
|
|
| demo.queue(max_size=50) |
|
|
| if __name__ == "__main__": |
| demo.launch(server_name="0.0.0.0", server_port=7860) |
|
|