Repository Analysis

Breakthrough/PySceneDetect

:movie_camera: Python and OpenCV-based scene cut/transition detection program & library.

28.6 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of Breakthrough/PySceneDetect, a Python project with 5,012 GitHub stars. SynthScan v2.0 examined 25,505 lines of code across 120 source files, recording 447 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 28.6 places this repository in the Moderate 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).

28.6
Adjusted Score
28.6
Raw Score
100%
Time Factor
2026-07-06
Last Push
5.0K
Stars
Python
Language
25.5K
Lines of Code
120
Files
447
Pattern Hits
2026-07-14
Scan Date
0.23
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 28MEDIUM 89LOW 330

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 447 distinct pattern matches across 16 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.

Decorative Section Separators81 hits · 246 pts
SeverityFileLineSnippetContext
MEDIUMpyproject.toml3# ---------------------------------------------------------------COMMENT
MEDIUMbenchmark/dataset.py3# -------------------------------------------------------------------COMMENT
MEDIUMbenchmark/evaluator.py3# -------------------------------------------------------------------COMMENT
MEDIUMbenchmark/__main__.py3# -------------------------------------------------------------------COMMENT
MEDIUMpackaging/build_all.py3# ---------------------------------------------------------------COMMENT
MEDIUMpackaging/variants/pyproject-scenedetect-headless.toml3# ---------------------------------------------------------------COMMENT
MEDIUMpackaging/variants/pyproject-scenedetect.toml3# ---------------------------------------------------------------COMMENT
MEDIUMpackaging/windows/pyi_rth_scenedetect.py3# ---------------------------------------------------------------COMMENT
MEDIUMtests/test_stats_manager.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_backend_pyav.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_detectors.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/conftest.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_scene_manager.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_benchmark_evaluator.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_video_stream.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_backend_opencv.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_timecode.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/__init__.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_output.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_concat.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_platform.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_api.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_cli.py225 # -------------------------------------------------------------------------------------COMMENT
MEDIUMtests/test_cli.py227 # -------------------------------------------------------------------------------------COMMENT
MEDIUMtests/test_cli.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_cli.py239 # -------------------------------------------------------------------------------------COMMENT
MEDIUMtests/helpers.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_vfr.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/test_vfr.py279# ------------------------------------------------------------------COMMENT
MEDIUMtests/test_vfr.py281# ------------------------------------------------------------------COMMENT
MEDIUMtests/release/synthetic.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/conftest.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/test_validation.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/test_cli_permutations.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/test_long_video.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/test_backends.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/test_input_matrix.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/test_golden.py3# -------------------------------------------------------------------COMMENT
MEDIUMtests/release/test_vfr.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/detector.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/scene_manager.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/stats_manager.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/__init__.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/platform.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/frame_timecode.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/common.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/scene_detector.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/video_splitter.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/video_stream.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/__main__.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/backends/moviepy.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/backends/pyav.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/backends/concat.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/backends/__init__.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/backends/opencv.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/output/__init__.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/output/video.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/output/image.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/_cli/controller.py3# -------------------------------------------------------------------COMMENT
MEDIUMscenedetect/_cli/config.py3# -------------------------------------------------------------------COMMENT
21 more matches not shown…
Hyper-Verbose Identifiers142 hits · 138 pts
SeverityFileLineSnippetContext
LOWbenchmark/evaluator.py182 def mean_abs_offset_hard_cuts(self) -> float:CODE
LOWtests/test_stats_manager.py101def test_save_no_detect_scenes(tmp_path: Path):CODE
LOWtests/test_stats_manager.py137def test_save_load_from_video(test_video_file, tmp_path: Path):CODE
LOWtests/test_backend_pyav.py25def test_video_stream_pyav_bytesio(test_video_file: str):CODE
LOWtests/test_backend_pyav.py59def test_read_tolerates_corrupt_frame(test_video_file: str):CODE
LOWtests/test_backend_pyav.py79def test_read_gives_up_after_consecutive_failures(test_video_file: str, caplog):CODE
LOWtests/test_detectors.py131def get_fade_in_out_test_cases():CODE
LOWtests/test_detectors.py206def test_detectors_with_stats(test_video_file):CODE
LOWtests/test_detectors.py237def test_min_scene_len_accepts_time_values(detector_type, min_scene_len):CODE
LOWtests/conftest.py70def pytest_assertrepr_compare(op, left, right):STRING
LOWtests/test_scene_manager.py64def test_get_scene_list_start_in_scene(test_video_file):CODE
LOWtests/test_scene_manager.py109def test_detect_scenes_callback(test_video_file):CODE
LOWtests/test_scene_manager.py145def test_detect_scenes_callback_adaptive(test_video_file):CODE
LOWtests/test_scene_manager.py215def test_expand_scenes_to_bounds_two_scenes():CODE
LOWtests/test_scene_manager.py230def test_expand_scenes_to_bounds_empty():CODE
LOWtests/test_scene_manager.py236def test_expand_scenes_to_bounds_single_scene():CODE
LOWtests/test_scene_manager.py250def test_expand_scenes_to_bounds_does_not_mutate_input():CODE
LOWtests/test_benchmark_evaluator.py49def test_hard_tolerance_one_admits_one_frame_offset():CODE
LOWtests/test_benchmark_evaluator.py55def test_hard_tolerance_one_rejects_two_frame_offset():CODE
LOWtests/test_benchmark_evaluator.py60def test_hard_greedy_picks_closer_match():CODE
LOWtests/test_benchmark_evaluator.py68def test_hard_equidistant_tie_resolves_deterministically():CODE
LOWtests/test_benchmark_evaluator.py77def test_hard_one_to_one_no_double_assignment():CODE
LOWtests/test_benchmark_evaluator.py114def test_fade_pred_inside_interval_is_match():CODE
LOWtests/test_benchmark_evaluator.py120def test_fade_pred_outside_interval_not_consumed():CODE
LOWtests/test_benchmark_evaluator.py126def test_fade_multiple_preds_in_same_interval():CODE
LOWtests/test_benchmark_evaluator.py136def test_fade_interval_endpoints_inclusive():CODE
LOWtests/test_benchmark_evaluator.py38def test_hard_exact_match_tolerance_zero():CODE
LOWtests/test_benchmark_evaluator.py93def test_hard_empty_preds_with_nonempty_gt():CODE
LOWtests/test_benchmark_evaluator.py101def test_hard_empty_gt_with_nonempty_preds():CODE
LOWtests/test_benchmark_evaluator.py147def test_score_video_fade_consumes_pred_before_hard():CODE
LOWtests/test_benchmark_evaluator.py159def test_score_video_pred_outside_fade_falls_to_hard():CODE
LOWtests/test_benchmark_evaluator.py172def test_mean_abs_offset_only_hard_matches_tolerance_zero():CODE
LOWtests/test_benchmark_evaluator.py184def test_mean_abs_offset_only_hard_matches_tolerance_one():CODE
LOWtests/test_benchmark_evaluator.py196def test_mean_abs_offset_nan_when_no_matches():CODE
LOWtests/test_benchmark_evaluator.py202def test_benchmark_result_mean_abs_offset_nan_when_no_matches_across_videos():CODE
LOWtests/test_benchmark_evaluator.py227def test_benchmark_result_aggregate_matches_sum_of_counts():CODE
LOWtests/test_benchmark_evaluator.py256def test_benchmark_result_by_category_buckets_videos():CODE
LOWtests/test_benchmark_evaluator.py281def test_benchmark_result_by_category_buckets_untagged_videos_as_unknown():CODE
LOWtests/test_benchmark_evaluator.py307def test_event_metrics_addition():CODE
LOWtests/test_benchmark_evaluator.py314def test_event_metrics_to_dict_round_trip():CODE
LOWtests/test_video_stream.py44def get_moviepy_major_version() -> int:CODE
LOWtests/test_video_stream.py349def test_framerate_legacy_alias(vs_type: ty.Callable[..., VideoStream]):CODE
LOWtests/test_video_stream.py383def test_decode_failures_clean_video(vs_type: ty.Callable[..., VideoStream]):CODE
LOWtests/test_video_stream.py392def test_delayed_start_normalized(vs_type: ty.Callable[..., VideoStream], delayed_start_video: str):CODE
LOWtests/test_backend_opencv.py56def test_decode_failures_exposed(corrupt_video_file: str):CODE
LOWtests/test_timecode.py403def test_ntsc_framerate_detection_arbitrary_base():CODE
LOWtests/test_timecode.py410def test_ntsc_framerate_detection_low_precision():CODE
LOWtests/test_timecode.py417def test_framerate_to_fraction_non_ntsc_fallback():CODE
LOWtests/test_timecode.py424def test_timecode_arithmetic_mixed_time_base():CODE
LOWtests/test_timecode.py438def test_timecode_frame_num_for_vfr():CODE
LOWtests/test_timecode.py446def test_arithmetic_with_bare_timecode():CODE
LOWtests/test_timecode.py525def test_cross_rate_frame_number_equality_unchanged():CODE
LOWtests/test_timecode.py531def test_mixed_representation_comparison_unchanged():CODE
LOWtests/test_timecode.py539def test_min_scene_len_accepts_timecode_like():CODE
LOWtests/test_timecode.py101def test_frame_num_and_frame_rate_are_read_only():CODE
LOWtests/test_timecode.py110def test_equal_frame_rate_legacy_alias():CODE
LOWtests/test_timecode.py365def test_rational_framerate_precision():CODE
LOWtests/test_timecode.py374def test_ntsc_framerate_detection():CODE
LOWtests/test_timecode.py386def test_frame_timecode_converts_ntsc_float_fps():CODE
LOWtests/test_timecode.py466def test_comparisons_with_bare_timecode():CODE
82 more matches not shown…
Over-Commented Block101 hits · 98 pts
SeverityFileLineSnippetContext
LOWscenedetect.cfg1COMMENT
LOWscenedetect.cfg21# GLOBAL OPTIONSCOMMENT
LOWscenedetect.cfg41# Video backend interface, must be one of: opencv, pyav, moviepy.COMMENT
LOWscenedetect.cfg61# Amount of frames to skip between performing scene detection. Not recommended.COMMENT
LOWscenedetect.cfg81COMMENT
LOWscenedetect.cfg101# Weight to place on each component when calculating frame score (the valueCOMMENT
LOWscenedetect.cfg121# merge: Consecutive scenes shorter than min-scene-len are combined.COMMENT
LOWscenedetect.cfg141#min-scene-len = 0.6sCOMMENT
LOWscenedetect.cfg161# Percent from -100.0 to 100.0 of timecode skew for where cuts should be placed.COMMENT
LOWscenedetect.cfg181COMMENT
LOWscenedetect.cfg201#rate-factor = 22COMMENT
LOWscenedetect.cfg221#filename = $VIDEO_NAME-Scene-$SCENE_NUMBER-$IMAGE_NUMBERCOMMENT
LOWscenedetect.cfg241COMMENT
LOWscenedetect.cfg261#image-height = 0COMMENT
LOWscenedetect.cfg281#display-scenes = yesCOMMENT
LOWscenedetect.cfg301# Suppress all display output of list-scenes command.COMMENT
LOWscenedetect.cfg341[save-qp]COMMENT
LOWscenedetect.cfg361#format = fcpxCOMMENT
LOWscenedetect.cfg381COMMENT
LOWbenchmark/dataset.py1#COMMENT
LOWbenchmark/evaluator.py1#COMMENT
LOWbenchmark/__main__.py1#COMMENT
LOWpackaging/variants/pyproject-scenedetect-headless.toml1#COMMENT
LOWpackaging/variants/pyproject-scenedetect.toml1#COMMENT
LOWpackaging/windows/pyi_rth_scenedetect.py1#COMMENT
LOWtests/test_stats_manager.py1#COMMENT
LOWtests/test_backend_pyav.py1#COMMENT
LOWtests/test_detectors.py1#COMMENT
LOWtests/conftest.py1#COMMENT
LOWtests/test_scene_manager.py1#COMMENT
LOWtests/test_benchmark_evaluator.py1#COMMENT
LOWtests/test_video_stream.py1#COMMENT
LOWtests/test_backend_opencv.py1#COMMENT
LOWtests/test_timecode.py1#COMMENT
LOWtests/__init__.py1#COMMENT
LOWtests/test_output.py1#COMMENT
LOWtests/test_concat.py1#COMMENT
LOWtests/test_platform.py1#COMMENT
LOWtests/test_api.py1#COMMENT
LOWtests/test_cli.py1#COMMENT
LOWtests/test_cli.py221COMMENT
LOWtests/helpers.py1#COMMENT
LOWtests/test_vfr.py1#COMMENT
LOWtests/release/synthetic.py1#COMMENT
LOWtests/release/conftest.py1#COMMENT
LOWtests/release/test_validation.py1#COMMENT
LOWtests/release/test_cli_permutations.py1#COMMENT
LOWtests/release/test_long_video.py1#COMMENT
LOWtests/release/test_backends.py1#COMMENT
LOWtests/release/test_input_matrix.py1#COMMENT
LOWtests/release/test_golden.py1#COMMENT
LOWtests/release/test_vfr.py1#COMMENT
LOWscenedetect/detector.py1#COMMENT
LOWscenedetect/scene_manager.py1#COMMENT
LOWscenedetect/stats_manager.py1#COMMENT
LOWscenedetect/__init__.py1#COMMENT
LOWscenedetect/platform.py1#COMMENT
LOWscenedetect/platform.py361 # version even when run uninstalled (e.g. from a source checkout). The import isCOMMENT
LOWscenedetect/frame_timecode.py1#COMMENT
LOWscenedetect/common.py1#COMMENT
41 more matches not shown…
Cross-File Repetition16 hits · 80 pts
SeverityFileLineSnippetContext
HIGHtests/test_detectors.py0returns the absolute path to a (relative) path of a file that should exist within the tests/ directory. throws filenotfoSTRING
HIGHtests/conftest.py0returns the absolute path to a (relative) path of a file that should exist within the tests/ directory. throws filenotfoSTRING
HIGHtests/test_video_stream.py0returns the absolute path to a (relative) path of a file that should exist within the tests/ directory. throws filenotfoSTRING
HIGHtests/test_detectors.py0test video file ({path}) must be present to run test case. this file can be obtained by running the following commands fSTRING
HIGHtests/test_video_stream.py0test video file ({path}) must be present to run test case. this file can be obtained by running the following commands fSTRING
HIGHtests/conftest.py0test video file ({path}) must be present to run test case. this file can be obtained by running the following commands fSTRING
HIGHscenedetect/video_stream.py0duration of the stream as a frametimecode, or none if non terminating.STRING
HIGHscenedetect/backends/moviepy.py0duration of the stream as a frametimecode, or none if non terminating.STRING
HIGHscenedetect/backends/opencv.py0duration of the stream as a frametimecode, or none if non terminating.STRING
HIGHscenedetect/video_stream.py0reported size of each video frame in pixels as a tuple of (width, height).STRING
HIGHscenedetect/backends/moviepy.py0reported size of each video frame in pixels as a tuple of (width, height).STRING
HIGHscenedetect/backends/pyav.py0reported size of each video frame in pixels as a tuple of (width, height).STRING
HIGHscenedetect/backends/opencv.py0reported size of each video frame in pixels as a tuple of (width, height).STRING
HIGHscenedetect/backends/moviepy.py0close and re-open the videostream (should be equivalent to calling `seek(0)`).STRING
HIGHscenedetect/backends/pyav.py0close and re-open the videostream (should be equivalent to calling `seek(0)`).STRING
HIGHscenedetect/backends/opencv.py0close and re-open the videostream (should be equivalent to calling `seek(0)`).STRING
Cross-Language Confusion10 hits · 50 pts
SeverityFileLineSnippetContext
HIGHtests/test_cli.py1053 "available_image_bounds": null,CODE
HIGHtests/test_cli.py1093 "available_image_bounds": null,CODE
HIGHtests/test_cli.py1141 "available_image_bounds": null,CODE
HIGHtests/test_cli.py1181 "available_image_bounds": null,CODE
HIGHtests/test_cli.py1271 "available_image_bounds": null,CODE
HIGHtests/test_cli.py1311 "available_image_bounds": null,CODE
HIGHscenedetect/detectors/transnet_v2.py79 cuts.extend(self.det.push(pred[i, 25:75, 0], time[i, 25:75]))CODE
HIGHscenedetect/detectors/transnet_v2.py178 cuts = self.predictor.push(self.px[self.j], self.time[self.j])CODE
HIGHscenedetect/detectors/transnet_v2.py199 cuts.extend(self.predictor.push(self.px[self.j], self.time[self.j]))CODE
HIGHscenedetect/detectors/transnet_v2.py205 cuts.extend(self.predictor.push(self.px[self.j], self.time[self.j]))CODE
Unused Imports52 hits · 48 pts
SeverityFileLineSnippetContext
LOWbenchmark/evaluator.py29CODE
LOWbenchmark/__main__.py20CODE
LOWtests/test_benchmark_evaluator.py17CODE
LOWscenedetect/scene_manager.py100CODE
LOWscenedetect/__init__.py34CODE
LOWscenedetect/__init__.py34CODE
LOWscenedetect/__init__.py34CODE
LOWscenedetect/__init__.py34CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py46CODE
LOWscenedetect/__init__.py59CODE
LOWscenedetect/__init__.py59CODE
LOWscenedetect/__init__.py59CODE
LOWscenedetect/__init__.py59CODE
LOWscenedetect/__init__.py59CODE
LOWscenedetect/__init__.py66CODE
LOWscenedetect/__init__.py66CODE
LOWscenedetect/__init__.py66CODE
LOWscenedetect/__init__.py66CODE
LOWscenedetect/__init__.py75CODE
LOWscenedetect/__init__.py24CODE
LOWscenedetect/platform.py27CODE
LOWscenedetect/frame_timecode.py22CODE
LOWscenedetect/scene_detector.py22CODE
LOWscenedetect/video_splitter.py22CODE
LOWscenedetect/backends/__init__.py95CODE
LOWscenedetect/backends/__init__.py95CODE
LOWscenedetect/backends/__init__.py96CODE
LOWscenedetect/backends/opencv.py23CODE
LOWscenedetect/output/__init__.py42CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/output/__init__.py43CODE
LOWscenedetect/_cli/__init__.py25CODE
LOWscenedetect/detectors/__init__.py38CODE
LOWscenedetect/detectors/__init__.py39CODE
LOWscenedetect/detectors/__init__.py40CODE
LOWscenedetect/detectors/__init__.py41CODE
LOWscenedetect/detectors/__init__.py42CODE
Deep Nesting18 hits · 18 pts
SeverityFileLineSnippetContext
LOWbenchmark/dataset.py173CODE
LOWbenchmark/evaluator.py269CODE
LOWscenedetect/scene_manager.py410CODE
LOWscenedetect/scene_manager.py612CODE
LOWscenedetect/stats_manager.py221CODE
LOWscenedetect/common.py478CODE
LOWscenedetect/backends/opencv.py242CODE
LOWscenedetect/backends/opencv.py281CODE
LOWscenedetect/output/video.py255CODE
LOWscenedetect/output/image.py38CODE
LOWscenedetect/output/image.py352CODE
LOWscenedetect/_cli/config.py580CODE
LOWscenedetect/_cli/config.py156CODE
LOWscenedetect/_cli/context.py176CODE
LOWscenedetect/detectors/threshold_detector.py100CODE
LOWscripts/validate_release.py209CODE
LOWscripts/generate_goldens.py59CODE
LOWscripts/_release_common.py67CODE
AI Slop Vocabulary5 hits · 11 pts
SeverityFileLineSnippetContext
LOWtests/test_timecode.py442 # Should not raise or warn - just return the approximate frame number.COMMENT
LOWscenedetect/backends/opencv.py299 # We didn't manage to grab a frame even after retrying, so just return.COMMENT
LOWscenedetect/backends/opencv.py529 # We didn't manage to grab a frame even after retrying, so just return.COMMENT
MEDIUMscenedetect/detectors/histogram_detector.py94 # TODO: We can have EMA of histograms to make it more robustCOMMENT
MEDIUMscenedetect/detectors/content_detector.py42 # Create a more comprehensive test suite to optimize against.COMMENT
Excessive Try-Catch Wrapping8 hits · 10 pts
SeverityFileLineSnippetContext
LOWtests/release/test_validation.py137 except Exception as exc:CODE
LOWtests/release/test_backends.py71 except Exception as exc:CODE
LOWtests/release/test_backends.py122 except Exception as exc:CODE
LOWscenedetect/backends/pyav.py137 except Exception as ex:CODE
LOWscenedetect/backends/pyav.py304 except Exception as ex:CODE
LOWscripts/generate_goldens.py82 except Exception as e:CODE
MEDIUMscripts/stage_windows_dist.py42 print("Error: stage_windows_dist.py must be run on Windows.", file=sys.stderr)CODE
MEDIUMscripts/generate_assets.py165 print("Error: Inkscape not found. Please install it or add it to PATH.", file=sys.stderr)CODE
Docstring Block Structure2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHscenedetect/__init__.py93Open a video at the given path. If `backend` is specified but not available on the current system, OpenCV (`VideoStrSTRING
HIGHscenedetect/platform.py222Same as calling Python's subprocess.call() method, but explicitly raises a different exception when the command lengSTRING
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMscenedetect.cfg3# This file contains every possible PySceneDetect config option.COMMENT
MEDIUMscenedetect/detectors/histogram_detector.py156 # Create the histogram with a bin for every rgb valueCOMMENT
MEDIUMscenedetect/detectors/content_detector.py42 # Create a more comprehensive test suite to optimize against.COMMENT
AI Structural Patterns5 hits · 5 pts
SeverityFileLineSnippetContext
LOWtests/release/test_cli_permutations.py31CODE
LOWscenedetect/output/video.py255CODE
LOWscenedetect/output/image.py352CODE
LOWscenedetect/output/image.py109CODE
LOWscenedetect/_cli/__init__.py1516CODE
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_backend_pyav.py85CODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtests/test_output.py94# TODO: Add tests for `split_video_mkvmerge`.COMMENT
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscenedetect/detectors/histogram_detector.py100 # Check if a new scene should be triggeredCOMMENT
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWscenedetect/stats_manager.py137 def set_metrics(self, timecode: int | FrameTimecode, metric_kv_dict: dict[str, ty.Any]) -> None:CODE