Repository Analysis

facefusion/facefusion

Industry leading face manipulation platform

14.7 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of facefusion/facefusion, a Python project with 29,277 GitHub stars. SynthScan v2.0 examined 21,792 lines of code across 231 source files, recording 267 pattern matches distributed across 4 syntactic categories. The overall adjusted score of 14.7 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

14.7
Adjusted Score
14.7
Raw Score
100%
Time Factor
2026-07-12
Last Push
29.3K
Stars
Python
Language
21.8K
Lines of Code
231
Files
267
Pattern Hits
2026-07-14
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 0MEDIUM 0LOW 267

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 267 distinct pattern matches across 4 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers173 hits · 206 pts
SeverityFileLineSnippetContext
LOWtests/test_download.py4def test_get_static_download_size() -> None:CODE
LOWtests/test_download.py16def test_resolve_download_url_by_provider() -> None:CODE
LOWtests/test_state_manager.py31def test_get_item_and_set_item() -> None:CODE
LOWtests/test_cli_frame_enhancer.py28def test_enhance_frame_to_image() -> None:CODE
LOWtests/test_cli_frame_enhancer.py35def test_enhance_frame_to_video() -> None:CODE
LOWtests/test_common_helper.py8def test_create_float_metavar() -> None:CODE
LOWtests/test_execution.py4def test_has_execution_provider() -> None:CODE
LOWtests/test_execution.py9def test_get_available_execution_providers() -> None:CODE
LOWtests/test_execution.py13def test_create_inference_providers() -> None:CODE
LOWtests/test_cli_expression_restorer.py27def test_restore_expression_to_image() -> None:CODE
LOWtests/test_cli_expression_restorer.py34def test_restore_expression_to_video() -> None:CODE
LOWtests/helper.py24def get_test_examples_directory() -> str:CODE
LOWtests/helper.py36def get_test_outputs_directory() -> str:CODE
LOWtests/helper.py40def prepare_test_output_directory() -> bool:CODE
LOWtests/test_vision.py52def test_detect_image_resolution() -> None:CODE
LOWtests/test_vision.py60def test_restrict_image_resolution() -> None:CODE
LOWtests/test_vision.py88def test_count_video_frame_total() -> None:CODE
LOWtests/test_vision.py95def test_predict_video_frame_total() -> None:CODE
LOWtests/test_vision.py116def test_detect_video_duration() -> None:CODE
LOWtests/test_vision.py122def test_count_trim_frame_total() -> None:CODE
LOWtests/test_vision.py144def test_detect_video_resolution() -> None:CODE
LOWtests/test_vision.py152def test_restrict_video_resolution() -> None:CODE
LOWtests/test_vision.py164def test_normalize_resolution() -> None:CODE
LOWtests/test_vision.py180def test_calc_histogram_difference() -> None:CODE
LOWtests/test_job_helper.py6def test_get_step_output_path() -> None:CODE
LOWtests/test_temp_helper.py27def test_get_temp_directory_path() -> None:CODE
LOWtests/test_temp_helper.py32def test_get_temp_frame_pattern() -> None:CODE
LOWtests/test_face_detector.py38def test_detect_with_retinaface() -> None:CODE
LOWtests/test_face_detector.py72def test_detect_with_yolo_face() -> None:CODE
LOWtests/test_cli_face_enhancer.py28def test_enhance_face_to_image() -> None:CODE
LOWtests/test_cli_face_enhancer.py35def test_enhance_face_to_video() -> None:CODE
LOWtests/test_face_creator.py95def test_average_face_geometry() -> None:CODE
LOWtests/test_cli_background_remover.py28def test_remove_background_to_image() -> None:CODE
LOWtests/test_cli_background_remover.py35def test_remove_background_to_video() -> None:CODE
LOWtests/test_ffmpeg.py50def get_available_encoder_set() -> EncoderSet:CODE
LOWtests/test_ffmpeg.py60def test_get_available_encoder_set() -> None:CODE
LOWtests/test_ffmpeg_builder.py51def test_set_audio_sample_size() -> None:CODE
LOWtests/test_cli_batch_runner.py37def test_batch_run_sources_to_targets() -> None:CODE
LOWtests/test_cli_frame_colorizer.py29def test_colorize_frame_to_image() -> None:CODE
LOWtests/test_cli_frame_colorizer.py36def test_colorize_frame_to_video() -> None:CODE
LOWfacefusion/execution.py21def get_available_execution_providers() -> List[ExecutionProvider]:CODE
LOWfacefusion/execution.py33def create_inference_providers(execution_device_id : int, execution_providers : List[ExecutionProvider]) -> List[InferenCODE
LOWfacefusion/execution.py115def resolve_cudnn_conv_algo_search() -> str:CODE
LOWfacefusion/execution.py126def resolve_openvino_device_type(execution_device_id : int) -> str:CODE
LOWfacefusion/execution.py138def detect_static_execution_devices() -> List[ExecutionDevice]:CODE
LOWfacefusion/vision.py65def restrict_image_resolution(image_path : str, resolution : Resolution) -> Resolution:CODE
LOWfacefusion/vision.py153def predict_video_frame_total(video_path : str, fps : Fps, trim_frame_start : int, trim_frame_end : int) -> int:CODE
LOWfacefusion/vision.py227def restrict_video_resolution(video_path : str, resolution : Resolution) -> Resolution:CODE
LOWfacefusion/vision.py320def conditional_match_frame_color(source_vision_frame : VisionFrame, target_vision_frame : VisionFrame) -> VisionFrame:CODE
LOWfacefusion/vision.py344def calculate_histogram_difference(source_vision_frame : VisionFrame, target_vision_frame : VisionFrame) -> float:CODE
LOWfacefusion/vision.py356def create_empty_vision_frame() -> VisionFrame:CODE
LOWfacefusion/vision.py412def conditional_merge_vision_mask(vision_frame : VisionFrame, vision_mask : Mask) -> VisionFrame:CODE
LOWfacefusion/download.py74def conditional_download_hashes(hash_set : DownloadSet) -> bool:CODE
LOWfacefusion/download.py101def conditional_download_sources(source_set : DownloadSet) -> bool:CODE
LOWfacefusion/download.py168def resolve_download_url_by_provider(download_provider : DownloadProvider, base_name : str, file_name : str) -> OptionalCODE
LOWfacefusion/face_landmarker.py191def conditional_optimize_contrast(crop_vision_frame : VisionFrame) -> VisionFrame:CODE
LOWfacefusion/ffmpeg.py82def get_available_encoder_set() -> EncoderSet:CODE
LOWfacefusion/face_helper.py83def warp_face_by_bounding_box(temp_vision_frame : VisionFrame, bounding_box : BoundingBox, crop_size : Size) -> Tuple[ViCODE
LOWfacefusion/face_helper.py142def create_rotation_matrix_and_size(angle : Angle, size : Size) -> Tuple[Matrix, Size]:CODE
LOWfacefusion/face_helper.py259def calculate_bounding_box_overlap(bounding_box_a : BoundingBox, bounding_box_b : BoundingBox) -> float:CODE
113 more matches not shown…
Modern Structural Boilerplate61 hits · 81 pts
SeverityFileLineSnippetContext
LOWfacefusion/state_manager.py32def set_item(key : Union[StateKey, ProcessorStateKey], value : Any) -> None:CODE
LOWfacefusion/ffmpeg.py44def update_progress(progress : tqdm, frame_number : int) -> None:CODE
LOWfacefusion/face_store.py22def set_faces(vision_frame : VisionFrame, faces : List[Face]) -> None:CODE
LOWfacefusion/process_manager.py10def set_process_state(process_state : ProcessState) -> None:CODE
LOWfacefusion/uis/components/face_enhancer_options.py75def update_face_enhancer_blend(face_enhancer_blend : float) -> None:CODE
LOWfacefusion/uis/components/face_enhancer_options.py79def update_face_enhancer_weight(face_enhancer_weight : FaceEnhancerWeight) -> None:CODE
LOW…cefusion/uis/components/expression_restorer_options.py73def update_expression_restorer_factor(expression_restorer_factor : float) -> None:CODE
LOWfacefusion/uis/components/memory.py26def update_video_memory_strategy(video_memory_strategy : VideoMemoryStrategy) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py219def update_face_editor_eyebrow_direction(face_editor_eyebrow_direction : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py223def update_face_editor_eye_gaze_horizontal(face_editor_eye_gaze_horizontal : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py227def update_face_editor_eye_gaze_vertical(face_editor_eye_gaze_vertical : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py231def update_face_editor_eye_open_ratio(face_editor_eye_open_ratio : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py235def update_face_editor_lip_open_ratio(face_editor_lip_open_ratio : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py239def update_face_editor_mouth_grim(face_editor_mouth_grim : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py243def update_face_editor_mouth_pout(face_editor_mouth_pout : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py247def update_face_editor_mouth_purse(face_editor_mouth_purse : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py251def update_face_editor_mouth_smile(face_editor_mouth_smile : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py255def update_face_editor_mouth_position_horizontal(face_editor_mouth_position_horizontal : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py259def update_face_editor_mouth_position_vertical(face_editor_mouth_position_vertical : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py263def update_face_editor_head_pitch(face_editor_head_pitch : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py267def update_face_editor_head_yaw(face_editor_head_yaw : float) -> None:CODE
LOWfacefusion/uis/components/face_editor_options.py271def update_face_editor_head_roll(face_editor_head_roll : float) -> None:CODE
LOWfacefusion/uis/components/terminal.py46def update_log_level(log_level : LogLevel) -> None:CODE
LOWfacefusion/uis/components/lip_syncer_options.py63def update_lip_syncer_weight(lip_syncer_weight : LipSyncerWeight) -> None:CODE
LOWfacefusion/uis/components/age_modifier_options.py63def update_age_modifier_direction(age_modifier_direction : float) -> None:CODE
LOWfacefusion/uis/components/background_remover_options.py152def update_background_remover_fill_color(red : int, green : int, blue : int, alpha : int) -> None:CODE
LOWfacefusion/uis/components/background_remover_options.py160def update_background_remover_despill_color(red : int, green : int, blue : int, alpha : int) -> None:CODE
LOWfacefusion/uis/components/face_landmarker.py49def update_face_landmarker_score(face_landmarker_score : Score) -> None:CODE
LOWfacefusion/uis/components/trim_frame.py55def update_trim_frame(trim_frame : Tuple[float, float]) -> None:CODE
LOWfacefusion/uis/components/face_swapper_options.py75def update_face_swapper_pixel_boost(face_swapper_pixel_boost : str) -> None:CODE
LOWfacefusion/uis/components/face_swapper_options.py79def update_face_swapper_weight(face_swapper_weight : FaceSwapperWeight) -> None:CODE
LOWfacefusion/uis/components/face_tracker.py31def update_face_tracker_score(face_tracker_score : Score) -> None:CODE
LOWfacefusion/uis/components/execution_thread_count.py28def update_execution_thread_count(execution_thread_count : float) -> None:CODE
LOWfacefusion/uis/components/face_selector.py177def update_reference_face_position(event : gradio.SelectData) -> None:CODE
LOWfacefusion/uis/components/face_selector.py185def update_reference_face_distance(reference_face_distance : float) -> None:CODE
LOWfacefusion/uis/components/face_selector.py189def update_reference_frame_number(reference_frame_number : int = 0) -> None:CODE
LOWfacefusion/uis/components/face_debugger_options.py39def update_face_debugger_items(face_debugger_items : List[FaceDebuggerItem]) -> None:CODE
LOWfacefusion/uis/components/temp_frame.py40def update_temp_frame_format(temp_frame_format : TempFrameFormat) -> None:CODE
LOWfacefusion/uis/components/frame_enhancer_options.py63def update_frame_enhancer_blend(frame_enhancer_blend : float) -> None:CODE
LOWfacefusion/uis/components/benchmark_options.py45def update_benchmark_mode(benchmark_mode : BenchmarkMode) -> None:CODE
LOWfacefusion/uis/components/benchmark_options.py49def update_benchmark_resolutions(benchmark_resolutions : List[BenchmarkResolution]) -> None:CODE
LOWfacefusion/uis/components/benchmark_options.py53def update_benchmark_cycle_count(benchmark_cycle_count : int) -> None:CODE
LOWfacefusion/uis/components/output_options.py147def update_output_image_quality(output_image_quality : float) -> None:CODE
LOWfacefusion/uis/components/output_options.py151def update_output_image_scale(output_image_scale : Scale) -> None:CODE
LOWfacefusion/uis/components/output_options.py155def update_output_audio_encoder(output_audio_encoder : AudioEncoder) -> None:CODE
LOWfacefusion/uis/components/output_options.py159def update_output_audio_quality(output_audio_quality : float) -> None:CODE
LOWfacefusion/uis/components/output_options.py163def update_output_audio_volume(output_audio_volume: float) -> None:CODE
LOWfacefusion/uis/components/output_options.py167def update_output_video_encoder(output_video_encoder : VideoEncoder) -> None:CODE
LOWfacefusion/uis/components/output_options.py171def update_output_video_preset(output_video_preset : VideoPreset) -> None:CODE
LOWfacefusion/uis/components/output_options.py175def update_output_video_quality(output_video_quality : float) -> None:CODE
LOWfacefusion/uis/components/output_options.py179def update_output_video_scale(output_video_scale : Scale) -> None:CODE
LOWfacefusion/uis/components/output_options.py183def update_output_video_fps(output_video_fps : Fps) -> None:CODE
LOWfacefusion/uis/components/face_masker.py172def update_face_mask_blur(face_mask_blur : float) -> None:CODE
LOWfacefusion/uis/components/face_masker.py176def update_face_mask_padding(face_mask_padding_top : float, face_mask_padding_right : float, face_mask_padding_bottom : CODE
LOWfacefusion/uis/components/deep_swapper_options.py63def update_deep_swapper_morph(deep_swapper_morph : int) -> None:CODE
LOWfacefusion/uis/components/frame_colorizer_options.py73def update_frame_colorizer_size(frame_colorizer_size : str) -> None:CODE
LOWfacefusion/uis/components/frame_colorizer_options.py77def update_frame_colorizer_blend(frame_colorizer_blend : float) -> None:CODE
LOWfacefusion/uis/components/output.py47def update_output_path(output_path : str) -> None:CODE
LOWfacefusion/uis/components/face_detector.py86def update_face_detector_size(face_detector_size : str) -> None:CODE
LOWfacefusion/uis/components/face_detector.py90def update_face_detector_margin(face_detector_margin : int) -> None:CODE
1 more matches not shown…
Deep Nesting30 hits · 30 pts
SeverityFileLineSnippetContext
LOWfacefusion/streamer.py21CODE
LOWfacefusion/face_creator.py72CODE
LOWfacefusion/face_creator.py99CODE
LOWfacefusion/program_helper.py12CODE
LOWfacefusion/program_helper.py23CODE
LOWfacefusion/content_analyser.py158CODE
LOWfacefusion/vision.py101CODE
LOWfacefusion/vision.py123CODE
LOWfacefusion/conda.py8CODE
LOWfacefusion/download.py21CODE
LOWfacefusion/download.py74CODE
LOWfacefusion/download.py101CODE
LOWfacefusion/ffmpeg.py17CODE
LOWfacefusion/core.py116CODE
LOWfacefusion/core.py264CODE
LOWfacefusion/face_selector.py41CODE
LOWfacefusion/face_selector.py65CODE
LOWfacefusion/workflows/image_to_video.py76CODE
LOWfacefusion/workflows/image_to_video.py126CODE
LOWfacefusion/jobs/job_manager.py52CODE
LOWfacefusion/jobs/job_manager.py70CODE
LOWfacefusion/jobs/job_runner.py19CODE
LOWfacefusion/jobs/job_runner.py41CODE
LOWfacefusion/jobs/job_runner.py78CODE
LOWfacefusion/uis/core.py83CODE
LOWfacefusion/uis/components/webcam.py85CODE
LOWfacefusion/uis/layouts/benchmark.py11CODE
LOWfacefusion/uis/layouts/jobs.py11CODE
LOWfacefusion/uis/layouts/default.py11CODE
LOWfacefusion/uis/layouts/webcam.py11CODE
Excessive Try-Catch Wrapping3 hits · 3 pts
SeverityFileLineSnippetContext
LOWfacefusion/execution.py148 except Exception:CODE
LOWfacefusion/inference_manager.py81 except Exception:CODE
LOWfacefusion/uis/components/webcam.py110 except Exception:CODE