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.
This report presents the forensic synthetic code analysis of oop7/YTSage, a Python project with 4,398 GitHub stars. SynthScan v2.0 examined 36,110 lines of code across 70 source files, recording 391 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 12.3 places this repository in the Low 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
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 391 distinct pattern matches across 11 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 |
|---|---|---|---|---|
| LOW | build_release.py | 50 | except Exception as e: | CODE |
| MEDIUM | build_release.py | 51 | print(f"Error during build: {e}") | CODE |
| LOW | ytsage/main.py | 27 | except Exception as e: | CODE |
| MEDIUM | ytsage/main.py | 18 | def main(): | CODE |
| LOW | ytsage/core/ytsage_deno.py | 104 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 198 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 204 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 425 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 455 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 458 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 518 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 642 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 749 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 778 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 99 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 156 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 472 | except Exception as copy_error: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 530 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 575 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 601 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 604 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 752 | except Exception as e: | CODE |
| MEDIUM | ytsage/core/ytsage_yt_dlp.py | 111 | def run(self) -> None: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 83 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 149 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 192 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 246 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 258 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 297 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 306 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 359 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 378 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 413 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 450 | except Exception as e: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 118 | except Exception as e: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 128 | except Exception as e: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 150 | except Exception as e: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 544 | except Exception as e: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 546 | except Exception as e: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 767 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 61 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 174 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 200 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 224 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 262 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 316 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 319 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 345 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 362 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 368 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 389 | except Exception: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 400 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 415 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 427 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 488 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 494 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 577 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 630 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 634 | except Exception as e: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 662 | except Exception as e: | CODE |
| 94 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/build-macos.yml | 212 | # Check if this lib dir is a python library dir (contains asyncio or PySide6 or ytsage) | COMMENT |
| LOW | ytsage/core/ytsage_deno.py | 122 | os.close(temp_zip_fd) # Close the file descriptor | CODE |
| LOW | ytsage/core/ytsage_ffmpeg.py | 199 | # Check if already installed | COMMENT |
| LOW | ytsage/core/ytsage_ffmpeg.py | 388 | # Check if Homebrew is installed | COMMENT |
| LOW⚡ | ytsage/core/ytsage_utils.py | 137 | # Check if we need to refresh cache | COMMENT |
| LOW⚡ | ytsage/core/ytsage_utils.py | 161 | # Check if we need to refresh cache | COMMENT |
| LOW⚡ | ytsage/core/ytsage_utils.py | 557 | # Check if auto-update is enabled | COMMENT |
| LOW⚡ | ytsage/core/ytsage_utils.py | 758 | # Check if URL is empty | COMMENT |
| LOW⚡ | ytsage/core/ytsage_utils.py | 771 | # Check if scheme is http or https | COMMENT |
| LOW⚡ | ytsage/core/ytsage_utils.py | 775 | # Check if netloc (domain) exists | COMMENT |
| LOW | ytsage/core/ytsage_utils.py | 186 | # Check if we need to refresh cache | COMMENT |
| LOW | ytsage/core/ytsage_utils.py | 441 | # Check if this is an app-managed binary by comparing paths safely | COMMENT |
| LOW | ytsage/core/ytsage_utils.py | 794 | # Check if domain is YouTube | COMMENT |
| LOW⚡ | ytsage/core/ytsage_downloader.py | 208 | # Check if file exists before trying to delete | COMMENT |
| LOW⚡ | ytsage/core/ytsage_downloader.py | 636 | # Check if this is an audio-only download by looking in the previous lines | COMMENT |
| LOW⚡ | ytsage/core/ytsage_downloader.py | 643 | # Check if the format ID is mentioned earlier in the line | COMMENT |
| LOW | ytsage/core/ytsage_downloader.py | 587 | # Check if it was cancelled | COMMENT |
| LOW | ytsage/core/ytsage_downloader.py | 655 | # Check if this is explicitly an audio stream download | COMMENT |
| LOW | ytsage/utils/ytsage_history_manager.py | 63 | # Check if file exists to know if we need to migrate or just create schema | COMMENT |
| LOW | ytsage/utils/ytsage_constants.py | 33 | # Check if running as a frozen executable (PyInstaller, cx_Freeze, etc.) | COMMENT |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 343 | # Check if the notification sound file exists | COMMENT |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 360 | # Check if the user wants to remember cookies across sessions | COMMENT |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 1232 | # Check if auto-update should be performed | COMMENT |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 1243 | # Check if a download is currently running or analysis is in progress | COMMENT |
| LOW | ytsage/gui/ytsage_gui_main.py | 1824 | # Check if the main window has a graphics effect (blur) active. | COMMENT |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 214 | # Check if we need to rebuild the table (first time or formats changed) | COMMENT |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_ffmpeg.py | 155 | # Check if FFmpeg is already installed | COMMENT |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_ffmpeg.py | 180 | # Display the messages | COMMENT |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py | 257 | # Check if dialog is closing to avoid unnecessary updates | COMMENT |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py | 334 | # Check if dialog is closing to avoid unnecessary updates | COMMENT |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 531 | float(limit_str) # Check if convertible to float | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 802 | # Open file dialog to select cookie file | COMMENT |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 854 | # Check if it starts with a valid scheme | COMMENT |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 887 | # Check if there are saved settings | COMMENT |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py | 551 | # Check if the path is our managed binary | COMMENT |
| LOW | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 148 | checkbox.setChecked(item_text in self.previously_selected) # Check if previously selected | CODE |
| LOW | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 470 | # Check if all items are selected | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ytsage/core/ytsage_deno.py | 2 | CODE | |
| LOW | ytsage/core/ytsage_deno.py | 24 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 3 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 10 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 10 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 39 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 42 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 70 | CODE | |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 5 | CODE | |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 5 | CODE | |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 5 | CODE | |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 8 | CODE | |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 15 | CODE | |
| LOW | ytsage/gui/ytsage_smooth_tab_widget.py | 2 | CODE | |
| LOW | ytsage/gui/ytsage_gui_video_info.py | 21 | CODE | |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 10 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 8 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 9 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 12 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 12 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 12 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 20 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 20 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 20 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 20 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 24 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 24 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 46 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py | 19 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py | 19 | CODE | |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 10 | CODE | |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 11 | CODE | |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 12 | CODE | |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 13 | CODE | |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 36 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 15 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 15 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 16 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 16 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 17 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 17 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 18 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 19 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 19 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 19 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 24 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 24 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 25 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 25 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 25 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 25 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 26 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 11 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 11 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 12 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 13 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 26 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 44 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ytsage/core/ytsage_yt_dlp.py | 717 | def check_ytdlp_deno_integration() -> bool: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 108 | def load_version_cache_from_config() -> None: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 122 | def save_version_cache_to_config() -> None: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 155 | def get_ffmpeg_version_cached() -> str: | CODE |
| LOW⚡ | ytsage/core/ytsage_utils.py | 552 | def should_check_for_auto_update() -> bool: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 267 | def get_ffmpeg_version_direct() -> str: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 582 | def check_and_update_ytdlp_auto() -> bool: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 654 | def update_auto_update_settings(enabled: bool, frequency: str) -> bool: | CODE |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 355 | def _initialize_cookie_settings_from_config(self) -> None: | CODE |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 697 | def _get_speed_limit_tooltip_text(self) -> str: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 120 | def _fetch_github_beta_version(self) -> tuple[str | None, str | None, str | None]: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 724 | def show_download_settings_dialog(self) -> None: # Renamed method | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1371 | def handle_redownload_from_history(self, entry: dict) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1468 | def open_playlist_selection_dialog(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1595 | def toggle_analysis_dependent_controls(self, enabled=True) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1901 | def set_widget_visible_animated(self, widget: QWidget, visible: bool) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1939 | def set_status_message_animated(self, message: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 98 | def _analyze_url_with_subprocess(self, url: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 345 | def _handle_analysis_progress(self, value: int) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_video_info.py | 213 | def setup_playlist_info_section(self) -> QLabel: | CODE |
| LOW | ytsage/gui/ytsage_gui_video_info.py | 364 | def _update_sponsorblock_display(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 308 | def _build_playlist_preset_table(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 477 | def on_context_menu_requested(self, pos): | STRING |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py | 256 | def on_version_check_finished(self, current_version, latest_version, error_message) -> None: | CODE |
| LOW⚡ | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 561 | def get_force_audio_format_enabled(self) -> bool: | CODE |
| LOW⚡ | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 565 | def get_preferred_audio_format(self) -> str: | CODE |
| LOW⚡ | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 570 | def get_audio_normalization_enabled(self) -> bool: | CODE |
| LOW⚡ | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 578 | def _create_styled_message_box(self, icon, title, text) -> QMessageBox: | CODE |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 499 | def _on_audio_normalization_toggled(self, state: int) -> None: | CODE |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 509 | def _on_force_audio_format_toggled(self, state: int) -> None: | CODE |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 926 | def _create_styled_message_box(self, icon, title, text) -> QMessageBox: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 678 | def _initialize_cookie_settings(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 707 | def _update_cookies_active_status(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 723 | def _initialize_proxy_settings(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 823 | def get_browser_cookies_option(self) -> str | None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py | 260 | def _create_system_info_section(self) -> QWidget: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 48 | def get_latest_ffmpeg_version() -> Optional[str]: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 732 | def get_app_update_checker_setting(self) -> bool: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 912 | def _on_ffmpeg_check_finished(self, update_available, current_version, latest_version): | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 984 | def _update_deno_check_results(self, update_available: bool, current_version: str, latest_version: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 1066 | def _handle_deno_update_result(self, success: bool, output: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 674 | def _load_auto_update_settings(self) -> None: | STRING |
| LOW | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 466 | def get_selected_items_string(self) -> str | None: | CODE |
| LOW | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 727 | def get_selected_categories_string(self) -> str: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ytsage/core/ytsage_deno.py | 37 | CODE | |
| LOW | ytsage/core/ytsage_deno.py | 479 | CODE | |
| LOW | ytsage/core/ytsage_deno.py | 523 | CODE | |
| LOW | ytsage/core/ytsage_deno.py | 686 | CODE | |
| LOW | ytsage/core/ytsage_deno.py | 117 | CODE | |
| LOW | ytsage/core/ytsage_yt_dlp.py | 44 | CODE | |
| LOW | ytsage/core/ytsage_yt_dlp.py | 626 | CODE | |
| LOW | ytsage/core/ytsage_yt_dlp.py | 717 | CODE | |
| LOW | ytsage/core/ytsage_yt_dlp.py | 111 | CODE | |
| LOW | ytsage/core/ytsage_yt_dlp.py | 400 | CODE | |
| LOW | ytsage/core/ytsage_ffmpeg.py | 30 | CODE | |
| LOW | ytsage/core/ytsage_ffmpeg.py | 88 | CODE | |
| LOW | ytsage/core/ytsage_ffmpeg.py | 197 | CODE | |
| LOW | ytsage/core/ytsage_ffmpeg.py | 418 | CODE | |
| LOW | ytsage/core/ytsage_ffmpeg.py | 455 | CODE | |
| LOW | ytsage/core/ytsage_utils.py | 267 | CODE | |
| LOW | ytsage/core/ytsage_utils.py | 330 | CODE | |
| LOW | ytsage/core/ytsage_utils.py | 373 | CODE | |
| LOW | ytsage/core/ytsage_utils.py | 432 | CODE | |
| LOW | ytsage/core/ytsage_utils.py | 552 | CODE | |
| LOW | ytsage/core/ytsage_utils.py | 582 | CODE | |
| LOW | ytsage/core/ytsage_downloader.py | 236 | CODE | |
| LOW | ytsage/core/ytsage_downloader.py | 435 | CODE | |
| LOW | ytsage/core/ytsage_downloader.py | 459 | CODE | |
| LOW | ytsage/core/ytsage_downloader.py | 616 | CODE | |
| LOW | ytsage/utils/ytsage_history_manager.py | 122 | CODE | |
| LOW | ytsage/utils/ytsage_history_manager.py | 201 | CODE | |
| LOW | ytsage/utils/ytsage_history_manager.py | 248 | CODE | |
| LOW | ytsage/utils/ytsage_history_manager.py | 389 | CODE | |
| LOW | ytsage/utils/ytsage_config_manager.py | 109 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 120 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 158 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 355 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 788 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 950 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 1035 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 1491 | CODE | |
| LOW | ytsage/gui/ytsage_gui_main.py | 1595 | CODE | |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 381 | CODE | |
| LOW | ytsage/gui/ytsage_gui_video_info.py | 293 | CODE | |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 229 | CODE | |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 308 | CODE | |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 384 | CODE | |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 651 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 55 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_history.py | 113 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_update.py | 376 | CODE | |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 856 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 736 | CODE | |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 765 | CODE | |
| LOW | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 339 | CODE | |
| LOW | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 370 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/build-linux.yml | 496 | # Create a specific desktop file for Flatpak | COMMENT |
| MEDIUM | ytsage/core/ytsage_utils.py | 468 | # Create a temporary file | COMMENT |
| MEDIUM | ytsage/gui/ytsage_gui_main.py | 656 | # Create a horizontal layout for status label and open folder button | COMMENT |
| MEDIUM | ytsage/gui/ytsage_gui_main.py | 2030 | # Create a QGraphicsScene to apply the effect to the pixmap | COMMENT |
| MEDIUM | ytsage/gui/ytsage_gui_video_info.py | 48 | # Create a horizontal layout for thumbnail and video info | COMMENT |
| MEDIUM | ytsage/gui/ytsage_gui_format_table.py | 434 | # Create a container widget for the checkbox | COMMENT |
| MEDIUM | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py | 262 | # Create main container with compact styling | COMMENT |
| MEDIUM | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 228 | # Create a widget to hold all content | COMMENT |
| MEDIUM | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 567 | # Create a container widget for each category | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ytsage/core/ytsage_deno.py | 0 | qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbutto | STRING |
| HIGH | ytsage/core/ytsage_yt_dlp.py | 0 | qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbutto | STRING |
| HIGH | ytsage/gui/ytsage_stylesheet.py | 0 | qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbutto | STRING |
| HIGH | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 0 | qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbutto | STRING |
| HIGH | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py | 0 | qmessagebox { background-color: #15181b; color: #ffffff; } qmessagebox qlabel { color: #ffffff; } qmessagebox qpushbutto | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ytsage/core/ytsage_deno.py | 364 | def update_progress(self, value) -> None: | CODE |
| LOW | ytsage/core/ytsage_deno.py | 367 | def update_status(self, status: str) -> None: | CODE |
| LOW | ytsage/core/ytsage_yt_dlp.py | 357 | def update_progress(self, value) -> None: | CODE |
| LOW | ytsage/core/ytsage_utils.py | 91 | def update_version_cache(tool_name: str, version_info: str, path: Optional[str], force_save: bool = False) -> None: | CODE |
| LOW | ytsage/utils/ytsage_logger.py | 56 | __all__ = ["logger"] | CODE |
| LOW | ytsage/utils/ytsage_localization.py | 237 | def set_language(cls, language_code: str) -> None: | CODE |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 703 | def _update_settings_tooltip(self) -> None: | CODE |
| LOW⚡ | ytsage/gui/ytsage_gui_main.py | 713 | def _update_url_placeholder(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1090 | def update_progress_bar(self, value) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1901 | def set_widget_visible_animated(self, widget: QWidget, visible: bool) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_main.py | 1939 | def set_status_message_animated(self, message: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_analysis.py | 363 | def _update_fake_progress(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_video_info.py | 236 | def update_video_info(self, info) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_video_info.py | 364 | def _update_sponsorblock_display(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 614 | def _update_format_table(self, formats) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_format_table.py | 644 | def update_format_table(self, formats) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_ffmpeg.py | 174 | def update_progress(self, message) -> None: | CODE |
| LOW | …sage/gui/ytsage_gui_dialogs/ytsage_dialogs_settings.py | 856 | def update_next_check_label(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/__init__.py | 28 | __all__ = [ | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_custom.py | 707 | def _update_cookies_active_status(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_base.py | 464 | def update_system_info(self) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 881 | def _update_channel_status(self, channel: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 921 | def _update_check_results(self, update_available: bool, current_version: str, latest_version: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 984 | def _update_deno_check_results(self, update_available: bool, current_version: str, latest_version: str) -> None: | CODE |
| LOW | ytsage/gui/ytsage_gui_dialogs/ytsage_dialogs_updater.py | 1020 | def update_deno(self) -> None: | CODE |
| LOW | …age/gui/ytsage_gui_dialogs/ytsage_dialogs_selection.py | 178 | def update_selection(self, state) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | ytsage/core/ytsage_downloader.py | 627 | # Use a slightly more robust regex looking for the start of the line | COMMENT |
| LOW | ytsage/utils/ytsage_history_manager.py | 63 | # Check if file exists to know if we need to migrate or just create schema | COMMENT |
| LOW | ytsage/gui/ytsage_gui_main.py | 1733 | # Keep these methods for backwards compatibility - they just call the new dialog now | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ytsage/utils/ytsage_constants.py | 185 | # ============================================================================= | COMMENT |
| MEDIUM | ytsage/utils/ytsage_constants.py | 187 | # ============================================================================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ytsage/core/ytsage_downloader.py | 48 | CODE |