diff --git a/modules/ui.py b/modules/ui.py index 04557ae..0914c0c 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -5,7 +5,7 @@ from typing import Callable, Tuple import cv2 from PIL import Image, ImageOps import tkinterdnd2 as tkdnd - +import time import modules.globals import modules.metadata from modules.face_analyser import ( @@ -682,6 +682,29 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel: ) preview_slider.pack(fill="x", padx=20, pady=10) + last_update_time = 0 + debounce_delay = 0.1 # Adjust this delay as needed (in seconds) + + def on_key_press(event): + nonlocal last_update_time + + current_time = time.time() + if current_time - last_update_time > debounce_delay: + current_frame = int(preview_slider.get()) + if event.keysym == "Left": + new_frame = max(0, current_frame - 1) + elif event.keysym == "Right": + new_frame = min(int(preview_slider.cget("to")), current_frame + 1) + else: + return # Ignore other key presses + + preview_slider.set(new_frame) + update_preview(new_frame) + last_update_time = current_time + + preview.bind("<Left>", on_key_press) + preview.bind("<Right>", on_key_press) + return preview @@ -879,6 +902,11 @@ def init_preview() -> None: preview_slider.configure(to=video_frame_total) preview_slider.pack(fill="x") preview_slider.set(0) + # Disable slider if it's an image + if is_image(modules.globals.target_path): + preview_slider.configure(state="disabled") + else: + preview_slider.configure(state="normal") def update_preview(frame_number: int = 0) -> None: