Spaces:
Runtime error
Runtime error
pre-commit
Browse files- app_base.py +10 -7
- app_sketch.py +9 -6
- model.py +5 -2
- utils.py +6 -4
app_base.py
CHANGED
|
@@ -4,10 +4,13 @@ import gradio as gr
|
|
| 4 |
import PIL.Image
|
| 5 |
|
| 6 |
from model import ADAPTER_NAMES, Model
|
| 7 |
-
from utils import
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
| 11 |
|
| 12 |
|
| 13 |
def create_demo(model: Model) -> gr.Blocks:
|
|
@@ -16,7 +19,7 @@ def create_demo(model: Model) -> gr.Blocks:
|
|
| 16 |
prompt: str,
|
| 17 |
negative_prompt: str,
|
| 18 |
adapter_name: str,
|
| 19 |
-
style_name: str =
|
| 20 |
num_inference_steps: int = 30,
|
| 21 |
guidance_scale: float = 5.0,
|
| 22 |
adapter_conditioning_scale: float = 1.0,
|
|
@@ -26,7 +29,7 @@ def create_demo(model: Model) -> gr.Blocks:
|
|
| 26 |
progress=gr.Progress(track_tqdm=True),
|
| 27 |
) -> list[PIL.Image.Image]:
|
| 28 |
prompt, negative_prompt = apply_style(style_name, prompt, negative_prompt)
|
| 29 |
-
|
| 30 |
return model.run(
|
| 31 |
image=image,
|
| 32 |
prompt=prompt,
|
|
@@ -54,7 +57,7 @@ def create_demo(model: Model) -> gr.Blocks:
|
|
| 54 |
label="Negative prompt",
|
| 55 |
value="",
|
| 56 |
)
|
| 57 |
-
style = gr.Dropdown(choices=
|
| 58 |
num_inference_steps = gr.Slider(
|
| 59 |
label="Number of steps",
|
| 60 |
minimum=1,
|
|
|
|
| 4 |
import PIL.Image
|
| 5 |
|
| 6 |
from model import ADAPTER_NAMES, Model
|
| 7 |
+
from utils import (
|
| 8 |
+
DEFAULT_STYLE_NAME,
|
| 9 |
+
MAX_SEED,
|
| 10 |
+
STYLE_NAMES,
|
| 11 |
+
apply_style,
|
| 12 |
+
randomize_seed_fn,
|
| 13 |
+
)
|
| 14 |
|
| 15 |
|
| 16 |
def create_demo(model: Model) -> gr.Blocks:
|
|
|
|
| 19 |
prompt: str,
|
| 20 |
negative_prompt: str,
|
| 21 |
adapter_name: str,
|
| 22 |
+
style_name: str = DEFAULT_STYLE_NAME,
|
| 23 |
num_inference_steps: int = 30,
|
| 24 |
guidance_scale: float = 5.0,
|
| 25 |
adapter_conditioning_scale: float = 1.0,
|
|
|
|
| 29 |
progress=gr.Progress(track_tqdm=True),
|
| 30 |
) -> list[PIL.Image.Image]:
|
| 31 |
prompt, negative_prompt = apply_style(style_name, prompt, negative_prompt)
|
| 32 |
+
|
| 33 |
return model.run(
|
| 34 |
image=image,
|
| 35 |
prompt=prompt,
|
|
|
|
| 57 |
label="Negative prompt",
|
| 58 |
value="",
|
| 59 |
)
|
| 60 |
+
style = gr.Dropdown(choices=STYLE_NAMES, value=DEFAULT_STYLE_NAME, label="Style")
|
| 61 |
num_inference_steps = gr.Slider(
|
| 62 |
label="Number of steps",
|
| 63 |
minimum=1,
|
app_sketch.py
CHANGED
|
@@ -6,20 +6,23 @@ import torch
|
|
| 6 |
import torchvision.transforms.functional as TF
|
| 7 |
|
| 8 |
from model import Model
|
| 9 |
-
from utils import
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
|
| 12 |
SKETCH_ADAPTER_NAME = "TencentARC/t2i-adapter-sketch-sdxl-1.0"
|
| 13 |
|
| 14 |
-
default_style_name = "Photographic"
|
| 15 |
-
|
| 16 |
|
| 17 |
def create_demo(model: Model) -> gr.Blocks:
|
| 18 |
def run(
|
| 19 |
image: PIL.Image.Image,
|
| 20 |
prompt: str,
|
| 21 |
negative_prompt: str,
|
| 22 |
-
style_name: str =
|
| 23 |
num_steps: int = 25,
|
| 24 |
guidance_scale: float = 5,
|
| 25 |
adapter_conditioning_scale: float = 0.8,
|
|
@@ -63,7 +66,7 @@ def create_demo(model: Model) -> gr.Blocks:
|
|
| 63 |
prompt = gr.Textbox(label="Prompt")
|
| 64 |
run_button = gr.Button("Run")
|
| 65 |
with gr.Accordion("Advanced options", open=False):
|
| 66 |
-
style = gr.Dropdown(choices=
|
| 67 |
negative_prompt = gr.Textbox(label="Negative prompt")
|
| 68 |
num_steps = gr.Slider(
|
| 69 |
label="Number of steps",
|
|
|
|
| 6 |
import torchvision.transforms.functional as TF
|
| 7 |
|
| 8 |
from model import Model
|
| 9 |
+
from utils import (
|
| 10 |
+
DEFAULT_STYLE_NAME,
|
| 11 |
+
MAX_SEED,
|
| 12 |
+
STYLE_NAMES,
|
| 13 |
+
apply_style,
|
| 14 |
+
randomize_seed_fn,
|
| 15 |
+
)
|
| 16 |
|
| 17 |
SKETCH_ADAPTER_NAME = "TencentARC/t2i-adapter-sketch-sdxl-1.0"
|
| 18 |
|
|
|
|
|
|
|
| 19 |
|
| 20 |
def create_demo(model: Model) -> gr.Blocks:
|
| 21 |
def run(
|
| 22 |
image: PIL.Image.Image,
|
| 23 |
prompt: str,
|
| 24 |
negative_prompt: str,
|
| 25 |
+
style_name: str = DEFAULT_STYLE_NAME,
|
| 26 |
num_steps: int = 25,
|
| 27 |
guidance_scale: float = 5,
|
| 28 |
adapter_conditioning_scale: float = 0.8,
|
|
|
|
| 66 |
prompt = gr.Textbox(label="Prompt")
|
| 67 |
run_button = gr.Button("Run")
|
| 68 |
with gr.Accordion("Advanced options", open=False):
|
| 69 |
+
style = gr.Dropdown(choices=STYLE_NAMES, value=DEFAULT_STYLE_NAME, label="Style")
|
| 70 |
negative_prompt = gr.Textbox(label="Negative prompt")
|
| 71 |
num_steps = gr.Slider(
|
| 72 |
label="Number of steps",
|
model.py
CHANGED
|
@@ -47,10 +47,11 @@ SD_XL_BASE_RATIOS = {
|
|
| 47 |
"3.0": (1728, 576),
|
| 48 |
}
|
| 49 |
|
|
|
|
| 50 |
def find_closest_aspect_ratio(target_width, target_height):
|
| 51 |
target_ratio = target_width / target_height
|
| 52 |
closest_ratio = None
|
| 53 |
-
min_difference = float(
|
| 54 |
|
| 55 |
for ratio_str, (width, height) in SD_XL_BASE_RATIOS.items():
|
| 56 |
ratio = width / height
|
|
@@ -260,7 +261,9 @@ class Model:
|
|
| 260 |
variant="fp16",
|
| 261 |
).to(self.device)
|
| 262 |
self.pipe.enable_xformers_memory_efficient_attention()
|
| 263 |
-
self.pipe.load_lora_weights(
|
|
|
|
|
|
|
| 264 |
self.pipe.fuse_lora(lora_scale=0.4)
|
| 265 |
else:
|
| 266 |
self.preprocessor = None # type: ignore
|
|
|
|
| 47 |
"3.0": (1728, 576),
|
| 48 |
}
|
| 49 |
|
| 50 |
+
|
| 51 |
def find_closest_aspect_ratio(target_width, target_height):
|
| 52 |
target_ratio = target_width / target_height
|
| 53 |
closest_ratio = None
|
| 54 |
+
min_difference = float("inf")
|
| 55 |
|
| 56 |
for ratio_str, (width, height) in SD_XL_BASE_RATIOS.items():
|
| 57 |
ratio = width / height
|
|
|
|
| 261 |
variant="fp16",
|
| 262 |
).to(self.device)
|
| 263 |
self.pipe.enable_xformers_memory_efficient_attention()
|
| 264 |
+
self.pipe.load_lora_weights(
|
| 265 |
+
"stabilityai/stable-diffusion-xl-base-1.0", weight_name="sd_xl_offset_example-lora_1.0.safetensors"
|
| 266 |
+
)
|
| 267 |
self.pipe.fuse_lora(lora_scale=0.4)
|
| 268 |
else:
|
| 269 |
self.preprocessor = None # type: ignore
|
utils.py
CHANGED
|
@@ -44,20 +44,22 @@ style_list = [
|
|
| 44 |
{
|
| 45 |
"name": "Neonpunk",
|
| 46 |
"prompt": "neonpunk style {prompt} . cyberpunk, vaporwave, neon, vibes, vibrant, stunningly beautiful, crisp, detailed, sleek, ultramodern, magenta highlights, dark purple shadows, high contrast, cinematic, ultra detailed, intricate, professional",
|
| 47 |
-
"negative_prompt": "painting, drawing, illustration, glitch, deformed, mutated, cross-eyed, ugly, disfigured"
|
| 48 |
},
|
| 49 |
{
|
| 50 |
"name": "Manga",
|
| 51 |
"prompt": "manga style {prompt} . vibrant, high-energy, detailed, iconic, Japanese comic style",
|
| 52 |
-
"negative_prompt": "ugly, deformed, noisy, blurry, low contrast, realism, photorealistic, Western comic style"
|
| 53 |
},
|
| 54 |
]
|
| 55 |
|
| 56 |
styles = {k["name"]: (k["prompt"], k["negative_prompt"]) for k in style_list}
|
| 57 |
-
|
|
|
|
|
|
|
| 58 |
|
| 59 |
def apply_style(style_name: str, positive: str, negative: str = "") -> tuple[str, str]:
|
| 60 |
-
p, n = styles.get(style_name,
|
| 61 |
return p.replace("{prompt}", positive), n + negative
|
| 62 |
|
| 63 |
|
|
|
|
| 44 |
{
|
| 45 |
"name": "Neonpunk",
|
| 46 |
"prompt": "neonpunk style {prompt} . cyberpunk, vaporwave, neon, vibes, vibrant, stunningly beautiful, crisp, detailed, sleek, ultramodern, magenta highlights, dark purple shadows, high contrast, cinematic, ultra detailed, intricate, professional",
|
| 47 |
+
"negative_prompt": "painting, drawing, illustration, glitch, deformed, mutated, cross-eyed, ugly, disfigured",
|
| 48 |
},
|
| 49 |
{
|
| 50 |
"name": "Manga",
|
| 51 |
"prompt": "manga style {prompt} . vibrant, high-energy, detailed, iconic, Japanese comic style",
|
| 52 |
+
"negative_prompt": "ugly, deformed, noisy, blurry, low contrast, realism, photorealistic, Western comic style",
|
| 53 |
},
|
| 54 |
]
|
| 55 |
|
| 56 |
styles = {k["name"]: (k["prompt"], k["negative_prompt"]) for k in style_list}
|
| 57 |
+
STYLE_NAMES = list(styles.keys())
|
| 58 |
+
DEFAULT_STYLE_NAME = "Photographic"
|
| 59 |
+
|
| 60 |
|
| 61 |
def apply_style(style_name: str, positive: str, negative: str = "") -> tuple[str, str]:
|
| 62 |
+
p, n = styles.get(style_name, styles[DEFAULT_STYLE_NAME])
|
| 63 |
return p.replace("{prompt}", positive), n + negative
|
| 64 |
|
| 65 |
|