From 7b8d6171b74e801d59d8baf02998818d8b6c56df Mon Sep 17 00:00:00 2001 From: KRSHH <136873090+KRSHH@users.noreply.github.com> Date: Sat, 19 Oct 2024 14:04:05 +0530 Subject: [PATCH] Frame by Frame Navigation --- modules/ui.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/modules/ui.py b/modules/ui.py index 4a5e559..a6e8d84 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -842,6 +842,10 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel: ) preview_slider.pack(fill="x", padx=20, pady=10) + # Add keyboard bindings for left and right arrow keys + preview.bind("", lambda event: navigate_frames(-1)) + preview.bind("", lambda event: navigate_frames(1)) + return preview @@ -1081,22 +1085,23 @@ def create_preview_slider(): preview_slider.pack(fill="x", padx=20, pady=10) +def navigate_frames(direction: int) -> None: + current_frame = int(preview_slider.get()) + new_frame = max(0, min(current_frame + direction, int(preview_slider.cget("to")))) + preview_slider.set(new_frame) + update_preview(new_frame) + + def update_preview(frame_number: int = 0) -> None: if modules.globals.source_path and modules.globals.target_path: update_status("Processing...") - # Debug: Print the target path and frame number - print( - f"Target path: {modules.globals.target_path}, Frame number: {frame_number}" - ) - temp_frame = None if is_video(modules.globals.target_path): temp_frame = get_video_frame(modules.globals.target_path, frame_number) elif is_image(modules.globals.target_path): temp_frame = cv2.imread(modules.globals.target_path) - # Debug: Check if temp_frame is None if temp_frame is None: print("Error: temp_frame is None") update_status("Error: Could not read frame from video or image.") @@ -1108,19 +1113,10 @@ def update_preview(frame_number: int = 0) -> None: for frame_processor in get_frame_processors_modules( modules.globals.frame_processors ): - # Debug: Print the type of frame_processor - print(f"Processing frame with: {type(frame_processor).__name__}") - temp_frame = frame_processor.process_frame( get_one_face(cv2.imread(modules.globals.source_path)), temp_frame ) - # Debug: Check if temp_frame is None after processing - if temp_frame is None: - print("Error: temp_frame is None after processing") - update_status("Error: Frame processing failed.") - return - image = Image.fromarray(cv2.cvtColor(temp_frame, cv2.COLOR_BGR2RGB)) image = ImageOps.contain( image, (PREVIEW_MAX_WIDTH, PREVIEW_MAX_HEIGHT), Image.LANCZOS