diff --git a/scripts/console_log_patch.py b/scripts/console_log_patch.py index 8e9d6db..46d0569 100644 --- a/scripts/console_log_patch.py +++ b/scripts/console_log_patch.py @@ -114,7 +114,7 @@ def apply_logging_patch(console_logging_level): logger.setLevel(logging.WARNING) elif console_logging_level == 1: patch_insightface(*patched_functions) - logger.setLevel(logging.INFO) + logger.setLevel(logging.STATUS) elif console_logging_level == 2: patch_insightface(*original_functions) - logger.setLevel(logging.INFO) + logger.setLevel(logging.STATUS) diff --git a/scripts/reactor_api.py b/scripts/reactor_api.py index c9c3aed..1ffb880 100644 --- a/scripts/reactor_api.py +++ b/scripts/reactor_api.py @@ -89,7 +89,7 @@ def reactor_api(_: gr.Blocks, app: FastAPI): result_file_path = default_file_path() try: result[0].save(result_file_path, format='PNG') - logger.info("Result has been saved to: %s", result_file_path) + logger.status("Result has been saved to: %s", result_file_path) except Exception as e: logger.error("Error while saving result: %s",e) return {"image": api.encode_pil_to_base64(result[0])} diff --git a/scripts/reactor_faceswap.py b/scripts/reactor_faceswap.py index f8f3fdd..337b7b7 100644 --- a/scripts/reactor_faceswap.py +++ b/scripts/reactor_faceswap.py @@ -266,11 +266,11 @@ class FaceSwapScript(scripts.Script): if self.source is not None: apply_logging_patch(console_logging_level) if isinstance(p, StableDiffusionProcessingImg2Img) and swap_in_source: - logger.info("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index) + logger.status("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index) for i in range(len(p.init_images)): if len(p.init_images) > 1: - logger.info("Swap in %s", i) + logger.status("Swap in %s", i) result, output, swapped = swap_face( self.source, p.init_images[i], @@ -311,14 +311,14 @@ class FaceSwapScript(scripts.Script): # result_info: List = processed.infotexts if self.swap_in_generated: - logger.info("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index) + logger.status("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index) if self.source is not None: for i,(img,info) in enumerate(zip(orig_images, orig_infotexts)): if check_process_halt(): postprocess_run = False break if len(orig_images) > 1: - logger.info("Swap in %s", i) + logger.status("Swap in %s", i) result, output, swapped = swap_face( self.source, img, @@ -371,7 +371,7 @@ class FaceSwapScript(scripts.Script): return if self.source is not None: - logger.info("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index) + logger.status("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index) image: Image.Image = script_pp.image result, output, swapped = swap_face( self.source, diff --git a/scripts/reactor_helpers.py b/scripts/reactor_helpers.py index f683c0a..ca05ed6 100644 --- a/scripts/reactor_helpers.py +++ b/scripts/reactor_helpers.py @@ -3,6 +3,7 @@ from collections import Counter from PIL import Image from math import isqrt, ceil from typing import List +import logging from modules.images import FilenameGenerator, get_next_sequence_number from modules import shared, script_callbacks @@ -100,3 +101,19 @@ def get_image_path(image, path, basename, seed=None, prompt=None, extension='png fullfn = params.filename return fullfn + +def addLoggingLevel(levelName, levelNum, methodName=None): + if not methodName: + methodName = levelName.lower() + + def logForLevel(self, message, *args, **kwargs): + if self.isEnabledFor(levelNum): + self._log(levelNum, message, args, **kwargs) + + def logToRoot(message, *args, **kwargs): + logging.log(levelNum, message, *args, **kwargs) + + logging.addLevelName(levelNum, levelName) + setattr(logging, levelName, levelNum) + setattr(logging.getLoggerClass(), methodName, logForLevel) + setattr(logging, methodName, logToRoot) diff --git a/scripts/reactor_logger.py b/scripts/reactor_logger.py index b8e33f0..ba32def 100644 --- a/scripts/reactor_logger.py +++ b/scripts/reactor_logger.py @@ -4,6 +4,7 @@ import sys from modules import shared from scripts.reactor_globals import IS_RUN +from scripts.reactor_helpers import addLoggingLevel class ColoredFormatter(logging.Formatter): @@ -29,8 +30,8 @@ class ColoredFormatter(logging.Formatter): logger = logging.getLogger("ReActor") logger.propagate = False -# Custom Level name -logging.addLevelName(logging.INFO, "STATUS") +# Add Custom Level +addLoggingLevel("STATUS", logging.INFO - 5) # Add handler if we don't have one. if not logger.handlers: @@ -41,8 +42,8 @@ if not logger.handlers: logger.addHandler(handler) # Configure logger -loglevel_string = getattr(shared.cmd_opts, "reactor_loglevel", "INFO") -loglevel = getattr(logging, loglevel_string.upper(), "info") +loglevel_string = getattr(shared.cmd_opts, "reactor_loglevel", "STATUS") +loglevel = getattr(logging, loglevel_string.upper(), "status") logger.setLevel(loglevel) def set_Run(value): diff --git a/scripts/reactor_swapper.py b/scripts/reactor_swapper.py index 2116322..7098df1 100644 --- a/scripts/reactor_swapper.py +++ b/scripts/reactor_swapper.py @@ -58,12 +58,12 @@ def check_process_halt(msgforced: bool = False): global MESSAGED_STOPPED, MESSAGED_SKIPPED if state.interrupted: if not MESSAGED_STOPPED or msgforced: - logger.info("Stopped by User") + logger.status("Stopped by User") MESSAGED_STOPPED = True return True if state.skipped: if not MESSAGED_SKIPPED or msgforced: - logger.info("Skipped by User") + logger.status("Skipped by User") MESSAGED_SKIPPED = True return True return False @@ -102,7 +102,7 @@ def restore_face(image: Image, enhancement_options: EnhancementOptions): if enhancement_options.face_restorer is not None: original_image = result_image.copy() - logger.info("Restoring the face with %s", enhancement_options.face_restorer.name()) + logger.status("Restoring the face with %s", enhancement_options.face_restorer.name()) numpy_image = np.array(result_image) if enhancement_options.face_restorer.name() == "CodeFormer": numpy_image = codeformer_model.codeformer.restore( @@ -125,7 +125,7 @@ def upscale_image(image: Image, enhancement_options: EnhancementOptions): if enhancement_options.upscaler is not None and enhancement_options.upscaler.name != "None": original_image = result_image.copy() - logger.info( + logger.status( "Upscaling with %s scale = %s", enhancement_options.upscaler.name, enhancement_options.scale, @@ -181,15 +181,15 @@ def get_face_gender( face_gender = gender_detected if face_gender == "None": return None, 0 - logger.info("%s Face %s: Detected Gender -%s-", operated, face_index, face_gender) + logger.status("%s Face %s: Detected Gender -%s-", operated, face_index, face_gender) if (gender_condition == 1 and face_gender == "F") or (gender_condition == 2 and face_gender == "M"): - logger.info("OK - Detected Gender matches Condition") + logger.status("OK - Detected Gender matches Condition") try: return sorted(face, key=lambda x: x.bbox[0])[face_index], 0 except IndexError: return None, 0 else: - logger.info("WRONG - Detected Gender doesn't match Condition") + logger.status("WRONG - Detected Gender doesn't match Condition") return sorted(face, key=lambda x: x.bbox[0])[face_index], 1 def get_face_age(face, face_index): @@ -210,7 +210,7 @@ def get_face_age(face, face_index): # return get_face_single(img_data, face, face_index=face_index, det_size=det_size_half, gender_source=gender_source, gender_target=gender_target) def half_det_size(det_size): - logger.info("Trying to halve 'det_size' parameter") + logger.status("Trying to halve 'det_size' parameter") return (det_size[0] // 2, det_size[1] // 2) def analyze_faces(img_data: np.ndarray, det_size=(640, 640)): @@ -299,24 +299,24 @@ def swap_face( output_info: str = "" swapped = 0 - logger.info("Analyzing Source Image...") + logger.status("Analyzing Source Image...") source_faces = analyze_faces(source_img) if source_faces is not None: - logger.info("Analyzing Target Image...") + logger.status("Analyzing Target Image...") target_faces = analyze_faces(target_img) - logger.info("Detecting Source Face, Index = %s", source_faces_index[0]) + logger.status("Detecting Source Face, Index = %s", source_faces_index[0]) source_face, wrong_gender, source_age, source_gender = get_face_single(source_img, source_faces, face_index=source_faces_index[0], gender_source=gender_source) if source_age != "None" or source_gender != "None": - logger.info("Detected: -%s- y.o. %s", source_age, source_gender) + logger.status("Detected: -%s- y.o. %s", source_age, source_gender) output_info = f"SourceFaceIndex={source_faces_index[0]};Age={source_age};Gender={source_gender}\n" output.append(output_info) if len(source_faces_index) != 0 and len(source_faces_index) != 1 and len(source_faces_index) != len(faces_index): - logger.info("Source Faces must have no entries (default=0), one entry, or same number of entries as target faces.") + logger.status("Source Faces must have no entries (default=0), one entry, or same number of entries as target faces.") elif source_face is not None: result = target_img @@ -328,10 +328,10 @@ def swap_face( if check_process_halt(): return result_image, [], 0 if len(source_faces_index) > 1 and source_face_idx > 0: - logger.info("Detecting Source Face, Index = %s", source_faces_index[source_face_idx]) + logger.status("Detecting Source Face, Index = %s", source_faces_index[source_face_idx]) source_face, wrong_gender, source_age, source_gender = get_face_single(source_img, source_faces, face_index=source_faces_index[source_face_idx], gender_source=gender_source) if source_age != "None" or source_gender != "None": - logger.info("Detected: -%s- y.o. %s", source_age, source_gender) + logger.status("Detected: -%s- y.o. %s", source_age, source_gender) output_info = f"SourceFaceIndex={source_faces_index[source_face_idx]};Age={source_age};Gender={source_gender}\n" output.append(output_info) @@ -339,16 +339,16 @@ def swap_face( source_face_idx += 1 if source_face is not None and wrong_gender == 0: - logger.info("Detecting Target Face, Index = %s", face_num) + logger.status("Detecting Target Face, Index = %s", face_num) target_face, wrong_gender, target_age, target_gender = get_face_single(target_img, target_faces, face_index=face_num, gender_target=gender_target) if target_age != "None" or target_gender != "None": - logger.info("Detected: -%s- y.o. %s", target_age, target_gender) + logger.status("Detected: -%s- y.o. %s", target_age, target_gender) output_info = f"TargetFaceIndex={face_num};Age={target_age};Gender={target_gender}\n" output.append(output_info) if target_face is not None and wrong_gender == 0: - logger.info("Swapping Source into Target") + logger.status("Swapping Source into Target") result = face_swapper.get(result, target_face, source_face) swapped += 1 @@ -364,7 +364,7 @@ def swap_face( return result_image, output, swapped else: - logger.info(f"No target face found for {face_num}") + logger.status(f"No target face found for {face_num}") elif wrong_gender == 1: wrong_gender = 0 @@ -378,7 +378,7 @@ def swap_face( return result_image, output, swapped else: - logger.info(f"No source face found for face number {source_face_idx}.") + logger.status(f"No source face found for face number {source_face_idx}.") result_image = Image.fromarray(cv2.cvtColor(result, cv2.COLOR_BGR2RGB)) @@ -386,8 +386,8 @@ def swap_face( result_image = enhance_image(result_image, enhancement_options) else: - logger.info("No source face(s) in the provided Index") + logger.status("No source face(s) in the provided Index") else: - logger.info("No source face(s) found") + logger.status("No source face(s) found") return result_image, output, swapped diff --git a/scripts/reactor_version.py b/scripts/reactor_version.py index 5cbf1a9..6e06cba 100644 --- a/scripts/reactor_version.py +++ b/scripts/reactor_version.py @@ -6,5 +6,5 @@ from scripts.reactor_logger import logger, get_Run, set_Run is_run = get_Run() if not is_run: - logger.info(f"Running {version_flag}") + logger.status(f"Running {version_flag}") set_Run(True)