Repository Analysis

facefusion/facefusion

Industry leading face manipulation platform

14.5 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of facefusion/facefusion, a Python project with 29,722 GitHub stars. SynthScan v2.0 examined 23,211 lines of code across 240 source files, recording 284 pattern matches distributed across 4 syntactic categories. The overall adjusted score of 14.5 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.5
Adjusted Score
14.5
Raw Score
100%
Time Factor
2026-08-28
Last Push
29.7K
Stars
Python
Language
23.2K
Lines of Code
240
Files
284
Pattern Hits
2026-08-29
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 284

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 284 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 Identifiers187 hits · 220 pts
SeverityFileLineSnippetContext
LOWtests/test_inference_manager.py58def test_resolve_static_inference_providers(override_module : SimpleNamespace, adjust_module : SimpleNamespace) -> None:CODE
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_ffprobe.py39def test_extract_audio_metadata() -> None:CODE
LOWtests/test_ffprobe.py55def test_extract_video_metadata() -> None:CODE
LOWtests/test_state_manager.py31def test_get_item_and_set_item() -> None:CODE
LOWtests/test_cli_frame_enhancer.py40def test_enhance_frame_to_image() -> None:CODE
LOWtests/test_cli_frame_enhancer.py47def 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_video_manager.py58def test_conditional_seek_video_reader() -> None:CODE
LOWtests/test_video_manager.py126def test_collect_video_frames() -> None:CODE
LOWtests/test_cli_expression_restorer.py39def test_restore_expression_to_image() -> None:CODE
LOWtests/test_cli_expression_restorer.py46def 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.py117def test_detect_image_resolution() -> None:CODE
LOWtests/test_vision.py125def test_restrict_image_resolution() -> None:CODE
LOWtests/test_vision.py148def test_count_video_frame_total() -> None:CODE
LOWtests/test_vision.py155def test_predict_video_frame_total() -> None:CODE
LOWtests/test_vision.py176def test_detect_video_duration() -> None:CODE
LOWtests/test_vision.py182def test_count_trim_frame_total() -> None:CODE
LOWtests/test_vision.py204def test_detect_video_resolution() -> None:CODE
LOWtests/test_vision.py212def test_restrict_video_resolution() -> None:CODE
LOWtests/test_vision.py224def test_normalize_resolution() -> None:CODE
LOWtests/test_vision.py240def 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.py47def test_detect_with_retinaface() -> None:CODE
LOWtests/test_face_detector.py81def test_detect_with_yolo_face() -> None:CODE
LOWtests/test_cli_face_enhancer.py40def test_enhance_face_to_image() -> None:CODE
LOWtests/test_cli_face_enhancer.py47def test_enhance_face_to_video() -> None:CODE
LOWtests/test_face_creator.py104def test_average_face_geometry() -> None:CODE
LOWtests/test_cli_background_remover.py40def test_remove_background_to_image() -> None:CODE
LOWtests/test_cli_background_remover.py47def test_remove_background_to_video() -> None:CODE
LOWtests/test_ffmpeg.py89def get_available_encoder_set() -> EncoderSet:CODE
LOWtests/test_ffmpeg.py99def test_get_available_encoder_set() -> None:CODE
LOWtests/test_ffmpeg_builder.py60def test_restrict_color_transfer() -> None:CODE
LOWtests/test_ffmpeg_builder.py72def test_set_audio_sample_size() -> None:CODE
LOWtests/test_cli_batch_runner.py49def test_batch_run_sources_to_targets() -> None:CODE
LOWtests/test_cli_frame_colorizer.py54def test_colorize_frame_to_image() -> None:CODE
LOWtests/test_cli_frame_colorizer.py61def test_colorize_frame_to_video() -> None:CODE
LOWfacefusion/execution.py31def get_available_execution_providers() -> List[ExecutionProvider]:CODE
LOWfacefusion/execution.py43def create_inference_providers(execution_device_id : int, execution_providers : List[ExecutionProvider]) -> List[InferenCODE
LOWfacefusion/execution.py125def resolve_cudnn_conv_algo_search() -> str:CODE
LOWfacefusion/execution.py136def resolve_openvino_device_type(execution_device_id : int) -> str:CODE
LOWfacefusion/execution.py148def detect_static_execution_devices() -> List[ExecutionDevice]:CODE
LOWfacefusion/vision.py65def restrict_image_resolution(image_path : str, resolution : Resolution) -> Resolution:CODE
LOWfacefusion/vision.py117def predict_video_frame_total(video_path : str, fps : Fps, trim_frame_start : int, trim_frame_end : int) -> int:CODE
LOWfacefusion/vision.py180def restrict_video_resolution(video_path : str, resolution : Resolution) -> Resolution:CODE
LOWfacefusion/vision.py273def conditional_match_frame_color(source_vision_frame : VisionFrame, target_vision_frame : VisionFrame) -> VisionFrame:CODE
LOWfacefusion/vision.py297def calculate_histogram_difference(source_vision_frame : VisionFrame, target_vision_frame : VisionFrame) -> float:CODE
LOWfacefusion/vision.py309def create_empty_vision_frame() -> VisionFrame:CODE
LOWfacefusion/vision.py369def conditional_merge_vision_mask(vision_frame : VisionFrame, vision_mask : Mask) -> VisionFrame:CODE
LOWfacefusion/ffprobe.py67def extract_static_audio_metadata(audio_path : str) -> AudioMetadata:CODE
LOWfacefusion/ffprobe.py94def extract_static_video_metadata(video_path : str) -> VideoMetadata:CODE
127 more matches not shown…
Modern Structural Boilerplate63 hits · 83 pts
SeverityFileLineSnippetContext
LOWfacefusion/state_manager.py32def set_item(key : Union[StateKey, ProcessorStateKey], value : Any) -> None:CODE
LOWfacefusion/ffmpeg.py43def update_progress(progress : tqdm, frame_number : int) -> None:CODE
LOWfacefusion/frame_store.py13def set_frame(id : str, frame_number : int, vision_frame : VisionFrame) -> None:CODE
LOWfacefusion/face_store.py21def 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/workflow.py26def update_workflow_strategy(workflow_strategy : WorkflowStrategy) -> 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.py177def update_output_image_quality(output_image_quality : float) -> None:CODE
LOWfacefusion/uis/components/output_options.py181def update_output_image_scale(output_image_scale : Scale) -> None:CODE
LOWfacefusion/uis/components/output_options.py185def update_output_audio_encoder(output_audio_encoder : AudioEncoder) -> None:CODE
LOWfacefusion/uis/components/output_options.py189def update_output_audio_quality(output_audio_quality : float) -> None:CODE
LOWfacefusion/uis/components/output_options.py193def update_output_audio_volume(output_audio_volume: float) -> None:CODE
LOWfacefusion/uis/components/output_options.py197def update_output_video_encoder(output_video_encoder : VideoEncoder) -> None:CODE
LOWfacefusion/uis/components/output_options.py201def update_output_video_preset(output_video_preset : VideoPreset) -> None:CODE
LOWfacefusion/uis/components/output_options.py205def update_output_video_quality(output_video_quality : float) -> None:CODE
LOWfacefusion/uis/components/output_options.py209def update_output_video_scale(output_video_scale : Scale) -> None:CODE
LOWfacefusion/uis/components/output_options.py213def 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
3 more matches not shown…
Deep Nesting31 hits · 31 pts
SeverityFileLineSnippetContext
LOWfacefusion/streamer.py20CODE
LOWfacefusion/face_creator.py73CODE
LOWfacefusion/face_creator.py100CODE
LOWfacefusion/program_helper.py12CODE
LOWfacefusion/program_helper.py23CODE
LOWfacefusion/content_analyser.py158CODE
LOWfacefusion/vision.py89CODE
LOWfacefusion/conda.py8CODE
LOWfacefusion/download.py21CODE
LOWfacefusion/download.py77CODE
LOWfacefusion/download.py104CODE
LOWfacefusion/ffmpeg.py16CODE
LOWfacefusion/core.py113CODE
LOWfacefusion/core.py261CODE
LOWfacefusion/inference_manager.py98CODE
LOWfacefusion/face_selector.py41CODE
LOWfacefusion/face_selector.py65CODE
LOWfacefusion/workflows/to_video.py52CODE
LOWfacefusion/workflows/to_video.py115CODE
LOWfacefusion/workflows/to_video.py181CODE
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.py158 except Exception:CODE
LOWfacefusion/inference_manager.py87 except Exception:CODE
LOWfacefusion/uis/components/webcam.py110 except Exception:CODE