lora / app.py
EDDIE2541's picture
Update app.py
5f17680 verified
import os
import gradio as gr
import torch
import uuid
import peft
from PIL import Image
from diffusers import AutoPipelineForText2Image, StableDiffusionXLInpaintPipeline, StableDiffusionXLPipeline
from peft import PeftModel, PeftConfig
# Define global variables
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
lora_models = {}
trigger_word = {}
# Load the pretrained model and add LoRAs
pipe = AutoPipelineForText2Image.from_pretrained(model_id, torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")
base_model = pipe.model
peft_config = PeftConfig.from_pretrained('lora_weights/qwe_cat_long.safetensors')
peft_model = PeftModel.from_pretrained(base_model, peft_config)
pipe.model = peft_model
# Create a dictionary of available LoRAs and their corresponding trigger words
for i in os.scandir('lora_weights'):
if i.name != '.gitignore':
lora_models[i.name] = i.path
trigger_word[i.name] = i.name.split('_')[0] + ' cat bright white fur'
# Define helper functions
def save_img(image_list, prompt):
results_folder = 'results/'
os.makedirs(results_folder, exist_ok=True)
for image in image_list:
image = Image.open(image[0])
unique_id = uuid.uuid4()
image.save(f"{results_folder}{unique_id}.jpg")
new_filename = f"{results_folder}{unique_id}.txt"
with open(new_filename, "w") as file:
file.write(prompt)
def set_lora_model(lora_name, lora_scale):
pipe.unfuse_lora(True)
pipe.unload_lora_weights()
print(lora_models[lora_name])
peft_config = PeftConfig.from_pretrained(lora_models[lora_name])
peft_config.lora_scale = lora_scale
peft_model = PeftModel.from_pretrained(base_model, peft_config)
pipe.model = peft_model
pipe.fuse_lora()
print('Model swapped')
return trigger_word[lora_name]
# ...
if __name__ == "__main__":
main()