mirror of
				https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
				synced 2025-10-31 10:03:40 +00:00 
			
		
		
		
	Fix up string formatting/concatenation to f-strings where feasible
This commit is contained in:
		
							parent
							
								
									8fb16ceb28
								
							
						
					
					
						commit
						3ba6c3c83c
					
				| @ -570,20 +570,20 @@ class Api: | ||||
|             filename = create_embedding(**args) # create empty embedding | ||||
|             sd_hijack.model_hijack.embedding_db.load_textual_inversion_embeddings() # reload embeddings so new one can be immediately used | ||||
|             shared.state.end() | ||||
|             return CreateResponse(info = "create embedding filename: {filename}".format(filename = filename)) | ||||
|             return CreateResponse(info=f"create embedding filename: {filename}") | ||||
|         except AssertionError as e: | ||||
|             shared.state.end() | ||||
|             return TrainResponse(info = "create embedding error: {error}".format(error = e)) | ||||
|             return TrainResponse(info=f"create embedding error: {e}") | ||||
| 
 | ||||
|     def create_hypernetwork(self, args: dict): | ||||
|         try: | ||||
|             shared.state.begin() | ||||
|             filename = create_hypernetwork(**args) # create empty embedding | ||||
|             shared.state.end() | ||||
|             return CreateResponse(info = "create hypernetwork filename: {filename}".format(filename = filename)) | ||||
|             return CreateResponse(info=f"create hypernetwork filename: {filename}") | ||||
|         except AssertionError as e: | ||||
|             shared.state.end() | ||||
|             return TrainResponse(info = "create hypernetwork error: {error}".format(error = e)) | ||||
|             return TrainResponse(info=f"create hypernetwork error: {e}") | ||||
| 
 | ||||
|     def preprocess(self, args: dict): | ||||
|         try: | ||||
| @ -593,13 +593,13 @@ class Api: | ||||
|             return PreprocessResponse(info = 'preprocess complete') | ||||
|         except KeyError as e: | ||||
|             shared.state.end() | ||||
|             return PreprocessResponse(info = "preprocess error: invalid token: {error}".format(error = e)) | ||||
|             return PreprocessResponse(info=f"preprocess error: invalid token: {e}") | ||||
|         except AssertionError as e: | ||||
|             shared.state.end() | ||||
|             return PreprocessResponse(info = "preprocess error: {error}".format(error = e)) | ||||
|             return PreprocessResponse(info=f"preprocess error: {e}") | ||||
|         except FileNotFoundError as e: | ||||
|             shared.state.end() | ||||
|             return PreprocessResponse(info = 'preprocess error: {error}'.format(error = e)) | ||||
|             return PreprocessResponse(info=f'preprocess error: {e}') | ||||
| 
 | ||||
|     def train_embedding(self, args: dict): | ||||
|         try: | ||||
| @ -617,10 +617,10 @@ class Api: | ||||
|                 if not apply_optimizations: | ||||
|                     sd_hijack.apply_optimizations() | ||||
|                 shared.state.end() | ||||
|             return TrainResponse(info = "train embedding complete: filename: {filename} error: {error}".format(filename = filename, error = error)) | ||||
|             return TrainResponse(info=f"train embedding complete: filename: {filename} error: {error}") | ||||
|         except AssertionError as msg: | ||||
|             shared.state.end() | ||||
|             return TrainResponse(info = "train embedding error: {msg}".format(msg = msg)) | ||||
|             return TrainResponse(info=f"train embedding error: {msg}") | ||||
| 
 | ||||
|     def train_hypernetwork(self, args: dict): | ||||
|         try: | ||||
| @ -641,10 +641,10 @@ class Api: | ||||
|                 if not apply_optimizations: | ||||
|                     sd_hijack.apply_optimizations() | ||||
|                 shared.state.end() | ||||
|             return TrainResponse(info="train embedding complete: filename: {filename} error: {error}".format(filename=filename, error=error)) | ||||
|             return TrainResponse(info=f"train embedding complete: filename: {filename} error: {error}") | ||||
|         except AssertionError as msg: | ||||
|             shared.state.end() | ||||
|             return TrainResponse(info="train embedding error: {error}".format(error=error)) | ||||
|             return TrainResponse(info=f"train embedding error: {error}") | ||||
| 
 | ||||
|     def get_memory(self): | ||||
|         try: | ||||
|  | ||||
| @ -60,7 +60,7 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False): | ||||
|             max_debug_str_len = 131072 # (1024*1024)/8 | ||||
| 
 | ||||
|             print("Error completing request", file=sys.stderr) | ||||
|             argStr = f"Arguments: {str(args)} {str(kwargs)}" | ||||
|             argStr = f"Arguments: {args} {kwargs}" | ||||
|             print(argStr[:max_debug_str_len], file=sys.stderr) | ||||
|             if len(argStr) > max_debug_str_len: | ||||
|                 print(f"(Argument list truncated at {max_debug_str_len}/{len(argStr)} characters)", file=sys.stderr) | ||||
| @ -73,7 +73,8 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False): | ||||
|             if extra_outputs_array is None: | ||||
|                 extra_outputs_array = [None, ''] | ||||
| 
 | ||||
|             res = extra_outputs_array + [f"<div class='error'>{html.escape(type(e).__name__+': '+str(e))}</div>"] | ||||
|             error_message = f'{type(e).__name__}: {e}' | ||||
|             res = extra_outputs_array + [f"<div class='error'>{html.escape(error_message)}</div>"] | ||||
| 
 | ||||
|         shared.state.skipped = False | ||||
|         shared.state.interrupted = False | ||||
|  | ||||
| @ -156,13 +156,16 @@ class UpscalerESRGAN(Upscaler): | ||||
| 
 | ||||
|     def load_model(self, path: str): | ||||
|         if "http" in path: | ||||
|             filename = load_file_from_url(url=self.model_url, model_dir=self.model_path, | ||||
|                                           file_name="%s.pth" % self.model_name, | ||||
|                                           progress=True) | ||||
|             filename = load_file_from_url( | ||||
|                 url=self.model_url, | ||||
|                 model_dir=self.model_path, | ||||
|                 file_name=f"{self.model_name}.pth", | ||||
|                 progress=True, | ||||
|             ) | ||||
|         else: | ||||
|             filename = path | ||||
|         if not os.path.exists(filename) or filename is None: | ||||
|             print("Unable to load %s from %s" % (self.model_path, filename)) | ||||
|             print(f"Unable to load {self.model_path} from {filename}") | ||||
|             return None | ||||
| 
 | ||||
|         state_dict = torch.load(filename, map_location='cpu' if devices.device_esrgan.type == 'mps' else None) | ||||
|  | ||||
| @ -38,7 +38,7 @@ class RRDBNet(nn.Module): | ||||
|         elif upsample_mode == 'pixelshuffle': | ||||
|             upsample_block = pixelshuffle_block | ||||
|         else: | ||||
|             raise NotImplementedError('upsample mode [{:s}] is not found'.format(upsample_mode)) | ||||
|             raise NotImplementedError(f'upsample mode [{upsample_mode}] is not found') | ||||
|         if upscale == 3: | ||||
|             upsampler = upsample_block(nf, nf, 3, act_type=act_type, convtype=convtype) | ||||
|         else: | ||||
| @ -261,10 +261,10 @@ class Upsample(nn.Module): | ||||
| 
 | ||||
|     def extra_repr(self): | ||||
|         if self.scale_factor is not None: | ||||
|             info = 'scale_factor=' + str(self.scale_factor) | ||||
|             info = f'scale_factor={self.scale_factor}' | ||||
|         else: | ||||
|             info = 'size=' + str(self.size) | ||||
|         info += ', mode=' + self.mode | ||||
|             info = f'size={self.size}' | ||||
|         info += f', mode={self.mode}' | ||||
|         return info | ||||
| 
 | ||||
| 
 | ||||
| @ -350,7 +350,7 @@ def act(act_type, inplace=True, neg_slope=0.2, n_prelu=1, beta=1.0): | ||||
|     elif act_type == 'sigmoid':  # [0, 1] range output | ||||
|         layer = nn.Sigmoid() | ||||
|     else: | ||||
|         raise NotImplementedError('activation layer [{:s}] is not found'.format(act_type)) | ||||
|         raise NotImplementedError(f'activation layer [{act_type}] is not found') | ||||
|     return layer | ||||
| 
 | ||||
| 
 | ||||
| @ -372,7 +372,7 @@ def norm(norm_type, nc): | ||||
|     elif norm_type == 'none': | ||||
|         def norm_layer(x): return Identity() | ||||
|     else: | ||||
|         raise NotImplementedError('normalization layer [{:s}] is not found'.format(norm_type)) | ||||
|         raise NotImplementedError(f'normalization layer [{norm_type}] is not found') | ||||
|     return layer | ||||
| 
 | ||||
| 
 | ||||
| @ -388,7 +388,7 @@ def pad(pad_type, padding): | ||||
|     elif pad_type == 'zero': | ||||
|         layer = nn.ZeroPad2d(padding) | ||||
|     else: | ||||
|         raise NotImplementedError('padding layer [{:s}] is not implemented'.format(pad_type)) | ||||
|         raise NotImplementedError(f'padding layer [{pad_type}] is not implemented') | ||||
|     return layer | ||||
| 
 | ||||
| 
 | ||||
| @ -432,7 +432,7 @@ def conv_block(in_nc, out_nc, kernel_size, stride=1, dilation=1, groups=1, bias= | ||||
|                pad_type='zero', norm_type=None, act_type='relu', mode='CNA', convtype='Conv2D', | ||||
|                spectral_norm=False): | ||||
|     """ Conv layer with padding, normalization, activation """ | ||||
|     assert mode in ['CNA', 'NAC', 'CNAC'], 'Wrong conv mode [{:s}]'.format(mode) | ||||
|     assert mode in ['CNA', 'NAC', 'CNAC'], f'Wrong conv mode [{mode}]' | ||||
|     padding = get_valid_padding(kernel_size, dilation) | ||||
|     p = pad(pad_type, padding) if pad_type and pad_type != 'zero' else None | ||||
|     padding = padding if pad_type == 'zero' else 0 | ||||
|  | ||||
| @ -10,7 +10,8 @@ class ExtraNetworkHypernet(extra_networks.ExtraNetwork): | ||||
|         additional = shared.opts.sd_hypernetwork | ||||
| 
 | ||||
|         if additional != "None" and additional in shared.hypernetworks and len([x for x in params_list if x.items[0] == additional]) == 0: | ||||
|             p.all_prompts = [x + f"<hypernet:{additional}:{shared.opts.extra_networks_default_multiplier}>" for x in p.all_prompts] | ||||
|             hypernet_prompt_text = f"<hypernet:{additional}:{shared.opts.extra_networks_default_multiplier}>" | ||||
|             p.all_prompts = [f"{prompt}{hypernet_prompt_text}" for prompt in p.all_prompts] | ||||
|             params_list.append(extra_networks.ExtraNetworkParams(items=[additional, shared.opts.extra_networks_default_multiplier])) | ||||
| 
 | ||||
|         names = [] | ||||
|  | ||||
| @ -269,8 +269,8 @@ Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 965400086, Size: 512x512, Model | ||||
|         v = v[1:-1] if v[0] == '"' and v[-1] == '"' else v | ||||
|         m = re_imagesize.match(v) | ||||
|         if m is not None: | ||||
|             res[k+"-1"] = m.group(1) | ||||
|             res[k+"-2"] = m.group(2) | ||||
|             res[f"{k}-1"] = m.group(1) | ||||
|             res[f"{k}-2"] = m.group(2) | ||||
|         else: | ||||
|             res[k] = v | ||||
| 
 | ||||
|  | ||||
| @ -13,7 +13,7 @@ cache_data = None | ||||
| 
 | ||||
| 
 | ||||
| def dump_cache(): | ||||
|     with filelock.FileLock(cache_filename+".lock"): | ||||
|     with filelock.FileLock(f"{cache_filename}.lock"): | ||||
|         with open(cache_filename, "w", encoding="utf8") as file: | ||||
|             json.dump(cache_data, file, indent=4) | ||||
| 
 | ||||
| @ -22,7 +22,7 @@ def cache(subsection): | ||||
|     global cache_data | ||||
| 
 | ||||
|     if cache_data is None: | ||||
|         with filelock.FileLock(cache_filename+".lock"): | ||||
|         with filelock.FileLock(f"{cache_filename}.lock"): | ||||
|             if not os.path.isfile(cache_filename): | ||||
|                 cache_data = {} | ||||
|             else: | ||||
|  | ||||
| @ -467,7 +467,7 @@ def get_next_sequence_number(path, basename): | ||||
|     """ | ||||
|     result = -1 | ||||
|     if basename != '': | ||||
|         basename = basename + "-" | ||||
|         basename = f"{basename}-" | ||||
| 
 | ||||
|     prefix_length = len(basename) | ||||
|     for p in os.listdir(path): | ||||
| @ -536,7 +536,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i | ||||
|         add_number = opts.save_images_add_number or file_decoration == '' | ||||
| 
 | ||||
|         if file_decoration != "" and add_number: | ||||
|             file_decoration = "-" + file_decoration | ||||
|             file_decoration = f"-{file_decoration}" | ||||
| 
 | ||||
|         file_decoration = namegen.apply(file_decoration) + suffix | ||||
| 
 | ||||
| @ -566,7 +566,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i | ||||
| 
 | ||||
|     def _atomically_save_image(image_to_save, filename_without_extension, extension): | ||||
|         # save image with .tmp extension to avoid race condition when another process detects new image in the directory | ||||
|         temp_file_path = filename_without_extension + ".tmp" | ||||
|         temp_file_path = f"{filename_without_extension}.tmp" | ||||
|         image_format = Image.registered_extensions()[extension] | ||||
| 
 | ||||
|         if extension.lower() == '.png': | ||||
| @ -626,7 +626,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i | ||||
|     if opts.save_txt and info is not None: | ||||
|         txt_fullfn = f"{fullfn_without_extension}.txt" | ||||
|         with open(txt_fullfn, "w", encoding="utf8") as file: | ||||
|             file.write(info + "\n") | ||||
|             file.write(f"{info}\n") | ||||
|     else: | ||||
|         txt_fullfn = None | ||||
| 
 | ||||
|  | ||||
| @ -28,7 +28,7 @@ def category_types(): | ||||
| def download_default_clip_interrogate_categories(content_dir): | ||||
|     print("Downloading CLIP categories...") | ||||
| 
 | ||||
|     tmpdir = content_dir + "_tmp" | ||||
|     tmpdir = f"{content_dir}_tmp" | ||||
|     category_types = ["artists", "flavors", "mediums", "movements"] | ||||
| 
 | ||||
|     try: | ||||
| @ -214,7 +214,7 @@ class InterrogateModels: | ||||
|                         if shared.opts.interrogate_return_ranks: | ||||
|                             res += f", ({match}:{score/100:.3f})" | ||||
|                         else: | ||||
|                             res += ", " + match | ||||
|                             res += f", {match}" | ||||
| 
 | ||||
|         except Exception: | ||||
|             print("Error interrogating", file=sys.stderr) | ||||
|  | ||||
| @ -223,7 +223,7 @@ class DDPM(pl.LightningModule): | ||||
|         for k in keys: | ||||
|             for ik in ignore_keys: | ||||
|                 if k.startswith(ik): | ||||
|                     print("Deleting key {} from state_dict.".format(k)) | ||||
|                     print(f"Deleting key {k} from state_dict.") | ||||
|                     del sd[k] | ||||
|         missing, unexpected = self.load_state_dict(sd, strict=False) if not only_model else self.model.load_state_dict( | ||||
|             sd, strict=False) | ||||
| @ -386,7 +386,7 @@ class DDPM(pl.LightningModule): | ||||
|         _, loss_dict_no_ema = self.shared_step(batch) | ||||
|         with self.ema_scope(): | ||||
|             _, loss_dict_ema = self.shared_step(batch) | ||||
|             loss_dict_ema = {key + '_ema': loss_dict_ema[key] for key in loss_dict_ema} | ||||
|             loss_dict_ema = {f"{key}_ema": loss_dict_ema[key] for key in loss_dict_ema} | ||||
|         self.log_dict(loss_dict_no_ema, prog_bar=False, logger=True, on_step=False, on_epoch=True) | ||||
|         self.log_dict(loss_dict_ema, prog_bar=False, logger=True, on_step=False, on_epoch=True) | ||||
| 
 | ||||
|  | ||||
| @ -94,7 +94,7 @@ class NoiseScheduleVP: | ||||
|         """ | ||||
| 
 | ||||
|         if schedule not in ['discrete', 'linear', 'cosine']: | ||||
|             raise ValueError("Unsupported noise schedule {}. The schedule needs to be 'discrete' or 'linear' or 'cosine'".format(schedule)) | ||||
|             raise ValueError(f"Unsupported noise schedule {schedule}. The schedule needs to be 'discrete' or 'linear' or 'cosine'") | ||||
| 
 | ||||
|         self.schedule = schedule | ||||
|         if schedule == 'discrete': | ||||
| @ -469,7 +469,7 @@ class UniPC: | ||||
|             t = torch.linspace(t_T**(1. / t_order), t_0**(1. / t_order), N + 1).pow(t_order).to(device) | ||||
|             return t | ||||
|         else: | ||||
|             raise ValueError("Unsupported skip_type {}, need to be 'logSNR' or 'time_uniform' or 'time_quadratic'".format(skip_type)) | ||||
|             raise ValueError(f"Unsupported skip_type {skip_type}, need to be 'logSNR' or 'time_uniform' or 'time_quadratic'") | ||||
| 
 | ||||
|     def get_orders_and_timesteps_for_singlestep_solver(self, steps, order, skip_type, t_T, t_0, device): | ||||
|         """ | ||||
|  | ||||
| @ -7,8 +7,8 @@ def connect(token, port, region): | ||||
|     else: | ||||
|         if ':' in token: | ||||
|             # token = authtoken:username:password | ||||
|             account = token.split(':')[1] + ':' + token.split(':')[-1] | ||||
|             token = token.split(':')[0] | ||||
|             token, username, password = token.split(':', 2) | ||||
|             account = f"{username}:{password}" | ||||
| 
 | ||||
|     config = conf.PyngrokConfig( | ||||
|         auth_token=token, region=region | ||||
|  | ||||
| @ -16,7 +16,7 @@ for possible_sd_path in possible_sd_paths: | ||||
|         sd_path = os.path.abspath(possible_sd_path) | ||||
|         break | ||||
| 
 | ||||
| assert sd_path is not None, "Couldn't find Stable Diffusion in any of: " + str(possible_sd_paths) | ||||
| assert sd_path is not None, f"Couldn't find Stable Diffusion in any of: {possible_sd_paths}" | ||||
| 
 | ||||
| path_dirs = [ | ||||
|     (sd_path, 'ldm', 'Stable Diffusion', []), | ||||
|  | ||||
| @ -500,7 +500,7 @@ def create_infotext(p, all_prompts, all_seeds, all_subseeds, comments=None, iter | ||||
| 
 | ||||
|     generation_params_text = ", ".join([k if k == v else f'{k}: {generation_parameters_copypaste.quote(v)}' for k, v in generation_params.items() if v is not None]) | ||||
| 
 | ||||
|     negative_prompt_text = "\nNegative prompt: " + p.all_negative_prompts[index] if p.all_negative_prompts[index] else "" | ||||
|     negative_prompt_text = f"\nNegative prompt: {p.all_negative_prompts[index]}" if p.all_negative_prompts[index] else "" | ||||
| 
 | ||||
|     return f"{all_prompts[index]}{negative_prompt_text}\n{generation_params_text}".strip() | ||||
| 
 | ||||
| @ -780,7 +780,16 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed: | ||||
| 
 | ||||
|     devices.torch_gc() | ||||
| 
 | ||||
|     res = Processed(p, output_images, p.all_seeds[0], infotext(), comments="".join(["\n\n" + x for x in comments]), subseed=p.all_subseeds[0], index_of_first_image=index_of_first_image, infotexts=infotexts) | ||||
|     res = Processed( | ||||
|         p, | ||||
|         images_list=output_images, | ||||
|         seed=p.all_seeds[0], | ||||
|         info=infotext(), | ||||
|         comments="".join(f"\n\n{comment}" for comment in comments), | ||||
|         subseed=p.all_subseeds[0], | ||||
|         index_of_first_image=index_of_first_image, | ||||
|         infotexts=infotexts, | ||||
|     ) | ||||
| 
 | ||||
|     if p.scripts is not None: | ||||
|         p.scripts.postprocess(p, res) | ||||
|  | ||||
| @ -96,7 +96,8 @@ def progressapi(req: ProgressRequest): | ||||
|         if image is not None: | ||||
|             buffered = io.BytesIO() | ||||
|             image.save(buffered, format="png") | ||||
|             live_preview = 'data:image/png;base64,' + base64.b64encode(buffered.getvalue()).decode("ascii") | ||||
|             base64_image = base64.b64encode(buffered.getvalue()).decode('ascii') | ||||
|             live_preview = f"data:image/png;base64,{base64_image}" | ||||
|             id_live_preview = shared.state.id_live_preview | ||||
|         else: | ||||
|             live_preview = None | ||||
|  | ||||
| @ -28,9 +28,9 @@ class UpscalerRealESRGAN(Upscaler): | ||||
|             for scaler in scalers: | ||||
|                 if scaler.local_data_path.startswith("http"): | ||||
|                     filename = modelloader.friendly_name(scaler.local_data_path) | ||||
|                     local = next(iter([local_model for local_model in local_model_paths if local_model.endswith(filename + '.pth')]), None) | ||||
|                     if local: | ||||
|                         scaler.local_data_path = local | ||||
|                     local_model_candidates = [local_model for local_model in local_model_paths if local_model.endswith(f"{filename}.pth")] | ||||
|                     if local_model_candidates: | ||||
|                         scaler.local_data_path = local_model_candidates[0] | ||||
| 
 | ||||
|                 if scaler.name in opts.realesrgan_enabled_models: | ||||
|                     self.scalers.append(scaler) | ||||
| @ -47,7 +47,7 @@ class UpscalerRealESRGAN(Upscaler): | ||||
| 
 | ||||
|         info = self.load_model(path) | ||||
|         if not os.path.exists(info.local_data_path): | ||||
|             print("Unable to load RealESRGAN model: %s" % info.name) | ||||
|             print(f"Unable to load RealESRGAN model: {info.name}") | ||||
|             return img | ||||
| 
 | ||||
|         upsampler = RealESRGANer( | ||||
|  | ||||
| @ -163,7 +163,8 @@ class Script: | ||||
|         """helper function to generate id for a HTML element, constructs final id out of script name, tab and user-supplied item_id""" | ||||
| 
 | ||||
|         need_tabname = self.show(True) == self.show(False) | ||||
|         tabname = ('img2img' if self.is_img2img else 'txt2txt') + "_" if need_tabname else "" | ||||
|         tabkind = 'img2img' if self.is_img2img else 'txt2txt' | ||||
|         tabname = f"{tabkind}_" if need_tabname else "" | ||||
|         title = re.sub(r'[^a-z_0-9]', '', re.sub(r'\s', '_', self.title().lower())) | ||||
| 
 | ||||
|         return f'script_{tabname}{title}_{item_id}' | ||||
| @ -526,7 +527,7 @@ def add_classes_to_gradio_component(comp): | ||||
|     this adds gradio-* to the component for css styling (ie gradio-button to gr.Button), as well as some others | ||||
|     """ | ||||
| 
 | ||||
|     comp.elem_classes = ["gradio-" + comp.get_block_name(), *(comp.elem_classes or [])] | ||||
|     comp.elem_classes = [f"gradio-{comp.get_block_name()}", *(comp.elem_classes or [])] | ||||
| 
 | ||||
|     if getattr(comp, 'multiselect', False): | ||||
|         comp.elem_classes.append('multiselect') | ||||
|  | ||||
| @ -75,7 +75,8 @@ def forward_old(self: sd_hijack_clip.FrozenCLIPEmbedderWithCustomWordsBase, text | ||||
|     self.hijack.comments += hijack_comments | ||||
| 
 | ||||
|     if len(used_custom_terms) > 0: | ||||
|         self.hijack.comments.append("Used embeddings: " + ", ".join([f'{word} [{checksum}]' for word, checksum in used_custom_terms])) | ||||
|         embedding_names = ", ".join(f"{word} [{checksum}]" for word, checksum in used_custom_terms) | ||||
|         self.hijack.comments.append(f"Used embeddings: {embedding_names}") | ||||
| 
 | ||||
|     self.hijack.fixes = hijack_fixes | ||||
|     return self.process_tokens(remade_batch_tokens, batch_multipliers) | ||||
|  | ||||
| @ -18,7 +18,7 @@ class TorchHijackForUnet: | ||||
|         if hasattr(torch, item): | ||||
|             return getattr(torch, item) | ||||
| 
 | ||||
|         raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, item)) | ||||
|         raise AttributeError(f"'{type(self).__name__}' object has no attribute '{item}'") | ||||
| 
 | ||||
|     def cat(self, tensors, *args, **kwargs): | ||||
|         if len(tensors) == 2: | ||||
|  | ||||
| @ -47,7 +47,7 @@ class CheckpointInfo: | ||||
|         self.model_name = os.path.splitext(name.replace("/", "_").replace("\\", "_"))[0] | ||||
|         self.hash = model_hash(filename) | ||||
| 
 | ||||
|         self.sha256 = hashes.sha256_from_cache(self.filename, "checkpoint/" + name) | ||||
|         self.sha256 = hashes.sha256_from_cache(self.filename, f"checkpoint/{name}") | ||||
|         self.shorthash = self.sha256[0:10] if self.sha256 else None | ||||
| 
 | ||||
|         self.title = name if self.shorthash is None else f'{name} [{self.shorthash}]' | ||||
| @ -69,7 +69,7 @@ class CheckpointInfo: | ||||
|             checkpoint_alisases[id] = self | ||||
| 
 | ||||
|     def calculate_shorthash(self): | ||||
|         self.sha256 = hashes.sha256(self.filename, "checkpoint/" + self.name) | ||||
|         self.sha256 = hashes.sha256(self.filename, f"checkpoint/{self.name}") | ||||
|         if self.sha256 is None: | ||||
|             return | ||||
| 
 | ||||
|  | ||||
| @ -111,7 +111,7 @@ def find_checkpoint_config_near_filename(info): | ||||
|     if info is None: | ||||
|         return None | ||||
| 
 | ||||
|     config = os.path.splitext(info.filename)[0] + ".yaml" | ||||
|     config = f"{os.path.splitext(info.filename)[0]}.yaml" | ||||
|     if os.path.exists(config): | ||||
|         return config | ||||
| 
 | ||||
|  | ||||
| @ -198,7 +198,7 @@ class TorchHijack: | ||||
|         if hasattr(torch, item): | ||||
|             return getattr(torch, item) | ||||
| 
 | ||||
|         raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, item)) | ||||
|         raise AttributeError(f"'{type(self).__name__}' object has no attribute '{item}'") | ||||
| 
 | ||||
|     def randn_like(self, x): | ||||
|         if self.sampler_noises: | ||||
|  | ||||
| @ -89,7 +89,7 @@ def refresh_vae_list(): | ||||
| 
 | ||||
| def find_vae_near_checkpoint(checkpoint_file): | ||||
|     checkpoint_path = os.path.splitext(checkpoint_file)[0] | ||||
|     for vae_location in [checkpoint_path + ".vae.pt", checkpoint_path + ".vae.ckpt", checkpoint_path + ".vae.safetensors"]: | ||||
|     for vae_location in [f"{checkpoint_path}.vae.pt", f"{checkpoint_path}.vae.ckpt", f"{checkpoint_path}.vae.safetensors"]: | ||||
|         if os.path.isfile(vae_location): | ||||
|             return vae_location | ||||
| 
 | ||||
|  | ||||
| @ -74,7 +74,7 @@ class StyleDatabase: | ||||
|     def save_styles(self, path: str) -> None: | ||||
|         # Always keep a backup file around | ||||
|         if os.path.exists(path): | ||||
|             shutil.copy(path, path + ".bak") | ||||
|             shutil.copy(path, f"{path}.bak") | ||||
| 
 | ||||
|         fd = os.open(path, os.O_RDWR|os.O_CREAT) | ||||
|         with os.fdopen(fd, "w", encoding="utf-8-sig", newline='') as file: | ||||
|  | ||||
| @ -111,7 +111,7 @@ def focal_point(im, settings): | ||||
|       if corner_centroid is not None: | ||||
|         color = BLUE | ||||
|         box = corner_centroid.bounding(max_size * corner_centroid.weight) | ||||
|         d.text((box[0], box[1]-15), "Edge: %.02f" % corner_centroid.weight, fill=color) | ||||
|         d.text((box[0], box[1]-15), f"Edge: {corner_centroid.weight:.02f}", fill=color) | ||||
|         d.ellipse(box, outline=color) | ||||
|         if len(corner_points) > 1: | ||||
|           for f in corner_points: | ||||
| @ -119,7 +119,7 @@ def focal_point(im, settings): | ||||
|       if entropy_centroid is not None: | ||||
|         color = "#ff0" | ||||
|         box = entropy_centroid.bounding(max_size * entropy_centroid.weight) | ||||
|         d.text((box[0], box[1]-15), "Entropy: %.02f" % entropy_centroid.weight, fill=color) | ||||
|         d.text((box[0], box[1]-15), f"Entropy: {entropy_centroid.weight:.02f}", fill=color) | ||||
|         d.ellipse(box, outline=color) | ||||
|         if len(entropy_points) > 1: | ||||
|           for f in entropy_points: | ||||
| @ -127,7 +127,7 @@ def focal_point(im, settings): | ||||
|       if face_centroid is not None: | ||||
|         color = RED | ||||
|         box = face_centroid.bounding(max_size * face_centroid.weight) | ||||
|         d.text((box[0], box[1]-15), "Face: %.02f" % face_centroid.weight, fill=color) | ||||
|         d.text((box[0], box[1]-15), f"Face: {face_centroid.weight:.02f}", fill=color) | ||||
|         d.ellipse(box, outline=color) | ||||
|         if len(face_points) > 1: | ||||
|           for f in face_points: | ||||
|  | ||||
| @ -72,7 +72,7 @@ class PersonalizedBase(Dataset): | ||||
|             except Exception: | ||||
|                 continue | ||||
| 
 | ||||
|             text_filename = os.path.splitext(path)[0] + ".txt" | ||||
|             text_filename = f"{os.path.splitext(path)[0]}.txt" | ||||
|             filename = os.path.basename(path) | ||||
| 
 | ||||
|             if os.path.exists(text_filename): | ||||
|  | ||||
| @ -63,9 +63,9 @@ def save_pic_with_caption(image, index, params: PreprocessParams, existing_capti | ||||
|     image.save(os.path.join(params.dstdir, f"{basename}.png")) | ||||
| 
 | ||||
|     if params.preprocess_txt_action == 'prepend' and existing_caption: | ||||
|         caption = existing_caption + ' ' + caption | ||||
|         caption = f"{existing_caption} {caption}" | ||||
|     elif params.preprocess_txt_action == 'append' and existing_caption: | ||||
|         caption = caption + ' ' + existing_caption | ||||
|         caption = f"{caption} {existing_caption}" | ||||
|     elif params.preprocess_txt_action == 'copy' and existing_caption: | ||||
|         caption = existing_caption | ||||
| 
 | ||||
| @ -174,7 +174,7 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pre | ||||
|         params.src = filename | ||||
| 
 | ||||
|         existing_caption = None | ||||
|         existing_caption_filename = os.path.splitext(filename)[0] + '.txt' | ||||
|         existing_caption_filename = f"{os.path.splitext(filename)[0]}.txt" | ||||
|         if os.path.exists(existing_caption_filename): | ||||
|             with open(existing_caption_filename, 'r', encoding="utf8") as file: | ||||
|                 existing_caption = file.read() | ||||
|  | ||||
| @ -69,7 +69,7 @@ class Embedding: | ||||
|                 'hash': self.checksum(), | ||||
|                 'optimizer_state_dict': self.optimizer_state_dict, | ||||
|             } | ||||
|             torch.save(optimizer_saved_dict, filename + '.optim') | ||||
|             torch.save(optimizer_saved_dict, f"{filename}.optim") | ||||
| 
 | ||||
|     def checksum(self): | ||||
|         if self.cached_checksum is not None: | ||||
| @ -437,8 +437,8 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st | ||||
|     optimizer = torch.optim.AdamW([embedding.vec], lr=scheduler.learn_rate, weight_decay=0.0) | ||||
|     if shared.opts.save_optimizer_state: | ||||
|         optimizer_state_dict = None | ||||
|         if os.path.exists(filename + '.optim'): | ||||
|             optimizer_saved_dict = torch.load(filename + '.optim', map_location='cpu') | ||||
|         if os.path.exists(f"{filename}.optim"): | ||||
|             optimizer_saved_dict = torch.load(f"{filename}.optim", map_location='cpu') | ||||
|             if embedding.checksum() == optimizer_saved_dict.get('hash', None): | ||||
|                 optimizer_state_dict = optimizer_saved_dict.get('optimizer_state_dict', None) | ||||
|      | ||||
| @ -599,7 +599,7 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st | ||||
|                         data = torch.load(last_saved_file) | ||||
|                         info.add_text("sd-ti-embedding", embedding_to_b64(data)) | ||||
| 
 | ||||
|                         title = "<{}>".format(data.get('name', '???')) | ||||
|                         title = f"<{data.get('name', '???')}>" | ||||
| 
 | ||||
|                         try: | ||||
|                             vectorSize = list(data['string_to_param'].values())[0].shape[0] | ||||
| @ -608,8 +608,8 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st | ||||
| 
 | ||||
|                         checkpoint = sd_models.select_checkpoint() | ||||
|                         footer_left = checkpoint.model_name | ||||
|                         footer_mid = '[{}]'.format(checkpoint.shorthash) | ||||
|                         footer_right = '{}v {}s'.format(vectorSize, steps_done) | ||||
|                         footer_mid = f'[{checkpoint.shorthash}]' | ||||
|                         footer_right = f'{vectorSize}v {steps_done}s' | ||||
| 
 | ||||
|                         captioned_image = caption_image_overlay(image, title, footer_left, footer_mid, footer_right) | ||||
|                         captioned_image = insert_image_data_embed(captioned_image, data) | ||||
|  | ||||
| @ -101,7 +101,7 @@ def visit(x, func, path=""): | ||||
|         for c in x.children: | ||||
|             visit(c, func, path) | ||||
|     elif x.label is not None: | ||||
|         func(path + "/" + str(x.label), x) | ||||
|         func(f"{path}/{x.label}", x) | ||||
| 
 | ||||
| 
 | ||||
| def add_style(name: str, prompt: str, negative_prompt: str): | ||||
| @ -166,7 +166,7 @@ def process_interrogate(interrogation_function, mode, ii_input_dir, ii_output_di | ||||
|             img = Image.open(image) | ||||
|             filename = os.path.basename(image) | ||||
|             left, _ = os.path.splitext(filename) | ||||
|             print(interrogation_function(img), file=open(os.path.join(ii_output_dir, left + ".txt"), 'a')) | ||||
|             print(interrogation_function(img), file=open(os.path.join(ii_output_dir, f"{left}.txt"), 'a')) | ||||
| 
 | ||||
|         return [gr.update(), None] | ||||
| 
 | ||||
| @ -182,29 +182,29 @@ def interrogate_deepbooru(image): | ||||
| 
 | ||||
| 
 | ||||
| def create_seed_inputs(target_interface): | ||||
|     with FormRow(elem_id=target_interface + '_seed_row', variant="compact"): | ||||
|         seed = (gr.Textbox if cmd_opts.use_textbox_seed else gr.Number)(label='Seed', value=-1, elem_id=target_interface + '_seed') | ||||
|     with FormRow(elem_id=f"{target_interface}_seed_row", variant="compact"): | ||||
|         seed = (gr.Textbox if cmd_opts.use_textbox_seed else gr.Number)(label='Seed', value=-1, elem_id=f"{target_interface}_seed") | ||||
|         seed.style(container=False) | ||||
|         random_seed = ToolButton(random_symbol, elem_id=target_interface + '_random_seed', label='Random seed') | ||||
|         reuse_seed = ToolButton(reuse_symbol, elem_id=target_interface + '_reuse_seed', label='Reuse seed') | ||||
|         random_seed = ToolButton(random_symbol, elem_id=f"{target_interface}_random_seed", label='Random seed') | ||||
|         reuse_seed = ToolButton(reuse_symbol, elem_id=f"{target_interface}_reuse_seed", label='Reuse seed') | ||||
| 
 | ||||
|         seed_checkbox = gr.Checkbox(label='Extra', elem_id=target_interface + '_subseed_show', value=False) | ||||
|         seed_checkbox = gr.Checkbox(label='Extra', elem_id=f"{target_interface}_subseed_show", value=False) | ||||
| 
 | ||||
|     # Components to show/hide based on the 'Extra' checkbox | ||||
|     seed_extras = [] | ||||
| 
 | ||||
|     with FormRow(visible=False, elem_id=target_interface + '_subseed_row') as seed_extra_row_1: | ||||
|     with FormRow(visible=False, elem_id=f"{target_interface}_subseed_row") as seed_extra_row_1: | ||||
|         seed_extras.append(seed_extra_row_1) | ||||
|         subseed = gr.Number(label='Variation seed', value=-1, elem_id=target_interface + '_subseed') | ||||
|         subseed = gr.Number(label='Variation seed', value=-1, elem_id=f"{target_interface}_subseed") | ||||
|         subseed.style(container=False) | ||||
|         random_subseed = ToolButton(random_symbol, elem_id=target_interface + '_random_subseed') | ||||
|         reuse_subseed = ToolButton(reuse_symbol, elem_id=target_interface + '_reuse_subseed') | ||||
|         subseed_strength = gr.Slider(label='Variation strength', value=0.0, minimum=0, maximum=1, step=0.01, elem_id=target_interface + '_subseed_strength') | ||||
|         random_subseed = ToolButton(random_symbol, elem_id=f"{target_interface}_random_subseed") | ||||
|         reuse_subseed = ToolButton(reuse_symbol, elem_id=f"{target_interface}_reuse_subseed") | ||||
|         subseed_strength = gr.Slider(label='Variation strength', value=0.0, minimum=0, maximum=1, step=0.01, elem_id=f"{target_interface}_subseed_strength") | ||||
| 
 | ||||
|     with FormRow(visible=False) as seed_extra_row_2: | ||||
|         seed_extras.append(seed_extra_row_2) | ||||
|         seed_resize_from_w = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize seed from width", value=0, elem_id=target_interface + '_seed_resize_from_w') | ||||
|         seed_resize_from_h = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize seed from height", value=0, elem_id=target_interface + '_seed_resize_from_h') | ||||
|         seed_resize_from_w = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize seed from width", value=0, elem_id=f"{target_interface}_seed_resize_from_w") | ||||
|         seed_resize_from_h = gr.Slider(minimum=0, maximum=2048, step=8, label="Resize seed from height", value=0, elem_id=f"{target_interface}_seed_resize_from_h") | ||||
| 
 | ||||
|     random_seed.click(fn=lambda: -1, show_progress=False, inputs=[], outputs=[seed]) | ||||
|     random_subseed.click(fn=lambda: -1, show_progress=False, inputs=[], outputs=[subseed]) | ||||
| @ -765,7 +765,7 @@ def create_ui(): | ||||
|                     ) | ||||
|                     button.click( | ||||
|                         fn=lambda: None, | ||||
|                         _js="switch_to_"+name.replace(" ", "_"), | ||||
|                         _js=f"switch_to_{name.replace(' ', '_')}", | ||||
|                         inputs=[], | ||||
|                         outputs=[], | ||||
|                     ) | ||||
| @ -1462,18 +1462,18 @@ def create_ui(): | ||||
|         elif t == bool: | ||||
|             comp = gr.Checkbox | ||||
|         else: | ||||
|             raise Exception(f'bad options item type: {str(t)} for key {key}') | ||||
|             raise Exception(f'bad options item type: {t} for key {key}') | ||||
| 
 | ||||
|         elem_id = "setting_"+key | ||||
|         elem_id = f"setting_{key}" | ||||
| 
 | ||||
|         if info.refresh is not None: | ||||
|             if is_quicksettings: | ||||
|                 res = comp(label=info.label, value=fun(), elem_id=elem_id, **(args or {})) | ||||
|                 create_refresh_button(res, info.refresh, info.component_args, "refresh_" + key) | ||||
|                 create_refresh_button(res, info.refresh, info.component_args, f"refresh_{key}") | ||||
|             else: | ||||
|                 with FormRow(): | ||||
|                     res = comp(label=info.label, value=fun(), elem_id=elem_id, **(args or {})) | ||||
|                     create_refresh_button(res, info.refresh, info.component_args, "refresh_" + key) | ||||
|                     create_refresh_button(res, info.refresh, info.component_args, f"refresh_{key}") | ||||
|         else: | ||||
|             res = comp(label=info.label, value=fun(), elem_id=elem_id, **(args or {})) | ||||
| 
 | ||||
| @ -1545,7 +1545,7 @@ def create_ui(): | ||||
|                         current_tab.__exit__() | ||||
| 
 | ||||
|                     gr.Group() | ||||
|                     current_tab = gr.TabItem(elem_id="settings_{}".format(elem_id), label=text) | ||||
|                     current_tab = gr.TabItem(elem_id=f"settings_{elem_id}", label=text) | ||||
|                     current_tab.__enter__() | ||||
|                     current_row = gr.Column(variant='compact') | ||||
|                     current_row.__enter__() | ||||
| @ -1664,7 +1664,7 @@ def create_ui(): | ||||
|             for interface, label, ifid in interfaces: | ||||
|                 if label in shared.opts.hidden_tabs: | ||||
|                     continue | ||||
|                 with gr.TabItem(label, id=ifid, elem_id='tab_' + ifid): | ||||
|                 with gr.TabItem(label, id=ifid, elem_id=f"tab_{ifid}"): | ||||
|                     interface.render() | ||||
| 
 | ||||
|         if os.path.exists(os.path.join(script_path, "notification.mp3")): | ||||
| @ -1771,10 +1771,10 @@ def create_ui(): | ||||
| 
 | ||||
|     def loadsave(path, x): | ||||
|         def apply_field(obj, field, condition=None, init_field=None): | ||||
|             key = path + "/" + field | ||||
|             key = f"{path}/{field}" | ||||
| 
 | ||||
|             if getattr(obj, 'custom_script_source', None) is not None: | ||||
|               key = 'customscript/' + obj.custom_script_source + '/' + key | ||||
|               key = f"customscript/{obj.custom_script_source}/{key}" | ||||
| 
 | ||||
|             if getattr(obj, 'do_not_save_to_config', False): | ||||
|                 return | ||||
|  | ||||
| @ -61,7 +61,8 @@ def save_config_state(name): | ||||
|     if not name: | ||||
|         name = "Config" | ||||
|     current_config_state["name"] = name | ||||
|     filename = os.path.join(config_states_dir, datetime.now().strftime("%Y_%m_%d-%H_%M_%S") + "_" + name + ".json") | ||||
|     timestamp = datetime.now().strftime('%Y_%m_%d-%H_%M_%S') | ||||
|     filename = os.path.join(config_states_dir, f"{timestamp}_{name}.json") | ||||
|     print(f"Saving backup of webui/extension state to {filename}.") | ||||
|     with open(filename, "w", encoding="utf-8") as f: | ||||
|         json.dump(current_config_state, f) | ||||
|  | ||||
| @ -69,7 +69,9 @@ class ExtraNetworksPage: | ||||
|         pass | ||||
| 
 | ||||
|     def link_preview(self, filename): | ||||
|         return "./sd_extra_networks/thumb?filename=" + urllib.parse.quote(filename.replace('\\', '/')) + "&mtime=" + str(os.path.getmtime(filename)) | ||||
|         quoted_filename = urllib.parse.quote(filename.replace('\\', '/')) | ||||
|         mtime = os.path.getmtime(filename) | ||||
|         return f"./sd_extra_networks/thumb?filename={quoted_filename}&mtime={mtime}" | ||||
| 
 | ||||
|     def search_terms_from_path(self, filename, possible_directories=None): | ||||
|         abspath = os.path.abspath(filename) | ||||
|  | ||||
| @ -77,7 +77,7 @@ return process_images(p) | ||||
|         module.display = display | ||||
| 
 | ||||
|         indent = " " * indent_level | ||||
|         indented = code.replace('\n', '\n' + indent) | ||||
|         indented = code.replace('\n', f"\n{indent}") | ||||
|         body = f"""def __webuitemp__(): | ||||
| {indent}{indented} | ||||
| __webuitemp__()""" | ||||
|  | ||||
| @ -84,7 +84,7 @@ class Script(scripts.Script): | ||||
|                     p.color_corrections = initial_color_corrections | ||||
| 
 | ||||
|                 if append_interrogation != "None": | ||||
|                     p.prompt = original_prompt + ", " if original_prompt != "" else "" | ||||
|                     p.prompt = f"{original_prompt}, " if original_prompt else "" | ||||
|                     if append_interrogation == "CLIP": | ||||
|                         p.prompt += shared.interrogator.interrogate(p.init_images[0]) | ||||
|                     elif append_interrogation == "DeepBooru": | ||||
|  | ||||
| @ -439,7 +439,7 @@ class Script(scripts.Script): | ||||
|         z_type.change(fn=select_axis, inputs=[z_type,z_values_dropdown], outputs=[fill_z_button,z_values,z_values_dropdown]) | ||||
| 
 | ||||
|         def get_dropdown_update_from_params(axis,params): | ||||
|             val_key = axis + " Values" | ||||
|             val_key = f"{axis} Values" | ||||
|             vals = params.get(val_key,"") | ||||
|             valslist = [x.strip() for x in chain.from_iterable(csv.reader(StringIO(vals))) if x] | ||||
|             return gr.update(value = valslist) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Aarni Koskela
						Aarni Koskela