Frame by Frame Navigation
parent
6b86b0a72d
commit
7b8d6171b7
|
@ -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("<Left>", lambda event: navigate_frames(-1))
|
||||
preview.bind("<Right>", 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
|
||||
|
|
Loading…
Reference in New Issue