import gradio as gr import os from gradio_client import Client, handle_file from huggingface_hub import login from gradio_imageslider import ImageSlider hf_tkn = os.environ.get("HF_TKN") login(hf_tkn) def get_flux_image(prompt): client = Client("black-forest-labs/FLUX.1-schnell") result = client.predict( prompt=prompt, seed=0, randomize_seed=True, width=1024, height=1024, num_inference_steps=4, api_name="/infer" ) print(result) return result[0] def get_upscale_finegrain(prompt, img_path, upscale_factor): client = Client("finegrain/finegrain-image-enhancer") 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" ) print(result) return result[1] def get_clarity_upscale(prompt, img_path, upscale_factor): client = Client("jbilcke-hf/clarity-upscaler") result = client.predict( img_path, # filepath in 'Image' Image component prompt, # str in 'Prompt' Textbox component "", # str in 'Negative Prompt' Textbox component upscale_factor, # float in 'Scale Factor' Number component 1, # float (numeric value between 1 and 50) in 'Dynamic' Slider component 3, # float in 'Creativity' Number component 3, # float in 'Resemblance' Number component "16", # Literal['16', '32', '48', '64', '80', '96', '112', '128', '144', '160', '176', '192', '208', '224', '240', '256'] in 'tiling_width' Dropdown component "16", # Literal['16', '32', '48', '64', '80', '96', '112', '128', '144', '160', '176', '192', '208', '224', '240', '256'] in 'tiling_height' Dropdown component "epicrealism_naturalSinRC1VAE.safetensors [84d76a0328]", # Literal['epicrealism_naturalSinRC1VAE.safetensors [84d76a0328]', 'juggernaut_reborn.safetensors [338b85bc4f]', 'flat2DAnimerge_v45Sharp.safetensors'] in 'sd_model' Dropdown component "DPM++ 2M Karras", # Literal['DPM++ 2M Karras', 'DPM++ SDE Karras', 'DPM++ 2M SDE Exponential', 'DPM++ 2M SDE Karras', 'Euler a', 'Euler', 'LMS', 'Heun', 'DPM2', 'DPM2 a', 'DPM++ 2S a', 'DPM++ 2M', 'DPM++ SDE', 'DPM++ 2M SDE', 'DPM++ 2M SDE Heun', 'DPM++ 2M SDE Heun Karras', 'DPM++ 2M SDE Heun Exponential', 'DPM++ 3M SDE', 'DPM++ 3M SDE Karras', 'DPM++ 3M SDE Exponential', 'DPM fast', 'DPM adaptive', 'LMS Karras', 'DPM2 Karras', 'DPM2 a Karras', 'DPM++ 2S a Karras', 'Restart', 'DDIM', 'PLMS', 'UniPC'] in 'scheduler' Dropdown component 1, # float (numeric value between 1 and 100) in 'Num Inference Steps' Slider component 3, # float in 'Seed' Number component True, # bool in 'Downscaling' Checkbox component 3, # float in 'Downscaling Resolution' Number component "Hello!!", # str in 'Lora Links' Textbox component "Hello!!", # str in 'Custom Sd Model' Textbox component api_name="/predict" ) print(result) return result def main(prompt, upscale_factor, upscale_provider): step_one_flux = get_flux_image(prompt) if upscale_provider == "finegrain image enhancer": step_two_upscale = get_upscale_finegrain(prompt, step_one_flux, upscale_factor) elif upscale_provider == "clarity upscale": step_two_upscale = get_clarity_upscale(prompt, step_one_flux, upscale_factor) return (step_one_flux, step_two_upscale) def clean_previous(): return gr.update(value=None) css = """ #col-container{ margin: 0 auto; max-width: 1024px; } """ with gr.Blocks(css=css) as demo: with gr.Column(elem_id="col-container"): gr.Markdown("# Flux Upscaled") gr.Markdown("Step 1: Generate image with FLUX schnell; Step 2: UpScale with Finegrain Image-Enhancer OR Clarity UpScale;") with gr.Group(): prompt_in = gr.Textbox(label="Prompt") with gr.Row(): upscale_factor = gr.Radio( label = "UpScale Factor", choices = [ 2, 3, 4 ], value = 2, scale=2 ) upscale_provider = gr.Dropdown( label = "UpScale Provider", choices = ["finegrain image enhancer", "clarity upscale"], value = "clarity upscale", scale=2 ) submit_btn = gr.Button("Submit", scale=1) output_res = ImageSlider(label="Flux / Upscaled") gr.Examples( examples = [ ["a tiny astronaut hatching from an egg on the moon", 2, "clarity upscale"], ["a bright blue bird in the garden, natural photo cinematic, MM full HD", 2, "clarity upscale"] ], fn = main, inputs=[prompt_in, upscale_factor, upscale_provider], outputs=[output_res], cache_examples = "lazy" ) submit_btn.click( fn = clean_previous, inputs = None, outputs = [output_res], queue=False ).then( fn=main, inputs=[prompt_in, upscale_factor, upscale_provider], outputs=[output_res], ) demo.queue().launch(show_api=False, show_error=True)