import gradio as gr import requests import io import random import os from PIL import Image from deep_translator import GoogleTranslator # Словарь URL для различных моделей MODEL_URLS = { "DALL-E 3 XL": "https://api-inference.huggingface.co/models/openskyml/dalle-3-xl", "Playground 2": "https://api-inference.huggingface.co/models/playgroundai/playground-v2-1024px-aesthetic", "Openjourney 4": "https://api-inference.huggingface.co/models/prompthero/openjourney-v4", "AbsoluteReality 1.8.1": "https://api-inference.huggingface.co/models/digiplay/AbsoluteReality_v1.8.1", # ... } # Функция для получения изображения от API модели def get_image_from_api(prompt, model, headers, payload): response = requests.post(MODEL_URLS[model], headers=headers, json=payload) if response.status_code == 200: image_bytes = response.content image = Image.open(io.BytesIO(image_bytes)) return image else: raise gr.Error(f"Ошибка {response.status_code}: {response.reason}") # Функция для запроса к GPT (вы должны добавить свой код здесь) def enhance_prompt_with_gpt(prompt): # Добавьте ваш код для запроса к GPT здесь... pass # Функция для перевода текста через Google Translator def translate_prompt(prompt, source_lang="ru", target_lang="en"): return GoogleTranslator(source=source_lang, target=target_lang).translate(prompt) # Функция для генерации изображения def generate_image(prompt, model, negative_prompt, steps, cfg_scale, sampler, seed, strength, use_gpt): if not prompt: raise gr.Error("Prompt не может быть пустым") if use_gpt: prompt = enhance_prompt_with_gpt(prompt) translated_prompt = translate_prompt(prompt) # Добавьте к prompt дополнительные параметры если нужно enhanced_prompt = f"{translated_prompt} | ultra detail, ultra elaboration, ultra quality, perfect." payload = { "inputs": enhanced_prompt, "is_negative": negative_prompt, "steps": steps, "cfg_scale": cfg_scale, "sampler": sampler, "seed": seed if seed != -1 else random.randint(1, 1000000000), "strength": strength } # Получаем токен из переменных окружения api_token = os.getenv("HF_API_TOKEN") headers = {"Authorization": f"Bearer {api_token}"} try: image = get_image_from_api(enhanced_prompt, model, headers, payload) return image except Exception as e: raise gr.Error(f"Ошибка при генерации изображения: {e}") css = """ * {} footer {visibility: hidden !important;} """ # Создание интерфейса Gradio with gr.Blocks(css=css) as dalle_interface: with gr.Tab("Базовые настройки"): with gr.Row(): text_prompt = gr.Textbox(label="Prompt", placeholder="Описание изображения", lines=3) model = gr.Radio(label="Модель", value="DALL-E 3 XL", choices=list(MODEL_URLS.keys())) with gr.Tab("Расширенные настройки"): negative_prompt = gr.Textbox(label="Negative Prompt", placeholder="Чего не должно быть на изображении", lines=3) steps = gr.Slider(label="Sampling steps", value=35, minimum=1, maximum=100, step=1) cfg = gr.Slider(label="CFG Scale", value=7, minimum=1, maximum=20, step=1) method = gr.Radio(label="Sampling method", value="DPM++ 2M Karras", choices=["DPM++ 2M Karras", "DPM++ SDE Karras", "Euler", "Euler a", "Heun", "DDIM"]) strength = gr.Slider(label="Strength", value=0.7, minimum=0, maximum=1, step=0.001) seed = gr.Slider(label="Seed", value=-1, minimum=-1, maximum=1000000000, step=1) use_gpt = gr.Checkbox(label="Use GPT to enhance prompt", value=False) with gr.Tab("Информация"): gr.Textbox(label="Prompt template", value="{prompt} | ultra detail, ultra elaboration, ultra quality, perfect.") with gr.Row(): generate_button = gr.Button("Generate Image") with gr.Row(): image_output = gr.Image(type="pil", label="Generated Image") generate_button.click( generate_image, inputs=[text_prompt, model, negative_prompt, steps, cfg, method, seed, strength, use_gpt], outputs=image_output ) # Запуск интерфейса dalle_interface.launch(show_api=False, share=False)