Industry leading face manipulation platform
This report summarizes scanner evidence for facefusion/facefusion, a Python project with 30,206 GitHub stars. SynthScan examined 23,503 lines of code across 241 source files, recording 292 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 15.3 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 223 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 261 finding(s).
Which changes need focused human review? 292 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 292 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_inference_manager.py | 58 | def test_resolve_static_inference_providers(override_module : SimpleNamespace, adjust_module : SimpleNamespace) -> None: | CODE |
| LOW | tests/test_download.py | 4 | def test_get_static_download_size() -> None: | CODE |
| LOW | tests/test_download.py | 16 | def test_resolve_download_url_by_provider() -> None: | CODE |
| LOW | tests/test_ffprobe.py | 39 | def test_extract_audio_metadata() -> None: | CODE |
| LOW | tests/test_ffprobe.py | 55 | def test_extract_video_metadata() -> None: | CODE |
| LOW | tests/test_state_manager.py | 31 | def test_get_item_and_set_item() -> None: | CODE |
| LOW | tests/test_cli_frame_enhancer.py | 43 | def test_enhance_frame_to_image(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_cli_frame_enhancer.py | 51 | def test_enhance_frame_to_video(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_common_helper.py | 8 | def test_create_float_metavar() -> None: | CODE |
| LOW⚡ | tests/test_execution.py | 4 | def test_has_execution_provider() -> None: | CODE |
| LOW⚡ | tests/test_execution.py | 9 | def test_get_available_execution_providers() -> None: | CODE |
| LOW⚡ | tests/test_execution.py | 13 | def test_create_inference_providers() -> None: | CODE |
| LOW | tests/test_video_manager.py | 58 | def test_conditional_seek_video_reader() -> None: | CODE |
| LOW | tests/test_video_manager.py | 126 | def test_collect_video_frames() -> None: | CODE |
| LOW | tests/test_cli_expression_restorer.py | 42 | def test_restore_expression_to_image(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_cli_expression_restorer.py | 50 | def test_restore_expression_to_video(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/helper.py | 24 | def get_test_examples_directory() -> str: | CODE |
| LOW | tests/helper.py | 36 | def get_test_outputs_directory() -> str: | CODE |
| LOW | tests/helper.py | 40 | def prepare_test_output_directory() -> bool: | CODE |
| LOW | tests/test_vision.py | 117 | def test_detect_image_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 125 | def test_restrict_image_resolution() -> None: | CODE |
| LOW⚡ | tests/test_vision.py | 148 | def test_count_video_frame_total() -> None: | CODE |
| LOW⚡ | tests/test_vision.py | 155 | def test_predict_video_frame_total() -> None: | CODE |
| LOW⚡ | tests/test_vision.py | 164 | def test_resolve_extract_frame_number() -> None: | CODE |
| LOW⚡ | tests/test_vision.py | 171 | def test_resolve_target_frame_number() -> None: | CODE |
| LOW | tests/test_vision.py | 192 | def test_detect_video_duration() -> None: | CODE |
| LOW | tests/test_vision.py | 198 | def test_count_trim_frame_total() -> None: | CODE |
| LOW | tests/test_vision.py | 220 | def test_detect_video_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 228 | def test_restrict_video_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 240 | def test_normalize_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 256 | def test_calc_histogram_difference() -> None: | CODE |
| LOW | tests/test_job_helper.py | 6 | def test_get_step_output_path() -> None: | CODE |
| LOW | tests/test_temp_helper.py | 27 | def test_get_temp_directory_path() -> None: | CODE |
| LOW | tests/test_temp_helper.py | 32 | def test_get_temp_frame_pattern() -> None: | CODE |
| LOW | tests/test_face_detector.py | 47 | def test_detect_with_retinaface() -> None: | CODE |
| LOW | tests/test_face_detector.py | 81 | def test_detect_with_yolo_face() -> None: | CODE |
| LOW | tests/test_cli_face_enhancer.py | 43 | def test_enhance_face_to_image(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_cli_face_enhancer.py | 51 | def test_enhance_face_to_video(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_face_creator.py | 104 | def test_average_face_geometry() -> None: | CODE |
| LOW | tests/test_cli_background_remover.py | 43 | def test_remove_background_to_image(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_cli_background_remover.py | 51 | def test_remove_background_to_video(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_ffmpeg.py | 89 | def get_available_encoder_set() -> EncoderSet: | CODE |
| LOW | tests/test_ffmpeg.py | 99 | def test_get_available_encoder_set() -> None: | CODE |
| LOW | tests/test_ffmpeg_builder.py | 60 | def test_restrict_color_transfer() -> None: | CODE |
| LOW | tests/test_ffmpeg_builder.py | 72 | def test_set_audio_sample_size() -> None: | CODE |
| LOW | tests/test_cli_batch_runner.py | 49 | def test_batch_run_sources_to_targets() -> None: | CODE |
| LOW | tests/test_cli_frame_colorizer.py | 57 | def test_colorize_frame_to_image(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | tests/test_cli_frame_colorizer.py | 65 | def test_colorize_frame_to_video(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW | facefusion/execution.py | 31 | def get_available_execution_providers() -> List[ExecutionProvider]: | CODE |
| LOW | facefusion/execution.py | 43 | def create_inference_providers(execution_device_id : int, execution_providers : List[ExecutionProvider]) -> List[Inferen | CODE |
| LOW | facefusion/execution.py | 125 | def resolve_cudnn_conv_algo_search() -> str: | CODE |
| LOW | facefusion/execution.py | 136 | def resolve_openvino_device_type(execution_device_id : int) -> str: | CODE |
| LOW | facefusion/execution.py | 148 | def detect_static_execution_devices() -> List[ExecutionDevice]: | CODE |
| LOW | facefusion/content_analyser.py | 123 | def override_inference_providers() -> List[InferenceProvider]: | CODE |
| LOW | facefusion/vision.py | 65 | def restrict_image_resolution(image_path : str, resolution : Resolution) -> Resolution: | CODE |
| LOW | facefusion/vision.py | 117 | def predict_video_frame_total(video_path : str, fps : Fps, trim_frame_start : int, trim_frame_end : int) -> int: | CODE |
| LOW | facefusion/vision.py | 128 | def resolve_extract_frame_number(video_fps : Fps, fps : Fps, frame_number : int) -> int: | CODE |
| LOW | facefusion/vision.py | 132 | def resolve_target_frame_number(video_fps : Fps, fps : Fps, frame_number : int) -> int: | CODE |
| LOW | facefusion/vision.py | 191 | def restrict_video_resolution(video_path : str, resolution : Resolution) -> Resolution: | CODE |
| LOW | facefusion/vision.py | 284 | def conditional_match_frame_color(source_vision_frame : VisionFrame, target_vision_frame : VisionFrame) -> VisionFrame: | CODE |
| 132 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | facefusion/state_manager.py | 32 | def set_item(key : Union[StateKey, ProcessorStateKey], value : Any) -> None: | CODE |
| LOW | facefusion/ffmpeg.py | 43 | def update_progress(progress : tqdm, frame_number : int) -> None: | CODE |
| LOW | facefusion/frame_store.py | 13 | def set_frame(id : str, frame_number : int, vision_frame : VisionFrame) -> None: | CODE |
| LOW | facefusion/face_store.py | 21 | def set_faces(vision_frame : VisionFrame, faces : List[Face]) -> None: | CODE |
| LOW | facefusion/process_manager.py | 10 | def set_process_state(process_state : ProcessState) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_enhancer_options.py | 75 | def update_face_enhancer_blend(face_enhancer_blend : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_enhancer_options.py | 79 | def update_face_enhancer_weight(face_enhancer_weight : FaceEnhancerWeight) -> None: | CODE |
| LOW⚡ | …cefusion/uis/components/expression_restorer_options.py | 73 | def update_expression_restorer_factor(expression_restorer_factor : float) -> None: | CODE |
| LOW | facefusion/uis/components/memory.py | 26 | def update_video_memory_strategy(video_memory_strategy : VideoMemoryStrategy) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 219 | def update_face_editor_eyebrow_direction(face_editor_eyebrow_direction : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 223 | def update_face_editor_eye_gaze_horizontal(face_editor_eye_gaze_horizontal : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 227 | def update_face_editor_eye_gaze_vertical(face_editor_eye_gaze_vertical : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 231 | def update_face_editor_eye_open_ratio(face_editor_eye_open_ratio : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 235 | def update_face_editor_lip_open_ratio(face_editor_lip_open_ratio : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 239 | def update_face_editor_mouth_grim(face_editor_mouth_grim : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 243 | def update_face_editor_mouth_pout(face_editor_mouth_pout : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 247 | def update_face_editor_mouth_purse(face_editor_mouth_purse : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 251 | def update_face_editor_mouth_smile(face_editor_mouth_smile : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 255 | def update_face_editor_mouth_position_horizontal(face_editor_mouth_position_horizontal : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 259 | def update_face_editor_mouth_position_vertical(face_editor_mouth_position_vertical : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 263 | def update_face_editor_head_pitch(face_editor_head_pitch : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 267 | def update_face_editor_head_yaw(face_editor_head_yaw : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_editor_options.py | 271 | def update_face_editor_head_roll(face_editor_head_roll : float) -> None: | CODE |
| LOW | facefusion/uis/components/terminal.py | 46 | def update_log_level(log_level : LogLevel) -> None: | CODE |
| LOW | facefusion/uis/components/lip_syncer_options.py | 63 | def update_lip_syncer_weight(lip_syncer_weight : LipSyncerWeight) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/age_modifier_options.py | 63 | def update_age_modifier_direction(age_modifier_direction : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/background_remover_options.py | 152 | def update_background_remover_fill_color(red : int, green : int, blue : int, alpha : int) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/background_remover_options.py | 160 | def update_background_remover_despill_color(red : int, green : int, blue : int, alpha : int) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_landmarker.py | 49 | def update_face_landmarker_score(face_landmarker_score : Score) -> None: | CODE |
| LOW | facefusion/uis/components/trim_frame.py | 55 | def update_trim_frame(trim_frame : Tuple[float, float]) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_swapper_options.py | 75 | def update_face_swapper_pixel_boost(face_swapper_pixel_boost : str) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_swapper_options.py | 79 | def update_face_swapper_weight(face_swapper_weight : FaceSwapperWeight) -> None: | CODE |
| LOW | facefusion/uis/components/face_tracker.py | 31 | def update_face_tracker_score(face_tracker_score : Score) -> None: | CODE |
| LOW | facefusion/uis/components/execution_thread_count.py | 28 | def update_execution_thread_count(execution_thread_count : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_selector.py | 177 | def update_reference_face_position(event : gradio.SelectData) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_selector.py | 185 | def update_reference_face_distance(reference_face_distance : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_selector.py | 189 | def update_reference_frame_number(reference_frame_number : int = 0) -> None: | CODE |
| LOW | facefusion/uis/components/face_debugger_options.py | 39 | def update_face_debugger_items(face_debugger_items : List[FaceDebuggerItem]) -> None: | CODE |
| LOW | facefusion/uis/components/temp_frame.py | 40 | def update_temp_frame_format(temp_frame_format : TempFrameFormat) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/frame_enhancer_options.py | 63 | def update_frame_enhancer_blend(frame_enhancer_blend : float) -> None: | CODE |
| LOW | facefusion/uis/components/workflow.py | 26 | def update_workflow_strategy(workflow_strategy : WorkflowStrategy) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/benchmark_options.py | 45 | def update_benchmark_mode(benchmark_mode : BenchmarkMode) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/benchmark_options.py | 49 | def update_benchmark_resolutions(benchmark_resolutions : List[BenchmarkResolution]) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/benchmark_options.py | 53 | def update_benchmark_cycle_count(benchmark_cycle_count : int) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 177 | def update_output_image_quality(output_image_quality : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 181 | def update_output_image_scale(output_image_scale : Scale) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 185 | def update_output_audio_encoder(output_audio_encoder : AudioEncoder) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 189 | def update_output_audio_quality(output_audio_quality : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 193 | def update_output_audio_volume(output_audio_volume: float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 197 | def update_output_video_encoder(output_video_encoder : VideoEncoder) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 201 | def update_output_video_preset(output_video_preset : VideoPreset) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 205 | def update_output_video_quality(output_video_quality : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 209 | def update_output_video_scale(output_video_scale : Scale) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 213 | def update_output_video_fps(output_video_fps : Fps) -> None: | CODE |
| LOW | facefusion/uis/components/face_masker.py | 172 | def update_face_mask_blur(face_mask_blur : float) -> None: | CODE |
| LOW | facefusion/uis/components/face_masker.py | 176 | def update_face_mask_padding(face_mask_padding_top : float, face_mask_padding_right : float, face_mask_padding_bottom : | CODE |
| LOW⚡ | facefusion/uis/components/deep_swapper_options.py | 63 | def update_deep_swapper_morph(deep_swapper_morph : int) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/frame_colorizer_options.py | 73 | def update_frame_colorizer_size(frame_colorizer_size : str) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/frame_colorizer_options.py | 77 | def update_frame_colorizer_blend(frame_colorizer_blend : float) -> None: | CODE |
| LOW | facefusion/uis/components/output.py | 47 | def update_output_path(output_path : str) -> None: | CODE |
| 3 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | facefusion/streamer.py | 20 | CODE | |
| LOW | facefusion/face_creator.py | 73 | CODE | |
| LOW | facefusion/face_creator.py | 100 | CODE | |
| LOW | facefusion/program_helper.py | 12 | CODE | |
| LOW | facefusion/program_helper.py | 23 | CODE | |
| LOW | facefusion/content_analyser.py | 168 | CODE | |
| LOW | facefusion/vision.py | 89 | CODE | |
| LOW | facefusion/conda.py | 8 | CODE | |
| LOW | facefusion/download.py | 21 | CODE | |
| LOW | facefusion/download.py | 77 | CODE | |
| LOW | facefusion/download.py | 104 | CODE | |
| LOW | facefusion/ffmpeg.py | 16 | CODE | |
| LOW | facefusion/core.py | 113 | CODE | |
| LOW | facefusion/core.py | 261 | CODE | |
| LOW | facefusion/inference_manager.py | 98 | CODE | |
| LOW | facefusion/face_selector.py | 41 | CODE | |
| LOW | facefusion/face_selector.py | 65 | CODE | |
| LOW | facefusion/workflows/to_video.py | 52 | CODE | |
| LOW | facefusion/workflows/to_video.py | 115 | CODE | |
| LOW | facefusion/workflows/to_video.py | 182 | CODE | |
| LOW | facefusion/jobs/job_manager.py | 52 | CODE | |
| LOW | facefusion/jobs/job_manager.py | 70 | CODE | |
| LOW | facefusion/jobs/job_runner.py | 19 | CODE | |
| LOW | facefusion/jobs/job_runner.py | 41 | CODE | |
| LOW | facefusion/jobs/job_runner.py | 78 | CODE | |
| LOW | facefusion/uis/core.py | 83 | CODE | |
| LOW | facefusion/uis/components/webcam.py | 85 | CODE | |
| LOW | facefusion/uis/layouts/benchmark.py | 11 | CODE | |
| LOW | facefusion/uis/layouts/jobs.py | 11 | CODE | |
| LOW | facefusion/uis/layouts/default.py | 11 | CODE | |
| LOW | facefusion/uis/layouts/webcam.py | 11 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | facefusion/translator.py | 14 | except ImportError: | CODE |
| HIGH | facefusion/json.py | 14 | except JSONDecodeError: | CODE |
| HIGH | facefusion/uis/components/webcam.py | 110 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | facefusion/execution.py | 158 | except Exception: | CODE |
| LOW | facefusion/inference_manager.py | 87 | except Exception: | CODE |
| LOW | facefusion/uis/components/webcam.py | 110 | except Exception: | CODE |