AI Slop Code Risk Monitor

datalab-to/marker

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

Convert PDF to markdown + JSON quickly with high accuracy

4.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for datalab-to/marker, a Python project with 40,729 GitHub stars. SynthScan examined 59,309 lines of code across 197 source files, recording 190 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 4.0 (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.0
Adjusted Signal
4.0
Raw Pattern Score
100%
Time Factor
2026-10-29
Last Push
40.7K
Stars
Python
Language
59.3K
Lines of Code
197
Files
190
Pattern Hits
2026-10-31
Scan Date
0.04
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? 101 finding(s).

Hallucinated Dependency & Supply Chain Risk 2.9/100 · LOW

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

Agent Over-Engineering Ratio 8.9/100 · LOW

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

PR Review Velocity Impact 18.9/100 · LOW

Which changes need focused human review? 190 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 7MEDIUM 12LOW 171

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 190 distinct pattern matches across 13 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.

Excessive Try-Catch Wrapping44 hits · 44 pts
SeverityFileLineSnippetContext
LOWexamples/marker_modal_deployment.py92 except Exception as e:CODE
LOWexamples/marker_modal_deployment.py117 except Exception as e:CODE
LOWexamples/marker_modal_deployment.py286 except Exception as e:CODE
LOWexamples/marker_modal_deployment.py343 except Exception as e:CODE
MEDIUMexamples/marker_modal_deployment.py344 print(f"Error getting web URL: {e}")CODE
LOWexamples/marker_modal_deployment.py363 except Exception as e:CODE
MEDIUMexamples/marker_modal_deployment.py394 print(f"Error: {response.text}")CODE
LOWexamples/marker_modal_deployment.py396 except Exception as e:CODE
LOWbenchmarks/postprocess.py22except Exception: # optional; only used for LaTeX-in-table-cell conversionCODE
LOWbenchmarks/postprocess.py37 except Exception:CODE
LOWbenchmarks/inference.py136 except Exception as e: # keep going; record the failure per pageCODE
LOWbenchmarks/competitors/liteparse_infer.py53 except Exception:CODE
MEDIUMbenchmarks/competitors/liteparse_infer.py36def _one(pdf):CODE
LOWbenchmarks/competitors/docling_infer.py93 except Exception:CODE
LOWbenchmarks/competitors/docling_infer.py106 except Exception:CODE
LOWmarker/config/parser.py165 except Exception as e:CODE
LOWmarker/config/parser.py176 except Exception as e:CODE
LOWmarker/providers/spreadsheet.py40 except Exception as e:STRING
LOWmarker/providers/registry.py79 except Exception:CODE
LOWmarker/providers/html.py16 except Exception as e:CODE
LOWmarker/providers/pdf.py465 except Exception:CODE
LOWmarker/providers/powerpoint.py53 except Exception as e:STRING
LOWmarker/providers/powerpoint.py223 except Exception as e:STRING
LOWmarker/providers/document.py61 except Exception as e:STRING
LOWmarker/providers/document.py100 except Exception as e:STRING
MEDIUMmarker/providers/document.py89def convert_image(match):CODE
LOWmarker/providers/epub.py56 except Exception as e:STRING
LOWmarker/processors/block_relabel.py57 except Exception as e:CODE
LOWmarker/processors/llm/llm_meta.py60 except Exception as e:CODE
LOWmarker/processors/llm/__init__.py127 except Exception as e:CODE
LOWmarker/processors/llm/__init__.py143 except Exception as e:CODE
LOWmarker/processors/llm/__init__.py189 except Exception as e:CODE
LOWmarker/processors/llm/llm_page_correction.py196 except Exception as e:STRING
LOWmarker/processors/llm/llm_page_correction.py217 except Exception as e:STRING
LOWmarker/processors/llm/llm_page_correction.py264 except Exception as e:STRING
LOWmarker/scripts/server.py115 except Exception as e:CODE
LOWmarker/scripts/convert.py58 except Exception:CODE
LOWmarker/scripts/convert.py104 except Exception as e:CODE
LOWmarker/services/claude.py112 except Exception as e:CODE
LOWmarker/services/openrouter.py136 except Exception as e:CODE
LOWmarker/services/gemini.py126 except Exception as e:CODE
LOWmarker/services/openai.py124 except Exception as e:CODE
LOWmarker/services/azure_openai.py106 except Exception as e:CODE
LOWmarker/services/ollama.py68 except Exception as e:CODE
Deep Nesting42 hits · 42 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py125CODE
LOWtests/converters/test_olmocr_bench.py59CODE
LOWbenchmarks/inference.py154CODE
LOWmarker/output.py58CODE
LOWmarker/renderers/ocr_json.py55CODE
LOWmarker/renderers/html.py51CODE
LOWmarker/renderers/markdown.py29CODE
LOWmarker/renderers/markdown.py128CODE
LOWmarker/builders/line.py385CODE
LOWmarker/builders/ocr.py207CODE
LOWmarker/builders/ocr.py255CODE
LOWmarker/builders/structure.py42CODE
LOWmarker/config/printer.py9CODE
LOWmarker/config/crawler.py32CODE
LOWmarker/config/crawler.py88CODE
LOWmarker/providers/spreadsheet.py84CODE
LOWmarker/providers/pdf.py134CODE
LOWmarker/providers/pdf.py209CODE
LOWmarker/providers/powerpoint.py64CODE
LOWmarker/providers/powerpoint.py140CODE
LOWmarker/converters/__init__.py24CODE
LOWmarker/converters/pdf.py172CODE
LOWmarker/schema/polygon.py97CODE
LOWmarker/schema/polygon.py112CODE
LOWmarker/schema/polygon.py201CODE
LOWmarker/schema/groups/page.py257CODE
LOWmarker/schema/text/line.py46CODE
LOWmarker/schema/text/span.py82CODE
LOWmarker/processors/list.py57CODE
LOWmarker/processors/ignoretext.py44CODE
LOWmarker/processors/equation.py83CODE
LOWmarker/processors/table_recon.py100CODE
LOWmarker/processors/table_recon.py329CODE
LOWmarker/processors/debug.py62CODE
LOWmarker/processors/blockquote.py35CODE
LOWmarker/processors/table.py197CODE
LOWmarker/processors/line_numbers.py40CODE
LOWmarker/processors/line_numbers.py76CODE
LOWmarker/processors/sectionheader.py42CODE
LOWmarker/processors/llm/llm_table_merge.py165CODE
LOWmarker/processors/llm/llm_table.py287CODE
LOWmarker/services/gemini.py43CODE
Hyper-Verbose Identifiers35 hits · 36 pts
SeverityFileLineSnippetContext
LOWtests/renderers/test_html_renderer.py14def test_html_renderer_block_ids(pdf_document, config):CODE
LOW⚡tests/renderers/test_markdown_renderer.py18def test_markdown_renderer_auto_ocr(pdf_document):CODE
LOW⚡tests/renderers/test_markdown_renderer.py27def test_markdown_renderer_pagination(pdf_document):CODE
LOW⚡tests/renderers/test_markdown_renderer.py36def test_markdown_renderer_pagination_blank_last_page(pdf_document):CODE
LOW⚡tests/renderers/test_markdown_renderer.py52def test_markdown_renderer_metadata(pdf_document):CODE
LOW⚡tests/renderers/test_markdown_renderer.py59def test_markdown_renderer_images(pdf_document):CODE
LOW⚡tests/renderers/test_markdown_renderer.py68def test_markdown_renderer_tables(pdf_document):CODE
LOWtests/renderers/test_json_renderer.py7def test_markdown_renderer_pagination(pdf_document):CODE
LOWtests/renderers/test_extract_images.py8def test_disable_extract_images(pdf_document):CODE
LOWtests/builders/test_ocr_pipeline.py41def test_ocr_with_inline_pipeline(pdf_document):CODE
LOWtests/builders/test_document_builder.py28def test_document_builder_inline_eq(pdf_document):CODE
LOWtests/providers/test_image_provider.py17def test_image_provider_conversion(pdf_converter, temp_image):CODE
LOWtests/converters/test_modes.py28def test_balanced_mode_digital(model_dict, temp_doc):CODE
LOWtests/processors/test_llm_processors.py21def test_llm_form_processor_no_config(pdf_document, llm_service):CODE
LOWtests/processors/test_llm_processors.py34def test_llm_form_processor_no_cells(pdf_document, llm_service):CODE
LOWtests/processors/test_llm_processors.py115def test_llm_caption_processor_disabled(pdf_document):STRING
LOWtests/processors/test_llm_processors.py130def test_llm_caption_processor(pdf_document):STRING
LOWtests/processors/test_llm_processors.py154def test_llm_complex_region_processor(pdf_document):STRING
LOWtests/processors/test_llm_processors.py182def test_multi_llm_processors(pdf_document):STRING
LOWtests/processors/test_table_merge.py11def test_llm_table_processor_nomerge(pdf_document, recognition_model, mocker):CODE
LOWtests/processors/test_document_toc_processor.py7def test_document_toc_processor(pdf_document, recognition_model):CODE
LOWtests/processors/test_ignoretext.py10def test_ignoretext_processor(pdf_document):CODE
LOW⚡examples/marker_modal_deployment.py33def setup_models_with_cache_check(logger, commit_volume=False):CODE
LOWbenchmarks/postprocess.py64def _strip_escapes_outside_math(s: str) -> str:CODE
LOWmarker/renderers/__init__.py120 def generate_document_metadata(self, document: Document, document_output):CODE
LOWmarker/renderers/chunk.py38def assemble_html_with_images(block: JSONBlockOutput, image_blocks: set[str]) -> str:CODE
LOWmarker/renderers/json.py29def reformat_section_hierarchy(section_hierarchy):CODE
LOWmarker/builders/line.py154 def order_blocks_by_reading_order(self, document: Document):CODE
LOWmarker/config/crawler.py62 def _gather_super_annotations(cls: Type) -> Dict[str, Type]:CODE
LOWmarker/schema/labels.py42def surya_label_to_block_type(label: str) -> BlockTypes | None:CODE
LOWmarker/schema/labels.py47def block_type_to_surya_label(block_type: BlockTypes) -> str:CODE
LOWmarker/schema/groups/page.py149 def compute_line_block_intersections(CODE
LOWmarker/processors/equation.py209 def _collect_inline_math_blocks(self, document: Document) -> set:CODE
LOWmarker/processors/table.py109 def reconstruct_digital_table(self, page, block) -> str | None:CODE
LOWmarker/processors/line_numbers.py61 def ignore_line_number_blocks(self, document: Document):CODE
Unused Imports38 hits · 34 pts
SeverityFileLineSnippetContext
LOWmarker/renderers/html.py1CODE
LOWmarker/schema/polygon.py1CODE
LOWmarker/schema/document.py1CODE
LOWmarker/schema/blocks/__init__.py1CODE
LOWmarker/schema/blocks/__init__.py3CODE
LOWmarker/schema/blocks/__init__.py3CODE
LOWmarker/schema/blocks/__init__.py3CODE
LOWmarker/schema/blocks/__init__.py4CODE
LOWmarker/schema/blocks/__init__.py5CODE
LOWmarker/schema/blocks/__init__.py6CODE
LOWmarker/schema/blocks/__init__.py7CODE
LOWmarker/schema/blocks/__init__.py8CODE
LOWmarker/schema/blocks/__init__.py9CODE
LOWmarker/schema/blocks/__init__.py10CODE
LOWmarker/schema/blocks/__init__.py11CODE
LOWmarker/schema/blocks/__init__.py12CODE
LOWmarker/schema/blocks/__init__.py13CODE
LOWmarker/schema/blocks/__init__.py14CODE
LOWmarker/schema/blocks/__init__.py15CODE
LOWmarker/schema/blocks/__init__.py16CODE
LOWmarker/schema/blocks/__init__.py17CODE
LOWmarker/schema/blocks/__init__.py18CODE
LOWmarker/schema/blocks/__init__.py19CODE
LOWmarker/schema/blocks/__init__.py20CODE
LOWmarker/schema/blocks/__init__.py21CODE
LOWmarker/schema/blocks/__init__.py22CODE
LOWmarker/schema/blocks/__init__.py23CODE
LOWmarker/schema/blocks/__init__.py24CODE
LOWmarker/schema/blocks/__init__.py25CODE
LOWmarker/schema/blocks/base.py1CODE
LOWmarker/schema/groups/__init__.py1CODE
LOWmarker/schema/groups/__init__.py2CODE
LOWmarker/schema/groups/__init__.py3CODE
LOWmarker/schema/groups/__init__.py4CODE
LOWmarker/schema/groups/__init__.py5CODE
LOWmarker/schema/groups/__init__.py6CODE
LOWmarker/schema/text/__init__.py1CODE
LOWmarker/schema/text/__init__.py2CODE
Empty Error Handlers6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHbenchmarks/postprocess.py37except Exception:CODE
HIGHbenchmarks/competitors/docling_infer.py106except Exception:CODE
HIGHmarker/config/crawler.py101except ImportError:CODE
HIGHmarker/providers/registry.py79except Exception:CODE
HIGHmarker/providers/pdf.py465except Exception:CODE
HIGHmarker/scripts/convert.py58except Exception:CODE
Self-Referential Comments4 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMexamples/marker_modal_deployment.py9# Define the Modal appCOMMENT
MEDIUMexamples/marker_modal_deployment.py14# Define the container image with all dependenciesCOMMENT
MEDIUM⚡examples/marker_modal_deployment.py30# Create a persistent volume for model cachingCOMMENT
MEDIUMmarker/builders/structure.py137 # Create a merged blockCOMMENT
Redundant / Tautological Comments9 hits · 12 pts
SeverityFileLineSnippetContext
LOW⚡examples/marker_modal_deployment.py41 # Check if models exist in cacheCOMMENT
LOWexamples/marker_modal_deployment.py207 # Read file contentCOMMENT
LOWmarker/providers/spreadsheet.py98 # Check if this cell is the start of a merged rangeSTRING
LOWmarker/providers/registry.py76 # Check if there are any HTML tagsCOMMENT
LOWmarker/schema/groups/page.py67 # Check if RGB, convert if neededCOMMENT
LOWmarker/processors/footnote.py25 # Check if it is top-levelCOMMENT
LOWmarker/processors/llm/llm_mathblock.py129 # Check if the ratio of math blocks to additional blocks is high enoughSTRING
LOWmarker/processors/llm/llm_table_merge.py398 # Check if the number of rows is the sameCOMMENT
LOWmarker/processors/llm/llm_table_merge.py403 # Check if the number of columns is the sameCOMMENT
AI Slop Vocabulary3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMbenchmarks/inference.py38# olmOCR-bench output normalization (same dir); robust to how the script is run.COMMENT
MEDIUMdata/examples/json/multicolcnn.json1164 "html": "<p block-type=\"Text\">We propose the use of dilated convolutions as an attractive alternative to theCODE
MEDIUMdata/examples/json/multicolcnn.json1865 "html": "<p block-type=\"Text\">Furthermore, we performed a set of experiments in which we varied the number oCODE
Over-Commented Block5 hits · 5 pts
SeverityFileLineSnippetContext
LOWbenchmarks/competitors/mineru_infer.sh1#!/bin/bashCOMMENT
LOWmarker/models.py41 model devices are set server-side.COMMENT
LOW…/examples/markdown/switch_transformers/switch_trans.md561import mesh tensorflow as mtfCOMMENT
LOW…/examples/markdown/switch_transformers/switch_trans.md661# d model = model hidden size (scalar).COMMENT
LOW…/examples/markdown/switch_transformers/switch_trans.md681# probability.COMMENT
AI Response Leakage1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHdata/examples/markdown/thinkpython/thinkpython.md8598Figure [C.7](#page-237-1) shows the result. Each class is represented with a box that contains the name of the class, anCODE
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMexamples/marker_modal_deployment.py304# that you can use to test your deployment. It'll store theCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWbenchmarks/competitors/mineru_infer.sh10# Usage:COMMENT
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWmarker/schema/blocks/__init__.py27__all__ = [CODE