Compare commits
2 Commits
936e78f93b
...
7b8d6171b7
Author | SHA1 | Date |
---|---|---|
|
7b8d6171b7 | |
|
6b86b0a72d |
|
@ -842,6 +842,10 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel:
|
||||||
)
|
)
|
||||||
preview_slider.pack(fill="x", padx=20, pady=10)
|
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
|
return preview
|
||||||
|
|
||||||
|
|
||||||
|
@ -1027,36 +1031,77 @@ def toggle_preview() -> None:
|
||||||
if PREVIEW.state() == "normal":
|
if PREVIEW.state() == "normal":
|
||||||
PREVIEW.withdraw()
|
PREVIEW.withdraw()
|
||||||
elif modules.globals.source_path and modules.globals.target_path:
|
elif modules.globals.source_path and modules.globals.target_path:
|
||||||
init_preview()
|
try:
|
||||||
update_preview()
|
init_preview()
|
||||||
|
update_preview()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error initializing preview: {str(e)}")
|
||||||
|
# Optionally, show an error message to the user
|
||||||
|
update_status(f"Error initializing preview: {str(e)}")
|
||||||
|
|
||||||
|
|
||||||
def init_preview() -> None:
|
def init_preview() -> None:
|
||||||
|
global preview_slider
|
||||||
|
|
||||||
if is_image(modules.globals.target_path):
|
if is_image(modules.globals.target_path):
|
||||||
preview_slider.pack_forget()
|
if hasattr(preview_slider, "pack_forget"):
|
||||||
if is_video(modules.globals.target_path):
|
preview_slider.pack_forget()
|
||||||
|
elif is_video(modules.globals.target_path):
|
||||||
video_frame_total = get_video_frame_total(modules.globals.target_path)
|
video_frame_total = get_video_frame_total(modules.globals.target_path)
|
||||||
preview_slider.configure(to=video_frame_total)
|
|
||||||
preview_slider.pack(fill="x")
|
# Check if preview_slider exists and is a valid widget
|
||||||
preview_slider.set(0)
|
if hasattr(preview_slider, "winfo_exists") and preview_slider.winfo_exists():
|
||||||
|
try:
|
||||||
|
preview_slider.configure(to=video_frame_total)
|
||||||
|
preview_slider.pack(fill="x")
|
||||||
|
preview_slider.set(0)
|
||||||
|
except tk.TclError:
|
||||||
|
print("Error: Preview slider widget not available. Recreating it.")
|
||||||
|
create_preview_slider()
|
||||||
|
else:
|
||||||
|
print("Preview slider not found. Creating a new one.")
|
||||||
|
create_preview_slider()
|
||||||
|
|
||||||
|
|
||||||
|
def create_preview_slider():
|
||||||
|
global preview_slider, PREVIEW
|
||||||
|
|
||||||
|
# Ensure PREVIEW window exists
|
||||||
|
if not hasattr(PREVIEW, "winfo_exists") or not PREVIEW.winfo_exists():
|
||||||
|
print("Error: Preview window does not exist.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Create a new slider
|
||||||
|
preview_slider = ctk.CTkSlider(
|
||||||
|
PREVIEW,
|
||||||
|
from_=0,
|
||||||
|
to=get_video_frame_total(modules.globals.target_path),
|
||||||
|
command=lambda frame_value: update_preview(int(frame_value)),
|
||||||
|
fg_color=("gray75", "gray25"),
|
||||||
|
progress_color=("DodgerBlue", "DodgerBlue"),
|
||||||
|
button_color=("DodgerBlue", "DodgerBlue"),
|
||||||
|
button_hover_color=("RoyalBlue", "RoyalBlue"),
|
||||||
|
)
|
||||||
|
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:
|
def update_preview(frame_number: int = 0) -> None:
|
||||||
if modules.globals.source_path and modules.globals.target_path:
|
if modules.globals.source_path and modules.globals.target_path:
|
||||||
update_status("Processing...")
|
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
|
temp_frame = None
|
||||||
if is_video(modules.globals.target_path):
|
if is_video(modules.globals.target_path):
|
||||||
temp_frame = get_video_frame(modules.globals.target_path, frame_number)
|
temp_frame = get_video_frame(modules.globals.target_path, frame_number)
|
||||||
elif is_image(modules.globals.target_path):
|
elif is_image(modules.globals.target_path):
|
||||||
temp_frame = cv2.imread(modules.globals.target_path)
|
temp_frame = cv2.imread(modules.globals.target_path)
|
||||||
|
|
||||||
# Debug: Check if temp_frame is None
|
|
||||||
if temp_frame is None:
|
if temp_frame is None:
|
||||||
print("Error: temp_frame is None")
|
print("Error: temp_frame is None")
|
||||||
update_status("Error: Could not read frame from video or image.")
|
update_status("Error: Could not read frame from video or image.")
|
||||||
|
@ -1068,19 +1113,10 @@ def update_preview(frame_number: int = 0) -> None:
|
||||||
for frame_processor in get_frame_processors_modules(
|
for frame_processor in get_frame_processors_modules(
|
||||||
modules.globals.frame_processors
|
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(
|
temp_frame = frame_processor.process_frame(
|
||||||
get_one_face(cv2.imread(modules.globals.source_path)), temp_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 = Image.fromarray(cv2.cvtColor(temp_frame, cv2.COLOR_BGR2RGB))
|
||||||
image = ImageOps.contain(
|
image = ImageOps.contain(
|
||||||
image, (PREVIEW_MAX_WIDTH, PREVIEW_MAX_HEIGHT), Image.LANCZOS
|
image, (PREVIEW_MAX_WIDTH, PREVIEW_MAX_HEIGHT), Image.LANCZOS
|
||||||
|
|
Loading…
Reference in New Issue