AI Slop Code Risk Monitor

miroslavpejic85/mirotalk

SlopCodeMonitor badge for miroslavpejic85/mirotalk Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

🚀 Open-source, self-hosted P2P WebRTC video conferencing for fast, private real-time communication. Create browser-based meeting rooms with no downloads or time limits, plus screen sharing, chat, whiteboard, recording, and collaboration.

4.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for miroslavpejic85/mirotalk, a JavaScript project with 4,821 GitHub stars. SynthScan examined 122,650 lines of code across 220 source files, recording 183 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 4.9 (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.

4.9
Adjusted Signal
4.9
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
4.8K
Stars
JavaScript
Language
122.7K
Lines of Code
220
Files
183
Pattern Hits
2026-10-31
Scan Date
0.16
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 4.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 17.0/100 · LOW

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

Agent Over-Engineering Ratio 4.6/100 · LOW

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

PR Review Velocity Impact 19.1/100 · LOW

Which changes need focused human review? 183 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 34HIGH 1MEDIUM 13LOW 135

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 183 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.

Hallucination Indicators34 hits · 445 pts
SeverityFileLineSnippetContext
CRITICALtests/test-noiseSuppression.js260 context.window.AudioContext.prototype.audioWorklet.addModule.callsFake(CODE
CRITICAL⚡tests/test-videoDrawing.js556 tools.panel.hidden.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js558 tools.panel.hidden.should.be.false();CODE
CRITICAL⚡tests/test-videoDrawing.js562 tools.panel.hidden.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js563 appearance.panel.hidden.should.be.false();CODE
CRITICAL⚡tests/test-videoDrawing.js566 appearance.panel.hidden.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js580 tools.panel.hidden.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js586 tools.panel.hidden.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js592 overlay.appearanceButton.firstChild.style.backgroundColor.should.equal('rgb(255, 23, 68)');CODE
CRITICAL⚡tests/test-videoDrawing.js596 overlay.widthPreview.style.height.should.equal('8px');CODE
CRITICALtests/test-videoDrawing.js711 overlay.toolButtons.pencil.disabled.should.be.true();CODE
CRITICALtests/test-videoDrawing.js731 overlay.toolButtons.pencil.disabled.should.be.false();CODE
CRITICAL⚡tests/test-videoDrawing.js745 overlay.toolButtons.pencil.disabled.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js746 overlay.undoButton.disabled.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js747 overlay.clearButton.disabled.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js748 overlay.visibilityButton.disabled.should.be.false();CODE
CRITICAL⚡tests/test-videoDrawing.js761 overlay.toolButtons.pencil.disabled.should.be.false();CODE
CRITICAL⚡tests/test-videoDrawing.js770 queued.toolButtons.pencil.disabled.should.be.true();CODE
CRITICAL⚡tests/test-videoDrawing.js774 dom.window.Overlay.pendingPermissions.size.should.equal(0);CODE
CRITICAL⚡tests/test-videoDrawing.js784 ownerOverlay.toolButtons.pencil.disabled.should.be.false();CODE
CRITICALtests/test-videoDrawing.js907 saved.blob.size.should.be.above(0);CODE
CRITICALtests/test-hostProtection.js171 result.data.is_presenter.should.be.true();CODE
CRITICALtests/test-hostProtection.js196 guestResult.data.is_presenter.should.be.false();CODE
CRITICALtests/test-oidcCreateRoom.js162 hostResult.data.is_presenter.should.be.true();CODE
CRITICALtests/test-oidcCreateRoom.js166 guestResult.data.is_presenter.should.be.false();CODE
CRITICALtests/test-validate.js281 cfg.wbCanvasJson.objects.should.have.length(4);CODE
CRITICAL⚡tests/test-roomTimeLimit.js233 host.data.time_limit.durationMs.should.equal(2000);CODE
CRITICAL⚡tests/test-roomTimeLimit.js234 host.data.time_limit.reached.should.equal(false);CODE
CRITICAL⚡tests/test-roomTimeLimit.js240 joined.data.time_limit.durationMs.should.equal(2000);CODE
CRITICAL⚡tests/test-roomTimeLimit.js241 joined.data.time_limit.remainingMs.should.be.belowOrEqual(2000);CODE
CRITICALtests/test-presenterSecurity.js126 presenterResult.data.is_presenter.should.be.true();CODE
CRITICALtests/test-presenterSecurity.js131 participantResult.data.is_presenter.should.be.false();CODE
CRITICALtests/test-presenterSecurity.js192 result.data.is_presenter.should.be.false();CODE
CRITICALtests/test-presenterSecurity.js203 result.data.is_presenter.should.be.false();CODE
Hyper-Verbose Identifiers110 hits · 70 pts
SeverityFileLineSnippetContext
LOWapp/src/server.js260function isOidcPresenterTokenValid(token, roomId) {CODE
LOWapp/src/server.js4185function scheduleBreakoutIdleCheck(room_id) {CODE
LOWapp/src/oidcPresenter.js5function isOidcConfiguredPresenter(oidcUser, presenterList) {CODE
LOWpublic/js/detectSpeaking.js20async function getMicrophoneVolumeIndicator(stream) {CODE
LOWpublic/js/client.js1130function refreshMainButtonsToolTipPlacement() {CODE
LOWpublic/js/client.js1504function handleRoomTimeLimitReached() {CODE
LOWpublic/js/client.js1619function applyNoiseSuppressionDefault() {CODE
LOWpublic/js/client.js2864function getCameraBackgroundPresets() {CODE
LOWpublic/js/client.js2872function createCameraBackgroundGrid(grid, fileInput) {CODE
LOWpublic/js/client.js2945function updateCameraBackgroundGrid(grid) {CODE
LOWpublic/js/client.js3007function attachCameraBackgroundStream(stream, previousStream) {CODE
LOWpublic/js/client.js3144async function storeCameraBackgroundFile(file) {CODE
LOWpublic/js/client.js3152function loadCameraBackgroundImageElement(url) {CODE
LOWpublic/js/client.js3165async function selectCameraBackgroundImage(source) {CODE
LOWpublic/js/client.js3215async function loadCameraBackgroundImage(event) {CODE
LOWpublic/js/client.js3293 async function updateInitLocalVideoMediaStream(camStream) {CODE
LOWpublic/js/client.js3399 async function updateLocalVideoMediaStream(camStream) {CODE
LOWpublic/js/client.js3545function handleRNNoiseNotSupported() {CODE
LOWpublic/js/client.js3617function setMicrophoneNoiseSuppression(track, enabled, isCurrent) {CODE
LOWpublic/js/client.js3676function stopNoiseSuppressionPipeline() {CODE
LOWpublic/js/client.js3750function setNoiseSuppressionForAllPeers(enabled) {CODE
LOWpublic/js/client.js3766async function handleNoiseSuppressionRequest(enabled) {CODE
LOWpublic/js/client.js3993async function handlePeersConnectionStatus(peer_id) {CODE
LOWpublic/js/client.js4942function updateButtonsBarPinnedOffset() {CODE
LOWpublic/js/client.js4961async function initEnumerateAudioDevices() {CODE
LOWpublic/js/client.js4985async function initEnumerateVideoDevices() {CODE
LOWpublic/js/client.js5013async function getUserMediaWithDeviceFallback(kind, getConstraints) {CODE
LOWpublic/js/client.js5186async function refreshMyAudioVideoDevices() {CODE
LOWpublic/js/client.js5357 async function updateLocalVideoMediaStream(stream) {CODE
LOWpublic/js/client.js6986function createResponsiveDropdownItem(sourceButton, label, tier = 'secondary') {CODE
LOWpublic/js/client.js7001function createResponsiveDropdownRangeItem(sourceRange, label, iconClass) {CODE
LOWpublic/js/client.js7286function updateScreenCameraLayoutUI(mode) {CODE
LOWpublic/js/client.js7316function handleScreenCameraLayoutBtn(button) {CODE
LOWpublic/js/client.js7855function scheduleParticipantViewRestore() {CODE
LOWpublic/js/client.js8173function removeVideoPinMediaContainer(peer_id, force_remove = false) {CODE
LOWpublic/js/client.js8954function openPinnedParticipantsSidebar(announce = false) {CODE
LOWpublic/js/client.js9117function confirmTranscriptionStartWithAudioOff() {CODE
LOWpublic/js/client.js9144function applyWhisperUiAvailability() {CODE
LOWpublic/js/client.js10267async function documentPictureInPictureRestart() {CODE
LOWpublic/js/client.js10278async function documentPictureInPictureClose() {CODE
LOWpublic/js/client.js10289async function documentPictureInPictureOpen() {CODE
LOWpublic/js/client.js10358 function observeElementClassChanges(element, observerName) {CODE
LOWpublic/js/client.js10665function updateSettingsExtraGroups() {CODE
LOWpublic/js/client.js10771function handleExitMenuOutsideClick(e) {CODE
LOWpublic/js/client.js11290function loadSettingsFromLocalStorage() {CODE
LOWpublic/js/client.js11396function handleUsernameEmojiPicker() {CODE
LOWpublic/js/client.js11737function createVideoLoadingSpinner(wrap, videoEl) {CODE
LOWpublic/js/client.js12370function getScreenShareVideoConstraints() {CODE
LOWpublic/js/client.js12392function getScreenShareConstraints() {CODE
LOWpublic/js/client.js12618async function handleToggleScreenException(reason, init) {CODE
LOWpublic/js/client.js13186function getAudioStreamFromAudioElements() {CODE
LOWpublic/js/client.js13501function setChatRoomAndCaptionForMobile() {CODE
LOWpublic/js/client.js13569function shouldDockParticipantsPanel() {CODE
LOWpublic/js/client.js13573function syncParticipantsListContainer(showParticipantsPanel = false) {CODE
LOWpublic/js/client.js13593function syncParticipantsPanelVisibility(forceVisible = null) {CODE
LOWpublic/js/client.js13670function toggleCaptionDropDownMenu() {CODE
LOWpublic/js/client.js13690function handleMsgerDropdownOutsidePress(event) {CODE
LOWpublic/js/client.js13710function toggleParticipantsDropDownMenu(activeMenu, siblingMenu = null) {CODE
LOWpublic/js/client.js13722function syncCaptionEveryoneButtons(isActive) {CODE
LOWpublic/js/client.js14130function hideChatRoomAndEmojiPicker() {CODE
50 more matches not shown…
Decorative Section Separators11 hits · 46 pts
SeverityFileLineSnippetContext
MEDIUM⚡docker-compose-whisper.yml1# =============================================================================COMMENT
MEDIUM⚡docker-compose-whisper.yml3# =============================================================================COMMENT
MEDIUM⚡docker-compose-whisper.yml12# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml14# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml20# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml22# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml40# =============================================================================COMMENT
MEDIUM⚡docker-compose-whisper.yml43 # -------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml45 # -------------------------------------------------------------------------COMMENT
MEDIUMdocker-compose-whisper.yml67 # -------------------------------------------------------------------------COMMENT
MEDIUMdocker-compose-whisper.yml69 # -------------------------------------------------------------------------COMMENT
Fake / Example Data11 hits · 12 pts
SeverityFileLineSnippetContext
LOW⚡tests/test-api.js44 peerId1: { peer_name: 'John Doe' },CODE
LOW⚡tests/test-api.js45 peerId2: { peer_name: 'John Doe' },CODE
LOW⚡tests/test-api.js48 peerId1: { peer_name: 'John Doe' },CODE
LOWtests/test-api.js94 peer_name: 'John Doe',CODE
LOWtests/test-api.js139 name: 'John Doe',CODE
LOWtests/test-editor.js250 const big = 'lorem ipsum '.repeat(5000);CODE
LOWtests/test-gifSearch.js74 assert.equal(elements.input.getAttribute('placeholder'), 'Search KLIPY');CODE
LOWpublic/js/client.js18499 const text = new fabric.IText('Lorem Ipsum', {CODE
LOWpublic/js/gifSearch.js38 this.input.setAttribute('placeholder', GifSearch.PLACEHOLDER);CODE
LOWpublic/js/i18n.js60 const ATTR_KEYS = ['title', 'placeholder', 'aria-label', 'data-tippy-content'];CODE
LOWscripts/extract-ui-lang.js23const ATTR_KEYS = ['title', 'placeholder', 'aria-label', 'data-tippy-content'];CODE
Over-Commented Block11 hits · 11 pts
SeverityFileLineSnippetContext
LOWdocker-compose-whisper.yml1# =============================================================================COMMENT
LOWdocker-compose-whisper.yml21# Point MiroTalk P2P at this serverCOMMENT
LOWdocker-compose.template.yml21 # - ./app/:/src/app/:roCOMMENT
LOWapp/src/config.template.js121 },COMMENT
LOWapp/src/config.template.js221 },COMMENT
LOWapp/src/config.template.js321 model: process.env.CHATGPT_MODEL || 'gpt-6-luna',COMMENT
LOWapp/src/config.template.js341 // - apiKey : KLIPY app key. Per KLIPY's integration requirements, searches areCOMMENT
LOWapp/src/config.template.js361 // OpenAI-compatible server (whisper.cpp server, faster-whisper, etc.).COMMENT
LOWpublic/css/client.css4861#activeRoomsBtn,COMMENT
LOWpublic/css/client.css4901}COMMENT
LOWpublic/js/helpers.js81// To start recording, call audioRecorder.getMixedAudioStream(audioStreams);COMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHpublic/js/client.js12747 // Enable/disable local audio as requested by callerCOMMENT
Slop Phrases1 hit · 4 pts
SeverityFileLineSnippetContext
MEDIUM⚡docker-compose-whisper.yml5# Runs an OpenAI-compatible Whisper server so you can use the roomCOMMENT
Structural Annotation Overuse3 hits · 4 pts
SeverityFileLineSnippetContext
LOWwebhook/README.md7### Step 1: Enable WebhooksCOMMENT
LOWwebhook/README.md20### Step 2: Run the Webhook ServerCOMMENT
LOWwebhook/README.md36### Step 3: Webhook EventsCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMapp/src/lib/whisper.js13// Stored normalized (lowercase, no spaces/punctuation) for robust matching.COMMENT