mirror of
https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
synced 2024-06-07 21:20:49 +00:00
added random artist button
added a setting for padding when doing inpaint at original resolution
This commit is contained in:
parent
f5563853b8
commit
b6763fb884
3051
artists.csv
Normal file
3051
artists.csv
Normal file
File diff suppressed because it is too large
Load Diff
25
modules/artists.py
Normal file
25
modules/artists.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import os.path
|
||||||
|
import csv
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
Artist = namedtuple("Artist", ['name', 'weight', 'category'])
|
||||||
|
|
||||||
|
|
||||||
|
class ArtistsDatabase:
|
||||||
|
def __init__(self, filename):
|
||||||
|
self.cats = set()
|
||||||
|
self.artists = []
|
||||||
|
|
||||||
|
if not os.path.exists(filename):
|
||||||
|
return
|
||||||
|
|
||||||
|
with open(filename, "r", newline='', encoding="utf8") as file:
|
||||||
|
reader = csv.DictReader(file)
|
||||||
|
|
||||||
|
for row in reader:
|
||||||
|
artist = Artist(row["artist"], float(row["score"]), row["category"])
|
||||||
|
self.artists.append(artist)
|
||||||
|
self.cats.add(artist.category)
|
||||||
|
|
||||||
|
def categories(self):
|
||||||
|
return sorted(self.cats)
|
@ -324,7 +324,7 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
|
|||||||
if self.inpaint_full_res:
|
if self.inpaint_full_res:
|
||||||
self.mask_for_overlay = self.image_mask
|
self.mask_for_overlay = self.image_mask
|
||||||
mask = self.image_mask.convert('L')
|
mask = self.image_mask.convert('L')
|
||||||
crop_region = get_crop_region(np.array(mask), 64)
|
crop_region = get_crop_region(np.array(mask), opts.upscale_at_full_resolution_padding)
|
||||||
x1, y1, x2, y2 = crop_region
|
x1, y1, x2, y2 = crop_region
|
||||||
|
|
||||||
mask = mask.crop(crop_region)
|
mask = mask.crop(crop_region)
|
||||||
|
@ -4,6 +4,7 @@ import os
|
|||||||
import gradio as gr
|
import gradio as gr
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
import modules.artists
|
||||||
from modules.paths import script_path, sd_path
|
from modules.paths import script_path, sd_path
|
||||||
|
|
||||||
config_filename = "config.json"
|
config_filename = "config.json"
|
||||||
@ -47,6 +48,8 @@ class State:
|
|||||||
|
|
||||||
state = State()
|
state = State()
|
||||||
|
|
||||||
|
artist_db = modules.artists.ArtistsDatabase(os.path.join(script_path, 'artists.csv'))
|
||||||
|
|
||||||
|
|
||||||
class Options:
|
class Options:
|
||||||
class OptionInfo:
|
class OptionInfo:
|
||||||
@ -84,6 +87,8 @@ class Options:
|
|||||||
"save_txt": OptionInfo(False, "Create a text file next to every image with generation parameters."),
|
"save_txt": OptionInfo(False, "Create a text file next to every image with generation parameters."),
|
||||||
"ESRGAN_tile": OptionInfo(192, "Tile size for ESRGAN upscaling. 0 = no tiling.", gr.Slider, {"minimum": 0, "maximum": 512, "step": 16}),
|
"ESRGAN_tile": OptionInfo(192, "Tile size for ESRGAN upscaling. 0 = no tiling.", gr.Slider, {"minimum": 0, "maximum": 512, "step": 16}),
|
||||||
"ESRGAN_tile_overlap": OptionInfo(8, "Tile overlap, in pixels for ESRGAN upscaling. Low values = visible seam.", gr.Slider, {"minimum": 0, "maximum": 48, "step": 1}),
|
"ESRGAN_tile_overlap": OptionInfo(8, "Tile overlap, in pixels for ESRGAN upscaling. Low values = visible seam.", gr.Slider, {"minimum": 0, "maximum": 48, "step": 1}),
|
||||||
|
"random_artist_categories": OptionInfo([], "Allowed categories for random artists selection when using the Roll button", gr.CheckboxGroup, {"choices": artist_db.categories()}),
|
||||||
|
"upscale_at_full_resolution_padding": OptionInfo(16, "Inpainting at full resolution: padding, in pixels, for the masked region.", gr.Slider, {"minimum": 0, "maximum": 128, "step": 4}),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -122,3 +127,5 @@ if os.path.exists(config_filename):
|
|||||||
sd_upscalers = []
|
sd_upscalers = []
|
||||||
|
|
||||||
sd_model = None
|
sd_model = None
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import io
|
|||||||
import json
|
import json
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
@ -133,6 +134,13 @@ def wrap_gradio_call(func):
|
|||||||
return f
|
return f
|
||||||
|
|
||||||
|
|
||||||
|
def roll_artist(prompt):
|
||||||
|
allowed_cats = set([x for x in shared.artist_db.categories() if len(opts.random_artist_categories)==0 or x in opts.random_artist_categories])
|
||||||
|
artist = random.choice([x for x in shared.artist_db.artists if x.category in allowed_cats])
|
||||||
|
|
||||||
|
return prompt + ", " + artist.name if prompt != '' else artist.name
|
||||||
|
|
||||||
|
|
||||||
def visit(x, func, path=""):
|
def visit(x, func, path=""):
|
||||||
if hasattr(x, 'children'):
|
if hasattr(x, 'children'):
|
||||||
for c in x.children:
|
for c in x.children:
|
||||||
@ -146,6 +154,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo):
|
|||||||
with gr.Row():
|
with gr.Row():
|
||||||
prompt = gr.Textbox(label="Prompt", elem_id="txt2img_prompt", show_label=False, placeholder="Prompt", lines=1)
|
prompt = gr.Textbox(label="Prompt", elem_id="txt2img_prompt", show_label=False, placeholder="Prompt", lines=1)
|
||||||
negative_prompt = gr.Textbox(label="Negative prompt", elem_id="txt2img_negative_prompt", show_label=False, placeholder="Negative prompt", lines=1, visible=False)
|
negative_prompt = gr.Textbox(label="Negative prompt", elem_id="txt2img_negative_prompt", show_label=False, placeholder="Negative prompt", lines=1, visible=False)
|
||||||
|
roll = gr.Button('Roll', elem_id="txt2img_roll", visible=len(shared.artist_db.artists)>0)
|
||||||
submit = gr.Button('Generate', elem_id="txt2img_generate", variant='primary')
|
submit = gr.Button('Generate', elem_id="txt2img_generate", variant='primary')
|
||||||
|
|
||||||
with gr.Row().style(equal_height=False):
|
with gr.Row().style(equal_height=False):
|
||||||
@ -233,6 +242,16 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo):
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
roll.click(
|
||||||
|
fn=roll_artist,
|
||||||
|
inputs=[
|
||||||
|
prompt,
|
||||||
|
],
|
||||||
|
outputs=[
|
||||||
|
prompt
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
with gr.Blocks(analytics_enabled=False) as img2img_interface:
|
with gr.Blocks(analytics_enabled=False) as img2img_interface:
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
prompt = gr.Textbox(label="Prompt", elem_id="img2img_prompt", show_label=False, placeholder="Prompt", lines=1)
|
prompt = gr.Textbox(label="Prompt", elem_id="img2img_prompt", show_label=False, placeholder="Prompt", lines=1)
|
||||||
|
@ -44,6 +44,7 @@ titles = {
|
|||||||
"Tiling": "Produce an image that can be tiled.",
|
"Tiling": "Produce an image that can be tiled.",
|
||||||
"Tile overlap": "For SD upscale, how much overlap in pixels should there be between tiles. Tils overlap so that when they are merged back into one oicture, there is no clearly visible seam.",
|
"Tile overlap": "For SD upscale, how much overlap in pixels should there be between tiles. Tils overlap so that when they are merged back into one oicture, there is no clearly visible seam.",
|
||||||
|
|
||||||
|
"Roll": "Add a random artist to the prompt.",
|
||||||
}
|
}
|
||||||
|
|
||||||
function gradioApp(){
|
function gradioApp(){
|
||||||
|
Loading…
Reference in New Issue
Block a user