AI Slop Code RIsk Monitor

oop7/YTSage

Modern YouTube downloader with a clean PySide6 interface. Download videos in any quality, extract audio, fetch subtitles, sponsorBlock, and view video metadata. Built with yt-dlp for reliable performance.

14.8 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for oop7/YTSage, a Python project with 4,658 GitHub stars. SynthScan examined 38,328 lines of code across 73 source files, recording 422 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 14.8 (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.

14.8
Adjusted Signal
14.8
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
4.7K
Stars
Python
Language
38.3K
Lines of Code
73
Files
422
Pattern Hits
2026-10-12
Scan Date
0.42
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 21.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 6.7/100 · LOW

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

Agent Over-Engineering Ratio 38.5/100 · MEDIUM

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

PR Review Velocity Impact 55.8/100 · HIGH

Which changes need focused human review? 422 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 31MEDIUM 24LOW 367

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 422 distinct pattern matches across 12 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 Wrapping154 hits · 146 pts
SeverityFileLineSnippetContext
LOWbuild_release.py50 except Exception as e:CODE
MEDIUMbuild_release.py51 print(f"Error during build: {e}")CODE
LOWytsage/main.py34 except Exception as e:CODE
MEDIUMytsage/main.py19def main():CODE
LOWytsage/core/ytsage_deno.py104 except Exception as e:CODE
LOWytsage/core/ytsage_deno.py198 except Exception as e:CODE
LOWytsage/core/ytsage_deno.py204 except Exception:CODE
LOWytsage/core/ytsage_deno.py425 except Exception as e:CODE
LOWytsage/core/ytsage_deno.py455 except Exception:CODE
LOWytsage/core/ytsage_deno.py458 except Exception:CODE
LOWytsage/core/ytsage_deno.py518 except Exception as e:CODE
LOWytsage/core/ytsage_deno.py642 except Exception as e:CODE
LOWytsage/core/ytsage_deno.py749 except Exception as e:CODE
LOWytsage/core/ytsage_deno.py778 except Exception as e:CODE
LOWytsage/core/ytsage_yt_dlp.py99 except Exception as e:CODE
LOWytsage/core/ytsage_yt_dlp.py156 except Exception as e:CODE
LOWytsage/core/ytsage_yt_dlp.py472 except Exception as copy_error:CODE
LOWytsage/core/ytsage_yt_dlp.py530 except Exception as e:CODE
LOWytsage/core/ytsage_yt_dlp.py575 except Exception as e:CODE
LOWytsage/core/ytsage_yt_dlp.py601 except Exception:CODE
LOWytsage/core/ytsage_yt_dlp.py604 except Exception:CODE
LOWytsage/core/ytsage_yt_dlp.py752 except Exception as e:CODE
MEDIUMytsage/core/ytsage_yt_dlp.py111def run(self) -> None:CODE
LOWytsage/core/ytsage_ffmpeg.py143 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py209 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py252 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py306 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py318 except Exception:CODE
LOWytsage/core/ytsage_ffmpeg.py357 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py366 except Exception:CODE
LOWytsage/core/ytsage_ffmpeg.py419 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py438 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py473 except Exception as e:CODE
LOWytsage/core/ytsage_ffmpeg.py510 except Exception as e:CODE
LOW⚡ytsage/core/ytsage_utils.py118 except Exception as e:CODE
LOW⚡ytsage/core/ytsage_utils.py128 except Exception as e:CODE
LOW⚡ytsage/core/ytsage_utils.py150 except Exception as e:CODE
LOW⚡ytsage/core/ytsage_utils.py544 except Exception as e:CODE
LOW⚡ytsage/core/ytsage_utils.py546 except Exception as e:CODE
LOW⚡ytsage/core/ytsage_utils.py767 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py61 except Exception:CODE
LOWytsage/core/ytsage_utils.py174 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py200 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py224 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py262 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py316 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py319 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py345 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py362 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py368 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py389 except Exception:CODE
LOWytsage/core/ytsage_utils.py400 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py415 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py427 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py488 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py494 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py577 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py630 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py634 except Exception as e:CODE
LOWytsage/core/ytsage_utils.py662 except Exception as e:CODE
94 more matches not shown…
Empty Error Handlers26 hits · 130 pts
SeverityFileLineSnippetContext
HIGHytsage/core/ytsage_deno.py204except Exception:CODE
HIGHytsage/core/ytsage_ffmpeg.py318except Exception:CODE
HIGHytsage/core/ytsage_ffmpeg.py366except Exception:CODE
HIGHytsage/core/ytsage_utils.py61except Exception:CODE
HIGHytsage/core/ytsage_utils.py389except Exception:CODE
HIGHytsage/core/ytsage_downloader.py206except Exception:CODE
HIGHytsage/core/ytsage_downloader.py810except (ValueError, IndexError):CODE
HIGHytsage/core/ytsage_downloader.py906except Exception:CODE
HIGHytsage/core/ytsage_downloader.py186except (ProcessLookupError, PermissionError):CODE
HIGHytsage/core/ytsage_downloader.py200except Exception:CODE
HIGHytsage/utils/ytsage_constants.py68except Exception:CODE
HIGHytsage/utils/ytsage_constants.py65except (ImportError, AttributeError, FileNotFoundError):CODE
HIGHytsage/gui/ytsage_gui_main.py1162except Exception:CODE
HIGHytsage/gui/ytsage_gui_main.py1990except RuntimeError:CODE
HIGHytsage/gui/ytsage_gui_main.py2028except RuntimeError:CODE
HIGHytsage/gui/ytsage_gui_main.py2071except RuntimeError:CODE
HIGHytsage/gui/ytsage_gui_main.py2105except RuntimeError:CODE
HIGHytsage/gui/ytsage_gui_main.py1522except RuntimeError:CODE
HIGHytsage/gui/ytsage_gui_main.py1622except RuntimeError:CODE
HIGHytsage/gui/ytsage_gui_main.py1682except (ValueError, TypeError):CODE
HIGHytsage/gui/ytsage_gui_main.py1710except (ValueError, TypeError):CODE
HIGHytsage/gui/ytsage_gui_analysis.py447except Exception:CODE
HIGHytsage/gui/ytsage_gui_format_table.py771except:CODE
HIGH…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py354except ValueError:CODE
HIGH…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py359except ValueError:CODE
HIGH…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py399except (ValueError, TypeError):CODE
Redundant / Tautological Comments37 hits · 62 pts
SeverityFileLineSnippetContext
LOW.github/workflows/build-macos.yml204 # Check if this lib dir is a python library dir (contains asyncio or PySide6 or ytsage)COMMENT
LOWytsage/core/ytsage_deno.py122 os.close(temp_zip_fd) # Close the file descriptorCODE
LOWytsage/core/ytsage_ffmpeg.py259 # Check if already installedCOMMENT
LOWytsage/core/ytsage_ffmpeg.py448 # Check if Homebrew is installedCOMMENT
LOW⚡ytsage/core/ytsage_utils.py137 # Check if we need to refresh cacheCOMMENT
LOW⚡ytsage/core/ytsage_utils.py161 # Check if we need to refresh cacheCOMMENT
LOW⚡ytsage/core/ytsage_utils.py557 # Check if auto-update is enabledCOMMENT
LOW⚡ytsage/core/ytsage_utils.py758 # Check if URL is emptyCOMMENT
LOW⚡ytsage/core/ytsage_utils.py771 # Check if scheme is http or httpsCOMMENT
LOW⚡ytsage/core/ytsage_utils.py775 # Check if netloc (domain) existsCOMMENT
LOWytsage/core/ytsage_utils.py186 # Check if we need to refresh cacheCOMMENT
LOWytsage/core/ytsage_utils.py441 # Check if this is an app-managed binary by comparing paths safelyCOMMENT
LOWytsage/core/ytsage_utils.py794 # Check if domain is YouTubeCOMMENT
LOW⚡ytsage/core/ytsage_downloader.py215 # Check if file exists before trying to deleteCOMMENT
LOW⚡ytsage/core/ytsage_downloader.py693 # Check if this is an audio-only download by looking in the previous linesCOMMENT
LOW⚡ytsage/core/ytsage_downloader.py700 # Check if the format ID is mentioned earlier in the lineCOMMENT
LOWytsage/core/ytsage_downloader.py644 # Check if it was cancelledCOMMENT
LOWytsage/core/ytsage_downloader.py712 # Check if this is explicitly an audio stream downloadCOMMENT
LOWytsage/utils/ytsage_history_manager.py63 # Check if file exists to know if we need to migrate or just create schemaCOMMENT
LOWytsage/utils/ytsage_constants.py33 # Check if running as a frozen executable (PyInstaller, cx_Freeze, etc.)COMMENT
LOW⚡ytsage/gui/ytsage_gui_main.py343 # Check if the notification sound file existsCOMMENT
LOW⚡ytsage/gui/ytsage_gui_main.py360 # Check if the user wants to remember cookies across sessionsCOMMENT
LOW⚡ytsage/gui/ytsage_gui_main.py1249 # Check if auto-update should be performedCOMMENT
LOW⚡ytsage/gui/ytsage_gui_main.py1260 # Check if a download is currently running or analysis is in progressCOMMENT
LOWytsage/gui/ytsage_gui_main.py1980 # Check if the main window has a graphics effect (blur) active.COMMENT
LOWytsage/gui/ytsage_gui_format_table.py242 # Check if we need to rebuild the table (first time or formats changed)COMMENT
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_ffmpeg.py155 # Check if FFmpeg is already installedCOMMENT
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_ffmpeg.py180 # Display the messagesCOMMENT
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py257 # Check if dialog is closing to avoid unnecessary updatesCOMMENT
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py334 # Check if dialog is closing to avoid unnecessary updatesCOMMENT
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py614 float(limit_str) # Check if convertible to floatCODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py802 # Open file dialog to select cookie fileCOMMENT
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py854 # Check if it starts with a valid schemeCOMMENT
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py887 # Check if there are saved settingsCOMMENT
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py562 # Check if the path is our managed binaryCOMMENT
LOW…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py148 checkbox.setChecked(item_text in self.previously_selected) # Check if previously selectedCODE
LOW…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py470 # Check if all items are selectedCOMMENT
Unused Imports58 hits · 54 pts
SeverityFileLineSnippetContext
LOWytsage/core/ytsage_deno.py2CODE
LOWytsage/core/ytsage_deno.py24CODE
LOWytsage/gui/ytsage_gui_main.py3CODE
LOWytsage/gui/ytsage_gui_main.py10CODE
LOWytsage/gui/ytsage_gui_main.py10CODE
LOWytsage/gui/ytsage_gui_main.py39CODE
LOWytsage/gui/ytsage_gui_main.py42CODE
LOWytsage/gui/ytsage_gui_main.py70CODE
LOWytsage/gui/ytsage_gui_analysis.py5CODE
LOWytsage/gui/ytsage_gui_analysis.py5CODE
LOWytsage/gui/ytsage_gui_analysis.py5CODE
LOWytsage/gui/ytsage_gui_analysis.py8CODE
LOWytsage/gui/ytsage_gui_analysis.py15CODE
LOWytsage/gui/ytsage_smooth_tab_widget.py2CODE
LOWytsage/gui/ytsage_gui_video_info.py21CODE
LOWytsage/gui/ytsage_gui_format_table.py10CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py8CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py9CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py12CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py12CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py12CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py20CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py20CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py20CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py20CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py24CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py24CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py46CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py19CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py19CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py10CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py11CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py12CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py13CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py36CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py15CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py15CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py16CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py16CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py17CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py17CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py18CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py19CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py19CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py19CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py24CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py24CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py25CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py25CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py25CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py25CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py26CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py11CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py11CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py12CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py13CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py26CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py44CODE
Deep Nesting56 hits · 44 pts
SeverityFileLineSnippetContext
LOWytsage/core/ytsage_deno.py37CODE
LOWytsage/core/ytsage_deno.py479CODE
LOWytsage/core/ytsage_deno.py523CODE
LOWytsage/core/ytsage_deno.py686CODE
LOWytsage/core/ytsage_deno.py117CODE
LOWytsage/core/ytsage_yt_dlp.py44CODE
LOWytsage/core/ytsage_yt_dlp.py626CODE
LOWytsage/core/ytsage_yt_dlp.py717CODE
LOWytsage/core/ytsage_yt_dlp.py111CODE
LOWytsage/core/ytsage_yt_dlp.py400CODE
LOWytsage/core/ytsage_ffmpeg.py35CODE
LOWytsage/core/ytsage_ffmpeg.py148CODE
LOWytsage/core/ytsage_ffmpeg.py257CODE
LOWytsage/core/ytsage_ffmpeg.py478CODE
LOWytsage/core/ytsage_ffmpeg.py515CODE
LOWytsage/core/ytsage_ffmpeg.py79CODE
LOWytsage/core/ytsage_utils.py267CODE
LOWytsage/core/ytsage_utils.py330CODE
LOWytsage/core/ytsage_utils.py373CODE
LOWytsage/core/ytsage_utils.py432CODE
LOWytsage/core/ytsage_utils.py552CODE
LOWytsage/core/ytsage_utils.py582CODE
LOWytsage/core/ytsage_downloader.py243CODE
LOWytsage/core/ytsage_downloader.py492CODE
LOWytsage/core/ytsage_downloader.py516CODE
LOWytsage/core/ytsage_downloader.py673CODE
LOWytsage/utils/ytsage_history_manager.py122CODE
LOWytsage/utils/ytsage_history_manager.py201CODE
LOWytsage/utils/ytsage_history_manager.py248CODE
LOWytsage/utils/ytsage_history_manager.py389CODE
LOWytsage/utils/ytsage_config_manager.py115CODE
LOWytsage/gui/ytsage_gui_main.py120CODE
LOWytsage/gui/ytsage_gui_main.py158CODE
LOWytsage/gui/ytsage_gui_main.py355CODE
LOWytsage/gui/ytsage_gui_main.py792CODE
LOWytsage/gui/ytsage_gui_main.py966CODE
LOWytsage/gui/ytsage_gui_main.py1052CODE
LOWytsage/gui/ytsage_gui_main.py1509CODE
LOWytsage/gui/ytsage_gui_main.py1610CODE
LOWytsage/gui/ytsage_gui_main.py1651CODE
LOWytsage/gui/ytsage_gui_main.py1755CODE
LOWytsage/gui/ytsage_gui_analysis.py105CODE
LOWytsage/gui/ytsage_gui_analysis.py406CODE
LOWytsage/gui/ytsage_gui_video_info.py292CODE
LOWytsage/gui/ytsage_gui_format_table.py257CODE
LOWytsage/gui/ytsage_gui_format_table.py336CODE
LOWytsage/gui/ytsage_gui_format_table.py412CODE
LOWytsage/gui/ytsage_gui_format_table.py744CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py55CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py113CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py376CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py942CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py736CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py765CODE
LOW…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py339CODE
LOW…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py370CODE
Hyper-Verbose Identifiers45 hits · 43 pts
SeverityFileLineSnippetContext
LOWytsage/core/ytsage_yt_dlp.py717def check_ytdlp_deno_integration() -> bool:CODE
LOW⚡ytsage/core/ytsage_utils.py108def load_version_cache_from_config() -> None:CODE
LOW⚡ytsage/core/ytsage_utils.py122def save_version_cache_to_config() -> None:CODE
LOW⚡ytsage/core/ytsage_utils.py155def get_ffmpeg_version_cached() -> str:CODE
LOW⚡ytsage/core/ytsage_utils.py552def should_check_for_auto_update() -> bool:CODE
LOWytsage/core/ytsage_utils.py267def get_ffmpeg_version_direct() -> str:CODE
LOWytsage/core/ytsage_utils.py582def check_and_update_ytdlp_auto() -> bool:CODE
LOWytsage/core/ytsage_utils.py654def update_auto_update_settings(enabled: bool, frequency: str) -> bool:CODE
LOW⚡ytsage/gui/ytsage_gui_main.py355 def _initialize_cookie_settings_from_config(self) -> None:CODE
LOW⚡ytsage/gui/ytsage_gui_main.py701 def _get_speed_limit_tooltip_text(self) -> str:CODE
LOWytsage/gui/ytsage_gui_main.py120 def _fetch_github_beta_version(self) -> tuple[str | None, str | None, str | None]:CODE
LOWytsage/gui/ytsage_gui_main.py728 def show_download_settings_dialog(self) -> None: # Renamed methodCODE
LOWytsage/gui/ytsage_gui_main.py1388 def handle_redownload_from_history(self, entry: dict) -> None:CODE
LOWytsage/gui/ytsage_gui_main.py1486 def _embed_panel_target_geometry(self) -> QRect:CODE
LOWytsage/gui/ytsage_gui_main.py1628 def open_playlist_selection_dialog(self) -> None:CODE
LOWytsage/gui/ytsage_gui_main.py1755 def toggle_analysis_dependent_controls(self, enabled=True) -> None:CODE
LOWytsage/gui/ytsage_gui_main.py2057 def set_widget_visible_animated(self, widget: QWidget, visible: bool) -> None:CODE
LOWytsage/gui/ytsage_gui_main.py2095 def set_status_message_animated(self, message: str) -> None:CODE
LOWytsage/gui/ytsage_gui_analysis.py105 def _analyze_url_with_subprocess(self, url: str) -> None:CODE
LOWytsage/gui/ytsage_gui_analysis.py370 def _handle_analysis_progress(self, value: int) -> None:CODE
LOWytsage/gui/ytsage_gui_video_info.py213 def setup_playlist_info_section(self) -> QLabel:CODE
LOWytsage/gui/ytsage_gui_video_info.py363 def _update_sponsorblock_display(self) -> None:CODE
LOWytsage/gui/ytsage_gui_format_table.py336 def _build_playlist_preset_table(self) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py477 def on_context_menu_requested(self, pos):STRING
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py256 def on_version_check_finished(self, current_version, latest_version, error_message) -> None:CODE
LOW⚡…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py644 def get_force_audio_format_enabled(self) -> bool:CODE
LOW⚡…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py648 def get_preferred_audio_format(self) -> str:CODE
LOW⚡…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py653 def get_audio_normalization_enabled(self) -> bool:CODE
LOW⚡…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py661 def _create_styled_message_box(self, icon, title, text) -> QMessageBox:CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py582 def _on_audio_normalization_toggled(self, state: int) -> None:CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py592 def _on_force_audio_format_toggled(self, state: int) -> None:CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py1012 def _create_styled_message_box(self, icon, title, text) -> QMessageBox:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py678 def _initialize_cookie_settings(self) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py707 def _update_cookies_active_status(self) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py723 def _initialize_proxy_settings(self) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py823 def get_browser_cookies_option(self) -> str | None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py271 def _create_system_info_section(self) -> QWidget:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py48def get_latest_ffmpeg_version() -> Optional[str]:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py732 def get_app_update_checker_setting(self) -> bool:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py912 def _on_ffmpeg_check_finished(self, update_available, current_version, latest_version):CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py984 def _update_deno_check_results(self, update_available: bool, current_version: str, latest_version: str) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py1066 def _handle_deno_update_result(self, success: bool, output: str) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py674 def _load_auto_update_settings(self) -> None:STRING
LOW…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py466 def get_selected_items_string(self) -> str | None:CODE
LOW…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py727 def get_selected_categories_string(self) -> str:CODE
Self-Referential Comments9 hits · 27 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/build-linux.yml489 # Create a specific desktop file for FlatpakCOMMENT
MEDIUMytsage/core/ytsage_utils.py468 # Create a temporary fileCOMMENT
MEDIUMytsage/gui/ytsage_gui_main.py660 # Create a horizontal layout for status label and open folder buttonCOMMENT
MEDIUMytsage/gui/ytsage_gui_main.py2186 # Create a QGraphicsScene to apply the effect to the pixmapCOMMENT
MEDIUMytsage/gui/ytsage_gui_video_info.py48 # Create a horizontal layout for thumbnail and video infoCOMMENT
MEDIUMytsage/gui/ytsage_gui_format_table.py468 # Create a container widget for the checkboxCOMMENT
MEDIUMytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py273 # Create main container with compact stylingCOMMENT
MEDIUMytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py228 # Create a widget to hold all contentCOMMENT
MEDIUM…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py567 # Create a container widget for each categoryCOMMENT
Cross-File Repetition5 hits · 25 pts
SeverityFileLineSnippetContext
HIGHytsage/core/ytsage_deno.py0qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbuttoSTRING
HIGHytsage/core/ytsage_yt_dlp.py0qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbuttoSTRING
HIGHytsage/gui/ytsage_stylesheet.py0qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbuttoSTRING
HIGH…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py0qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbuttoSTRING
HIGHytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py0qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbuttoSTRING
Modern Structural Boilerplate26 hits · 23 pts
SeverityFileLineSnippetContext
LOWytsage/core/ytsage_deno.py364 def update_progress(self, value) -> None:CODE
LOWytsage/core/ytsage_deno.py367 def update_status(self, status: str) -> None:CODE
LOWytsage/core/ytsage_yt_dlp.py357 def update_progress(self, value) -> None:CODE
LOWytsage/core/ytsage_utils.py91def update_version_cache(tool_name: str, version_info: str, path: Optional[str], force_save: bool = False) -> None:CODE
LOWytsage/utils/ytsage_logger.py56__all__ = ["logger"]CODE
LOWytsage/utils/ytsage_localization.py245 def set_language(cls, language_code: str) -> None:CODE
LOW⚡ytsage/gui/ytsage_gui_main.py707 def _update_settings_tooltip(self) -> None:CODE
LOW⚡ytsage/gui/ytsage_gui_main.py717 def _update_url_placeholder(self) -> None:CODE
LOWytsage/gui/ytsage_gui_main.py1107 def update_progress_bar(self, value) -> None:CODE
LOWytsage/gui/ytsage_gui_main.py2057 def set_widget_visible_animated(self, widget: QWidget, visible: bool) -> None:CODE
LOWytsage/gui/ytsage_gui_main.py2095 def set_status_message_animated(self, message: str) -> None:CODE
LOWytsage/gui/ytsage_gui_analysis.py388 def _update_fake_progress(self) -> None:CODE
LOWytsage/gui/ytsage_gui_video_info.py236 def update_video_info(self, info) -> None:CODE
LOWytsage/gui/ytsage_gui_video_info.py363 def _update_sponsorblock_display(self) -> None:CODE
LOWytsage/gui/ytsage_gui_format_table.py662 def _update_format_table(self, formats) -> None:CODE
LOWytsage/gui/ytsage_gui_format_table.py737 def update_format_table(self, formats) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_ffmpeg.py174 def update_progress(self, message) -> None:CODE
LOW…sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py942 def update_next_check_label(self) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/__init__.py28__all__ = [CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py707 def _update_cookies_active_status(self) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py475 def update_system_info(self) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py881 def _update_channel_status(self, channel: str) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py921 def _update_check_results(self, update_available: bool, current_version: str, latest_version: str) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py984 def _update_deno_check_results(self, update_available: bool, current_version: str, latest_version: str) -> None:CODE
LOWytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py1020 def update_deno(self) -> None:CODE
LOW…age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py178 def update_selection(self, state) -> None:CODE
AI Slop Vocabulary3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUM⚡ytsage/core/ytsage_downloader.py684 # Use a slightly more robust regex looking for the start of the lineCOMMENT
LOWytsage/utils/ytsage_history_manager.py63 # Check if file exists to know if we need to migrate or just create schemaCOMMENT
LOWytsage/gui/ytsage_gui_main.py1889 # Keep these methods for backwards compatibility - they just call the new dialog nowCOMMENT
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMytsage/utils/ytsage_constants.py185# =============================================================================COMMENT
MEDIUMytsage/utils/ytsage_constants.py187# =============================================================================COMMENT
AI Structural Patterns1 hit · 0 pts
SeverityFileLineSnippetContext
LOWytsage/core/ytsage_downloader.py48CODE