Python tool for converting files and office documents to Markdown.
This report presents the forensic synthetic code analysis of microsoft/markitdown, a Python project with 165,621 GitHub stars. SynthScan v2.0 examined 17,007 lines of code across 100 source files, recording 389 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 40.9 places this repository in the Strong 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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 389 distinct pattern matches across 15 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⚡ | packages/markitdown/tests/test_cu_converter.py | 114 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 116 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 160 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 162 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 193 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 195 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 308 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 310 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 558 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 560 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 637 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 639 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 719 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 721 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 746 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 748 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 788 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 790 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 906 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown/tests/test_cu_converter.py | 908 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown/tests/test_cu_converter.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown/tests/test_cu_converter.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown/tests/test_cu_converter.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown/tests/test_cu_converter.py | 49 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown/tests/test_cu_converter.py | 662 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown/tests/test_cu_converter.py | 664 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …/markitdown/src/markitdown/converters/_cu_converter.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …/markitdown/src/markitdown/converters/_cu_converter.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …/markitdown/src/markitdown/converters/_cu_converter.py | 335 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …/markitdown/src/markitdown/converters/_cu_converter.py | 337 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …/markitdown/src/markitdown/converters/_cu_converter.py | 436 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …/markitdown/src/markitdown/converters/_cu_converter.py | 438 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_docx_converter.py | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_docx_converter.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_docx_converter.py | 166 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_docx_converter.py | 168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_docx_converter.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_docx_converter.py | 212 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 57 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 72 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 87 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 89 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 122 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 147 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_docx_converter.py | 149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_pptx_converter.py | 61 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_pptx_converter.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_pptx_converter.py | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_pptx_converter.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_pptx_converter.py | 91 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | packages/markitdown-ocr/tests/test_pptx_converter.py | 93 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_pptx_converter.py | 106 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_pptx_converter.py | 108 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_pptx_converter.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_pptx_converter.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_pptx_converter.py | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | packages/markitdown-ocr/tests/test_pptx_converter.py | 137 | # --------------------------------------------------------------------------- | COMMENT |
| 30 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/markitdown/tests/test_module_vectors.py | 72 | def test_convert_stream_with_hints(test_vector): | CODE |
| LOW | packages/markitdown/tests/test_module_vectors.py | 93 | def test_convert_stream_without_hints(test_vector): | CODE |
| LOW | packages/markitdown/tests/test_module_vectors.py | 163 | def test_convert_keep_data_uris(test_vector): | CODE |
| LOW | packages/markitdown/tests/test_module_vectors.py | 181 | def test_convert_stream_keep_data_uris(test_vector): | CODE |
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 17 | def test_partial_numbering_pattern_regex(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 34 | def test_masterformat_partial_numbering_not_split(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 73 | def test_masterformat_content_preserved(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 115 | def test_merge_partial_numbering_with_empty_lines_between(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 148 | def test_multiple_partial_numberings_all_merged(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 86 | def test_page_close_called_on_every_page(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 116 | def test_plain_text_pdf_falls_back_to_pdfminer(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 150 | def test_plain_text_pdf_still_closes_all_pages(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 177 | def test_mixed_pdf_uses_form_extraction_per_page(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 222 | def test_only_one_pdfplumber_open_call(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 249 | def test_real_pdf_page_cleanup(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 303 | def test_memory_does_not_grow_linearly(self): | CODE |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 333 | def test_memory_constant_across_page_counts(self): | CODE |
| LOW | packages/markitdown/tests/test_module_misc.py | 110 | def test_stream_info_operations() -> None: | CODE |
| LOW | packages/markitdown/tests/test_module_misc.py | 291 | def test_deeply_nested_html_fallback() -> None: | CODE |
| LOW | packages/markitdown/tests/test_module_misc.py | 404 | def test_speech_transcription() -> None: | CODE |
| LOW | packages/markitdown/tests/test_module_misc.py | 465 | def test_markitdown_llm_parameters() -> None: | CODE |
| LOW | packages/markitdown/tests/test_docintel_html.py | 15 | def test_docintel_accepts_html_extension(): | CODE |
| LOW | packages/markitdown/tests/test_docintel_html.py | 21 | def test_docintel_accepts_html_mimetype(): | CODE |
| LOW | packages/markitdown/tests/test_cli_vectors.py | 98 | def test_input_from_stdin_without_hints(shared_tmp_dir, test_vector) -> None: | CODE |
| LOW | packages/markitdown/tests/test_cli_vectors.py | 152 | def test_output_to_file_with_data_uris(shared_tmp_dir, test_vector) -> None: | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 109 | def test_rejects_unsupported_extensions(self, ext): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 155 | def test_rejects_unsupported_mimetypes(self, mime): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 168 | def test_restricted_to_pdf_only(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 186 | def test_webm_value_matches_cli_input(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 201 | def test_detects_video_from_mime_without_extension(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 207 | def test_detects_audio_from_mime_without_extension(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 213 | def test_detects_audio_alias_from_mime_without_extension(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 219 | def test_detects_video_alias_from_mime_without_extension(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 298 | def test_file_type_restriction_applies_to_mime(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 316 | def test_document_analyzer_routes_pdf_to_custom(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 566 | def test_known_document_prebuilts(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 578 | def test_known_audio_prebuilts(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 584 | def test_known_video_prebuilts(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 590 | def test_known_image_prebuilts(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 596 | def test_unknown_prebuilt_falls_back_to_get_analyzer(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 618 | def test_custom_analyzer_no_base_defaults_to_document(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 628 | def test_get_analyzer_failure_raises_value_error(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 702 | def test_wav_returns_markdown(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 712 | def test_jpeg_returns_markdown(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 727 | def test_nonexistent_analyzer_raises_value_error(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 754 | def test_cu_registered_before_docintel(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 796 | def test_use_cu_without_endpoint_exits(self): | CODE |
| LOW⚡ | packages/markitdown/tests/test_cu_converter.py | 914 | def test_missing_deps_message(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 94 | def test_accepts_supported_extensions(self, ext): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 143 | def test_accepts_supported_mimetypes(self, mime): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 267 | def test_content_type_for_resolves_conflicts_to_file_type( | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 273 | def test_conflicting_extension_and_mimetype_in_convert(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 386 | def test_no_analyzer_id_uses_auto_routing(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 406 | def test_no_analyzer_id_routes_image_to_document_search(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 426 | def test_document_analyzer_routes_image_to_custom(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 449 | def test_image_analyzer_routes_jpeg_to_custom(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 472 | def test_image_analyzer_routes_pdf_to_document_prebuilt(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 504 | def test_mime_only_input_uses_auto_routing(self, mimetype, expected_analyzer): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 521 | def test_mime_alias_input_uses_canonical_content_type(self): | CODE |
| LOW | packages/markitdown/tests/test_cu_converter.py | 539 | def test_extension_only_input_uses_file_type_content_type(self): | CODE |
| 55 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sample-plugin/src/markitdown_sample_plugin/__init__.py | 5 | CODE | |
| LOW | …sample-plugin/src/markitdown_sample_plugin/__init__.py | 5 | CODE | |
| LOW | …sample-plugin/src/markitdown_sample_plugin/__init__.py | 5 | CODE | |
| LOW | …sample-plugin/src/markitdown_sample_plugin/__init__.py | 6 | CODE | |
| LOW | packages/markitdown/tests/test_pdf_memory.py | 26 | CODE | |
| LOW | packages/markitdown/tests/test_cu_converter.py | 13 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 5 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 6 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 6 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 6 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 11 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 11 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 12 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 13 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 13 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 13 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 13 | CODE | |
| LOW | packages/markitdown/src/markitdown/__init__.py | 13 | CODE | |
| LOW | …arkitdown/src/markitdown/converters/_xlsx_converter.py | 13 | CODE | |
| LOW | …arkitdown/src/markitdown/converters/_xlsx_converter.py | 20 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 5 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 6 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 7 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 8 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 9 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 10 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 11 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 12 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 13 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 14 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 14 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 15 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 16 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 17 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 18 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 19 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 20 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 20 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 24 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 24 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 28 | CODE | |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 29 | CODE | |
| LOW | …arkitdown/src/markitdown/converters/_docx_converter.py | 2 | CODE | |
| LOW | …arkitdown/src/markitdown/converters/_docx_converter.py | 3 | CODE | |
| LOW | …arkitdown/src/markitdown/converters/_pptx_converter.py | 9 | CODE | |
| LOW | …markitdown/src/markitdown/converters/_zip_converter.py | 13 | CODE | |
| LOW | …own/src/markitdown/converters/_plain_text_converter.py | 12 | CODE | |
| LOW | …src/markitdown/converter_utils/docx/math/latex_dict.py | 8 | CODE | |
| LOW | packages/markitdown-mcp/src/markitdown_mcp/__init__.py | 5 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 10 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 10 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 11 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 12 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 12 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 16 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 17 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 18 | CODE | |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 19 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 79 | except Exception: | CODE |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 268 | except Exception: | CODE |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 630 | except Exception: | CODE |
| LOW | …rkitdown/src/markitdown/converters/_image_converter.py | 112 | except Exception as e: | CODE |
| LOW | …s/markitdown/src/markitdown/converters/_llm_caption.py | 24 | except Exception as e: | CODE |
| LOW | …wn/src/markitdown/converters/_outlook_msg_converter.py | 66 | except Exception as e: | CODE |
| LOW | …wn/src/markitdown/converters/_outlook_msg_converter.py | 147 | except Exception: | CODE |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 576 | except Exception: | CODE |
| LOW | …/markitdown/src/markitdown/converters/_cu_converter.py | 421 | except Exception as exc: | CODE |
| LOW | …itdown/src/markitdown/converters/_youtube_converter.py | 114 | except Exception as e: | CODE |
| MEDIUM | …itdown/src/markitdown/converters/_youtube_converter.py | 115 | print(f"Error extracting description: {e}") | CODE |
| LOW | …itdown/src/markitdown/converters/_youtube_converter.py | 176 | except Exception as e: | CODE |
| MEDIUM | …itdown/src/markitdown/converters/_youtube_converter.py | 179 | print(f"Error fetching transcript: {e}") | CODE |
| LOW | …itdown/src/markitdown/converters/_youtube_converter.py | 232 | except Exception as e: | CODE |
| LOW | …rkitdown/src/markitdown/converters/_ipynb_converter.py | 93 | except Exception as e: | CODE |
| LOW⚡ | …arkitdown/src/markitdown/converters/_pptx_converter.py | 127 | except Exception: | CODE |
| LOW⚡ | …arkitdown/src/markitdown/converters/_pptx_converter.py | 134 | except Exception: | CODE |
| LOW | …arkitdown/src/markitdown/converters/_pptx_converter.py | 262 | except Exception: | CODE |
| MEDIUM | …arkitdown/src/markitdown/converters/_pptx_converter.py | 235 | def _convert_chart_to_markdown(self, chart): | CODE |
| LOW | …own/src/markitdown/converter_utils/docx/pre_process.py | 150 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 83 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 120 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 123 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 297 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 302 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 332 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 380 | except Exception as e: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 386 | except Exception: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 413 | except Exception as e: | CODE |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 419 | except Exception: | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_xlsx_converter_with_ocr.py | 134 | except Exception: | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_xlsx_converter_with_ocr.py | 208 | except Exception: | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_xlsx_converter_with_ocr.py | 211 | except Exception: | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_pptx_converter_with_ocr.py | 121 | except Exception: | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_pptx_converter_with_ocr.py | 132 | except Exception: | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_pptx_converter_with_ocr.py | 248 | except Exception: | CODE |
| MEDIUM | …own-ocr/src/markitdown_ocr/_pptx_converter_with_ocr.py | 222 | def _convert_chart_to_markdown(self, chart): | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_docx_converter_with_ocr.py | 152 | except Exception: | CODE |
| LOW | …own-ocr/src/markitdown_ocr/_docx_converter_with_ocr.py | 155 | except Exception: | CODE |
| LOW | …ages/markitdown-ocr/src/markitdown_ocr/_ocr_service.py | 78 | except Exception: | CODE |
| LOW | …ages/markitdown-ocr/src/markitdown_ocr/_ocr_service.py | 107 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 115 | CODE | |
| LOW | packages/markitdown/src/markitdown/_exceptions.py | 58 | CODE | |
| LOW | packages/markitdown/src/markitdown/__main__.py | 14 | CODE | |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 141 | CODE | |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 275 | CODE | |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 489 | CODE | |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 561 | CODE | |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 696 | CODE | |
| LOW | …down/src/markitdown/converters/_doc_intel_converter.py | 71 | CODE | |
| LOW | …down/src/markitdown/converters/_doc_intel_converter.py | 104 | CODE | |
| LOW | …wn/src/markitdown/converters/_outlook_msg_converter.py | 127 | CODE | |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 120 | CODE | |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 398 | CODE | |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 520 | CODE | |
| LOW | …/markitdown/src/markitdown/converters/_cu_converter.py | 251 | CODE | |
| LOW | …itdown/src/markitdown/converters/_youtube_converter.py | 70 | CODE | |
| LOW | …itdown/src/markitdown/converters/_youtube_converter.py | 211 | CODE | |
| LOW | …down/src/markitdown/converters/_bing_serp_converter.py | 57 | CODE | |
| LOW | …rkitdown/src/markitdown/converters/_ipynb_converter.py | 57 | CODE | |
| LOW | …arkitdown/src/markitdown/converters/_epub_converter.py | 53 | CODE | |
| LOW | …arkitdown/src/markitdown/converters/_pptx_converter.py | 61 | CODE | |
| LOW | …markitdown/src/markitdown/converters/_zip_converter.py | 87 | CODE | |
| LOW | …own/src/markitdown/converter_utils/docx/pre_process.py | 118 | CODE | |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 28 | CODE | |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 158 | CODE | |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 340 | CODE | |
| LOW | …own-ocr/src/markitdown_ocr/_xlsx_converter_with_ocr.py | 149 | CODE | |
| LOW | …own-ocr/src/markitdown_ocr/_pptx_converter_with_ocr.py | 54 | CODE | |
| LOW | …own-ocr/src/markitdown_ocr/_pptx_converter_with_ocr.py | 87 | CODE | |
| LOW | …own-ocr/src/markitdown_ocr/_docx_converter_with_ocr.py | 126 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ckages/markitdown/tests/test_files/test_wikipedia.html | 936 | </p><p>In 1990, Microsoft introduced the <a href="/wiki/Microsoft_Office" title="Microsoft Office">Microsoft Office</a> | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM | packages/markitdown/tests/test_files/test_serp.html | 17 | var logJSText=function(n,t){t===void 0&&(t=null);(new Image).src=_G.lsUrl+'&Type=Event.ClientInst&DATA=[{"T":"CI.ClientI | CODE |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 790 | # There were no other guesses, so just add the base guess | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …-sample-plugin/src/markitdown_sample_plugin/_plugin.py | 63 | # Read the file stream into an str using hte provided charset encoding, or using the system default | COMMENT |
| LOW | …-sample-plugin/src/markitdown_sample_plugin/_plugin.py | 67 | # Return the result | COMMENT |
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 56 | # Check if line contains ONLY a partial numbering (with possible whitespace/pipes) | COMMENT |
| LOW | packages/markitdown/tests/test_pdf_masterformat.py | 139 | # Check if next non-empty line exists and wasn't merged | COMMENT |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 392 | # Check if we have a seekable stream. If not, load the entire stream into memory. | COMMENT |
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 614 | # Check if the converter will accept the file, and if so, try to convert it | COMMENT |
| LOW | …rkitdown/src/markitdown/converters/_audio_converter.py | 100 | # Return the result | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 37 | # Check if this line is ONLY a partial numbering | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 296 | # Check if enough rows are table rows (at least 20%) | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 328 | # Check if this row starts a table region | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 383 | # Check if we're inside a table region (not at start) | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 448 | # Assign words to columns | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 477 | # Check if cells contain short, structured data (not long text) | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_pdf_converter.py | 539 | # Read file stream into BytesIO for compatibility with pdfplumber | COMMENT |
| LOW | …markitdown/src/markitdown/converters/_csv_converter.py | 44 | # Read the file content | COMMENT |
| LOW | …down-ocr/src/markitdown_ocr/_pdf_converter_with_ocr.py | 94 | # Check if dimensions are valid | COMMENT |
| LOW | …own-ocr/src/markitdown_ocr/_xlsx_converter_with_ocr.py | 165 | # Check if sheet has images | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/markitdown/tests/test_module_misc.py | 18 | # This file contains module tests that are not directly tested by the FileTestVectors. | COMMENT |
| MEDIUM | packages/markitdown/tests/test_cli_misc.py | 5 | # This file contains CLI tests that are not directly tested by the FileTestVectors. | COMMENT |
| MEDIUM | packages/markitdown/src/markitdown/_markitdown.py | 530 | # Create an initial guess from all this information | COMMENT |
| MEDIUM | packages/markitdown/src/markitdown/_markitdown.py | 569 | # Create a copy of the page_converters list, sorted by priority. | COMMENT |
| MEDIUM | …own/src/markitdown/converter_utils/docx/pre_process.py | 85 | # Create a new paragraph tag | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| HIGH⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/markitdown/src/markitdown/_base_converter.py | 51 | Return a quick determination on if the converter should attempt converting the document. This is primar | STRING |
| HIGH | packages/markitdown/src/markitdown/_base_converter.py | 90 | Convert a document to Markdown text. Parameters: - file_stream: The file-like object to conver | STRING |
| HIGH | …/markitdown/src/markitdown/converters/_cu_converter.py | 397 | Resolve analyzer modality from cache or via get_analyzer() fallback. For known prebuilt-* names, returns the modali | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | …arkitdown/src/markitdown/converters/_pptx_converter.py | 133 | alt_text = shape._element._nvXxPr.cNvPr.attrib.get("descr", "") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM⚡ | packages/markitdown/tests/test_files/test_rss.xml | 1 | <rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://purl.org/rss/ | CODE |
| MEDIUM | packages/markitdown/tests/test_files/test_blog.html | 20 | <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .devcontainer/devcontainer.json | 21 | // Use 'forwardPorts' to make a list of ports inside the container available locally. | COMMENT |
| LOW | packages/markitdown-sample-plugin/tests/__init__.py | 1 | # SPDX-FileCopyrightText: 2024-present Adam Fourney <adamfo@microsoft.com> | COMMENT |
| LOW | …ample-plugin/src/markitdown_sample_plugin/__about__.py | 1 | # SPDX-FileCopyrightText: 2024-present Adam Fourney <adamfo@microsoft.com> | COMMENT |
| LOW | packages/markitdown/tests/__init__.py | 1 | # SPDX-FileCopyrightText: 2024-present Adam Fourney <adamfo@microsoft.com> | COMMENT |
| LOW | packages/markitdown/src/markitdown/__about__.py | 1 | # SPDX-FileCopyrightText: 2024-present Adam Fourney <adamfo@microsoft.com> | COMMENT |
| LOW | packages/markitdown-mcp/tests/__init__.py | 1 | # SPDX-FileCopyrightText: 2024-present Adam Fourney <adamfo@microsoft.com> | COMMENT |
| LOW | packages/markitdown-mcp/src/markitdown_mcp/__about__.py | 1 | # SPDX-FileCopyrightText: 2024-present Adam Fourney <adamfo@microsoft.com> | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sample-plugin/src/markitdown_sample_plugin/__init__.py | 8 | __all__ = [ | CODE |
| LOW | packages/markitdown/src/markitdown/__init__.py | 21 | __all__ = [ | CODE |
| LOW | …kages/markitdown/src/markitdown/converters/__init__.py | 31 | __all__ = [ | CODE |
| LOW | packages/markitdown-mcp/src/markitdown_mcp/__init__.py | 7 | __all__ = [ | CODE |
| LOW | packages/markitdown-ocr/src/markitdown_ocr/__init__.py | 21 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/markitdown/src/markitdown/_markitdown.py | 710 | "placeholder" + base_guess.extension, strict=False | CODE |