Industry leading face manipulation platform
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).
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.
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.
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.
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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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_state_manager.py | 31 | def test_get_item_and_set_item() -> None: | CODE |
| LOW | tests/test_cli_frame_enhancer.py | 28 | def test_enhance_frame_to_image() -> None: | CODE |
| LOW | tests/test_cli_frame_enhancer.py | 35 | def test_enhance_frame_to_video() -> 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_cli_expression_restorer.py | 27 | def test_restore_expression_to_image() -> None: | CODE |
| LOW | tests/test_cli_expression_restorer.py | 34 | def test_restore_expression_to_video() -> 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 | 52 | def test_detect_image_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 60 | def test_restrict_image_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 88 | def test_count_video_frame_total() -> None: | CODE |
| LOW | tests/test_vision.py | 95 | def test_predict_video_frame_total() -> None: | CODE |
| LOW | tests/test_vision.py | 116 | def test_detect_video_duration() -> None: | CODE |
| LOW | tests/test_vision.py | 122 | def test_count_trim_frame_total() -> None: | CODE |
| LOW | tests/test_vision.py | 144 | def test_detect_video_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 152 | def test_restrict_video_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 164 | def test_normalize_resolution() -> None: | CODE |
| LOW | tests/test_vision.py | 180 | 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 | 38 | def test_detect_with_retinaface() -> None: | CODE |
| LOW | tests/test_face_detector.py | 72 | def test_detect_with_yolo_face() -> None: | CODE |
| LOW | tests/test_cli_face_enhancer.py | 28 | def test_enhance_face_to_image() -> None: | CODE |
| LOW | tests/test_cli_face_enhancer.py | 35 | def test_enhance_face_to_video() -> None: | CODE |
| LOW | tests/test_face_creator.py | 95 | def test_average_face_geometry() -> None: | CODE |
| LOW | tests/test_cli_background_remover.py | 28 | def test_remove_background_to_image() -> None: | CODE |
| LOW | tests/test_cli_background_remover.py | 35 | def test_remove_background_to_video() -> None: | CODE |
| LOW | tests/test_ffmpeg.py | 50 | def get_available_encoder_set() -> EncoderSet: | CODE |
| LOW | tests/test_ffmpeg.py | 60 | def test_get_available_encoder_set() -> None: | CODE |
| LOW | tests/test_ffmpeg_builder.py | 51 | def test_set_audio_sample_size() -> None: | CODE |
| LOW | tests/test_cli_batch_runner.py | 37 | def test_batch_run_sources_to_targets() -> None: | CODE |
| LOW | tests/test_cli_frame_colorizer.py | 29 | def test_colorize_frame_to_image() -> None: | CODE |
| LOW | tests/test_cli_frame_colorizer.py | 36 | def test_colorize_frame_to_video() -> None: | CODE |
| LOW | facefusion/execution.py | 21 | def get_available_execution_providers() -> List[ExecutionProvider]: | CODE |
| LOW | facefusion/execution.py | 33 | def create_inference_providers(execution_device_id : int, execution_providers : List[ExecutionProvider]) -> List[Inferen | CODE |
| LOW | facefusion/execution.py | 115 | def resolve_cudnn_conv_algo_search() -> str: | CODE |
| LOW | facefusion/execution.py | 126 | def resolve_openvino_device_type(execution_device_id : int) -> str: | CODE |
| LOW | facefusion/execution.py | 138 | def detect_static_execution_devices() -> List[ExecutionDevice]: | CODE |
| LOW | facefusion/vision.py | 65 | def restrict_image_resolution(image_path : str, resolution : Resolution) -> Resolution: | CODE |
| LOW | facefusion/vision.py | 153 | def predict_video_frame_total(video_path : str, fps : Fps, trim_frame_start : int, trim_frame_end : int) -> int: | CODE |
| LOW | facefusion/vision.py | 227 | def restrict_video_resolution(video_path : str, resolution : Resolution) -> Resolution: | CODE |
| LOW | facefusion/vision.py | 320 | def conditional_match_frame_color(source_vision_frame : VisionFrame, target_vision_frame : VisionFrame) -> VisionFrame: | CODE |
| LOW | facefusion/vision.py | 344 | def calculate_histogram_difference(source_vision_frame : VisionFrame, target_vision_frame : VisionFrame) -> float: | CODE |
| LOW | facefusion/vision.py | 356 | def create_empty_vision_frame() -> VisionFrame: | CODE |
| LOW | facefusion/vision.py | 412 | def conditional_merge_vision_mask(vision_frame : VisionFrame, vision_mask : Mask) -> VisionFrame: | CODE |
| LOW | facefusion/download.py | 74 | def conditional_download_hashes(hash_set : DownloadSet) -> bool: | CODE |
| LOW | facefusion/download.py | 101 | def conditional_download_sources(source_set : DownloadSet) -> bool: | CODE |
| LOW | facefusion/download.py | 168 | def resolve_download_url_by_provider(download_provider : DownloadProvider, base_name : str, file_name : str) -> Optional | CODE |
| LOW | facefusion/face_landmarker.py | 191 | def conditional_optimize_contrast(crop_vision_frame : VisionFrame) -> VisionFrame: | CODE |
| LOW | facefusion/ffmpeg.py | 82 | def get_available_encoder_set() -> EncoderSet: | CODE |
| LOW | facefusion/face_helper.py | 83 | def warp_face_by_bounding_box(temp_vision_frame : VisionFrame, bounding_box : BoundingBox, crop_size : Size) -> Tuple[Vi | CODE |
| LOW | facefusion/face_helper.py | 142 | def create_rotation_matrix_and_size(angle : Angle, size : Size) -> Tuple[Matrix, Size]: | CODE |
| LOW | facefusion/face_helper.py | 259 | def calculate_bounding_box_overlap(bounding_box_a : BoundingBox, bounding_box_b : BoundingBox) -> float: | CODE |
| 113 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 | 44 | def update_progress(progress : tqdm, frame_number : int) -> None: | CODE |
| LOW | facefusion/face_store.py | 22 | 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/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 | 147 | def update_output_image_quality(output_image_quality : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 151 | def update_output_image_scale(output_image_scale : Scale) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 155 | def update_output_audio_encoder(output_audio_encoder : AudioEncoder) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 159 | def update_output_audio_quality(output_audio_quality : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 163 | def update_output_audio_volume(output_audio_volume: float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 167 | def update_output_video_encoder(output_video_encoder : VideoEncoder) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 171 | def update_output_video_preset(output_video_preset : VideoPreset) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 175 | def update_output_video_quality(output_video_quality : float) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 179 | def update_output_video_scale(output_video_scale : Scale) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/output_options.py | 183 | 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 |
| LOW⚡ | facefusion/uis/components/face_detector.py | 86 | def update_face_detector_size(face_detector_size : str) -> None: | CODE |
| LOW⚡ | facefusion/uis/components/face_detector.py | 90 | def update_face_detector_margin(face_detector_margin : int) -> None: | CODE |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | facefusion/streamer.py | 21 | CODE | |
| LOW | facefusion/face_creator.py | 72 | CODE | |
| LOW | facefusion/face_creator.py | 99 | CODE | |
| LOW | facefusion/program_helper.py | 12 | CODE | |
| LOW | facefusion/program_helper.py | 23 | CODE | |
| LOW | facefusion/content_analyser.py | 158 | CODE | |
| LOW | facefusion/vision.py | 101 | CODE | |
| LOW | facefusion/vision.py | 123 | CODE | |
| LOW | facefusion/conda.py | 8 | CODE | |
| LOW | facefusion/download.py | 21 | CODE | |
| LOW | facefusion/download.py | 74 | CODE | |
| LOW | facefusion/download.py | 101 | CODE | |
| LOW | facefusion/ffmpeg.py | 17 | CODE | |
| LOW | facefusion/core.py | 116 | CODE | |
| LOW | facefusion/core.py | 264 | CODE | |
| LOW | facefusion/face_selector.py | 41 | CODE | |
| LOW | facefusion/face_selector.py | 65 | CODE | |
| LOW | facefusion/workflows/image_to_video.py | 76 | CODE | |
| LOW | facefusion/workflows/image_to_video.py | 126 | 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 |
|---|---|---|---|---|
| LOW | facefusion/execution.py | 148 | except Exception: | CODE |
| LOW | facefusion/inference_manager.py | 81 | except Exception: | CODE |
| LOW | facefusion/uis/components/webcam.py | 110 | except Exception: | CODE |