Repository Analysis

streamlink/streamlink

Streamlink is a CLI utility which pipes video streams from various services into a video player

9.8 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of streamlink/streamlink, a Python project with 11,627 GitHub stars. SynthScan v2.0 examined 97,261 lines of code across 552 source files, recording 866 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 9.8 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).

9.8
Adjusted Score
9.8
Raw Score
100%
Time Factor
2026-07-14
Last Push
11.6K
Stars
Python
Language
97.3K
Lines of Code
552
Files
866
Pattern Hits
2026-07-14
Scan Date
0.03
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

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.

CRITICAL 2HIGH 12MEDIUM 25LOW 827

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 866 distinct pattern matches across 18 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.

Hyper-Verbose Identifiers337 hits · 339 pts
SeverityFileLineSnippetContext
LOWbuild_backend/test_plugins_json.py142def test_parse_sequence_or_mapping(parser: type[ast.NodeVisitor], code: str, expected: Any, raises: nullcontext):CODE
LOWbuild_backend/test_build_backend.py42def test_filter_cmd_option_args(config_settings: dict, expected: str, options: list):CODE
LOWbuild_backend/__init__.py19def get_requires_for_build_wheel( # type: ignore[no-redef]CODE
LOWbuild_backend/plugins_json.py441 def _filter_dataclass_none_value(items: list[tuple[str, Any]]) -> dict[str, Any]:CODE
LOWtests/test_streamlink_api.py24 def test_no_streams_exception(self):CODE
LOWtests/test_streamlink_api.py37 def test_stream_type_wildcard(self):CODE
LOWtests/conftest.py58def pytest_collection_modifyitems(items: list[pytest.Item]): # pragma: no coverCODE
LOWtests/conftest.py150def _clear_threadname_counters():CODE
LOWtests/test_options.py131 def test_mutablemapping_methods(self, options: MappedOptions):CODE
LOWtests/test_plugin.py171 def test_matchers_inheritance(self):CODE
LOWtests/test_plugin.py195 def test_matchers_inheritance_named_duplicate(self):CODE
LOWtests/test_plugin.py206 def test_matchers_not_matching(self):CODE
LOWtests/test_plugin.py214 def test_no_matchers_not_matching(self):CODE
LOWtests/test_plugin.py253 def test_named_matchers_and_matches(self):CODE
LOWtests/test_plugin.py301 def test_pluginargument_type_registry(self):CODE
LOWtests/test_plugin.py323 def test_arguments_inheritance(self):CODE
LOWtests/test_plugin_userinput.py51def test_user_input_not_implemented(session: Streamlink, testplugin: _TestPlugin):CODE
LOWtests/test_plugin_userinput.py73def test_user_input_console_no_tty(console: Mock, testplugin: _TestPlugin):CODE
LOWtests/test_validate.py51 def test_validate_failure_custom(self, schema: validate.Schema):CODE
LOWtests/test_validate.py1211 def test_failure_url_attribute(self):STRING
LOWtests/test_validate.py1697 def test_multiple_nested_context(self):STRING
LOWtests/test_api_websocket.py201 def test_reconnect_disconnected(self, client: FakeWebsocketClient, websocketapp: Mock):CODE
LOWtests/test_cache.py273 def test_expires_at_overflowerror(self, cache: Cache):CODE
LOWtests/test_logger.py484 def test_capture_consecutive_once(CODE
LOWtests/plugins/conftest.py16def pytest_collection_modifyitems(items: list[pytest.Item]): # pragma: no coverCODE
LOWtests/plugins/conftest.py36def _parametrize_plugincanhandleurl_test_all_matchers_match(metafunc: pytest.Metafunc):CODE
LOWtests/plugins/conftest.py46def _parametrize_plugincanhandleurl_test_all_named_matchers_have_tests(metafunc: pytest.Metafunc):CODE
LOWtests/plugins/conftest.py56def _parametrize_plugincanhandleurl_test_url_matches_positive_unnamed(metafunc: pytest.Metafunc):CODE
LOWtests/plugins/conftest.py64def _parametrize_plugincanhandleurl_test_url_matches_positive_named(metafunc: pytest.Metafunc):CODE
LOWtests/plugins/conftest.py74def _parametrize_plugincanhandleurl_test_url_matches_groups_unnamed(metafunc: pytest.Metafunc):CODE
LOWtests/plugins/conftest.py84def _parametrize_plugincanhandleurl_test_url_matches_groups_named(metafunc: pytest.Metafunc):CODE
LOWtests/plugins/conftest.py94def _parametrize_plugincanhandleurl_test_url_matches_negative(metafunc: pytest.Metafunc):CODE
LOWtests/plugins/test_twitch.py212 def test_hls_daterange_unknown(self):CODE
LOWtests/plugins/test_twitch.py233 def test_hls_daterange_by_class(self):CODE
LOWtests/plugins/test_twitch.py328 def test_hls_has_preroll_and_midroll(self, mock_log):CODE
LOWtests/plugins/test_twitch.py381 def test_hls_low_latency_has_prefetch(self, mock_log):CODE
LOWtests/plugins/test_twitch.py404 def test_hls_no_low_latency_has_prefetch(self, mock_log):CODE
LOWtests/plugins/test_twitch.py427 def test_hls_low_latency_no_prefetch(self, mock_log):CODE
LOWtests/plugins/test_twitch.py447 def test_hls_low_latency_has_prefetch_has_preroll(self, mock_log):CODE
LOWtests/plugins/test_twitch.py470 def test_hls_low_latency_has_prefetch_no_preroll_with_prefetch_ads(self, mock_log):CODE
LOWtests/plugins/test_twitch.py513 def test_hls_low_latency_no_prefetch_has_preroll(self, mock_log):CODE
LOWtests/plugins/test_twitch.py536 def test_hls_low_latency_no_ads_reload_time(self):CODE
LOWtests/plugins/test_twitch.py550 def test_hls_prefetch_after_discontinuity(self, mock_log):CODE
LOWtests/plugins/test_twitch.py567 def test_hls_ignored_discontinuity(self, mock_log):CODE
LOWtests/plugins/test_twitch.py935 def test_integrity_check_not_forced(self, plugin: Twitch, mock: rm.Mocker):CODE
LOWtests/plugins/test_twitch.py970 def test_integrity_check_forced(self, plugin: Twitch, mock: rm.Mocker):CODE
LOWtests/plugins/test_twitch.py1086 def test_multivariant_response(CODE
LOWtests/plugins/test_twitch.py1228 def test_metadata_channel_no_data(self, mock_request_channel, metadata):CODE
LOWtests/plugins/test_twitch.py1251 def test_metadata_video_no_data(self, mock_request_video, metadata):CODE
LOWtests/plugins/test_twitch.py1273 def test_metadata_clip_no_data(self, mock_request_clip, metadata):CODE
LOWtests/plugins/__init__.py142 def test_all_named_matchers_have_tests(self, matcher: Matcher):CODE
LOWtests/plugins/__init__.py148 def test_url_matches_positive_unnamed(self, url: TUrl):CODE
LOWtests/plugins/__init__.py154 def test_url_matches_positive_named(self, name: TName, url: TUrl):CODE
LOWtests/plugins/__init__.py161 def test_url_matches_groups_unnamed(self, url: TUrl, groups: TMatchGroup):CODE
LOWtests/plugins/__init__.py167 def test_url_matches_groups_named(self, name: TName, url: TUrl, groups: TMatchGroup):CODE
LOWtests/plugins/__init__.py173 def test_url_matches_negative(self, url: TUrl):CODE
LOWtests/plugins/test_rtve.py24def test_translate_no_content():CODE
LOWtests/plugins/test_rtve.py28def test_translate_no_streams():CODE
LOWtests/plugins/test_rtve.py46def test_translate_has_streams():CODE
LOWtests/plugins/test_kick.py71 def test_hls_low_latency_has_prefetch(self, mock_log):CODE
277 more matches not shown…
Unused Imports330 hits · 321 pts
SeverityFileLineSnippetContext
LOWsetup.py34CODE
LOWsetup.py79CODE
LOWbuild_backend/onbuild.py1CODE
LOWbuild_backend/test_plugins_json.py1CODE
LOWbuild_backend/__init__.py1CODE
LOWbuild_backend/__init__.py12CODE
LOWbuild_backend/plugins_json.py1CODE
LOWbuild_backend/commands.py1CODE
LOWtests/test_streamlink_api.py1CODE
LOWtests/conftest.py1CODE
LOWtests/test_options.py1CODE
LOWtests/test_plugin.py1CODE
LOWtests/test_plugin_userinput.py1CODE
LOWtests/__init__.py8CODE
LOWtests/test_compat.py1CODE
LOWtests/test_api_websocket.py1CODE
LOWtests/test_cache.py1CODE
LOWtests/test_logger.py1CODE
LOWtests/mixins/stream_hls.py1CODE
LOWtests/plugins/conftest.py1CODE
LOWtests/plugins/test_rtpplay.py1CODE
LOWtests/plugins/test_dash.py1CODE
LOWtests/plugins/test_twitch.py1CODE
LOWtests/plugins/__init__.py1CODE
LOWtests/plugins/test_hls.py1CODE
LOWtests/plugins/test_ustreamtv.py1CODE
LOWtests/plugins/test_http.py1CODE
LOWtests/plugins/test_vk.py1CODE
LOWtests/plugins/test_soop.py1CODE
LOWtests/plugins/test_filmon.py1CODE
LOWtests/stream/test_stream_json.py1CODE
LOWtests/stream/test_file.py1CODE
LOWtests/stream/test_ffmpegmux.py1CODE
LOWtests/stream/hls/test_hls.py1CODE
LOWtests/stream/hls/test_m3u8.py1CODE
LOWtests/stream/dash/test_dash.py1CODE
LOWtests/utils/test_num.py1CODE
LOWtests/utils/test_named_pipe.py1CODE
LOWtests/utils/test_args.py1CODE
LOWtests/utils/test_path.py1CODE
LOWtests/utils/test_processoutput.py1CODE
LOWtests/utils/test_random.py1CODE
LOWtests/utils/test_dataclass.py1CODE
LOWtests/cli/test_argparser.py1CODE
LOWtests/cli/test_streamrunner.py1CODE
LOWtests/cli/test_compat.py1CODE
LOWtests/cli/output/test_player.py1CODE
LOWtests/cli/output/test_file.py1CODE
LOWtests/cli/utils/test_player.py1CODE
LOWtests/cli/utils/test_versioncheck.py1CODE
LOWtests/cli/utils/test_path.py1CODE
LOWtests/cli/main/test_handle_url.py1CODE
LOWtests/cli/main/conftest.py1CODE
LOWtests/cli/main/test_logging.py1CODE
LOWtests/cli/main/test_player_argv.py1CODE
LOWtests/cli/main/test_can_handle_url.py1CODE
LOWtests/cli/main/test_setup_config_args.py1CODE
LOWtests/cli/main/test_show_matchers.py1CODE
LOWtests/cli/main/test_output_stream_passthrough.py1CODE
LOWtests/cli/main/test_setup_session_options.py1CODE
270 more matches not shown…
Deep Nesting53 hits · 53 pts
SeverityFileLineSnippetContext
LOWsetup.py37CODE
LOWtests/testutils/test_handshake.py18CODE
LOWdocs/sphinxext/ext_argparse.py126CODE
LOWscript/github-release.py343CODE
LOWscript/generate-cdp.py551CODE
LOWsrc/streamlink/validate/_validate.py89CODE
LOWsrc/streamlink/plugins/adultswim.py164CODE
LOWsrc/streamlink/plugins/youtube.py85CODE
LOWsrc/streamlink/plugins/ustreamtv.py217CODE
LOWsrc/streamlink/plugins/brightcove.py33CODE
LOWsrc/streamlink/plugins/filmon.py75CODE
LOWsrc/streamlink/plugins/filmon.py208CODE
LOWsrc/streamlink/plugins/zattoo.py200CODE
LOWsrc/streamlink/plugins/bbciplayer.py135CODE
LOWsrc/streamlink/plugins/bbciplayer.py194CODE
LOWsrc/streamlink/plugins/nicolive.py367CODE
LOWsrc/streamlink/plugins/abematv.py217CODE
LOWsrc/streamlink/plugins/bilibili.py204CODE
LOWsrc/streamlink/plugins/dailymotion.py53CODE
LOWsrc/streamlink/plugins/openrectv.py140CODE
LOWsrc/streamlink/plugins/pixiv.py115CODE
LOWsrc/streamlink/plugins/sportschau.py64CODE
LOWsrc/streamlink/plugins/zdf_mediathek.py27CODE
LOWsrc/streamlink/plugins/twitch.py889CODE
LOWsrc/streamlink/plugins/twitch.py979CODE
LOWsrc/streamlink/plugins/steam.py86CODE
LOWsrc/streamlink/plugins/wwenetwork.py81CODE
LOWsrc/streamlink/stream/hls/hls.py313CODE
LOWsrc/streamlink/stream/hls/hls.py734CODE
LOWsrc/streamlink/stream/hls/m3u8.py592CODE
LOWsrc/streamlink/stream/dash/manifest.py421CODE
LOWsrc/streamlink/stream/dash/dash.py111CODE
LOWsrc/streamlink/stream/dash/dash.py290CODE
LOWsrc/streamlink/plugin/plugin.py104CODE
LOWsrc/streamlink/plugin/plugin.py144CODE
LOWsrc/streamlink/plugin/plugin.py392CODE
LOWsrc/streamlink/packages/requests_file.py34CODE
LOWsrc/streamlink/session/http.py129CODE
LOWsrc/streamlink/session/http.py169CODE
LOWsrc/streamlink_cli/streamrunner.py93CODE
LOWsrc/streamlink_cli/main.py117CODE
LOWsrc/streamlink_cli/main.py214CODE
LOWsrc/streamlink_cli/main.py378CODE
LOWsrc/streamlink_cli/main.py444CODE
LOWsrc/streamlink_cli/main.py617CODE
LOWsrc/streamlink_cli/main.py768CODE
LOWsrc/streamlink_cli/main.py1000CODE
LOWsrc/streamlink_cli/argparser.py1634CODE
LOWsrc/streamlink_cli/output/player.py366CODE
LOWsrc/streamlink_cli/console/console.py113CODE
LOWsrc/streamlink_cli/console/stream.py109CODE
LOWsrc/streamlink_cli/console/stream.py130CODE
LOWsrc/streamlink_cli/console/progress.py54CODE
Self-Referential Comments17 hits · 51 pts
SeverityFileLineSnippetContext
MEDIUMscript/generate-cdp.py80# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/plugin/plugin.py494 # Create the best/worst synonymsCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/fetch.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/input_.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/util.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/security.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/io.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/emulation.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/inspector.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/__init__.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/page.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/runtime.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/debugger.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/browser.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/network.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/target.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
MEDIUMsrc/streamlink/webbrowser/cdp/devtools/dom.py3# This file is generated from the CDP specification. If you need to makeCOMMENT
Excessive Try-Catch Wrapping44 hits · 46 pts
SeverityFileLineSnippetContext
LOWtests/resources/__init__.py20 except Exception as err: # pragma: no coverCODE
LOWtests/testutils/test_handshake.py24 except Exception as err:CODE
MEDIUMtests/testutils/test_handshake.py18def run(self):CODE
LOWdocs/sphinxext/ext_argparse.py67 except Exception as err:CODE
LOWdocs/sphinxext/ext_plugins.py258 except Exception as err:CODE
LOWscript/github-release.py584 except Exception:STRING
LOWscript/test-plugin-urls.py167 except Exception as err:CODE
LOWscript/test-plugin-urls.py198 except Exception:CODE
LOWscript/test-plugin-urls.py212 except Exception:CODE
LOWscript/test-plugin-urls.py243 except Exception as err:CODE
MEDIUMscript/test-plugin-urls.py229def main(self) -> int:CODE
LOWsrc/streamlink/cache.py99 except Exception as err:CODE
LOWsrc/streamlink/cache.py145 except Exception as err:CODE
LOWsrc/streamlink/plugins/douyu.py77 except Exception:CODE
LOWsrc/streamlink/plugins/filmon.py252 except Exception:CODE
LOWsrc/streamlink/plugins/zattoo.py292 except Exception:STRING
LOWsrc/streamlink/plugins/bbciplayer.py154 except Exception:CODE
LOWsrc/streamlink/plugins/kick.py204 except Exception as err:STRING
LOWsrc/streamlink/plugins/kick.py253 except Exception as err:STRING
LOWsrc/streamlink/plugins/twitch.py706 except Exception as err:STRING
LOWsrc/streamlink/plugins/twitcasting.py146 except Exception as err:CODE
LOWsrc/streamlink/stream/wrappers.py86 except Exception:CODE
LOWsrc/streamlink/stream/hls/hls.py336 except Exception as err:CODE
LOWsrc/streamlink/stream/hls/hls.py717 except Exception:CODE
LOWsrc/streamlink/stream/hls/hls.py728 except Exception:CODE
LOWsrc/streamlink/stream/dash/dash.py315 except Exception as err:CODE
LOWsrc/streamlink/plugin/api/webbrowser/aws_waf.py73 except Exception as err:CODE
LOWsrc/streamlink/utils/formatter.py47 except Exception:CODE
LOWsrc/streamlink/utils/processoutput.py91 except Exception:CODE
LOWsrc/streamlink/utils/parse.py15 except Exception as err:CODE
MEDIUMsrc/streamlink/utils/parse.py12def _parse(parser, data, name, exception, schema, *args, **kwargs):CODE
LOWsrc/streamlink/webbrowser/cdp/connection.py255 except Exception as err:CODE
MEDIUMsrc/streamlink/webbrowser/cdp/connection.py94def __anext__(self) -> TCDPEvent:CODE
LOWsrc/streamlink/session/plugins.py288 except Exception:CODE
LOWsrc/streamlink/session/plugins.py294 except Exception:CODE
LOWsrc/streamlink/session/http.py258 except Exception as err:CODE
LOWsrc/streamlink/session/http.py346 except Exception as rerr:CODE
LOWsrc/streamlink_cli/main.py603 except Exception:CODE
LOWsrc/streamlink_cli/main.py962 except Exception as err:CODE
LOWsrc/streamlink_cli/main.py994 except Exception as err:CODE
LOWsrc/streamlink_cli/utils/versioncheck.py33 except Exception as err:CODE
MEDIUMsrc/streamlink_cli/utils/versioncheck.py25def get_latest() -> str:CODE
LOWsrc/streamlink_cli/console/console.py89 except Exception as err:CODE
LOWsrc/streamlink_cli/console/progress.py97 except Exception:CODE
Cross-Language Confusion9 hits · 35 pts
SeverityFileLineSnippetContext
HIGHtests/test_validate.py1544 """{"a": ["b", true, false, null, 1, 2.3]}""",STRING
HIGHtests/cli/main/test_show_matchers.py94 "name": null,CODE
HIGHtests/cli/main/test_show_matchers.py106 "name": null,CODE
HIGHtests/cli/main/test_show_matchers.py120 "name": null,CODE
HIGHsrc/streamlink/validate/_validators.py607 assert schema.validate(\"\"\"{"a":[1,2,3],"b":null}\"\"\") == {"a": [1, 2, 3], "b": None}STRING
HIGHsrc/streamlink/plugins/mjunoon.py36 is_live_channel_re = re.compile(r'"isLiveBroadcast":\s*"(true|undefined)"')CODE
HIGHsrc/streamlink/plugins/twitch.py648 "body": null,CODE
HIGHsrc/streamlink/webbrowser/cdp/devtools/emulation.py756 respective variables to be undefined, even if previously overridden.STRING
HIGHsrc/streamlink/webbrowser/cdp/devtools/runtime.py494 unserializable primitive value or neither of (for undefined) them should be specified.STRING
Modern Structural Boilerplate28 hits · 27 pts
SeverityFileLineSnippetContext
LOWbuild_backend/commands.py15__all__ = ["cmdclass"]CODE
LOWscript/github-release.py282 def update_release(self, release_id: int, payload: dict) -> None:STRING
LOWscript/generate-cdp.py71logger = logging.getLogger(__name__)CODE
LOWsrc/streamlink/options.py76 def set_explicit(self, key: str, value: Any) -> None:CODE
LOWsrc/streamlink/options.py310__all__ = [CODE
LOWsrc/streamlink/compat.py98__all__ = [CODE
LOWsrc/streamlink/cache.py246__all__ = ["Cache"]CODE
LOWsrc/streamlink/logger.py298__all__ = [CODE
LOWsrc/streamlink/exceptions.py60__all__ = [CODE
LOWsrc/streamlink/buffers.py163__all__ = ["Buffer", "RingBuffer"]CODE
LOWsrc/streamlink/stream/stream.py75__all__ = ["Stream", "StreamIO"]CODE
LOWsrc/streamlink/stream/wrappers.py110__all__ = ["StreamIOWrapper", "StreamIOIterWrapper", "StreamIOThreadWrapper"]CODE
LOWsrc/streamlink/plugin/__init__.py14__all__ = [CODE
LOWsrc/streamlink/plugin/plugin.py353 def set_option(self, key: str, value: Any) -> None:CODE
LOWsrc/streamlink/plugin/plugin.py807__all__ = [CODE
LOWsrc/streamlink/utils/times.py138__all__ = [STRING
LOWsrc/streamlink/utils/args.py101__all__ = [CODE
LOWsrc/streamlink/webbrowser/cdp/client.py444 async def _update_user_agent(self) -> None:CODE
LOWsrc/streamlink/webbrowser/cdp/connection.py111 def set_response(self, response: TCmdResponse | Exception) -> None:CODE
LOWsrc/streamlink/session/session.py61 def set_option(self, key: str, value: Any) -> None:CODE
LOWsrc/streamlink/session/session.py204__all__ = ["Streamlink"]CODE
LOWsrc/streamlink/session/http.py169 def set_interface(self, interface: str | None) -> None:CODE
LOWsrc/streamlink/session/http.py232 def set_address_family(self, family: socket.AddressFamily | None = None) -> None:CODE
LOWsrc/streamlink/session/http.py419__all__ = ["HTTPSession", "SSLContextAdapter", "TLSNoDHAdapter", "TLSSecLevel1Adapter"]CODE
LOWsrc/streamlink_cli/compat.py17__all__ = [CODE
LOWsrc/streamlink_cli/constants.py58__all__ = [CODE
LOWsrc/streamlink_cli/argparser.py1696__all__ = ["ArgumentParser", "build_parser", "setup_session_options", "setup_plugin_args", "setup_plugin_options"]CODE
LOWsrc/streamlink_cli/utils/__init__.py10__all__ = [CODE
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALtests/cli/main/conftest.py90 streamlink_cli.main.logger.root.handlers.clear()CODE
CRITICALsrc/streamlink/webbrowser/cdp/client.py478 self.cdp_client.streamlink.http.cookies.set(CODE
AI Structural Patterns18 hits · 16 pts
SeverityFileLineSnippetContext
LOWtests/test_logger.py36CODE
LOWsrc/streamlink/options.py101CODE
LOWsrc/streamlink/logger.py244CODE
LOWsrc/streamlink/plugins/ustvnow.py138CODE
LOWsrc/streamlink/plugin/plugin.py714CODE
LOWsrc/streamlink/plugin/api/websocket.py54CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/input_.py235CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/input_.py363CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/input_.py594CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/emulation.py771CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/page.py2552CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/page.py2836CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/runtime.py839CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/runtime.py980CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/network.py3134CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/target.py355CODE
LOWsrc/streamlink/session/http.py278CODE
LOWsrc/streamlink_cli/output/player.py219CODE
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHpyproject.toml0streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of cSTRING
HIGHtests/cli/main/test_logging.py0streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of cSTRING
HIGHsrc/streamlink_cli/argparser.py0streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of cSTRING
Over-Commented Block9 hits · 9 pts
SeverityFileLineSnippetContext
LOWbuild_backend/__init__.py21) -> list[str]: # pragma: no coverCOMMENT
LOWscript/generate-cdp.py1#!/usr/bin/env pythonCOMMENT
LOWsrc/streamlink/plugins/twitch.py101 # Use the average duration of all regular segments for the duration of prefetch segments.COMMENT
LOWsrc/streamlink/utils/url.py41 # urlparse("127.0.0.1:1234") == ParseResult(scheme='127.0.0.1', netloc='', path='1234/foo', ...)COMMENT
LOWsrc/streamlink/webbrowser/chromium.py101 # Disable some built-in extensions that aren't affected by `--disable-extensions`COMMENT
LOWsrc/streamlink/webbrowser/cdp/connection.py121# Copyright (c) 2018 Hyperion GrayCOMMENT
LOWsrc/streamlink/webbrowser/cdp/devtools/network.py3541 #: Each request the page makes will have a unique id, however if any redirects are encounteredCOMMENT
LOWsrc/streamlink/webbrowser/cdp/devtools/network.py4241COMMENT
LOWsrc/streamlink/session/http.py61COMMENT
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMtests/conftest.py90# ========================COMMENT
MEDIUMtests/conftest.py92# ========================COMMENT
AI Slop Vocabulary4 hits · 5 pts
SeverityFileLineSnippetContext
LOWsrc/streamlink/plugins/bloomberg.py156 # just return the first streamCOMMENT
LOWsrc/streamlink/plugins/nrk.py106 # just return the first itemCOMMENT
LOWsrc/streamlink/plugins/twitch.py1010 # Don't raise and simply return no streams on 4xx/5xx playlist responsesSTRING
LOWsrc/streamlink/plugins/pandalive.py133 # all stream qualities share the same URL, so just use the first oneCOMMENT
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOWtests/plugins/test_ustvnow.py20 b'{"login_id":"test@test.com","login_key":"testtest1234","login_mode":"1","manufacturer":"123"}',CODE
LOWsrc/streamlink/plugins/radiko.py78 "x-radiko-user": "dummy_user",CODE
LOWsrc/streamlink/plugins/radiko.py90 "x-radiko-user": "dummy_user",CODE
LOWsrc/streamlink/webbrowser/cdp/devtools/dom.py119 PLACEHOLDER = "placeholder"CODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/streamlink/plugins/twitch.py985 # Check if the media playlists are accessible:STRING
LOWsrc/streamlink/packages/requests_file.py67 # Open the file, translate certain errors into HTTP responsesCOMMENT
LOWsrc/streamlink/packages/requests_file.py109 # Check if the drive assumptions above were correct. If path_driveCOMMENT
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMsrc/streamlink/stream/segmented/segmented.py269CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/streamlink/webbrowser/cdp/devtools/runtime.py144 #: NOTE: If you change anything here, make sure to also updateCOMMENT
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWsrc/streamlink_cli/streamrunner.py108 # TODO: Fix error messages (s/when/while/) and only log "Stream ended" when it ended on its own (data == b"").COMMENT