AI Slop Code RIsk Monitor

ihmily/StreamCap

Multi-Platform Live Stream Automatic Recording Tool | 多平台直播流自动录制客户端 · 基于FFmpeg · 支持监控/定时/转码

18.0 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for ihmily/StreamCap, a Python project with 4,277 GitHub stars. SynthScan examined 18,073 lines of code across 133 source files, recording 276 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 18.0 (Elevated 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.

18.0
Adjusted Signal
18.0
Raw Pattern Score
100%
Time Factor
2026-09-01
Last Push
4.3K
Stars
Python
Language
18.1K
Lines of Code
133
Files
276
Pattern Hits
2026-10-12
Scan Date
0.07
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 24.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 14.8/100 · LOW

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

Agent Over-Engineering Ratio 47.4/100 · MEDIUM

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

PR Review Velocity Impact 61.7/100 · HIGH

Which changes need focused human review? 276 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

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

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 9MEDIUM 13LOW 254

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 276 distinct pattern matches across 9 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.

Excessive Try-Catch Wrapping96 hits · 116 pts
SeverityFileLineSnippetContext
LOWmain.py148 except Exception as e:CODE
LOWmain.py186 except Exception as err:CODE
LOW⚡app/app_manager.py121 except Exception:CODE
LOW⚡app/app_manager.py130 except Exception as exc:CODE
LOW⚡app/app_manager.py139 except Exception as exc:CODE
LOW⚡app/app_manager.py148 except Exception as exc:CODE
LOW⚡app/app_manager.py154 except Exception as exc:CODE
LOWapp/app_manager.py196 except Exception as e:CODE
LOWapp/app_manager.py219 except Exception as e:CODE
LOWapp/ui/components/business/video_player.py118 except Exception as e:CODE
LOWapp/ui/components/business/video_player.py140 except Exception as e:CODE
LOW⚡app/ui/components/business/recording_card.py377 except Exception as e:CODE
LOWapp/ui/components/business/recording_card.py252 except Exception as e:CODE
LOWapp/ui/components/business/recording_card.py296 except Exception as e:CODE
LOWapp/ui/components/business/recording_card.py421 except Exception as e:CODE
LOWapp/ui/components/business/recording_card.py440 except Exception as e:CODE
LOWapp/ui/components/business/recording_card.py496 except Exception as e:CODE
LOWapp/ui/views/storage_view.py82 except Exception as e:CODE
LOWapp/ui/views/storage_view.py95 except Exception:CODE
LOWapp/ui/views/storage_view.py108 except Exception as e:CODE
MEDIUMapp/ui/views/storage_view.py53def update_file_list(self):CODE
MEDIUMapp/ui/views/storage_view.py101def _get_items():CODE
LOWapp/messages/notification_service.py25 except Exception as e:CODE
LOWapp/messages/notification_service.py116 except Exception as e:CODE
LOWapp/messages/desktop_notify.py19 except Exception:CODE
LOWapp/core/update/update_checker.py59 except Exception as e:CODE
LOWapp/core/update/update_checker.py126 except Exception as e:CODE
LOWapp/core/update/update_checker.py164 except Exception as e:CODE
LOWapp/core/update/update_checker.py199 except Exception as e:CODE
MEDIUMapp/core/update/update_checker.py53def _get_current_version(self) -> str:CODE
LOWapp/core/config/config_manager.py47 except Exception as e:CODE
LOWapp/core/config/config_manager.py87 except Exception as e:CODE
LOWapp/core/config/config_manager.py145 except Exception as e:CODE
LOWapp/core/recording/record_manager.py524 except Exception:CODE
LOWapp/core/recording/stream_manager.py165 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py188 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py285 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py339 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py474 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py482 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py500 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py511 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py604 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py680 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py769 except Exception as e:CODE
LOWapp/core/recording/stream_manager.py777 except Exception as e:CODE
MEDIUMapp/core/recording/stream_manager.py334def remove_active_recorder(self):CODE
LOWapp/core/runtime/scheduled_shutdown.py149 except Exception as exc:CODE
LOWapp/core/runtime/backend_services.py102 except Exception as exc: # pragma: no cover - defensiveCODE
LOWapp/core/runtime/backend_services.py107 except Exception:CODE
LOWapp/core/runtime/backend_services.py121 except Exception as exc: # pragma: no cover - defensiveCODE
LOW⚡app/core/runtime/backend_services.py137 except Exception as exc:CODE
LOW⚡app/core/runtime/backend_services.py141 except Exception:CODE
LOW⚡app/core/runtime/backend_services.py151 except Exception:CODE
LOW⚡app/core/runtime/backend_services.py171 except Exception as exc:CODE
LOW⚡app/core/runtime/backend_services.py178 except Exception as exc:CODE
LOW⚡app/core/runtime/backend_services.py185 except Exception as exc:CODE
LOW⚡app/core/runtime/backend_services.py192 except Exception as exc:CODE
LOWapp/core/runtime/process_manager.py45 except Exception as e:CODE
LOWapp/core/runtime/process_manager.py79 except Exception as e:CODE
36 more matches not shown…
Hyper-Verbose Identifiers57 hits · 62 pts
SeverityFileLineSnippetContext
LOWapp/ui/filters/recording_filters.py48 def get_platform_filter_result(cls, recording, platform_filter) -> bool:CODE
LOWapp/ui/components/business/recording_dialog.py154 async def on_segment_setting_change(e):CODE
LOWapp/ui/components/business/recording_dialog.py199 def create_time_picker_handler(index):CODE
LOWapp/ui/components/business/recording_dialog.py248 async def on_scheduled_setting_change(e):CODE
LOW⚡app/ui/components/business/recording_card.py385 def get_icon_for_recording_state(recording: Recording):CODE
LOW⚡app/ui/components/business/recording_card.py389 def get_tip_for_recording_state(self, recording: Recording):CODE
LOW⚡app/ui/components/business/recording_card.py393 def get_icon_for_monitor_state(recording: Recording):CODE
LOW⚡app/ui/components/business/recording_card.py397 def get_tip_for_monitor_state(self, recording: Recording):CODE
LOW⚡app/ui/components/business/recording_card.py520 async def recording_button_on_click(self, _, recording: Recording):CODE
LOW⚡app/ui/components/business/recording_card.py523 async def recording_dir_button_on_click(self, _, recording: Recording):CODE
LOW⚡app/ui/components/business/recording_card.py526 async def recording_info_button_on_click(self, _, recording: Recording):CODE
LOWapp/ui/components/business/recording_card.py171 def get_card_background_color(self, recording: Recording):CODE
LOWapp/ui/components/business/recording_card.py284 async def show_recording_info_dialog(self, recording: Recording):CODE
LOWapp/ui/components/business/recording_card.py451 async def edit_recording_button_click(self, _, recording: Recording):CODE
LOWapp/ui/components/business/recording_card.py464 async def recording_delete_button_click(self, _, recording: Recording):CODE
LOWapp/ui/components/business/recording_card.py499 async def preview_video_button_on_click(self, _, recording: Recording):CODE
LOWapp/ui/views/storage_view.py140 def show_empty_folder_message(self):CODE
LOWapp/ui/views/home_view.py271 def create_announcements_area(self):CODE
LOWapp/ui/views/home_view.py669 async def on_browse_recordings_click(self, _):CODE
LOWapp/ui/views/settings_view.py216 async def save_user_config_after_delay(self, delay):CODE
LOWapp/ui/views/settings_view.py226 async def save_accounts_after_delay(self, delay):CODE
LOWapp/ui/views/settings_view.py238 def get_supported_record_format() -> list:CODE
LOWapp/ui/views/settings_view.py241 def create_recording_settings_tab(self):CODE
LOWapp/ui/views/settings_view.py906 def create_push_channels_layout(self):CODE
LOWapp/ui/views/settings_view.py943 def create_cookies_settings_tab(self):CODE
LOWapp/ui/views/settings_view.py1013 def create_accounts_settings_tab(self):CODE
LOWapp/ui/views/settings_view.py1114 def create_folder_setting_row(self, label):CODE
LOWapp/ui/views/settings_view.py1171 def create_scheduled_shutdown_setting_row(self):CODE
LOWapp/ui/views/settings_view.py1411 def create_channel_switch_container(self, channel_name, icon, key):CODE
LOWapp/ui/views/settings_view.py1616 def create_security_settings_tab(self):CODE
LOWapp/ui/views/recordings_view.py115 def create_recordings_title_area(self):CODE
LOWapp/ui/views/recordings_view.py332 async def filter_recording_on_click(self, _):CODE
LOWapp/ui/views/recordings_view.py415 def create_recordings_content_area(self):CODE
LOWapp/ui/views/recordings_view.py442 async def create_card_with_time_range(_recording: Recording):CODE
LOWapp/ui/views/recordings_view.py536 async def create_card_with_time_range(rec):CODE
LOW⚡app/ui/views/recordings_view.py600 async def start_monitor_recordings_on_click(self, _):CODE
LOW⚡app/ui/views/recordings_view.py606 async def stop_monitor_recordings_on_click(self, _):CODE
LOW⚡app/ui/views/recordings_view.py610 async def delete_monitor_recordings_on_click(self, _):CODE
LOWapp/ui/views/recordings_view.py653 async def delete_all_recording_cards(self):CODE
LOWapp/ui/views/recordings_view.py707 def get_grid_child_aspect_ratio(self):CODE
LOWapp/ui/views/recordings_view.py748 def on_platform_dropdown_change(self, e):CODE
LOWapp/messages/message_pusher.py32 def is_any_push_channel_enabled(self) -> bool:CODE
LOWapp/core/config/language_manager.py33 def _initialize_observer_registry(self) -> None:CODE
LOWapp/core/recording/record_manager.py230 def set_periodic_task_running(cls, value=True):CODE
LOWapp/core/recording/record_manager.py233 async def setup_periodic_live_check(self, interval: int = 180):CODE
LOWapp/core/recording/stream_manager.py152 def _clean_and_truncate_title(title: str) -> str | None:CODE
LOWapp/core/recording/stream_manager.py168 async def _handle_recording_finished(self, record_name: str, stop_msg: str = "", complete_msg: str = "") -> None:CODE
LOWapp/core/recording/stream_manager.py192 def is_flv_preferred_platform(self):CODE
LOWapp/core/runtime/paths.py15def _macos_bundle_contents_dir(executable_dir: Path) -> Path | None:CODE
LOWapp/core/runtime/bundled_env.py8def patch_macos_flet_launcher() -> None:CODE
LOWapp/core/runtime/bundled_env.py49 def has_materialized_framework_links(app_path: Path) -> bool:CODE
LOWapp/core/runtime/bundled_env.py63 def write_file_picker_entitlements(target_dir: Path) -> Path:CODE
LOWapp/core/runtime/bundled_env.py72 def prepare_streamcap_flet_app() -> Path:CODE
LOWapp/core/media/ffmpeg_builders/base.py73 def _get_basic_ffmpeg_command(self) -> list[str]:CODE
LOWapp/utils/utils.py217def is_current_time_within_range(time_range_str: str):CODE
LOWapp/utils/utils.py231def is_time_interval_exceeded(last_check_time, interval_seconds=60):CODE
LOWapp/initialization/installation_manager.py81 async def update_component_progress(self, component_name, progress, status):CODE
Unused Imports75 hits · 58 pts
SeverityFileLineSnippetContext
LOWapp/__init__.py2CODE
LOWapp/ui/filters/__init__.py1CODE
LOWapp/ui/themes/__init__.py1CODE
LOWapp/ui/themes/__init__.py2CODE
LOWapp/core/__init__.py1CODE
LOWapp/core/platforms/platform_handlers/__init__.py2CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/platforms/platform_handlers/__init__.py3CODE
LOWapp/core/config/settings_config.py1CODE
LOWapp/core/runtime/scheduled_shutdown.py1CODE
15 more matches not shown…
Empty Error Handlers9 hits · 45 pts
SeverityFileLineSnippetContext
HIGHapp/core/config/config_manager.py139except OSError:CODE
HIGHapp/core/recording/record_manager.py524except Exception:CODE
HIGHapp/core/recording/stream_manager.py520except ProcessLookupError:CODE
HIGHapp/core/runtime/scheduled_shutdown.py126except asyncio.CancelledError:CODE
HIGHapp/core/runtime/scheduled_shutdown.py256except (asyncio.CancelledError, ft.FletPageDisconnectedException):CODE
HIGHapp/core/runtime/backend_services.py107except Exception:CODE
HIGHapp/core/runtime/backend_services.py151except Exception:CODE
HIGHapp/core/runtime/backend_services.py141except Exception:CODE
HIGHapp/utils/utils.py205except ValueError:CODE
Deep Nesting23 hits · 22 pts
SeverityFileLineSnippetContext
LOWmain.py134CODE
LOWmain.py160CODE
LOWapp/ui/components/business/recording_dialog.py26CODE
LOWapp/ui/components/business/recording_dialog.py384CODE
LOWapp/ui/components/business/recording_card.py197CODE
LOWapp/ui/components/business/recording_card.py315CODE
LOWapp/ui/components/business/recording_card.py499CODE
LOWapp/ui/components/state/recording_card_state.py11CODE
LOWapp/ui/components/dialogs/search_dialog.py5CODE
LOWapp/ui/views/home_view.py352CODE
LOWapp/ui/views/recordings_view.py729CODE
LOWapp/core/update/update_checker.py132CODE
LOWapp/core/update/update_checker.py204CODE
LOWapp/core/update/update_checker.py284CODE
LOWapp/core/update/update_checker.py207CODE
LOWapp/core/config/config_manager.py122CODE
LOWapp/core/recording/stream_manager.py220CODE
LOWapp/core/recording/stream_manager.py368CODE
LOWapp/core/recording/stream_manager.py547CODE
LOWapp/core/runtime/process_manager.py59CODE
LOWapp/scripts/ffmpeg_install.py72CODE
LOWapp/scripts/ffmpeg_install.py161CODE
LOWapp/scripts/node_install.py49CODE
Modern Structural Boilerplate7 hits · 7 pts
SeverityFileLineSnippetContext
LOWapp/__init__.py9__all__ = ["InstallationManager", "execute_dir", "resource_dir"]CODE
LOWapp/ui/filters/__init__.py3__all__ = ["RecordingFilters"]CODE
LOWapp/ui/themes/__init__.py4__all__ = ["PopupColorItem", "ThemeManager"]CODE
LOWapp/core/__init__.py3__all__ = ["get_platform_handler"]CODE
LOWapp/core/platforms/platform_handlers/__init__.py149__all__ = [CODE
LOWapp/core/runtime/scheduled_shutdown.py249 async def _update_countdown(self, countdown_text: ft.Text, seconds: int) -> None:CODE
LOWapp/api/video_stream_service.py34logger = logging.getLogger(__name__)CODE
Verbosity Indicators3 hits · 6 pts
SeverityFileLineSnippetContext
LOW⚡.github/workflows/sync.yml24 # Step 1: run a standard checkout action, provided by githubCOMMENT
LOW⚡.github/workflows/sync.yml34 # Step 2: run the sync actionCOMMENT
LOW.github/workflows/sync.yml48 # Step 3: Display a sample message based on the sync output var 'has_new_commits'COMMENT
Structural Annotation Overuse3 hits · 6 pts
SeverityFileLineSnippetContext
LOW⚡.github/workflows/sync.yml24 # Step 1: run a standard checkout action, provided by githubCOMMENT
LOW⚡.github/workflows/sync.yml34 # Step 2: run the sync actionCOMMENT
LOW.github/workflows/sync.yml48 # Step 3: Display a sample message based on the sync output var 'has_new_commits'COMMENT
AI Structural Patterns3 hits · 3 pts
SeverityFileLineSnippetContext
LOWapp/messages/notification_service.py120CODE
LOWapp/messages/notification_service.py157CODE
LOWapp/core/media/ffmpeg_builders/base.py34CODE