The easiest music streaming server available
This report presents the forensic synthetic code analysis of IrosTheBeggar/mStream, a JavaScript project with 2,357 GitHub stars. SynthScan v2.0 examined 141,395 lines of code across 338 source files, recording 1128 pattern matches distributed across 7 syntactic categories. The overall adjusted score of 14.7 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 1128 distinct pattern matches across 7 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 |
|---|---|---|---|---|
| MEDIUM | rust-server-audio/src/main.rs | 15 | // ── Request / Response types ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-server-audio/src/main.rs | 77 | // ── Loop mode ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-server-audio/src/main.rs | 103 | // ── Player state ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-server-audio/src/main.rs | 208 | // ── Duration detection via symphonia ──────────────────────────────────────── | COMMENT |
| MEDIUM | rust-server-audio/src/main.rs | 245 | // ── HTTP helpers ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-server-audio/src/main.rs | 270 | // ── Request handlers ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-server-audio/src/main.rs | 388 | // ── Queue handlers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-server-audio/src/main.rs | 471 | // ── Main ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 37 | // ── Config (matches what task-queue.js passes) ────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 469 | // ── Entry point ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 1205 | // ── Main scan ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 1255 | // ── Schema-version guard ──────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 1452 | // ── Serial path ────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 1558 | // ── Parallel path ──────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 1639 | // ── Writer loop (greedy drain) ────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 2090 | // ── Per-file processing ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 3109 | // ── Artist / Album helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 3488 | // ── Lyrics helpers (V19) ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 3654 | // ── Waveform enrichment pass (`--waveform-scan`) ──────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 4175 | // ── Genre helpers ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 4224 | // ── MD5 hash ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 4425 | // ── Waveform generation (symphonia-powered) ─────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 4569 | // ── Chromaprint fingerprint (--fingerprint) ───────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 4786 | // ── Album art (V48 multi-art) ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 4906 | // ── Image compression ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | rust-parser/src/main.rs | 4943 | // ── Utilities ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | webapp/velvet/app.js | 10133 | // ── REPLAYGAIN ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | webapp/velvet/app.js | 10143 | // ── WAVEFORM SCRUBBER ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | webapp/velvet/app.js | 10144 | // ── WAVEFORM LOCALSTORAGE CACHE ─────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 4 | // ── STATE ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 91 | // ── Wrapped play tracking ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 157 | // ── HELPERS ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 376 | // ── QUEUE PERSISTENCE ─────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 508 | // ── API ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 527 | // ── NORMALIZE SONG ──────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 546 | // ── RATING HELPERS ──────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 568 | // ── ARTIST NORMALIZATION ────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 592 | // ── PLAYER ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1262 | // ── ON-DEMAND ART FETCH ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1294 | // ── QUEUE UI ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1383 | // ── One-time queue event-listener setup ────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1460 | // ── HIGHLIGHT ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1473 | // ── VIEW HELPERS ────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1516 | // ── SONG ROWS ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1739 | // ── CONTEXT MENU ───────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1785 | // ── NOW PLAYING MODAL ────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1889 | // ── DEEZER ART IN NP MODAL ──────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1929 | // ── DIRECT-URL ART IN NP MODAL ──────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 1956 | // ── DISCOGS ART IN NP MODAL ─────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2011 | // ── EQUALIZER CONFIG ────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2034 | // ── MINI SPECTRUM (player bar) ────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2276 | // ── VU NEEDLE METERS (player bar) ───────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2552 | // ── Arc band: green → yellow → red ────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2570 | // ── Tick marks + labels ────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2636 | // ── Peak lamp ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2684 | // ── RTW 1206-style PPM (Peak Programme Meter) — horizontal ───────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2796 | // ── Brightness slider ───────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 2929 | // ── Ref-level knob ────────────────────────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 3200 | // ── BUTTERCHURN VISUALIZER + SPECTRUM ──────────────────────── | COMMENT |
| MEDIUM | webapp/velvet/app.js | 3435 | // ══ MODE 0 — Bar Spectrum ══════════════════════════════════ | COMMENT |
| 558 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/smoke/docker/compose.smoke.yaml | 1 | # All-Docker smoke compose: mStream in a container, talking to the | COMMENT |
| LOW | test/smoke/docker/README.md | 41 | docker compose -f test/smoke/docker/compose.smoke.yaml up --build -d | COMMENT |
| LOW | rust-parser/Cargo.toml | 41 | "isomp4", | COMMENT |
| LOW | rust-parser/Cargo.toml | 61 | rusty-chromaprint = "0.3" | COMMENT |
| LOW | rust-parser/src/main.rs | 61 | force_rescan: bool, | COMMENT |
| LOW | rust-parser/src/main.rs | 81 | // (default), symlinks are treated as opaque entries and skipped. | COMMENT |
| LOW | rust-parser/src/main.rs | 101 | // - Walks {directory}/{subtree} instead of {directory} | COMMENT |
| LOW | rust-parser/src/main.rs | 121 | // destructive phase. Mirrors the guard in src/db/scanner.mjs. | COMMENT |
| LOW | rust-parser/src/main.rs | 141 | // `SELECT … WHERE filepath = ? AND library_id = ?` queries down to one | COMMENT |
| LOW | rust-parser/src/main.rs | 161 | // the extraction, which collected no art) while its junction rows | COMMENT |
| LOW | rust-parser/src/main.rs | 241 | mbz_album_id: Option<String>, | COMMENT |
| LOW | rust-parser/src/main.rs | 301 | content_hash: Option<String>, | COMMENT |
| LOW | rust-parser/src/main.rs | 321 | // `rel_path_progress` is the forward-slash-normalised path used for | COMMENT |
| LOW | rust-parser/src/main.rs | 341 | // channel — paying the OS scheduler cost without proportional | COMMENT |
| LOW | rust-parser/src/main.rs | 361 | COMMENT | |
| LOW | rust-parser/src/main.rs | 521 | // prints the four lyrics column values as JSON on stdout. Used by | COMMENT |
| LOW | rust-parser/src/main.rs | 661 | // Per-chunk row cap for the end-of-scan orphan cleanup. Each | COMMENT |
| LOW | rust-parser/src/main.rs | 701 | let changes = stmt.execute([])?; | COMMENT |
| LOW | rust-parser/src/main.rs | 721 | // rows are scanner-derived and fully re-derivable by a rescan, so the | COMMENT |
| LOW | rust-parser/src/main.rs | 741 | // until the directory shape is restored (extreme edge, safe side). | COMMENT |
| LOW | rust-parser/src/main.rs | 841 | .map(|(id, cf)| (id, Some(cf))).collect(); | COMMENT |
| LOW | rust-parser/src/main.rs | 901 | std::thread::sleep(Duration::from_millis(WRITER_YIELD_MIN_MS + jitter)); | COMMENT |
| LOW | rust-parser/src/main.rs | 921 | // | COMMENT |
| LOW | rust-parser/src/main.rs | 941 | // VERIFY-ABSENCE: a row is only deleted after a fresh filesystem check | COMMENT |
| LOW | rust-parser/src/main.rs | 961 | // - listing readable, exact-case name present as a regular file (or a | COMMENT |
| LOW | rust-parser/src/main.rs | 981 | // Per-sweep listing cache: rel dir (fwd slashes) → Some(name → kind) | COMMENT |
| LOW | rust-parser/src/main.rs | 1161 | "Warning: {} stale-candidate row(s) left untouched because their subtree \ | COMMENT |
| LOW | rust-parser/src/main.rs | 1181 | // WRITER_YIELD: after a batch that hit the cap (the channel still had | COMMENT |
| LOW | rust-parser/src/main.rs | 1221 | COMMENT | |
| LOW | rust-parser/src/main.rs | 1281 | // via stat, which on a remote CIFS mount costs one round-trip each). | COMMENT |
| LOW | rust-parser/src/main.rs | 1301 | let artist_cache: Mutex<HashMap<String, i64>> = Mutex::new(HashMap::new()); | COMMENT |
| LOW | rust-parser/src/main.rs | 1341 | // neither re-derive the extension nor re-check support, and the | COMMENT |
| LOW | rust-parser/src/main.rs | 1421 | // src/db/scanner.mjs) | COMMENT |
| LOW | rust-parser/src/main.rs | 1441 | COMMENT | |
| LOW | rust-parser/src/main.rs | 1481 | match result { | COMMENT |
| LOW | rust-parser/src/main.rs | 1501 | &artist_cache, &album_cache, &genre_cache, &various_artists_id, | COMMENT |
| LOW | rust-parser/src/main.rs | 1561 | // mpsc channel to the writer thread (this thread). The writer | COMMENT |
| LOW | rust-parser/src/main.rs | 1641 | // open, so the write lock is free while we wait — a worker | COMMENT |
| LOW | rust-parser/src/main.rs | 1681 | // progress write via the err check below, but the compiler | COMMENT |
| LOW | rust-parser/src/main.rs | 1701 | } | COMMENT |
| LOW | rust-parser/src/main.rs | 1741 | } | COMMENT |
| LOW | rust-parser/src/main.rs | 1801 | // COMMIT tail and fall back to drain-and-discard. | COMMENT |
| LOW | rust-parser/src/main.rs | 1841 | err = Some(Box::new(e)); | COMMENT |
| LOW | rust-parser/src/main.rs | 1941 | // Sweep candidates = (rows that existed when the scan started) − | COMMENT |
| LOW | rust-parser/src/main.rs | 1961 | chunked_delete_stale_tracks( | COMMENT |
| LOW | rust-parser/src/main.rs | 1981 | // lock for that whole window, and any concurrent API write from the | COMMENT |
| LOW | rust-parser/src/main.rs | 2041 | "SELECT id FROM genres WHERE NOT EXISTS (SELECT 1 FROM track_genres WHERE track_genres.genre_id = genres.id) | COMMENT |
| LOW | rust-parser/src/main.rs | 2061 | // to run the waveform post-processor and to print a human-readable summary. | COMMENT |
| LOW | rust-parser/src/main.rs | 2121 | let file_size = meta.len(); | COMMENT |
| LOW | rust-parser/src/main.rs | 2141 | // play queue) on tag edits that change the | COMMENT |
| LOW | rust-parser/src/main.rs | 2241 | // V36: provenance from embedded tags — populated from the lofty | COMMENT |
| LOW | rust-parser/src/main.rs | 2381 | } else { | COMMENT |
| LOW | rust-parser/src/main.rs | 2421 | COMMENT | |
| LOW | rust-parser/src/main.rs | 2481 | if looks_like_lrc(&text) { | COMMENT |
| LOW | rust-parser/src/main.rs | 2621 | COMMENT | |
| LOW | rust-parser/src/main.rs | 2681 | name, primary_album_artist_id, et.year, et.aa_file.as_deref(), et.aa_source.as_deref(), | COMMENT |
| LOW | rust-parser/src/main.rs | 2701 | // album/filepath actually changed), cutting the per-row writer-lock | COMMENT |
| LOW | rust-parser/src/main.rs | 2821 | for (i, artist_fk) in track_artist_ids.iter().enumerate() { | COMMENT |
| LOW | rust-parser/src/main.rs | 2881 | // when present, file_hash otherwise. A tag edit keeps audio_hash stable, | COMMENT |
| LOW | rust-parser/src/main.rs | 2941 | } | COMMENT |
| 374 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webapp/velvet/assets/js/mstream.js | 138 | function renderFileWithMetadataHtml(filepath, id, metadata) { | CODE |
| LOW | webapp/velvet/assets/js/lib/qr.js | 513 | function getAlignmentPatternPositions() { | CODE |
| LOW | webapp/velvet/alpha/m.js | 137 | function renderFileWithMetadataHtml(filepath, id, metadata) { | CODE |
| LOW | webapp/assets/js/lib/qr.js | 513 | function getAlignmentPatternPositions() { | CODE |
| LOW | webapp/alpha/m.js | 147 | function renderFileWithMetadataHtml(filepath, lokiId, metadata) { | CODE |
| LOW | webapp/alpha/m.js | 1301 | function sanitiseTorrentPathSegment(s) { | CODE |
| LOW | webapp/alpha/m.js | 1713 | function updateAddTorrentPathPreview() { | CODE |
| LOW | webapp/alpha/m.js | 3256 | async function refreshSubsonicPasswordStatus() { | CODE |
| LOW | webapp/alpha/m.js | 3273 | async function setSubsonicPasswordFromForm() { | CODE |
| LOW | webapp/alpha/m.js | 3286 | async function clearSubsonicPasswordFromForm() { | CODE |
| LOW | webapp/alpha/m.js | 3299 | async function refreshSubsonicApiKeyList() { | CODE |
| LOW | webapp/alpha/m.js | 3321 | async function createSubsonicApiKeyFromForm() { | CODE |
| LOW | src/util/admin.js | 538 | export async function editDiscoveryServerDescription(val) { | CODE |
| LOW | src/util/admin.js | 597 | export async function editAutoAlbumArtWriteToFolder(val) { | CODE |
| LOW | src/util/admin.js | 613 | export async function editAlbumArtWriteToFolder(val) { | CODE |
| LOW | src/state/config.js | 30 | export function deriveModelCacheDirectory(dbDirectory) { | CODE |
| LOW | src/torrent/path-probe.js | 551 | export async function daemonKnownPathsCandidates(vpath, creds, clientType, memo) { | CODE |
| LOW | src/torrent/path-probe.js | 593 | export async function symlinkAndRealpathCandidates(vpath) { | CODE |
| LOW | src/torrent/vpath-sweep.js | 33 | export async function sweepVpathsForActiveClient(libraries) { | CODE |
| LOW | src/db/discovery-features-lib.js | 185 | function rethrowIfCacheDirUnwritable(err, modelCacheDir) { | CODE |
| LOW | src/db/manager.js | 701 | export function getBackupDestinationsByLibrary(libraryId, { triggerType, enabledOnly = true } = {}) { | CODE |
| LOW | src/db/manager.js | 715 | export function getBackupDestinationsByTrigger(triggerType) { | CODE |
| LOW | src/db/manager.js | 868 | export function markStaleBackupRunsFailed(excludeHistoryId = null) { | CODE |
| LOW | src/db/manager.js | 948 | export function getLastCountedBackupBefore(destinationId, beforeHistoryId) { | CODE |
| LOW | src/db/federation.js | 67 | export function getFederationKeyLibraries(keyId) { | CODE |
| LOW | src/db/federation.js | 84 | export function bindFederationKeyEndpoint(id, endpointId) { | CODE |
| LOW | src/db/federation.js | 94 | export function resetFederationKeyBinding(id) { | CODE |
| LOW | src/db/federation.js | 107 | export function touchFederationKeyLastUsed(id) { | CODE |
| LOW | src/db/federation.js | 135 | export function updateFederationPeerStatus(id, status) { | CODE |
| LOW | src/db/federation.js | 146 | export function setFederationPeerUseDiscovery(id, enabled) { | CODE |
| LOW | src/db/task-queue.js | 73 | export function setOnScanCompleteCallback(fn) { onScanCompleteCallback = fn; } | CODE |
| LOW | src/db/task-queue.js | 313 | function checkQueueDrainedSideEffects() { | CODE |
| LOW | src/db/task-queue.js | 320 | function checkQueueDrainedSideEffectsInner() { | CODE |
| LOW | src/db/task-queue.js | 1183 | export function maybeEnqueueAudioAnalysis() { | CODE |
| LOW | src/db/task-queue.js | 1915 | export function cancelBackupsForDestination(destinationId) { | CODE |
| LOW | src/api/federation-auth.js | 69 | export function authenticateFederationKey(key, req) { | CODE |
| LOW | src/api/server-playback.js | 28 | export async function refreshDetectedCliPlayers() { | CODE |
| LOW | src/api/scrobbler.js | 57 | export async function fetchLastfmSimilarArtists(artist, apiKey) { | CODE |
| LOW | src/api/subsonic/handlers.js | 2210 | export function getOpenSubsonicExtensions(req, res) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webapp/torrent/index.js | 343 | // Step 1: seed-existing check unless the user opted out. | COMMENT |
| LOW | webapp/torrent/index.js | 402 | // Step 2: /torrent/add. | COMMENT |
| LOW | src/torrent/tag-probe.js | 119 | // Step 1: add paused. | COMMENT |
| LOW⚡ | src/torrent/tag-probe.js | 138 | // Step 2: set file priorities. Skip everything except the target. | COMMENT |
| LOW⚡ | src/torrent/tag-probe.js | 141 | // Step 3: resume. | COMMENT |
| LOW⚡ | src/torrent/tag-probe.js | 144 | // Step 4: poll for bytes. | COMMENT |
| LOW | src/torrent/tag-probe.js | 179 | // Step 7: always clean up. delete-local-data: true makes the | COMMENT |
| LOW | src/api/torrent.js | 237 | // Step 1: Content-Length pre-check. Reject before reading bytes. | COMMENT |
| LOW | src/api/subsonic/handlers.js | 3140 | // Step 1: local. | COMMENT |
| LOW | src/api/subsonic/handlers.js | 3151 | // Step 2: read-only cache fallback. | COMMENT |
| LOW | src/api/subsonic/handlers.js | 3163 | // Step 3: nothing to serve. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webapp/torrent/index.js | 343 | // Step 1: seed-existing check unless the user opted out. | COMMENT |
| LOW | src/torrent/tag-probe.js | 119 | // Step 1: add paused. | COMMENT |
| LOW⚡ | src/torrent/tag-probe.js | 138 | // Step 2: set file priorities. Skip everything except the target. | COMMENT |
| LOW⚡ | src/torrent/tag-probe.js | 141 | // Step 3: resume. | COMMENT |
| LOW⚡ | src/torrent/tag-probe.js | 144 | // Step 4: poll for bytes. | COMMENT |
| LOW | src/torrent/tag-probe.js | 179 | // Step 7: always clean up. delete-local-data: true makes the | COMMENT |
| LOW | src/api/torrent.js | 237 | // Step 1: Content-Length pre-check. Reject before reading bytes. | COMMENT |
| LOW | src/api/subsonic/handlers.js | 3140 | // Step 1: local. | COMMENT |
| LOW | src/api/subsonic/handlers.js | 3151 | // Step 2: read-only cache fallback. | COMMENT |
| LOW | src/api/subsonic/handlers.js | 3163 | // Step 3: nothing to serve. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webapp/index.html | 116 | <textarea id="share-textarea" autocomplete="off" rows="8" cols="60" placeholder="Your URL will be put here" re | CODE |
| LOW | webapp/index.html | 157 | <input id="playlist_name" autocomplete="off" type="text" required placeholder="Enter your playlist name" pat | CODE |
| LOW | webapp/index.html | 191 | <input id="new-live-playlist-name" type="text" name="live-queue-name" placeholder="Playlist Name" autoco | CODE |
| LOW | webapp/index.html | 225 | <input autocomplete="off" id="new_playlist_name" type="text" required placeholder="Enter your playlist name" | CODE |
| LOW | webapp/index.html | 263 | <input id="ytdl_url" autocomplete="off" type="url" required placeholder="Enter URL" style="color:#fff;" da | CODE |
| LOW | webapp/index.html | 322 | <input id="mkdir_name" autocomplete="off" type="text" required placeholder="Folder name" pattern="[a-zA-Z0-9 | CODE |
| LOW | webapp/index.html | 773 | <input id="localSearchBar" onkeyup="runLocalSearch(this)" type="text" placeholder="Search List" autocomplete | CODE |
| LOW | webapp/velvet/assets/js/lib/vue2.js | 11 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define | CODE |
| LOW | webapp/velvet/assets/js/lib/materialize.js | 6 | var _get=function t(e,i,n){null===e&&(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,i);if(void 0===s){va | CODE |
| LOW | webapp/subsonic/assets/index-Bu0XnV9O.js | 5 | */var Ee=Object.freeze({}),wt=Array.isArray;function mt(e){return e==null}function j(e){return e!=null}function Gt(e){r | COMMENT |
| LOW | webapp/subsonic/assets/index-Bu0XnV9O.js | 42 | */const t=Object.freeze({}),r=Array.isArray;function n(i){return i==null}function a(i){return i!=null}function s(i){ret | COMMENT |
| LOW | webapp/assets/js/lib/vue2.js | 11 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define | CODE |
| LOW | webapp/assets/js/lib/materialize.js | 6 | var _get=function t(e,i,n){null===e&&(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,i);if(void 0===s){va | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/smoke/docker/compose.smoke.yaml | 28 | # Host port 8915 so the smoke harness can hit mStream without | COMMENT |
| MEDIUM | test/cli-audio/entrypoint.sh | 3 | # then hands off to the Node routing harness. | COMMENT |
| MEDIUM | webapp/velvet/app.js | 3880 | alpha = 0.35 + (1 - timeUntil / 2.5) * 0.65; // 0.35 → 1.0 (seamless into active) | CODE |