Leaderboard github.com
dekub100/sc-sp-remote
Remotely control Spotify and SoundCloud via WebSockets without Spotify Premium — includes a web interface, OBS widget, and Stream Deck plugin.
AI provenance
0%
possible
- Confidence
- 65%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
69/100
adequate
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
48/100
poor
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
AI provenance
0% possible
Weak signals consistent with AI-assisted development.
How the score is built
- Explicitly attributed share0%
- Unattributed share in AI-pace bursts28%
- Estimated AI-generated share0%
- AI tool configuration files1
- Work sessions at AI pace3
- Releases at AI pace0
- Coding-style index (1.0+ means possible)0.75
Lines added per month all AI-attributed share
- 2025-081,196 · 0% AI
- 2025-09119 · 0% AI
- 2025-10183 · 0% AI
- 2025-111,139 · 0% AI
- 2025-12613 · 0% AI
- 2026-014 · 0% AI
- 2026-031,881 · 0% AI
- 2026-057,511 · 0% AI
- 2026-063,671 · 0% AI
- 2026-081,846 · 0% AI
- 2026-10598 · 0% AI
- 2026-116,303 · 0% AI
Evidence by analyzer
Explicit AI attributionok
- attributed_commit_share
- 0.0%
- attributed_commits
- 0
- attributed_loc
- 0
- attributed_loc_share
- 0.0%
- commits
- 165
- effective_loc
- 25,064
- tools_detected
- 0
AI tool configurationok1 item
- artifacts
- 1
- earliest_adoption
- 2026-05-17
- tools_configured
- 1
- workflow_agents
- 0
Commit velocityok3 items
- 3,415 lines of first-party code in ~1.8h (1,935 lines/hour, 9 commit session)
- 2,093 lines of first-party code in ~1.9h (1,091 lines/hour, 3 commit session)
- 1,476 lines of first-party code in ~1.7h (871 lines/hour, 2 commit session)
- excluded_import_loc
- 0
- flagged_loc
- 6,984
- flagged_loc_share
- 27.9%
- flagged_units
- 3
- max_loc_per_hour
- 1,934.54
- measured_loc
- 25,064
- median_loc_per_hour
- 119.88
- pr_timed_units
- 0
- pre_ai_era_burst_loc
- 0
- pre_ai_era_bursts
- 0
- pre_ai_era_measured_loc
- 0
- work_units
- 52
Release velocityok
- flagged_releases
- 0
- max_loc_per_day
- 20,902.50
- releases
- 16
Coding styleok5 items
- step-by-step narration comment: // Step 1: Dispatch mouseover + mousemove to trigger SoundCloud's
- step-by-step narration comment: // Step 2: Poll until .volume.expanded.hover exists.
- step-by-step narration comment: // Step 3: Calculate Y position.
- step-by-step narration comment: // Step 4: Simulate the click on the slider track.
- step-by-step narration comment: // Step 5: Mouse out to dismiss the slider.
- count:assistant_voice
- 0
- count:emoji_in_code
- 0
- count:narrated_steps
- 5
- count:placeholder
- 0
- files:assistant_voice
- 0
- files:emoji_in_code
- 0
- files:narrated_steps
- 1
- files:placeholder
- 0
- index
- 0.75
- lines_scanned
- 6,649
- per_kloc:assistant_voice
- 0
- per_kloc:emoji_in_code
- 0
- per_kloc:narrated_steps
- 0.75
- per_kloc:placeholder
- 0
Code quality
69 adequate
Code quality is adequate: test-to-source ratio 0.42, CI runs tests; 21% of function code in complex or long functions; 3% duplicated lines. Weakest area: type safety.
How the score is built
- Complexity52
- Duplication84
- Lint and smells47
- Tests and CI96
- Documentation80
- Type safety0
- Review processnot measured
Evidence by analyzer
Complexity (lizard)ok10 items
- fetch_and_broadcast_lyrics in server/lyrics.py: complexity 31, 109 lines
- checkTrackChange in spicetify-extension/remoteVolume.js: complexity 24, 26 lines
- applySpotifyNowPlaying in web/script.js: complexity 23, 56 lines
- _fetch_musixmatch in server/lyrics.py: complexity 22, 72 lines
- handleCommand in spicetify-extension/remoteVolume.js: complexity 21, 58 lines
- syncFullState in spicetify-extension/remoteVolume.js: complexity 21, 29 lines
- handle_admin_config_put in server/routes.py: complexity 17, 42 lines
- applyServerState in spicetify-extension/remoteVolume.js: complexity 16, 47 lines
- applySoundCloudNowPlaying in web/script.js: complexity 16, 49 lines
- contentScript in soundcloud-plugin/soundcloud-remote-bridge.js: complexity 1, 510 lines
- complex_functions
- 9
- function_nloc
- 4,647
- functions
- 466
- long_functions
- 2
- many_param_functions
- 0
- mean_ccn
- 3.20
- p90_ccn
- 7
- risky_nloc_share
- 21.5%
Duplication (jscpd)ok6 items
- 6+ duplicated lines: server/lyrics.py:395 and server/server.py:67
- 6+ duplicated lines: spicetify-extension/remoteVolume.js:350 and spicetify-extension/remoteVolume.js:420
- 6+ duplicated lines: streamdeck-plugin/com.dekub.sc-sp-remote.sdPlugin/ui/seek-pi.js:12 and streamdeck-plugin/com.dekub.sc-sp-remote.sdPlugin/ui/source-pi.js:8
- 6+ duplicated lines: streamdeck-plugin/src/actions/play-pause.ts:2 and streamdeck-plugin/src/actions/toggle-like.ts:2
- 6+ duplicated lines: streamdeck-plugin/src/actions/toggle-like.ts:20 and streamdeck-plugin/src/actions/toggle-repeat.ts:20
- 6+ duplicated lines: web/obs-widget/obs-script.js:338 and web/script.js:507
- compared_lines
- 4,882
- duplicated_lines
- 137
- duplicated_share
- 2.8%
- files
- 38
Lintok
- category:best-practice
- 7
- category:correctness
- 6
- category:maintainability
- 5
- findings
- 18
- scanned_lines
- 6,649
- weighted_findings
- 20.25
Tests and CIok3 items
- CI config: .github/workflows/ci.yml
.github/workflows/ci.yml - CI runs tests (pytest)
- CI runs linters (ruff, tsc --noEmit)
- check:ci_present
- yes
- check:ci_runs_lint
- yes
- check:ci_runs_tests
- yes
- check:has_tests
- yes
- check:test_ratio
- no
- check:tests_cochange
- yes
- ci_files
- 1
- cochange_commits
- 88
- cochange_share
- 34.1%
- source_lines
- 6,649
- test_lines
- 2,777
- test_ratio
- 0.42
Documentationok3 items
- README.md
README.md - LICENSE
LICENSE - CONTRIBUTING.md
CONTRIBUTING.md
- check:changelog
- no
- check:contributing
- yes
- check:license
- yes
- check:readme
- yes
- readme_lines
- 54
Type safetyok
- check:low_escape_density
- no
- check:strict_config
- no
- escapes
- 144
- escapes_per_kloc
- 36.18
Security
48 poor
Security posture is poor: 73 known vulnerabilities in 8 dependencies; 17 high-severity SAST findings; 17 high-severity workflow issues. Weakest area: posture.
How the score is built
- Secrets100
- Static analysis (SAST)48
- Vulnerable dependencies41
- CI workflows5
- Security posture0
- OpenSSF Scorecardnot measured
Evidence by analyzer
OpenSSF Scorecardskipped
no published OpenSSF Scorecard result for this repo
Package registriesok
- checked
- 19
- declared
- 19
- lookup_errors
- 0
- missing
- 0
- recent
- 0
Secrets (gitleaks)ok
- secrets_current
- 0
- secrets_history
- 0
- secrets_low_confidence
- 0
- secrets_nonprod
- 0
Static analysis (opengrep)ok
- findings
- 22
- findings_high
- 17
- findings_low
- 0
- findings_medium
- 5
- parse_errors
- 0
- scanned_lines
- 6,649
- weighted_findings
- 14
Dependencies (osv-scanner)ok
- penalty
- 54
- vulnerabilities
- 73
- vulnerable_packages
- 8
- vulns_critical
- 1
- vulns_high
- 34
- vulns_low
- 9
- vulns_medium
- 29
- vulns_unknown
- 0
CI workflows (zizmor)ok
- findings
- 28
- findings_high
- 17
- findings_low
- 6
- findings_medium
- 5
- penalty
- 175.50
- workflows
- 1
Security postureok
- check:dependency_updates
- no
- check:lockfiles
- yes
- check:security_policy
- no
- check:signed_commits
- no
- signed_commit_share
- 0.0%
- unpinned_manifests
- 0
Release downloadsok5 items
- release v3.0.0 ships sc-sp-remote-core-v3.0.0.zip (6 downloads)
- release v2.3.0 ships sc-sp-remote-core-v2.3.0.zip (3 downloads)
- release v2.2.0 ships sc-sp-remote-core-v2.2.0.zip (3 downloads)
- release v2.1.0 ships sc-sp-remote-core-v2.1.0.zip (2 downloads)
- release v2.0.0 ships sc-sp-remote-core-v2.0.0.zip (4 downloads)
- binary_assets
- 10
- signals
- 1
- suspicious
- 0
Findings
1 critical71 high49 medium19 low1 info
| Severity | Rule | Location | Message | Tool |
|---|---|---|---|---|
| critical | osv/GHSA-63hf-3vf5-4wqf |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2102, GHSA-63hf-3vf5-4wqf; also in requirements.txt | Dependencies (osv-scanner) |
| high | opengrep/python.lang.correctness.common-mistakes.identical-is-comparison |
manage.py:433 | Found identical comparison using is. Ensure this is what you intended. | Lint |
| high | opengrep/python.lang.best-practice.arbitrary-sleep |
manage.py:459 | time.sleep() call; did you mean to leave this in? | Lint |
| high | opengrep/python.lang.best-practice.arbitrary-sleep |
manage.py:590 | time.sleep() call; did you mean to leave this in? | Lint |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:110 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/cache-poisoning |
.github/workflows/ci.yml:114 | runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:114 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:143 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:151 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:19 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/cache-poisoning |
.github/workflows/ci.yml:21 | runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:21 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:47 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/cache-poisoning |
.github/workflows/ci.yml:49 | runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:49 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:70 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/cache-poisoning |
.github/workflows/ci.yml:72 | runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:72 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:93 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/cache-poisoning |
.github/workflows/ci.yml:95 | runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:95 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
manage.py:106 | Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
manage.py:120 | Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
manage.py:149 | Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
manage.py:231 | Detected subprocess function 'check_call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
manage.py:403 | Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit |
manage.py:419 | Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... | Static analysis (opengrep) |
| high | osv/GHSA-2fqr-mr3j-6wp8 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2112, GHSA-2fqr-mr3j-6wp8; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-2fqr-mr3j-6wp8 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2112, GHSA-2fqr-mr3j-6wp8; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-2g87-pp6c-29x5 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-2g87-pp6c-29x5; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-2g87-pp6c-29x5 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-2g87-pp6c-29x5; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-4fvr-rgm6-gqmc |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2107, GHSA-4fvr-rgm6-gqmc; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-4fvr-rgm6-gqmc |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2107, GHSA-4fvr-rgm6-gqmc; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-4m7w-qmgq-4wj5 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-237, GHSA-4m7w-qmgq-4wj5; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-4m7w-qmgq-4wj5 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-237, GHSA-4m7w-qmgq-4wj5; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-5wr8-gcqf-gqf3 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-5wr8-gcqf-gqf3; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-5wr8-gcqf-gqf3 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-5wr8-gcqf-gqf3; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-63hw-fmq6-xxg2 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2110, GHSA-63hw-fmq6-xxg2; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-63hw-fmq6-xxg2 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2110, GHSA-63hw-fmq6-xxg2; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-6mq8-rvhq-8wgg |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1101, GHSA-6mq8-rvhq-8wgg; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-9x8q-7h8h-wcw9 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2113, GHSA-9x8q-7h8h-wcw9; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-9x8q-7h8h-wcw9 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2113, GHSA-9x8q-7h8h-wcw9; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-9xw5-w5jj-pvcg |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-9xw5-w5jj-pvcg; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-9xw5-w5jj-pvcg |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-9xw5-w5jj-pvcg; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-cq5v-8q36-5273 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-3545, GHSA-cq5v-8q36-5273; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-cq5v-8q36-5273 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-3545, GHSA-cq5v-8q36-5273; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-g3cq-j2xw-wf74 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2111, GHSA-g3cq-j2xw-wf74; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-g3cq-j2xw-wf74 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2111, GHSA-g3cq-j2xw-wf74; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-hcc4-c3v8-rx92 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2095, GHSA-hcc4-c3v8-rx92; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-hg6j-4rv6-33pg |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2105, GHSA-hg6j-4rv6-33pg; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-jg22-mg44-37j8 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2104, GHSA-jg22-mg44-37j8; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-m5qp-6w8w-w647 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2098, GHSA-m5qp-6w8w-w647; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-m6qw-4cw2-hm4m |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2106, GHSA-m6qw-4cw2-hm4m; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-p998-jp59-783m |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2097, GHSA-p998-jp59-783m; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-xcgm-r5h9-7989 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2108, GHSA-xcgm-r5h9-7989; also in requirements.txt | Dependencies (osv-scanner) |
| high | osv/GHSA-xcgm-r5h9-7989 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2108, GHSA-xcgm-r5h9-7989; also in requirements.txt | Dependencies (osv-scanner) |
| high | opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query |
server/lyrics.py:320 | Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used... | Static analysis (opengrep) |
| high | opengrep/javascript.lang.security.detect-insecure-websocket |
spicetify-extension/remoteVolume.js:116 | Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.lang.security.detect-insecure-websocket |
spicetify-extension/remoteVolume.js:144 | Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] | Static analysis (opengrep) |
| high | osv/GHSA-58mr-gqgx-xq4g |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-58mr-gqgx-xq4g | Dependencies (osv-scanner) |
| high | osv/GHSA-6j4f-fj2g-mc7p |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-6j4f-fj2g-mc7p | Dependencies (osv-scanner) |
| high | osv/GHSA-mrhx-c7xc-m3w5 |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-mrhx-c7xc-m3w5 | Dependencies (osv-scanner) |
| high | osv/GHSA-qhr7-859c-m2p7 |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-qhr7-859c-m2p7 | Dependencies (osv-scanner) |
| high | osv/GHSA-qw65-cvwx-89v3 |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-qw65-cvwx-89v3 | Dependencies (osv-scanner) |
| high | opengrep/javascript.browser.security.insecure-document-method |
web/obs-widget/obs-script.js:119 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
web/obs-widget/obs-script.js:119 | User controlled data in a `el.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-document-method |
web/script.js:173 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
web/script.js:173 | User controlled data in a `ui.lyricsContent.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-document-method |
web/script.js:179 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
web/script.js:179 | User controlled data in a `ui.lyricsContent.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-document-method |
web/script.js:183 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
web/script.js:183 | User controlled data in a `ui.lyricsContent.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| medium | opengrep/python.lang.best-practice.unspecified-open-encoding |
manage.py:132 | Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). | Lint |
| medium | opengrep/python.lang.best-practice.unspecified-open-encoding |
manage.py:141 | Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). | Lint |
| medium | opengrep/python.lang.best-practice.unspecified-open-encoding |
manage.py:324 | Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). | Lint |
| medium | opengrep/python.lang.best-practice.unspecified-open-encoding |
server/lyrics.py:68 | Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). | Lint |
| medium | opengrep/python.lang.maintainability.is-function-without-parentheses |
server/routes.py:119 | Is "is_loopback" a function or an attribute? If it is a function, you may have meant ipaddress.ip_address(remote).is_loopback() because ipaddress.ip_address(remote).is_loopback is always true. | Lint |
| medium | opengrep/python.lang.maintainability.is-function-without-parentheses |
server/routes.py:91 | Is "is_loopback" a function or an attribute? If it is a function, you may have meant address.is_loopback() because address.is_loopback is always true. | Lint |
| medium | opengrep/python.lang.maintainability.is-function-without-parentheses |
server/routes.py:91 | Is "is_private" a function or an attribute? If it is a function, you may have meant address.is_private() because address.is_private is always true. | Lint |
| medium | opengrep/python.lang.maintainability.is-function-without-parentheses |
server/routes.py:91 | Is "is_link_local" a function or an attribute? If it is a function, you may have meant address.is_link_local() because address.is_link_local is always true. | Lint |
| medium | opengrep/python.lang.maintainability.return-not-in-function |
server/state.py:135 | `return` only makes sense inside a function | Lint |
| medium | opengrep/python.lang.best-practice.unspecified-open-encoding |
server/state.py:231 | Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). | Lint |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:1 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:11 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:44 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:67 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:90 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | opengrep/python.lang.security.audit.dynamic-urllib-use-detected |
manage.py:336 | Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... | Static analysis (opengrep) |
| medium | osv/GHSA-2vrm-gr82-f7m5 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2096, GHSA-2vrm-gr82-f7m5; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-3wq7-rqq7-wx6j |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2099, GHSA-3wq7-rqq7-wx6j; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-494j-54xm-rwp3 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-494j-54xm-rwp3; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-494j-54xm-rwp3 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-494j-54xm-rwp3; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-6cjc-53gc-5rqm |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-6cjc-53gc-5rqm; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-6cjc-53gc-5rqm |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-6cjc-53gc-5rqm; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-6jhg-hg63-jvvf |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1100, GHSA-6jhg-hg63-jvvf; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-6w46-j5rx-g56g |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1845, GHSA-6w46-j5rx-g56g | Dependencies (osv-scanner) |
| medium | osv/GHSA-966j-vmvw-g2g9 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2100, GHSA-966j-vmvw-g2g9; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-c427-h43c-vf67 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2103, GHSA-c427-h43c-vf67; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-f9xw-jh8m-3mwq |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-f9xw-jh8m-3mwq; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-f9xw-jh8m-3mwq |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-f9xw-jh8m-3mwq; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-g84x-mcqj-x9qq |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1106, GHSA-g84x-mcqj-x9qq; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-hpj7-wq8m-9hgp |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2109, GHSA-hpj7-wq8m-9hgp; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-hpj7-wq8m-9hgp |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2109, GHSA-hpj7-wq8m-9hgp; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-jj3x-wxrx-4x23 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1107, GHSA-jj3x-wxrx-4x23; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-mfx4-hv73-q22v |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-3546, GHSA-mfx4-hv73-q22v; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-mfx4-hv73-q22v |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-3546, GHSA-mfx4-hv73-q22v; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-mq44-7p77-q5h7 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-3547, GHSA-mq44-7p77-q5h7; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-mq44-7p77-q5h7 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-3547, GHSA-mq44-7p77-q5h7; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-mwh4-6h8g-pg8w |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2101, GHSA-mwh4-6h8g-pg8w; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-pqxq-w44r-73xw |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-pqxq-w44r-73xw; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-pqxq-w44r-73xw |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-pqxq-w44r-73xw; also in requirements.txt | Dependencies (osv-scanner) |
| medium | osv/GHSA-w2fm-2cpv-w7v5 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-2094, GHSA-w2fm-2cpv-w7v5; also in requirements.txt | Dependencies (osv-scanner) |
| medium | opengrep/python.lang.security.audit.formatted-sql-query |
server/lyrics.py:320 | Detected possible formatted SQL query. Use parameterized queries instead. [confidence low] | Static analysis (opengrep) |
| medium | osv/GHSA-gcqx-w48m-w2h4 |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-gcqx-w48m-w2h4 | Dependencies (osv-scanner) |
| medium | osv/GHSA-hrr3-gc8f-f4qj |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-hrr3-gc8f-f4qj | Dependencies (osv-scanner) |
| medium | osv/GHSA-q2hr-2g5m-vwhr |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-q2hr-2g5m-vwhr | Dependencies (osv-scanner) |
| medium | osv/GHSA-w74x-v6f9-j3xg |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-w74x-v6f9-j3xg | Dependencies (osv-scanner) |
| medium | osv/GHSA-wjr9-j795-jxcr |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-wjr9-j795-jxcr | Dependencies (osv-scanner) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
web/obs-widget/obs-script.js:151 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
web/script.js:180 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
web/script.js:183 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
soundcloud-plugin/soundcloud-remote-bridge.js:14 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
soundcloud-plugin/soundcloud-remote-bridge.js:14 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
spicetify-extension/remoteVolume.js:70 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
spicetify-extension/remoteVolume.js:70 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
streamdeck-plugin/rollup.config.mjs:43 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | zizmor/artipacked |
.github/workflows/ci.yml:110 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/ci.yml:19 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/ci.yml:47 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/ci.yml:70 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | zizmor/artipacked |
.github/workflows/ci.yml:93 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| low | osv/GHSA-54jq-c3m8-4m76 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1097, GHSA-54jq-c3m8-4m76; also in requirements.txt | Dependencies (osv-scanner) |
| low | osv/GHSA-69f9-5gxw-wvc2 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1099, GHSA-69f9-5gxw-wvc2; also in requirements.txt | Dependencies (osv-scanner) |
| low | osv/GHSA-fh55-r93g-j68g |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1105, GHSA-fh55-r93g-j68g; also in requirements.txt | Dependencies (osv-scanner) |
| low | osv/GHSA-gx76-c99x-2c96 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-gx76-c99x-2c96; also in requirements.txt | Dependencies (osv-scanner) |
| low | osv/GHSA-gx76-c99x-2c96 |
requirements-dev.txt | [email protected] (PyPI) is affected by GHSA-gx76-c99x-2c96; also in requirements.txt | Dependencies (osv-scanner) |
| low | osv/GHSA-mqqc-3gqh-h2x8 |
requirements-dev.txt | [email protected] (PyPI) is affected by PYSEC-2026-1109, GHSA-mqqc-3gqh-h2x8; also in requirements.txt | Dependencies (osv-scanner) |
| low | osv/GHSA-333x-w4r6-6crp |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-333x-w4r6-6crp | Dependencies (osv-scanner) |
| low | osv/GHSA-m5mm-p8h7-m29v |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-m5mm-p8h7-m29v | Dependencies (osv-scanner) |
| low | osv/GHSA-xhq7-xmqj-769h |
streamdeck-plugin/package-lock.json | [email protected] (npm) is affected by GHSA-xhq7-xmqj-769h | Dependencies (osv-scanner) |
| info | zizmor/superfluous-actions |
.github/workflows/ci.yml:151 | action functionality is already included by the runner [confidence high] | CI workflows (zizmor) |
Tools and coverage
Every analyzer that ran on this commit. A failed or skipped tool is a coverage gap: its share of the score is left out and the coverage figure drops.
| Analyzer | Pillar | Status | Version | Findings | Note |
|---|---|---|---|---|---|
| AI tool configuration | AI provenance | ok | signatures-v1 | 0 | |
| Explicit AI attribution | AI provenance | ok | signatures-v1 | 0 | |
| Release velocity | AI provenance | ok | prov-4 | 0 | |
| Coding style | AI provenance | ok | — | 0 | |
| Commit velocity | AI provenance | ok | prov-4 | 0 | |
| Complexity (lizard) | Code quality | ok | lizard 1.25.1 | 0 | |
| Documentation | Code quality | ok | — | 0 | |
| Duplication (jscpd) | Code quality | ok | repotrust-dup-w6 | 0 | |
| Lint | Code quality | ok | opengrep 1.33.1; rules f1d2b562b414 | 18 | |
| Tests and CI | Code quality | ok | — | 0 | |
| Type safety | Code quality | ok | — | 0 | |
| CI workflows (zizmor) | Security | ok | zizmor 1.32.0 | 28 | |
| Dependencies (osv-scanner) | Security | ok | osv-scanner version: 2.7.1 | 73 | |
| Release downloads | Security | ok | — | 0 | |
| Security posture | Security | ok | — | 0 | |
| Package registries | Security | ok | — | 0 | |
| Static analysis (opengrep) | Security | ok | opengrep 1.33.1; rules f1d2b562b414 | 22 | |
| OpenSSF Scorecard | Security | skipped | — | 0 | no published OpenSSF Scorecard result for this repo |
| Secrets (gitleaks) | Security | ok | gitleaks 8.30.1 | 0 |
Score history
Scores from different scoring versions aren't directly comparable.
| Scored | Commit | Scoring | AI provenance | Quality | Security |
|---|---|---|---|---|---|
| 2026-11-14 | 3e2d754190d4 | prov-5+qual-2+sec-2 | 0% | 69 | 48 |
| 2026-11-14 | 3e2d754190d4 | prov-4+qual-2+sec-2 | 0% | 69 | 48 |
Full text report
- Repository: https://github.com/dekub100/sc-sp-remote
- Commit:
3e2d754190d45d2abe51a23162c981c94d3e5702 - Generated: 2026-11-14T14:52:03+00:00
- Scorer 0.1.0, scoring prov-5+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 0 | possible | 65% | 100% |
| Code quality | 69 | adequate | 90% | 100% |
| Security | 48 | poor | 85% | 100% |
AI provenance
Weak signals consistent with AI-assisted development.
-
Explicitly attributed share (lower bound): 0.0%
-
Unattributed share in AI-consistent velocity bursts: 27.9%
-
Estimated AI-generated share: 0.0%
-
AI tooling configured in repo: generic-agent
-
Stylometry index: 0.75 per 1,000 lines (narrated steps 5, placeholders 0, assistant phrasing 0, emoji 0). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2025-08 | 1,196 | 0% |
| 2025-09 | 119 | 0% |
| 2025-10 | 183 | 0% |
| 2025-11 | 1,139 | 0% |
| 2025-12 | 613 | 0% |
| 2026-01 | 4 | 0% |
| 2026-03 | 1,881 | 0% |
| 2026-05 | 7,511 | 0% |
| 2026-06 | 3,671 | 0% |
| 2026-08 | 1,846 | 0% |
| 2026-10 | 598 | 0% |
| 2026-11 | 6,303 | 0% |
Evidence
- 3,415 lines of first-party code in ~1.8h (1,935 lines/hour, 9 commit session) (3e2d754190d4)
- AGENTS.md (generic-agent configuration) (AGENTS.md)
- 2,093 lines of first-party code in ~1.9h (1,091 lines/hour, 3 commit session) (4078e2194933)
- 1,476 lines of first-party code in ~1.7h (871 lines/hour, 2 commit session) (65006cf81940)
- step-by-step narration comment: // Step 1: Dispatch mouseover + mousemove to trigger SoundCloud's (soundcloud-p)
- step-by-step narration comment: // Step 2: Poll until .volume.expanded.hover exists. (soundcloud-p)
- step-by-step narration comment: // Step 3: Calculate Y position. (soundcloud-p)
- step-by-step narration comment: // Step 4: Simulate the click on the slider track. (soundcloud-p)
- step-by-step narration comment: // Step 5: Mouse out to dismiss the slider. (soundcloud-p)
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is adequate: test-to-source ratio 0.42, CI runs tests; 21% of function code in complex or long functions; 3% duplicated lines. Weakest area: type safety.
| Area | Score |
|---|---|
| Complexity (lizard) | 52 |
| Duplication | 84 |
| Code smells (Opengrep) | 47 |
| Tests and CI | 96 |
| Documentation | 80 |
| Type safety | 0 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 466; mean complexity 3.2, 90th percentile 7; 9 complex and 2 long functions
- Duplicated lines: 2.8% of 4,882 compared
- Tests: 2,777 test lines for 6,649 source lines (ratio 0.42); CI test commands: pytest; 34% of recent source commits also change tests
- Docs missing or thin: changelog
Most complex functions:
- fetch_and_broadcast_lyrics in server/lyrics.py: complexity 31, 109 lines
- checkTrackChange in spicetify-extension/remoteVolume.js: complexity 24, 26 lines
- applySpotifyNowPlaying in web/script.js: complexity 23, 56 lines
- _fetch_musixmatch in server/lyrics.py: complexity 22, 72 lines
- handleCommand in spicetify-extension/remoteVolume.js: complexity 21, 58 lines
Security
Security posture is poor: 73 known vulnerabilities in 8 dependencies; 17 high-severity SAST findings; 17 high-severity workflow issues. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 48 |
| Vulnerable dependencies (OSV) | 41 |
| CI workflows (zizmor) | 5 |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 73 in 8 packages (critical 1, high 34, medium 29, low 9)
-
Posture checks passed: lockfiles; missing: security policy, dependency updates, signed commits
Top findings
| Severity | Finding | Location |
|---|---|---|
| critical | osv/GHSA-63hf-3vf5-4wqf: [email protected] (PyPI) is affected by PYSEC-2026-2102, GHSA-63hf-3vf5-4wqf; also in requirements.txt |
requirements-dev.txt |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
manage.py:106 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
manage.py:120 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
manage.py:149 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'check_call' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
manage.py:231 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
manage.py:403 |
| high | opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] |
manage.py:419 |
| high | opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query: Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low] |
server/lyrics.py:320 |
| high | opengrep/javascript.lang.security.detect-insecure-websocket: Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] |
spicetify-extension/remoteVolume.js:116 |
| high | opengrep/javascript.lang.security.detect-insecure-websocket: Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] |
spicetify-extension/remoteVolume.js:144 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/obs-widget/obs-script.js:119 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a el.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/obs-widget/obs-script.js:119 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/script.js:173 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a ui.lyricsContent.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/script.js:173 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/script.js:179 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a ui.lyricsContent.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/script.js:179 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/script.js:183 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a ui.lyricsContent.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
web/script.js:183 |
| high | osv/GHSA-6mq8-rvhq-8wgg: [email protected] (PyPI) is affected by PYSEC-2026-1101, GHSA-6mq8-rvhq-8wgg; also in requirements.txt |
requirements-dev.txt |
| high | osv/GHSA-hcc4-c3v8-rx92: [email protected] (PyPI) is affected by PYSEC-2026-2095, GHSA-hcc4-c3v8-rx92; also in requirements.txt |
requirements-dev.txt |
| high | osv/GHSA-p998-jp59-783m: [email protected] (PyPI) is affected by PYSEC-2026-2097, GHSA-p998-jp59-783m; also in requirements.txt |
requirements-dev.txt |
| high | osv/GHSA-m5qp-6w8w-w647: [email protected] (PyPI) is affected by PYSEC-2026-2098, GHSA-m5qp-6w8w-w647; also in requirements.txt |
requirements-dev.txt |
| high | osv/GHSA-jg22-mg44-37j8: [email protected] (PyPI) is affected by PYSEC-2026-2104, GHSA-jg22-mg44-37j8; also in requirements.txt |
requirements-dev.txt |
| high | osv/GHSA-hg6j-4rv6-33pg: [email protected] (PyPI) is affected by PYSEC-2026-2105, GHSA-hg6j-4rv6-33pg; also in requirements.txt |
requirements-dev.txt |
| high | osv/GHSA-m6qw-4cw2-hm4m: [email protected] (PyPI) is affected by PYSEC-2026-2106, GHSA-m6qw-4cw2-hm4m; also in requirements.txt |
requirements-dev.txt |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Distribution signals
- binary-release-asset: release v3.0.0 ships sc-sp-remote-core-v3.0.0.zip (6 downloads)
- binary-release-asset: release v2.3.0 ships sc-sp-remote-core-v2.3.0.zip (3 downloads)
- binary-release-asset: release v2.2.0 ships sc-sp-remote-core-v2.2.0.zip (3 downloads)
- binary-release-asset: release v2.1.0 ships sc-sp-remote-core-v2.1.0.zip (2 downloads)
- binary-release-asset: release v2.0.0 ships sc-sp-remote-core-v2.0.0.zip (4 downloads)
Signals consistent with a repository that exists to distribute a download. They are heuristics, not a verdict; release files were not downloaded or inspected.
Repository profile
- Source lines: 6,649; test lines: 2,777
| Language | Lines |
|---|---|
| Python | 5,859 |
| JavaScript | 2,759 |
| TypeScript | 808 |