:movie_camera: Python and OpenCV-based scene cut/transition detection program & library.
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).
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 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 3 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | benchmark/dataset.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | benchmark/evaluator.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | benchmark/__main__.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | packaging/build_all.py | 3 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | packaging/variants/pyproject-scenedetect-headless.toml | 3 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | packaging/variants/pyproject-scenedetect.toml | 3 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | packaging/windows/pyi_rth_scenedetect.py | 3 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_stats_manager.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_backend_pyav.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_detectors.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/conftest.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_scene_manager.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_benchmark_evaluator.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_video_stream.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_backend_opencv.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_timecode.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/__init__.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_output.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_concat.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_platform.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_api.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_cli.py | 225 | # ------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_cli.py | 227 | # ------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_cli.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_cli.py | 239 | # ------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/helpers.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_vfr.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_vfr.py | 279 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | tests/test_vfr.py | 281 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | tests/release/synthetic.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/conftest.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/test_validation.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/test_cli_permutations.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/test_long_video.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/test_backends.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/test_input_matrix.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/test_golden.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/release/test_vfr.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/detector.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/scene_manager.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/stats_manager.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/__init__.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/platform.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/frame_timecode.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/common.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/scene_detector.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/video_splitter.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/video_stream.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/__main__.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/backends/moviepy.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/backends/pyav.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/backends/concat.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/backends/__init__.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/backends/opencv.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/output/__init__.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/output/video.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/output/image.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/_cli/controller.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| MEDIUM | scenedetect/_cli/config.py | 3 | # ------------------------------------------------------------------- | COMMENT |
| 21 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | benchmark/evaluator.py | 182 | def mean_abs_offset_hard_cuts(self) -> float: | CODE |
| LOW | tests/test_stats_manager.py | 101 | def test_save_no_detect_scenes(tmp_path: Path): | CODE |
| LOW | tests/test_stats_manager.py | 137 | def test_save_load_from_video(test_video_file, tmp_path: Path): | CODE |
| LOW | tests/test_backend_pyav.py | 25 | def test_video_stream_pyav_bytesio(test_video_file: str): | CODE |
| LOW | tests/test_backend_pyav.py | 59 | def test_read_tolerates_corrupt_frame(test_video_file: str): | CODE |
| LOW | tests/test_backend_pyav.py | 79 | def test_read_gives_up_after_consecutive_failures(test_video_file: str, caplog): | CODE |
| LOW | tests/test_detectors.py | 131 | def get_fade_in_out_test_cases(): | CODE |
| LOW | tests/test_detectors.py | 206 | def test_detectors_with_stats(test_video_file): | CODE |
| LOW | tests/test_detectors.py | 237 | def test_min_scene_len_accepts_time_values(detector_type, min_scene_len): | CODE |
| LOW | tests/conftest.py | 70 | def pytest_assertrepr_compare(op, left, right): | STRING |
| LOW | tests/test_scene_manager.py | 64 | def test_get_scene_list_start_in_scene(test_video_file): | CODE |
| LOW | tests/test_scene_manager.py | 109 | def test_detect_scenes_callback(test_video_file): | CODE |
| LOW | tests/test_scene_manager.py | 145 | def test_detect_scenes_callback_adaptive(test_video_file): | CODE |
| LOW | tests/test_scene_manager.py | 215 | def test_expand_scenes_to_bounds_two_scenes(): | CODE |
| LOW | tests/test_scene_manager.py | 230 | def test_expand_scenes_to_bounds_empty(): | CODE |
| LOW | tests/test_scene_manager.py | 236 | def test_expand_scenes_to_bounds_single_scene(): | CODE |
| LOW | tests/test_scene_manager.py | 250 | def test_expand_scenes_to_bounds_does_not_mutate_input(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 49 | def test_hard_tolerance_one_admits_one_frame_offset(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 55 | def test_hard_tolerance_one_rejects_two_frame_offset(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 60 | def test_hard_greedy_picks_closer_match(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 68 | def test_hard_equidistant_tie_resolves_deterministically(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 77 | def test_hard_one_to_one_no_double_assignment(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 114 | def test_fade_pred_inside_interval_is_match(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 120 | def test_fade_pred_outside_interval_not_consumed(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 126 | def test_fade_multiple_preds_in_same_interval(): | CODE |
| LOW⚡ | tests/test_benchmark_evaluator.py | 136 | def test_fade_interval_endpoints_inclusive(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 38 | def test_hard_exact_match_tolerance_zero(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 93 | def test_hard_empty_preds_with_nonempty_gt(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 101 | def test_hard_empty_gt_with_nonempty_preds(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 147 | def test_score_video_fade_consumes_pred_before_hard(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 159 | def test_score_video_pred_outside_fade_falls_to_hard(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 172 | def test_mean_abs_offset_only_hard_matches_tolerance_zero(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 184 | def test_mean_abs_offset_only_hard_matches_tolerance_one(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 196 | def test_mean_abs_offset_nan_when_no_matches(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 202 | def test_benchmark_result_mean_abs_offset_nan_when_no_matches_across_videos(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 227 | def test_benchmark_result_aggregate_matches_sum_of_counts(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 256 | def test_benchmark_result_by_category_buckets_videos(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 281 | def test_benchmark_result_by_category_buckets_untagged_videos_as_unknown(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 307 | def test_event_metrics_addition(): | CODE |
| LOW | tests/test_benchmark_evaluator.py | 314 | def test_event_metrics_to_dict_round_trip(): | CODE |
| LOW | tests/test_video_stream.py | 44 | def get_moviepy_major_version() -> int: | CODE |
| LOW | tests/test_video_stream.py | 349 | def test_framerate_legacy_alias(vs_type: ty.Callable[..., VideoStream]): | CODE |
| LOW | tests/test_video_stream.py | 383 | def test_decode_failures_clean_video(vs_type: ty.Callable[..., VideoStream]): | CODE |
| LOW | tests/test_video_stream.py | 392 | def test_delayed_start_normalized(vs_type: ty.Callable[..., VideoStream], delayed_start_video: str): | CODE |
| LOW | tests/test_backend_opencv.py | 56 | def test_decode_failures_exposed(corrupt_video_file: str): | CODE |
| LOW⚡ | tests/test_timecode.py | 403 | def test_ntsc_framerate_detection_arbitrary_base(): | CODE |
| LOW⚡ | tests/test_timecode.py | 410 | def test_ntsc_framerate_detection_low_precision(): | CODE |
| LOW⚡ | tests/test_timecode.py | 417 | def test_framerate_to_fraction_non_ntsc_fallback(): | CODE |
| LOW⚡ | tests/test_timecode.py | 424 | def test_timecode_arithmetic_mixed_time_base(): | CODE |
| LOW⚡ | tests/test_timecode.py | 438 | def test_timecode_frame_num_for_vfr(): | CODE |
| LOW⚡ | tests/test_timecode.py | 446 | def test_arithmetic_with_bare_timecode(): | CODE |
| LOW⚡ | tests/test_timecode.py | 525 | def test_cross_rate_frame_number_equality_unchanged(): | CODE |
| LOW⚡ | tests/test_timecode.py | 531 | def test_mixed_representation_comparison_unchanged(): | CODE |
| LOW⚡ | tests/test_timecode.py | 539 | def test_min_scene_len_accepts_timecode_like(): | CODE |
| LOW | tests/test_timecode.py | 101 | def test_frame_num_and_frame_rate_are_read_only(): | CODE |
| LOW | tests/test_timecode.py | 110 | def test_equal_frame_rate_legacy_alias(): | CODE |
| LOW | tests/test_timecode.py | 365 | def test_rational_framerate_precision(): | CODE |
| LOW | tests/test_timecode.py | 374 | def test_ntsc_framerate_detection(): | CODE |
| LOW | tests/test_timecode.py | 386 | def test_frame_timecode_converts_ntsc_float_fps(): | CODE |
| LOW | tests/test_timecode.py | 466 | def test_comparisons_with_bare_timecode(): | CODE |
| 82 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scenedetect.cfg | 1 | COMMENT | |
| LOW | scenedetect.cfg | 21 | # GLOBAL OPTIONS | COMMENT |
| LOW | scenedetect.cfg | 41 | # Video backend interface, must be one of: opencv, pyav, moviepy. | COMMENT |
| LOW | scenedetect.cfg | 61 | # Amount of frames to skip between performing scene detection. Not recommended. | COMMENT |
| LOW | scenedetect.cfg | 81 | COMMENT | |
| LOW | scenedetect.cfg | 101 | # Weight to place on each component when calculating frame score (the value | COMMENT |
| LOW | scenedetect.cfg | 121 | # merge: Consecutive scenes shorter than min-scene-len are combined. | COMMENT |
| LOW | scenedetect.cfg | 141 | #min-scene-len = 0.6s | COMMENT |
| LOW | scenedetect.cfg | 161 | # Percent from -100.0 to 100.0 of timecode skew for where cuts should be placed. | COMMENT |
| LOW | scenedetect.cfg | 181 | COMMENT | |
| LOW | scenedetect.cfg | 201 | #rate-factor = 22 | COMMENT |
| LOW | scenedetect.cfg | 221 | #filename = $VIDEO_NAME-Scene-$SCENE_NUMBER-$IMAGE_NUMBER | COMMENT |
| LOW | scenedetect.cfg | 241 | COMMENT | |
| LOW | scenedetect.cfg | 261 | #image-height = 0 | COMMENT |
| LOW | scenedetect.cfg | 281 | #display-scenes = yes | COMMENT |
| LOW | scenedetect.cfg | 301 | # Suppress all display output of list-scenes command. | COMMENT |
| LOW | scenedetect.cfg | 341 | [save-qp] | COMMENT |
| LOW | scenedetect.cfg | 361 | #format = fcpx | COMMENT |
| LOW | scenedetect.cfg | 381 | COMMENT | |
| LOW | benchmark/dataset.py | 1 | # | COMMENT |
| LOW | benchmark/evaluator.py | 1 | # | COMMENT |
| LOW | benchmark/__main__.py | 1 | # | COMMENT |
| LOW | packaging/variants/pyproject-scenedetect-headless.toml | 1 | # | COMMENT |
| LOW | packaging/variants/pyproject-scenedetect.toml | 1 | # | COMMENT |
| LOW | packaging/windows/pyi_rth_scenedetect.py | 1 | # | COMMENT |
| LOW | tests/test_stats_manager.py | 1 | # | COMMENT |
| LOW | tests/test_backend_pyav.py | 1 | # | COMMENT |
| LOW | tests/test_detectors.py | 1 | # | COMMENT |
| LOW | tests/conftest.py | 1 | # | COMMENT |
| LOW | tests/test_scene_manager.py | 1 | # | COMMENT |
| LOW | tests/test_benchmark_evaluator.py | 1 | # | COMMENT |
| LOW | tests/test_video_stream.py | 1 | # | COMMENT |
| LOW | tests/test_backend_opencv.py | 1 | # | COMMENT |
| LOW | tests/test_timecode.py | 1 | # | COMMENT |
| LOW | tests/__init__.py | 1 | # | COMMENT |
| LOW | tests/test_output.py | 1 | # | COMMENT |
| LOW | tests/test_concat.py | 1 | # | COMMENT |
| LOW | tests/test_platform.py | 1 | # | COMMENT |
| LOW | tests/test_api.py | 1 | # | COMMENT |
| LOW | tests/test_cli.py | 1 | # | COMMENT |
| LOW | tests/test_cli.py | 221 | COMMENT | |
| LOW | tests/helpers.py | 1 | # | COMMENT |
| LOW | tests/test_vfr.py | 1 | # | COMMENT |
| LOW | tests/release/synthetic.py | 1 | # | COMMENT |
| LOW | tests/release/conftest.py | 1 | # | COMMENT |
| LOW | tests/release/test_validation.py | 1 | # | COMMENT |
| LOW | tests/release/test_cli_permutations.py | 1 | # | COMMENT |
| LOW | tests/release/test_long_video.py | 1 | # | COMMENT |
| LOW | tests/release/test_backends.py | 1 | # | COMMENT |
| LOW | tests/release/test_input_matrix.py | 1 | # | COMMENT |
| LOW | tests/release/test_golden.py | 1 | # | COMMENT |
| LOW | tests/release/test_vfr.py | 1 | # | COMMENT |
| LOW | scenedetect/detector.py | 1 | # | COMMENT |
| LOW | scenedetect/scene_manager.py | 1 | # | COMMENT |
| LOW | scenedetect/stats_manager.py | 1 | # | COMMENT |
| LOW | scenedetect/__init__.py | 1 | # | COMMENT |
| LOW | scenedetect/platform.py | 1 | # | COMMENT |
| LOW | scenedetect/platform.py | 361 | # version even when run uninstalled (e.g. from a source checkout). The import is | COMMENT |
| LOW | scenedetect/frame_timecode.py | 1 | # | COMMENT |
| LOW | scenedetect/common.py | 1 | # | COMMENT |
| 41 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_detectors.py | 0 | returns the absolute path to a (relative) path of a file that should exist within the tests/ directory. throws filenotfo | STRING |
| HIGH | tests/conftest.py | 0 | returns the absolute path to a (relative) path of a file that should exist within the tests/ directory. throws filenotfo | STRING |
| HIGH | tests/test_video_stream.py | 0 | returns the absolute path to a (relative) path of a file that should exist within the tests/ directory. throws filenotfo | STRING |
| HIGH | tests/test_detectors.py | 0 | test video file ({path}) must be present to run test case. this file can be obtained by running the following commands f | STRING |
| HIGH | tests/test_video_stream.py | 0 | test video file ({path}) must be present to run test case. this file can be obtained by running the following commands f | STRING |
| HIGH | tests/conftest.py | 0 | test video file ({path}) must be present to run test case. this file can be obtained by running the following commands f | STRING |
| HIGH | scenedetect/video_stream.py | 0 | duration of the stream as a frametimecode, or none if non terminating. | STRING |
| HIGH | scenedetect/backends/moviepy.py | 0 | duration of the stream as a frametimecode, or none if non terminating. | STRING |
| HIGH | scenedetect/backends/opencv.py | 0 | duration of the stream as a frametimecode, or none if non terminating. | STRING |
| HIGH | scenedetect/video_stream.py | 0 | reported size of each video frame in pixels as a tuple of (width, height). | STRING |
| HIGH | scenedetect/backends/moviepy.py | 0 | reported size of each video frame in pixels as a tuple of (width, height). | STRING |
| HIGH | scenedetect/backends/pyav.py | 0 | reported size of each video frame in pixels as a tuple of (width, height). | STRING |
| HIGH | scenedetect/backends/opencv.py | 0 | reported size of each video frame in pixels as a tuple of (width, height). | STRING |
| HIGH | scenedetect/backends/moviepy.py | 0 | close and re-open the videostream (should be equivalent to calling `seek(0)`). | STRING |
| HIGH | scenedetect/backends/pyav.py | 0 | close and re-open the videostream (should be equivalent to calling `seek(0)`). | STRING |
| HIGH | scenedetect/backends/opencv.py | 0 | close and re-open the videostream (should be equivalent to calling `seek(0)`). | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_cli.py | 1053 | "available_image_bounds": null, | CODE |
| HIGH | tests/test_cli.py | 1093 | "available_image_bounds": null, | CODE |
| HIGH | tests/test_cli.py | 1141 | "available_image_bounds": null, | CODE |
| HIGH | tests/test_cli.py | 1181 | "available_image_bounds": null, | CODE |
| HIGH | tests/test_cli.py | 1271 | "available_image_bounds": null, | CODE |
| HIGH | tests/test_cli.py | 1311 | "available_image_bounds": null, | CODE |
| HIGH | scenedetect/detectors/transnet_v2.py | 79 | cuts.extend(self.det.push(pred[i, 25:75, 0], time[i, 25:75])) | CODE |
| HIGH | scenedetect/detectors/transnet_v2.py | 178 | cuts = self.predictor.push(self.px[self.j], self.time[self.j]) | CODE |
| HIGH | scenedetect/detectors/transnet_v2.py | 199 | cuts.extend(self.predictor.push(self.px[self.j], self.time[self.j])) | CODE |
| HIGH | scenedetect/detectors/transnet_v2.py | 205 | cuts.extend(self.predictor.push(self.px[self.j], self.time[self.j])) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | benchmark/evaluator.py | 29 | CODE | |
| LOW | benchmark/__main__.py | 20 | CODE | |
| LOW | tests/test_benchmark_evaluator.py | 17 | CODE | |
| LOW | scenedetect/scene_manager.py | 100 | CODE | |
| LOW | scenedetect/__init__.py | 34 | CODE | |
| LOW | scenedetect/__init__.py | 34 | CODE | |
| LOW | scenedetect/__init__.py | 34 | CODE | |
| LOW | scenedetect/__init__.py | 34 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 46 | CODE | |
| LOW | scenedetect/__init__.py | 59 | CODE | |
| LOW | scenedetect/__init__.py | 59 | CODE | |
| LOW | scenedetect/__init__.py | 59 | CODE | |
| LOW | scenedetect/__init__.py | 59 | CODE | |
| LOW | scenedetect/__init__.py | 59 | CODE | |
| LOW | scenedetect/__init__.py | 66 | CODE | |
| LOW | scenedetect/__init__.py | 66 | CODE | |
| LOW | scenedetect/__init__.py | 66 | CODE | |
| LOW | scenedetect/__init__.py | 66 | CODE | |
| LOW | scenedetect/__init__.py | 75 | CODE | |
| LOW | scenedetect/__init__.py | 24 | CODE | |
| LOW | scenedetect/platform.py | 27 | CODE | |
| LOW | scenedetect/frame_timecode.py | 22 | CODE | |
| LOW | scenedetect/scene_detector.py | 22 | CODE | |
| LOW | scenedetect/video_splitter.py | 22 | CODE | |
| LOW | scenedetect/backends/__init__.py | 95 | CODE | |
| LOW | scenedetect/backends/__init__.py | 95 | CODE | |
| LOW | scenedetect/backends/__init__.py | 96 | CODE | |
| LOW | scenedetect/backends/opencv.py | 23 | CODE | |
| LOW | scenedetect/output/__init__.py | 42 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/output/__init__.py | 43 | CODE | |
| LOW | scenedetect/_cli/__init__.py | 25 | CODE | |
| LOW | scenedetect/detectors/__init__.py | 38 | CODE | |
| LOW | scenedetect/detectors/__init__.py | 39 | CODE | |
| LOW | scenedetect/detectors/__init__.py | 40 | CODE | |
| LOW | scenedetect/detectors/__init__.py | 41 | CODE | |
| LOW | scenedetect/detectors/__init__.py | 42 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | benchmark/dataset.py | 173 | CODE | |
| LOW | benchmark/evaluator.py | 269 | CODE | |
| LOW | scenedetect/scene_manager.py | 410 | CODE | |
| LOW | scenedetect/scene_manager.py | 612 | CODE | |
| LOW | scenedetect/stats_manager.py | 221 | CODE | |
| LOW | scenedetect/common.py | 478 | CODE | |
| LOW | scenedetect/backends/opencv.py | 242 | CODE | |
| LOW | scenedetect/backends/opencv.py | 281 | CODE | |
| LOW | scenedetect/output/video.py | 255 | CODE | |
| LOW | scenedetect/output/image.py | 38 | CODE | |
| LOW | scenedetect/output/image.py | 352 | CODE | |
| LOW | scenedetect/_cli/config.py | 580 | CODE | |
| LOW | scenedetect/_cli/config.py | 156 | CODE | |
| LOW | scenedetect/_cli/context.py | 176 | CODE | |
| LOW | scenedetect/detectors/threshold_detector.py | 100 | CODE | |
| LOW | scripts/validate_release.py | 209 | CODE | |
| LOW | scripts/generate_goldens.py | 59 | CODE | |
| LOW | scripts/_release_common.py | 67 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_timecode.py | 442 | # Should not raise or warn - just return the approximate frame number. | COMMENT |
| LOW | scenedetect/backends/opencv.py | 299 | # We didn't manage to grab a frame even after retrying, so just return. | COMMENT |
| LOW | scenedetect/backends/opencv.py | 529 | # We didn't manage to grab a frame even after retrying, so just return. | COMMENT |
| MEDIUM | scenedetect/detectors/histogram_detector.py | 94 | # TODO: We can have EMA of histograms to make it more robust | COMMENT |
| MEDIUM | scenedetect/detectors/content_detector.py | 42 | # Create a more comprehensive test suite to optimize against. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/release/test_validation.py | 137 | except Exception as exc: | CODE |
| LOW | tests/release/test_backends.py | 71 | except Exception as exc: | CODE |
| LOW | tests/release/test_backends.py | 122 | except Exception as exc: | CODE |
| LOW | scenedetect/backends/pyav.py | 137 | except Exception as ex: | CODE |
| LOW | scenedetect/backends/pyav.py | 304 | except Exception as ex: | CODE |
| LOW | scripts/generate_goldens.py | 82 | except Exception as e: | CODE |
| MEDIUM | scripts/stage_windows_dist.py | 42 | print("Error: stage_windows_dist.py must be run on Windows.", file=sys.stderr) | CODE |
| MEDIUM | scripts/generate_assets.py | 165 | print("Error: Inkscape not found. Please install it or add it to PATH.", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scenedetect/__init__.py | 93 | Open a video at the given path. If `backend` is specified but not available on the current system, OpenCV (`VideoStr | STRING |
| HIGH | scenedetect/platform.py | 222 | Same as calling Python's subprocess.call() method, but explicitly raises a different exception when the command leng | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scenedetect.cfg | 3 | # This file contains every possible PySceneDetect config option. | COMMENT |
| MEDIUM | scenedetect/detectors/histogram_detector.py | 156 | # Create the histogram with a bin for every rgb value | COMMENT |
| MEDIUM | scenedetect/detectors/content_detector.py | 42 | # Create a more comprehensive test suite to optimize against. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/release/test_cli_permutations.py | 31 | CODE | |
| LOW | scenedetect/output/video.py | 255 | CODE | |
| LOW | scenedetect/output/image.py | 352 | CODE | |
| LOW | scenedetect/output/image.py | 109 | CODE | |
| LOW | scenedetect/_cli/__init__.py | 1516 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_backend_pyav.py | 85 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_output.py | 94 | # TODO: Add tests for `split_video_mkvmerge`. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scenedetect/detectors/histogram_detector.py | 100 | # Check if a new scene should be triggered | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scenedetect/stats_manager.py | 137 | def set_metrics(self, timecode: int | FrameTimecode, metric_kv_dict: dict[str, ty.Any]) -> None: | CODE |