Spaces:
Running
Running
File size: 5,762 Bytes
113dc2c d4fba6d 0dec378 757da8f d4fba6d 2fc432b d95dbe9 32fdddd 219d097 471c590 52a0784 757da8f 481dde5 d95dbe9 f0f180b d95dbe9 c79e0ac f0f180b c79e0ac f0f180b 1a52ee5 68ef0f8 f0f180b c79e0ac f0f180b 481dde5 d95dbe9 f0f180b c79e0ac f0f180b c79e0ac f0f180b a521e90 5d264e2 f0f180b f45164e f0f180b ac00586 f0f180b 9a11c4c f0f180b 757da8f e3be785 32fdddd e3be785 abfc2ce f0f180b c79e0ac f0f180b ac00586 f0f180b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
import os
import gradio as gr
import numpy as np
import random
from huggingface_hub import AsyncInferenceClient, InferenceClient
from PIL import Image
from gradio_client import Client, handle_file
from gradio_imageslider import ImageSlider
MAX_SEED = np.iinfo(np.int32).max
HF_TOKEN = os.environ.get("HF_TOKEN")
HF_TOKEN_UPSCALER = os.environ.get("HF_TOKEN_UPSCALER")
client = AsyncInferenceClient()
llm_client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
def enable_lora(lora_add, basemodel):
return basemodel if not lora_add else lora_add
async def generate_image(combined_prompt, model, width, height, scales, steps, seed):
try:
if seed == -1:
seed = random.randint(0, MAX_SEED)
seed = int(seed)
image = await client.text_to_image(
prompt=combined_prompt, height=height, width=width, guidance_scale=scales,
num_inference_steps=steps, model=model
)
return image, seed
except Exception as e:
return f"Error al generar imagen: {e}", None
def get_upscale_finegrain(prompt, img_path, upscale_factor):
try:
client = Client("finegrain/finegrain-image-enhancer", hf_token=HF_TOKEN_UPSCALER)
result = client.predict(
input_image=handle_file(img_path), prompt=prompt, negative_prompt="",
seed=42, upscale_factor=upscale_factor, controlnet_scale=0.6,
controlnet_decay=1, condition_scale=6, tile_width=112,
tile_height=144, denoise_strength=0.35, num_inference_steps=18,
solver="DDIM", api_name="/process"
)
return result[1] if isinstance(result, list) and len(result) > 1 else None
except Exception as e:
return None
async def gen(prompt, basemodel, width, height, scales, steps, seed, upscale_factor, process_upscale, lora_model, process_lora):
model = enable_lora(lora_model, basemodel) if process_lora else basemodel
improved_prompt = await improve_prompt(prompt)
combined_prompt = f"{prompt} {improved_prompt}"
if seed == -1:
seed = random.randint(0, MAX_SEED)
seed = int(seed)
image, seed = await generate_image(combined_prompt, model, width, height, scales, steps, seed)
if isinstance(image, str) and image.startswith("Error"):
return [image, None]
image_path = "temp_image.jpg"
image.save(image_path, format="JPEG")
if process_upscale:
upscale_image_path = get_upscale_finegrain(combined_prompt, image_path, upscale_factor)
if upscale_image_path:
upscale_image = Image.open(upscale_image_path)
upscale_image.save("upscale_image.jpg", format="JPEG")
return [image_path, "upscale_image.jpg"]
else:
return [image_path, image_path]
else:
return [image_path, image_path]
async def improve_prompt(prompt):
try:
instruction = ("With this idea, describe in English a detailed img2vid prompt in a single paragraph of up to 200 characters maximum, developing atmosphere, characters, lighting, and cameras.")
formatted_prompt = f"{prompt}: {instruction}"
response = llm_client.text_generation(formatted_prompt, max_new_tokens=200)
improved_text = response['generated_text'].strip() if 'generated_text' in response else response.strip()
return improved_text
except Exception as e:
return f"Error mejorando el prompt: {e}"
css = """
#col-container{ margin: 0 auto; max-width: 1024px;}
"""
with gr.Blocks(css=css, theme="Nymbo/Nymbo_Theme") as demo:
with gr.Column(elem_id="col-container"):
with gr.Row():
with gr.Column(scale=3):
output_res = ImageSlider(label="Flux / Upscaled")
with gr.Column(scale=2):
prompt = gr.Textbox(label="Descripción de imágen")
basemodel_choice = gr.Dropdown(
label="Modelo",
choices=["black-forest-labs/FLUX.1-schnell", "black-forest-labs/FLUX.1-DEV"],
value="black-forest-labs/FLUX.1-schnell"
)
lora_model_choice = gr.Dropdown(
label="LORA Realismo",
choices=["Shakker-Labs/FLUX.1-dev-LoRA-add-details", "XLabs-AI/flux-RealismLora"],
value="XLabs-AI/flux-RealismLora"
)
with gr.Row():
process_lora = gr.Checkbox(label="Procesar LORA")
process_upscale = gr.Checkbox(label="Procesar Escalador")
improved_prompt = gr.Textbox(label="Prompt Mejorado", interactive=False)
improve_btn = gr.Button("Mejora mi prompt")
improve_btn.click(fn=improve_prompt, inputs=[prompt], outputs=improved_prompt)
with gr.Accordion(label="Opciones Avanzadas", open=False):
width = gr.Slider(label="Ancho", minimum=512, maximum=1280, step=8, value=1280)
height = gr.Slider(label="Alto", minimum=512, maximum=1280, step=8, value=768)
upscale_factor = gr.Radio(label="Factor de Escala", choices=[2, 4, 8], value=2)
scales = gr.Slider(label="Escalado", minimum=1, maximum=20, step=1, value=10)
steps = gr.Slider(label="Pasos", minimum=1, maximum=100, step=1, value=20)
seed = gr.Number(label="Semilla", value=-1)
btn = gr.Button("Generar")
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
)
demo.launch() |