import gradio as gr import os from PIL import Image import torch from diffusers.utils import load_image, check_min_version from controlnet_flux import FluxControlNetModel from transformer_flux import FluxTransformer2DModel from pipeline_flux_controlnet_inpaint import FluxControlNetInpaintingPipeline import spaces import huggingface_hub huggingface_hub.login(os.getenv('HF_TOKEN_FLUX')) check_min_version("0.30.2") transformer = FluxTransformer2DModel.from_pretrained( "black-forest-labs/FLUX.1-dev", subfolder='transformer', torch_dytpe=torch.bfloat16 ) # Build pipeline controlnet = FluxControlNetModel.from_pretrained("alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta", torch_dtype=torch.bfloat16) pipe = FluxControlNetInpaintingPipeline.from_pretrained( "black-forest-labs/FLUX.1-dev", controlnet=controlnet, transformer=transformer, torch_dtype=torch.bfloat16 ).to("cuda") pipe.transformer.to(torch.bfloat16) pipe.controlnet.to(torch.bfloat16) MARKDOWN = """ # FLUX.1-dev-Inpainting-Model-Beta-GPU 🔥 Model by alimama-creative """ @spaces.GPU() def process(input_image_editor, prompt, negative_prompt, controlnet_conditioning_scale, guidance_scale, seed, num_inference_steps, true_guidance_scale ): image = input_image_editor['background'] mask = input_image_editor['layers'][0] size = (768, 768) image_or = image.copy() image = image.convert("RGB").resize(size) mask = mask.convert("RGB").resize(size) generator = torch.Generator(device="cuda").manual_seed(seed) result = pipe( prompt=prompt, height=size[1], width=size[0], control_image=image, control_mask=mask, num_inference_steps=num_inference_steps, generator=generator, controlnet_conditioning_scale=controlnet_conditioning_scale, guidance_scale=guidance_scale, negative_prompt=negative_prompt, true_guidance_scale=true_guidance_scale ).images[0] return result.resize((image_or.size[:2])) with gr.Blocks() as demo: gr.Markdown(MARKDOWN) with gr.Row(): with gr.Column(): input_image_editor_component = gr.ImageEditor( label='Image', type='pil', sources=["upload", "webcam"], image_mode='RGB', layers=False, brush=gr.Brush(colors=["#FFFFFF"], color_mode="fixed")) prompt = gr.Textbox(lines=2, placeholder="Enter prompt here...") negative_prompt = gr.Textbox(lines=2, placeholder="Enter negative_prompt here...") controlnet_conditioning_scale = gr.Slider(minimum=0, step=0.01, maximum=1, value=0.9, label="controlnet_conditioning_scale") guidance_scale = gr.Slider(minimum=1, step=0.5, maximum=10, value=3.5, label="Image to generate") seed = gr.Slider(minimum=0, step=1, maximum=10000000, value=124, label="Seed Value") num_inference_steps = gr.Slider(minimum=1, step=1, maximum=30, value=24, label="num_inference_steps") true_guidance_scale = gr.Slider(minimum=1, step=1, maximum=10, value=3.5, label="true_guidance_scale") submit_button_component = gr.Button( value='Submit', variant='primary', scale=0) with gr.Column(): output_image_component = gr.Image( type='pil', image_mode='RGB', label='Generated image', format="png") submit_button_component.click( fn=process, inputs=[ input_image_editor_component, prompt, negative_prompt, controlnet_conditioning_scale, guidance_scale, seed, num_inference_steps, true_guidance_scale ], outputs=[ output_image_component, ] ) demo.launch(debug=False, show_error=True,share=True)