| |
|
|
| import torch |
| import models |
| from models import pipelines |
| from shared import model_dict, DEFAULT_OVERALL_NEGATIVE_PROMPT |
| import gc |
| from io import BytesIO |
| import base64 |
| import PIL.Image |
|
|
| vae, tokenizer, text_encoder, unet, scheduler, dtype = model_dict.vae, model_dict.tokenizer, model_dict.text_encoder, model_dict.unet, model_dict.scheduler, model_dict.dtype |
|
|
| torch.set_grad_enabled(False) |
|
|
| height = 512 |
| width = 512 |
| guidance_scale = 7.5 |
| batch_size = 1 |
|
|
| |
| image_scale = (512, 512) |
|
|
| bg_negative = DEFAULT_OVERALL_NEGATIVE_PROMPT |
|
|
| |
| def run(prompt, scheduler_key='dpm_scheduler', bg_seed=1, num_inference_steps=20): |
| print(f"prompt: {prompt}") |
| generator = torch.manual_seed(bg_seed) |
| |
| prompts = [prompt] |
| input_embeddings = models.encode_prompts(prompts=prompts, tokenizer=tokenizer, text_encoder=text_encoder, negative_prompt=bg_negative) |
|
|
| latents = models.get_unscaled_latents(batch_size, unet.config.in_channels, height, width, generator, dtype) |
|
|
| latents = latents * scheduler.init_noise_sigma |
|
|
| pipelines.gligen_enable_fuser(model_dict['unet'], enabled=False) |
| _, images = pipelines.generate( |
| model_dict, latents, input_embeddings, num_inference_steps, |
| guidance_scale=guidance_scale, scheduler_key=scheduler_key |
| ) |
|
|
| |
| image = PIL.Image.fromarray(images[0]) |
| |
| |
| buffer = BytesIO() |
| image.save(buffer, format='PNG') |
| |
| |
| png_bytes = buffer.getvalue() |
| base64_string = base64.b64encode(png_bytes).decode('utf-8') |
|
|
| |
| gc.collect() |
| torch.cuda.empty_cache() |
|
|
|
|
| return images[0], base64_string |
|
|