import gradio as gr import asyncio from PIL import Image from io import BytesIO from huggingface_hub import AsyncInferenceClient from dotenv import load_dotenv import os # Загрузка токена из .env файла load_dotenv() API_TOKEN = os.getenv("HF_API_TOKEN") # Конфигурация моделей MODELS = { "Midjourney": "Jovie/Midjourney", "FLUX.1 [dev]": "black-forest-labs/FLUX.1-dev", "Stable Diffusion v2.1": "stabilityai/stable-diffusion-2-1", "Stable Diffusion v3.5 Large": "stabilityai/stable-diffusion-3.5-large", "Stable Diffusion v1.0 Large": "stabilityai/stable-diffusion-xl-base-1.0", "Leonardo AI": "goofyai/Leonardo_Ai_Style_Illustration", } # Инициализация клиента client = AsyncInferenceClient(token=API_TOKEN) # Асинхронная функция для отправки запроса к API async def query_model(prompt, model_name, model_url): try: response = await client.text_to_image( prompt=prompt, model=model_url, stream=False ) # Декодирование изображения image_data = response["images"][0] image = Image.open(BytesIO(image_data)) return model_name, image except Exception as e: print(f"Ошибка для модели {model_name}: {e}") return model_name, None # Асинхронная обработка запросов async def handle(prompt): tasks = [ query_model(prompt, model_name, model_url) for model_name, model_url in MODELS.items() ] results = await asyncio.gather(*tasks) return {model_name: image for model_name, image in results if image} # Интерфейс Gradio with gr.Blocks() as demo: gr.Markdown("## Генерация изображений с использованием моделей Hugging Face") # Поле ввода user_input = gr.Textbox(label="Введите описание изображения", placeholder="Например, 'Красный автомобиль в лесу'") # Вывод изображений with gr.Row(): outputs = {name: gr.Image(label=name) for name in MODELS.keys()} # Кнопка генерации generate_button = gr.Button("Сгенерировать") # Асинхронная обработка ввода async def on_submit(prompt): results = await handle(prompt) return [results.get(name, None) for name in MODELS.keys()] generate_button.click( fn=on_submit, inputs=[user_input], outputs=list(outputs.values()), ) user_input.submit( fn=on_submit, inputs=[user_input], outputs=list(outputs.values()), ) # Ссылки на соцсети with gr.Row(): with gr.Column(scale=1): gr.Image(value="icon.jpg") with gr.Column(scale=4): gr.HTML( """

Эта демка была создана телеграм каналом mlphys. Другие мои социальные сети:

Telegram | Twitter | GitHub

""" ) demo.launch()