AI Slop Code Risk Monitor

mpv-player/mpv

SlopCodeMonitor badge for mpv-player/mpv Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

🎥 Command line media player

2.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for mpv-player/mpv, a C project with 37,638 GitHub stars. SynthScan examined 188,322 lines of code across 617 source files, recording 385 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.2 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

2.2
Adjusted Signal
2.2
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
37.6K
Stars
C
Language
188.3K
Lines of Code
617
Files
385
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 10.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 0.6/100 · LOW

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

PR Review Velocity Impact 10.7/100 · LOW

Which changes need focused human review? 385 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 3MEDIUM 14LOW 368

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 385 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block356 hits · 356 pts
SeverityFileLineSnippetContext
LOWmpv_talloc.h1#include <stdlib.h>COMMENT
LOWmisc/json.c41 * invalid UTF-8 sequences to replacement characters.COMMENT
LOWmisc/dispatch.c261// if executing the dispatch items takes time. On the other hand, this functionCOMMENT
LOWmisc/io_utils.c21#include <errno.h>COMMENT
LOWmisc/thread_tools.h21 .wakeup = MP_STATIC_COND_INITIALIZER, \COMMENT
LOWmisc/thread_tools.h61void mp_cancel_reset(struct mp_cancel *c);COMMENT
LOWmisc/thread_pool.h1#ifndef MPV_MP_THREAD_POOL_HCOMMENT
LOWmisc/thread_pool.h21// If no worker thread is currently available, it's appended to a list in memoryCOMMENT
LOWmisc/jni.h21COMMENT
LOWmisc/bstr.h81void bstr_lower(struct bstr str);COMMENT
LOWmisc/bstr.h101//COMMENT
LOWmisc/bstr.h121// Return the UTF-8 code point at the start of the string.COMMENT
LOWmisc/codepoint_width.c1#include "codepoint_width.h"COMMENT
LOWmisc/path_utils.c21#include <stdio.h>COMMENT
LOWmisc/charset_conv.c21COMMENT
LOWfilters/f_auto_filters.c1#include <math.h>COMMENT
LOWfilters/f_autoconvert.h21 // format changes and continue filtering when ready.COMMENT
LOWfilters/f_autoconvert.h41// otherwise must be 0. (Mismatches lead to conversion errors.)COMMENT
LOWfilters/f_hwtransfer.c1#include <libavutil/buffer.h>COMMENT
LOWfilters/f_lavfi.c21#include <math.h>COMMENT
LOWfilters/f_lavfi.c41#include "common/tags.h"COMMENT
LOWfilters/f_enhancement_pair.c21#include "common/msg.h"COMMENT
LOWfilters/filter_internal.h1#pragma onceCOMMENT
LOWfilters/filter_internal.h21// In practice, this means process() is repeated.COMMENT
LOWfilters/filter_internal.h61COMMENT
LOWfilters/filter_internal.h81 // The common case will be that process() is called running stage 1 a bunchCOMMENT
LOWfilters/filter_internal.h101// Return the mp_filter_info this filter was created with.COMMENT
LOWfilters/f_swscale.c21#include <math.h>COMMENT
LOWfilters/f_output_chain.c1#include "audio/aframe.h"COMMENT
LOWfilters/filter.c1#include <math.h>COMMENT
LOWfilters/filter.c21// mp_pin.conn is used to skip redundant connected pins.COMMENT
LOWfilters/f_autoconvert.c1#include "audio/aframe.h"COMMENT
LOWfilters/f_utils.h1#pragma onceCOMMENT
LOWfilters/f_utils.h21// filtering.)COMMENT
LOWfilters/f_utils.h41COMMENT
LOWfilters/f_utils.h61void mp_subfilter_destroy(struct mp_subfilter *sub);COMMENT
LOWfilters/f_async_queue.h1#pragma onceCOMMENT
LOWfilters/f_async_queue.h21// further communication until mp_async_queue_resume() is called.COMMENT
LOWfilters/f_async_queue.h41// accepts no further frames. Always returns false if not active (then it doesCOMMENT
LOWfilters/f_async_queue.h61// has read requests on its mp_pin.COMMENT
LOWfilters/f_async_queue.h81// create one with mp_filter_create_root())COMMENT
LOWfilters/f_async_queue.h121 // at least 2 samples. Behavior is unclear on timestamp resets (even if EOFCOMMENT
LOWfilters/f_decoder_wrapper.c21#include <stdbool.h>COMMENT
LOWfilters/f_decoder_wrapper.c41#include "common/recorder.h"COMMENT
LOWfilters/f_lavfi.h1#pragma onceCOMMENT
LOWfilters/f_swresample.c21#include <libavutil/channel_layout.h>COMMENT
LOWfilters/f_enhancement_pair.h21COMMENT
LOWfilters/filter.h1#pragma onceCOMMENT
LOWfilters/filter.h41bool mp_pin_in_write(struct mp_pin *p, struct mp_frame frame);COMMENT
LOWfilters/filter.h61// Read a frame. Returns MP_FRAME_NONE if currently no frame is available.COMMENT
LOWfilters/filter.h81// If this is called, the next mp_pin_out_read() call will return the same frameCOMMENT
LOWfilters/filter.h101// a typical filter implementation)COMMENT
LOWfilters/filter.h121// mp_pin_can_transfer_data(). Returns whether a transfer happened.COMMENT
LOWfilters/filter.h141// on pin state changes. Using mp_pin_set_manual_connection() will default toCOMMENT
LOWfilters/filter.h321 // output (MP_PIN_OUT). This is the default convention for filters. SomeCOMMENT
LOWfilters/filter.h421// missing external input or unread output). It returns whether any outsideCOMMENT
LOWfilters/filter.h441// call is interrupted and no filtering is done for that call.COMMENT
LOWfilters/filter.h461struct mp_filter *mp_filter_create_root(struct mpv_global *global);COMMENT
LOWfilters/f_output_chain.h41 // and the implementation drained the filter chain and unset the internal aoCOMMENT
LOWoptions/m_property.h21#include <stdbool.h>COMMENT
296 more matches not shown…
Self-Referential Comments7 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUMTOOLS/gen-interface-changes.py7# This file is part of mpv.COMMENT
MEDIUMTOOLS/matroska.py12# This file is part of mpv.COMMENT
MEDIUMTOOLS/file2string.py9# This file is part of mpv.COMMENT
MEDIUMTOOLS/gen-mpv-desktop.py7# This file is part of mpv.COMMENT
MEDIUMTOOLS/docutils-wrapper.py8# This file is part of mpv.COMMENT
MEDIUMci/publish-release.sh114# Create the release once (which also creates the tag), then only edit it inCOMMENT
MEDIUMetc/_mpv.zsh9# This file is part of mpv.COMMENT
AI Slop Vocabulary6 hits · 17 pts
SeverityFileLineSnippetContext
MEDIUMfilters/f_swresample.c529 // Essentially, swr_set_compensation() does 2 things:COMMENT
MEDIUMvideo/img_format.c364 // is robust.COMMENT
MEDIUMstream/stream_bluray.c1110 // Deferred to the read thread to do the seamless angle change.COMMENT
MEDIUMcommon/recorder.c34// Essentially, this should be higher than the highest supported keyframeCOMMENT
MEDIUMosdep/mac/libmpv_helper.swift111 // so only utilize a newly received FBO ID if it is nonzero.COMMENT
MEDIUMplayer/core.h86 MPSEEK_FLAG_NOFLUSH = 1 << 1, // keeping remaining data for seamless loopsCODE
Empty Error Handlers3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHTOOLS/dylib_unhell.py108except Exception:CODE
HIGHTOOLS/docutils-wrapper.py45except FileNotFoundError:CODE
HIGHTOOLS/macos-sdk-version.py40except Exception:CODE
Excessive Try-Catch Wrapping5 hits · 6 pts
SeverityFileLineSnippetContext
LOWTOOLS/dylib_unhell.py95 except Exception:CODE
LOWTOOLS/dylib_unhell.py108 except Exception:CODE
MEDIUMTOOLS/dylib_unhell.py89def check_vulkan_max_version(version):CODE
LOWTOOLS/docutils-wrapper.py61except Exception:CODE
LOWTOOLS/macos-sdk-version.py40 except Exception:CODE
Deep Nesting3 hits · 3 pts
SeverityFileLineSnippetContext
LOWTOOLS/matroska.py314CODE
LOWTOOLS/matroska.py453CODE
LOWci/lint-commit-msg.py42CODE
Hyper-Verbose Identifiers2 hits · 2 pts
SeverityFileLineSnippetContext
LOWTOOLS/dylib_unhell.py125def install_name_tool_add_rpath(rpath, binary):CODE
LOWTOOLS/dylib_unhell.py128def install_name_tool_delete_rpath(rpath, binary):CODE
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWtest/avio_crypto.c185 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do "CODE
LOWtest/avio_crypto.c185 "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do "CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWTOOLS/uncrustify.cfg1# Usage:COMMENT