AI Slop Code RIsk Monitor

GuanYixuan/pyJianYingDraft

轻量、灵活、易上手的Python剪映草稿生成及导出工具,构建全自动化视频剪辑/混剪流水线。本项目的CapCut版本正于 https://github.com/GuanYixuan/pyCapCut 内开发

8.0 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for GuanYixuan/pyJianYingDraft, a Python project with 4,528 GitHub stars. SynthScan examined 23,054 lines of code across 65 source files, recording 159 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 8.0 (Moderate pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

8.0
Adjusted Signal
8.0
Raw Pattern Score
100%
Time Factor
2026-09-26
Last Push
4.5K
Stars
Python
Language
23.1K
Lines of Code
65
Files
159
Pattern Hits
2026-10-12
Scan Date
0.12
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 22.2/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 76 finding(s).

Hallucinated Dependency & Supply Chain Risk 13.2/100 · LOW

Are imports declared and package/API names verified? 79 finding(s).

Agent Over-Engineering Ratio 14.6/100 · LOW

Are wrappers, guards, and repeated structures necessary? 65 finding(s).

PR Review Velocity Impact 35.0/100 · MEDIUM

Which changes need focused human review? 159 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 8MEDIUM 0LOW 151

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 159 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Unused Imports79 hits · 65 pts
SeverityFileLineSnippetContext
LOWtools/generate_pypi_readme.py4CODE
LOWtools/build_dist.py4CODE
LOWtools/build_dist.py43CODE
LOWtests/conftest.py3CODE
LOWtests/helpers.py3CODE
LOWpyJianYingDraft/_script_file_tracks.py1CODE
LOWpyJianYingDraft/__init__.py3CODE
LOWpyJianYingDraft/__init__.py4CODE
LOWpyJianYingDraft/__init__.py5CODE
LOWpyJianYingDraft/__init__.py5CODE
LOWpyJianYingDraft/__init__.py6CODE
LOWpyJianYingDraft/__init__.py7CODE
LOWpyJianYingDraft/__init__.py7CODE
LOWpyJianYingDraft/__init__.py7CODE
LOWpyJianYingDraft/__init__.py8CODE
LOWpyJianYingDraft/__init__.py9CODE
LOWpyJianYingDraft/__init__.py10CODE
LOWpyJianYingDraft/__init__.py11CODE
LOWpyJianYingDraft/__init__.py11CODE
LOWpyJianYingDraft/__init__.py11CODE
LOWpyJianYingDraft/__init__.py11CODE
LOWpyJianYingDraft/__init__.py11CODE
LOWpyJianYingDraft/__init__.py11CODE
LOWpyJianYingDraft/__init__.py11CODE
LOWpyJianYingDraft/__init__.py12CODE
LOWpyJianYingDraft/__init__.py12CODE
LOWpyJianYingDraft/__init__.py12CODE
LOWpyJianYingDraft/__init__.py12CODE
LOWpyJianYingDraft/__init__.py13CODE
LOWpyJianYingDraft/__init__.py13CODE
LOWpyJianYingDraft/__init__.py14CODE
LOWpyJianYingDraft/__init__.py15CODE
LOWpyJianYingDraft/__init__.py15CODE
LOWpyJianYingDraft/__init__.py16CODE
LOWpyJianYingDraft/__init__.py16CODE
LOWpyJianYingDraft/__init__.py16CODE
LOWpyJianYingDraft/__init__.py16CODE
LOWpyJianYingDraft/__init__.py16CODE
LOWpyJianYingDraft/__init__.py17CODE
LOWpyJianYingDraft/__init__.py17CODE
LOWpyJianYingDraft/__init__.py17CODE
LOWpyJianYingDraft/__init__.py17CODE
LOWpyJianYingDraft/__init__.py17CODE
LOWpyJianYingDraft/__init__.py18CODE
LOWpyJianYingDraft/__init__.py18CODE
LOWpyJianYingDraft/__init__.py18CODE
LOWpyJianYingDraft/__init__.py19CODE
LOWpyJianYingDraft/__init__.py19CODE
LOWpyJianYingDraft/__init__.py19CODE
LOWpyJianYingDraft/__init__.py23CODE
LOWpyJianYingDraft/__init__.py23CODE
LOWpyJianYingDraft/__init__.py23CODE
LOWpyJianYingDraft/_script_file_template.py1CODE
LOWpyJianYingDraft/_script_file_template.py12CODE
LOWpyJianYingDraft/_script_file_segments.py1CODE
LOWpyJianYingDraft/_script_file_protocol.py1CODE
LOWpyJianYingDraft/_script_file_protocol.py13CODE
LOWpyJianYingDraft/_script_file_protocol.py14CODE
LOWpyJianYingDraft/script_material.py1CODE
LOWpyJianYingDraft/metadata/__init__.py6CODE
19 more matches not shown…
Hyper-Verbose Identifiers57 hits · 64 pts
SeverityFileLineSnippetContext
LOWtools/build_dist.py50def assert_no_tests_in_tarball(path: Path) -> None:CODE
LOWtests/test_template_loading.py18def test_load_template_raises_stable_error_for_non_plain_content_without_fallback_loader(tmp_path):CODE
LOWtests/test_template_loading.py28def test_load_template_uses_fallback_loader_for_non_plain_content(tmp_path):CODE
LOWtests/test_template_loading.py49def test_load_template_accepts_dict_from_fallback_loader(tmp_path):CODE
LOWtests/test_template_loading.py64def test_duplicate_as_template_reuses_fallback_loader(tmp_path):CODE
LOWtests/test_template_loading.py76def test_load_template_normalizes_sparse_template_content(tmp_path):CODE
LOWtests/test_template_loading.py115def test_template_dump_preserves_original_track_array_order(tmp_path):CODE
LOWtests/test_template_loading.py160def test_list_imported_tracks_preserves_internal_order_and_supports_type_filter(tmp_path):CODE
LOWtests/test_template_loading.py185def test_list_imported_tracks_returns_live_references(tmp_path):CODE
LOWtests/test_template_loading.py209def test_get_imported_track_uses_internal_order_for_indexing(tmp_path):CODE
LOWtests/test_template_loading.py230def test_import_track_supports_explicit_insert_position(tmp_path):CODE
LOWtests/test_video_chroma_export.py8def test_video_chroma_exports_minimal_shape():CODE
LOWtests/test_video_chroma_export.py35def test_video_chroma_exports_adjusted_params():CODE
LOWtests/test_video_chroma_export.py59def test_video_chroma_rejects_duplicate_or_invalid_values():CODE
LOW⚡tests/test_time_util.py6def test_tim_parses_common_duration_strings():CODE
LOW⚡tests/test_time_util.py13def test_tim_supports_negative_offsets():CODE
LOW⚡tests/test_time_util.py17def test_trange_uses_duration_not_end_time():CODE
LOW⚡tests/test_time_util.py25def test_trange_seconds_accepts_end_or_duration():CODE
LOW⚡tests/test_time_util.py34def test_trange_seconds_rounds_absolute_boundaries():CODE
LOW⚡tests/test_time_util.py44def test_trange_seconds_requires_numeric_seconds():CODE
LOW⚡tests/test_time_util.py48def test_timerange_overlap_semantics():CODE
LOW⚡tests/test_time_util.py56def test_timerange_import_json_defaults_missing_start_to_zero():CODE
LOWtests/test_audio_effect_export.py8def test_tone_effect_type_is_exported_from_top_level():CODE
LOWtests/test_audio_effect_export.py12def test_tone_effect_exports_minimal_shape():CODE
LOWtests/test_audio_effect_export.py31def test_audio_scene_effect_keeps_legacy_export_shape():CODE
LOW⚡tests/test_track_basics.py10def test_track_accepts_matching_segment_type():CODE
LOW⚡tests/test_track_basics.py20def test_track_rejects_mismatched_segment_type():CODE
LOW⚡tests/test_track_basics.py28def test_track_rejects_overlapping_segments():CODE
LOWtests/test_track_basics.py39def test_track_accepts_beat_aligned_segments_in_seconds():CODE
LOWtests/test_track_basics.py55def test_track_still_rejects_one_microsecond_overlap():CODE
LOWtests/test_track_basics.py64def test_track_end_time_reflects_last_segment_end():CODE
LOWtests/test_video_mix_mode_export.py13def _assert_only_last_mix_mode(script, segment):CODE
LOWtests/test_video_mix_mode_export.py25def test_repeated_mix_mode_before_adding_segment_keeps_only_last_mode():CODE
LOWtests/test_video_mix_mode_export.py38def test_repeated_mix_mode_after_adding_segment_updates_registered_material():CODE
LOWtests/test_track_append_api.py9def test_append_track_returns_track_ref_and_appends_to_end():CODE
LOWtests/test_track_append_api.py20def test_append_tracks_preserves_input_order():CODE
LOWtests/test_track_append_api.py34def test_add_segment_accepts_track_ref():CODE
LOWtests/test_track_append_api.py46def test_add_segment_rejects_foreign_track_ref():CODE
LOWtests/test_track_insert_api.py28def test_insert_track_before_imported_track_preserves_overall_order(tmp_path):CODE
LOWtests/test_track_insert_api.py49def test_insert_tracks_over_track_ref_preserves_block_order():CODE
LOWtests/test_track_insert_api.py69def test_insert_track_at_index_uses_full_track_order(tmp_path):CODE
LOWtests/test_track_insert_api.py89def test_insert_track_rejects_multiple_location_hints():CODE
LOWtests/test_track_insert_api.py101def test_insert_track_rejects_foreign_imported_track_anchor(tmp_path):CODE
LOWtests/test_track_insert_api.py122def test_insert_track_rejects_out_of_range_index():CODE
LOWtests/test_import_srt.py6def test_import_srt_creates_text_track_when_missing(tmp_path):CODE
LOWtests/test_import_srt.py21def test_import_srt_applies_time_offset(tmp_path):CODE
LOWtests/test_import_srt.py35def test_import_srt_uses_style_reference_when_provided(tmp_path):CODE
LOWtests/test_import_srt.py57def test_import_srt_inserts_new_text_track_after_video_and_text_tracks(tmp_path):CODE
LOW⚡tests/test_scriptfile_building.py7def test_append_track_allows_first_unnamed_track_per_type():CODE
LOW⚡tests/test_scriptfile_building.py16def test_append_track_requires_name_for_second_same_type_track():CODE
LOW⚡tests/test_scriptfile_building.py24def test_add_segment_updates_script_duration():CODE
LOW⚡tests/test_scriptfile_building.py34def test_add_segment_auto_registers_materials_and_effect_refs():CODE
LOWtests/test_scriptfile_building.py55def test_dumps_orders_tracks_by_track_order():CODE
LOWpyJianYingDraft/_script_file_tracks.py20 def _list_all_tracks_in_order(self: ScriptFileProtocol) -> List[BaseTrack]:CODE
LOWpyJianYingDraft/_script_file_template.py18 def _get_imported_material_list(self: ScriptFileProtocol, material_type: str) -> List[Dict[str, Any]]:CODE
LOWpyJianYingDraft/_script_file_protocol.py38 def _get_imported_material_list(self, material_type: str) -> List[Dict[str, Any]]: ...CODE
LOWpyJianYingDraft/_script_file_protocol.py42 def _list_all_tracks_in_order(self) -> List[BaseTrack]: ...CODE
Docstring Block Structure8 hits · 40 pts
SeverityFileLineSnippetContext
HIGHpyJianYingDraft/draft_folder.py122在文件夹中打开一个草稿作为模板, 并在其上进行编辑 Args: draft_name (`str`): 草稿名称, 即相应文件夹名称 Returns: `SSTRING
HIGHpyJianYingDraft/draft_folder.py145复制一份给定的草稿, 并在复制出的新草稿上进行编辑 Args: template_name (`str`): 原草稿名称 new_draft_name (`str`): 新草STRING
HIGHpyJianYingDraft/_script_file_tracks.py110追加一个新轨道到当前最上层 Args: track_spec (`TrackSpec`): 待追加轨道的描述对象 Returns: `TrackRef`: STRING
HIGHpyJianYingDraft/_script_file_tracks.py130按给定顺序将多个新轨道追加到当前最上层 Args: track_specs (`Sequence[TrackSpec]`): 待追加轨道描述列表 Returns: STRING
HIGHpyJianYingDraft/_script_file_tracks.py151将一个新轨道插入到指定位置 Args: track_spec (`TrackSpec`): 待插入轨道的描述对象 under_track (`TrackRef` or `ImSTRING
HIGHpyJianYingDraft/_script_file_tracks.py179将多个新轨道作为一个顺序块插入到指定位置 Args: track_specs (`Sequence[TrackSpec]`): 待插入轨道描述列表 under_track (STRING
HIGHpyJianYingDraft/_script_file_template.py28获取唯一匹配的导入轨道, 以便在其上进行替换 推荐使用轨道名称进行筛选(若已知轨道名称) Args: track_type (`TrackType.video`, `TrackTySTRING
HIGHpyJianYingDraft/assets/__init__.py18 获取指定资源文件的完整路径 Args: asset_name: 资源名称(ASSET_FILES中的key) Returns: Path: 资源文件的完整路径 RaisSTRING
Deep Nesting7 hits · 7 pts
SeverityFileLineSnippetContext
LOWpyJianYingDraft/util.py10CODE
LOWpyJianYingDraft/_script_file_template.py83CODE
LOWpyJianYingDraft/_script_file_template.py243CODE
LOWpyJianYingDraft/_script_file_segments.py51CODE
LOWpyJianYingDraft/_script_file_segments.py178CODE
LOWpyJianYingDraft/template_mode.py153CODE
LOWpyJianYingDraft/metadata/effect_meta.py76CODE
AI Structural Patterns4 hits · 4 pts
SeverityFileLineSnippetContext
LOWpyJianYingDraft/text_segment.py50CODE
LOWpyJianYingDraft/video_segment.py569CODE
LOWpyJianYingDraft/local_materials.py54CODE
LOWpyJianYingDraft/segment.py147CODE
Modern Structural Boilerplate3 hits · 3 pts
SeverityFileLineSnippetContext
LOWpyJianYingDraft/__init__.py26__all__ = [CODE
LOWpyJianYingDraft/assets/__init__.py42__all__ = [CODE
LOWpyJianYingDraft/metadata/__init__.py34__all__ = [CODE
Excessive Try-Catch Wrapping1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpyJianYingDraft/draft_content_loader.py29 except Exception as exc:CODE