Spaces:
Running
on
Zero
Running
on
Zero
File size: 4,376 Bytes
69620c8 364bea8 69620c8 f06c741 31c0b50 f06c741 31c0b50 69620c8 9c4729d aea3399 d60cf4c 69620c8 75affb5 69620c8 c1bd24e 69620c8 c401dbb 69620c8 b1e6985 78fa007 69620c8 b1e6985 78fa007 69620c8 669c8e5 69620c8 4913a13 69620c8 31ad247 69620c8 8b78161 69620c8 95a3aac 69620c8 |
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 |
import spaces
import gradio as gr
import torch
from PIL import Image
from diffusers import DiffusionPipeline, DEISMultistepScheduler
import random
torch.backends.cudnn.deterministic = False
torch.backends.cudnn.benchmark = False
torch.backends.cuda.matmul.allow_tf32 = False
# Initialize the base model and specific LoRA
base_model = "black-forest-labs/FLUX.1-dev"
pipe = DiffusionPipeline.from_pretrained(base_model, torch_dtype=torch.bfloat16)
# pipe.scheduler = DEISMultistepScheduler.from_config(pipe.scheduler.config)
lora_repo = "Shakker-Labs/AWPortraitCN"
trigger_word = "" # Leave trigger_word blank if not used.
pipe.load_lora_weights(lora_repo, low_cpu_mem_usage=True)
pipe.to("cuda")
MAX_SEED = 2**32-1
@spaces.GPU()
def run_lora(prompt, cfg_scale, steps, randomize_seed, seed, width, height, lora_scale, progress=gr.Progress(track_tqdm=True)):
# Set random seed for reproducibility
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator(device="cuda").manual_seed(seed)
# Update progress bar (0% saat mulai)
progress(0, "Starting image generation...")
# Generate image with progress updates
for i in range(1, steps + 1):
# Simulate the processing step (in a real scenario, you would integrate this with your image generation process)
if i % (steps // 10) == 0: # Update every 10% of the steps
progress(i / steps * 100, f"Processing step {i} of {steps}...")
# Generate image using the pipeline
image = pipe(
prompt=f"{prompt} {trigger_word}",
num_inference_steps=steps,
guidance_scale=cfg_scale,
width=width,
height=height,
generator=generator,
joint_attention_kwargs={"scale": lora_scale},
).images[0]
# Final update (100%)
progress(100, "Completed!")
yield image, seed
# Example cached image and settings
example_image_path = "example0.webp" # Replace with the actual path to the example image
example_prompt = """A high-resolution photograph of an attractive East Asian woman with long, wavy brown hair and fair skin, wearing a light blue off-shoulder top, standing against a beige wall with dappled sunlight filtering through green leaves. Likely taken with a DSLR camera, f/2.8, 1/250s, ISO 100. No watermark."""
example_cfg_scale = 3.5
example_steps = 32
example_width = 896
example_height = 1152
example_seed = 3055705728
example_lora_scale = 0.95
def load_example():
# Load example image from file
example_image = Image.open(example_image_path)
return example_prompt, example_cfg_scale, example_steps, True, example_seed, example_width, example_height, example_lora_scale, example_image
with gr.Blocks() as app:
gr.Markdown("# Flux AWPortraitCN Image Generator")
with gr.Row():
with gr.Column(scale=3):
prompt = gr.TextArea(label="Prompt", placeholder="Type a prompt", lines=5)
generate_button = gr.Button("Generate")
cfg_scale = gr.Slider(label="CFG Scale", minimum=1, maximum=20, step=0.5, value=example_cfg_scale)
steps = gr.Slider(label="Steps", minimum=1, maximum=100, step=1, value=example_steps)
width = gr.Slider(label="Width", minimum=256, maximum=1536, step=64, value=example_width)
height = gr.Slider(label="Height", minimum=256, maximum=1536, step=64, value=example_height)
randomize_seed = gr.Checkbox(True, label="Randomize seed")
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=example_seed)
lora_scale = gr.Slider(label="LoRA Scale", minimum=0, maximum=1, step=0.01, value=example_lora_scale)
with gr.Column(scale=1):
result = gr.Image(label="Generated Image")
gr.Markdown("Generate images using RealismLora and a text prompt.\n[[non-commercial license, Flux.1 Dev](https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/LICENSE.md)]")
# Automatically load example data and image when the interface is launched
app.load(load_example, inputs=[], outputs=[prompt, cfg_scale, steps, randomize_seed, seed, width, height, lora_scale, result])
generate_button.click(
run_lora,
inputs=[prompt, cfg_scale, steps, randomize_seed, seed, width, height, lora_scale],
outputs=[result, seed]
)
app.queue()
app.launch() |