import argparse import os import shutil from face_enhance import face_enhance def parse_args(): parser = argparse.ArgumentParser(description='Face Enhancement Tool') parser.add_argument('--input', type=str, required=True, help='Path to the input image') parser.add_argument('--ref', type=str, required=True, help='Path to the reference image') parser.add_argument('--output', type=str, required=True, help='Path to save the output image') parser.add_argument('--id_weight', type=float, default=0.75, help='face ID weight') args = parser.parse_args() if not os.path.exists(args.input): parser.error(f"Input file does not exist: {args.input}") if not os.path.exists(args.ref): parser.error(f"Reference file does not exist: {args.ref}") output_dir = os.path.dirname(args.output) if output_dir and not os.path.exists(output_dir): parser.error(f"Output directory does not exist: {output_dir}") return args def create_scratch_dir(): """Create a new numbered directory in ./ComfyUI/input/scratch""" base_dir = "./ComfyUI/input/scratch" # Create base directory if it doesn't exist os.makedirs(base_dir, exist_ok=True) # Get existing directories and find the next number existing_dirs = [d for d in os.listdir(base_dir) if os.path.isdir(os.path.join(base_dir, d)) and d.isdigit()] next_dir_num = 1 if existing_dirs: next_dir_num = max([int(d) for d in existing_dirs]) + 1 # Create the new directory new_dir = os.path.join(base_dir, str(next_dir_num)) os.makedirs(new_dir, exist_ok=True) return new_dir def process_face(input_path, ref_path, output_path=None, id_weight=0.75): """ Process a face image using the given parameters. Returns: str: Path to the scratch directory used for processing """ print(f"Processing image: {input_path}") print(f"Reference image: {ref_path}") print(f"Output will be saved to: {output_path}") # Create a new scratch directory for this run scratch_dir = create_scratch_dir() print(f"Created scratch directory: {scratch_dir}") # Copy input and reference images to scratch directory input_filename = os.path.basename(input_path) ref_filename = os.path.basename(ref_path) scratch_input = os.path.join(scratch_dir, input_filename) scratch_ref = os.path.join(scratch_dir, ref_filename) shutil.copy(input_path, scratch_input) shutil.copy(ref_path, scratch_ref) # Convert paths to ComfyUI format (relative to ComfyUI/input/) # For example: "./ComfyUI/input/scratch/1/image.png" becomes "scratch/1/image.png" comfy_ref_path = os.path.relpath(scratch_ref, "./ComfyUI/input") comfy_input_path = os.path.relpath(scratch_input, "./ComfyUI/input") face_enhance(comfy_ref_path, comfy_input_path, output_path, dist_image=f"{output_path}_dist.png", id_weight=id_weight) print(f"Enhanced image saved to: {output_path}") print(f"Working files are in: {scratch_dir}") return scratch_dir def main(): args = parse_args() return process_face( input_path=args.input, ref_path=args.ref, output_path=args.output, id_weight=args.id_weight ) if __name__ == "__main__": main()