From 66d4cad5685e995295835a10cf1abd309d9e6ec2 Mon Sep 17 00:00:00 2001 From: Harisreedhar <46858047+harisreedhar@users.noreply.github.com> Date: Mon, 27 Jul 2026 17:34:17 +0530 Subject: [PATCH] fix update preview bug (#1205) * fix update preview bug * fix update preview bug * remove guard * add is_vision_frame --- facefusion/video_manager.py | 6 +++--- facefusion/vision.py | 4 ++++ tests/test_video_manager.py | 5 ++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/facefusion/video_manager.py b/facefusion/video_manager.py index 128c2f9d..25de398b 100644 --- a/facefusion/video_manager.py +++ b/facefusion/video_manager.py @@ -5,7 +5,7 @@ from typing import Optional, cast import numpy -from facefusion import ffmpeg, ffprobe, frame_store +from facefusion import ffmpeg, ffprobe, frame_store, vision from facefusion.common_helper import get_first, get_last from facefusion.types import Fps, Resolution, VideoPoolSet, VideoReader, VideoWriter, VisionFrame, VisionFrameSet @@ -105,14 +105,13 @@ def collect_video_frames(video_reader : VideoReader, frame_start : int, frame_en for frame_number in range(video_reader.get('frame_number'), frame_end + 1): vision_frame = read_video_frame(video_reader) - if numpy.any(vision_frame): + if vision.is_vision_frame(vision_frame): frame_store.set_frame(reader_id, frame_number, vision_frame) def close_video_reader(video_reader : VideoReader) -> None: video_reader.get('process').kill() video_reader.get('process').wait() - frame_store.clear_frames(video_reader.get('id')) def get_writer(video_path : str, temp_video_fps : Fps, temp_video_resolution : Resolution, output_video_resolution : Resolution, output_video_fps : Fps) -> VideoWriter: @@ -146,6 +145,7 @@ def close_video_writer(video_writer : VideoWriter) -> bool: def clear_video_pool() -> None: for video_reader in VIDEO_POOL_SET.get('reader').values(): close_video_reader(video_reader) + frame_store.clear_frames(video_reader.get('id')) for video_writer in VIDEO_POOL_SET.get('writer').values(): close_video_writer(video_writer) diff --git a/facefusion/vision.py b/facefusion/vision.py index 384b967b..79610765 100644 --- a/facefusion/vision.py +++ b/facefusion/vision.py @@ -310,6 +310,10 @@ def create_empty_vision_frame() -> VisionFrame: return numpy.zeros((1, 1, 3)).astype(numpy.uint8) +def is_vision_frame(vision_frame : VisionFrame) -> bool: + return numpy.ndim(vision_frame) == 3 + + def create_tile_frames(vision_frame : VisionFrame, size : Size) -> Tuple[List[VisionFrame], int, int]: tile_width = size[0] - 2 * size[2] pad_size_top = size[1] + size[2] diff --git a/tests/test_video_manager.py b/tests/test_video_manager.py index 980fcd84..7dfd3bff 100644 --- a/tests/test_video_manager.py +++ b/tests/test_video_manager.py @@ -142,8 +142,6 @@ def test_close_video_reader() -> None: if is_linux() or is_macos(): assert video_reader.get('process').returncode == -9 - assert get_frame_store(video_reader.get('id')) == {} - def test_get_writer() -> None: target_path = get_test_example_file('target-240p-25fps.mp4') @@ -186,8 +184,9 @@ def test_close_video_writer() -> None: def test_clear_video_pool() -> None: target_path = get_test_example_file('target-240p-25fps.mp4') create_temp_directory(target_path) - video_reader = get_reader(target_path, 'read_video_frame') + video_reader = get_reader(target_path, 'select_video_frames') video_writer = get_writer(target_path, 25.0, (426, 226), (426, 226), 25.0) + read_video_frames(video_reader, 0, 4) write_video_frame(video_writer, read_video_frame(video_reader)) clear_video_pool()