AI Slop Code RIsk Monitor

denizsafak/abogen

Generate audiobooks from EPUBs, PDFs and text with synchronized captions.

39.6 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for denizsafak/abogen, a Python project with 6,107 GitHub stars. SynthScan examined 86,432 lines of code across 309 source files, recording 2320 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 39.6 (High 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.

39.6
Adjusted Signal
39.6
Raw Pattern Score
100%
Time Factor
2026-09-07
Last Push
6.1K
Stars
Python
Language
86.4K
Lines of Code
309
Files
2.3K
Pattern Hits
2026-10-12
Scan Date
0.38
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 55.5/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 18.6/100 · LOW

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

Agent Over-Engineering Ratio 80.4/100 · CRITICAL

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

PR Review Velocity Impact 86.3/100 · CRITICAL

Which changes need focused human review? 2320 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 116MEDIUM 268LOW 1936

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 2320 distinct pattern matches across 18 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.

Hyper-Verbose Identifiers1058 hits · 1140 pts
SeverityFileLineSnippetContext
LOWplugins/supertonic/__init__.py35def _load_supertonic_pipeline(language: Any = None) -> Any:CODE
LOWplugins/supertonic/pipeline.py83def _parse_unsupported_characters(error: BaseException) -> list[str]:CODE
LOWplugins/supertonic/pipeline.py114def _remove_unsupported_characters(text: str, unsupported: Iterable[str]) -> str:CODE
LOWplugins/supertonic/pipeline.py123def _configure_supertonic_gpu() -> None:CODE
LOWtests/test_voice_utils.py16 def test_empty_returns_fallback(self):CODE
LOWtests/test_voice_utils.py19 def test_supertonic_uppercase(self):CODE
LOWtests/test_voice_utils.py39 def test_formula_uses_fallback(self):CODE
LOWtests/test_voice_utils.py42 def test_both_empty_uses_default(self):CODE
LOWtests/test_epub_heuristic_nav.py31 def test_heuristic_nav_discovery(self):CODE
LOWtests/test_opds_import_metadata_mapping.py6def test_opds_metadata_overrides_maps_author_and_subtitle() -> None:CODE
LOWtests/test_opds_import_metadata_mapping.py29def test_opds_metadata_overrides_accepts_author_string() -> None:CODE
LOW⚡tests/test_kokoro_plugin.py108 def test_plugin_loads_successfully(self, kokoro_plugin_dir: Path) -> None:CODE
LOW⚡tests/test_kokoro_plugin.py114 def test_plugin_has_valid_manifest(self, kokoro_plugin_dir: Path) -> None:CODE
LOW⚡tests/test_kokoro_plugin.py123 def test_plugin_has_model_requirements(self, kokoro_plugin_dir: Path) -> None:CODE
LOW⚡tests/test_kokoro_plugin.py129 def test_plugin_manifest_capabilities(self, kokoro_plugin_dir: Path) -> None:CODE
LOW⚡tests/test_kokoro_plugin.py134 def test_plugin_manifest_engine(self, kokoro_plugin_dir: Path) -> None:CODE
LOW⚡tests/test_kokoro_plugin.py158 def test_engine_satisfies_protocol(self, kokoro_plugin_dir: Path, host_context: HostContext) -> None:CODE
LOWtests/test_kokoro_plugin.py222 def test_language_for_code_fallbacks(self) -> None:CODE
LOWtests/test_kokoro_plugin.py229 def test_language_for_voice_id(self) -> None:CODE
LOW⚡tests/test_pronunciation.py34 def test_skips_entries_without_pronunciation(self):CODE
LOW⚡tests/test_pronunciation.py40 def test_skips_entries_without_token(self):CODE
LOW⚡tests/test_pronunciation.py46 def test_deduplication_by_casefold(self):CODE
LOW⚡tests/test_pronunciation.py56 def test_longer_token_sorted_first(self):CODE
LOW⚡tests/test_pronunciation.py67 def test_normalized_fallback_to_entity_token(self):CODE
LOW⚡tests/test_pronunciation.py74 def test_pattern_is_case_insensitive(self):CODE
LOW⚡tests/test_pronunciation.py82 def test_non_mapping_items_skipped(self):CODE
LOW⚡tests/test_pronunciation.py115 def test_skips_without_sentence(self):CODE
LOW⚡tests/test_pronunciation.py121 def test_skips_without_choice(self):CODE
LOW⚡tests/test_pronunciation.py127 def test_skips_when_no_matching_option(self):CODE
LOW⚡tests/test_pronunciation.py189 def test_possessive_preserved(self):CODE
LOW⚡tests/test_pronunciation.py196 def test_usage_counter_increments(self):CODE
LOW⚡tests/test_pronunciation.py204 def test_case_insensitive_match(self):CODE
LOWtests/test_pronunciation.py150 def test_longer_sentence_sorted_first(self):CODE
LOWtests/test_pronunciation.py243 def test_no_match_left_unchanged(self):CODE
LOWtests/test_pronunciation.py277 def test_pronunciation_overrides_included(self):CODE
LOWtests/test_pronunciation.py293 def test_manual_overrides_win(self):CODE
LOWtests/test_pronunciation.py311 def test_speaker_entries_included(self):CODE
LOWtests/test_chunk_utils.py37 def test_none_returns_default(self):CODE
LOWtests/test_chunk_utils.py42 def test_garbage_returns_default(self):CODE
LOW⚡tests/test_chunk_utils.py61 def test_non_mapping_returns_empty(self):CODE
LOW⚡tests/test_chunk_utils.py71 def test_empty_dict_returns_empty(self):CODE
LOW⚡tests/test_chunk_utils.py76 def test_whitespace_only_returns_empty(self):CODE
LOWtests/test_chunk_utils.py110 def test_fallback_token_from_normalized(self):CODE
LOWtests/test_chunk_utils.py118 def test_handles_exception_gracefully(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py28 def test_basic_override_by_index(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py38 def test_override_by_source_title(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py46 def test_disabled_override_skipped(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py54 def test_metadata_updates_collected(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py62 def test_no_matching_chapter_diagnostic(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py70 def test_non_dict_override_skipped(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py76 def test_text_from_base_when_not_provided(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py84 def test_default_title_when_no_base(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py123 def test_none_value_deletes_key(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py129 def test_none_values_in_extracted_skipped(self):CODE
LOW⚡tests/test_chapter_merge_normalize.py135 def test_numeric_values_stringified(self):CODE
LOW⚡tests/test_voice_formulas_pairs.py23 def test_all_zero_returns_none(self):CODE
LOW⚡tests/test_voice_formulas_pairs.py31 def test_none_values_filtered(self):CODE
LOW⚡tests/test_voice_formulas_pairs.py35 def test_weight_normalization(self):CODE
LOWtests/test_epub_content_slicing.py31 def test_single_file_multiple_chapters(self):CODE
LOWtests/test_chunk_text_for_tts_prefers_raw.py4def test_chunk_text_for_tts_prefers_text_over_normalized_text():CODE
998 more matches not shown…
Decorative Section Separators225 hits · 794 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_kokoro_plugin.py102# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_kokoro_plugin.py104# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_kokoro_plugin.py143# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_kokoro_plugin.py145# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_kokoro_plugin.py166# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_kokoro_plugin.py168# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_kokoro_plugin.py178# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_kokoro_plugin.py180# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py34# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py36# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py73# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py75# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py201# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py203# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_pronunciation.py9# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_pronunciation.py13# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py14# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py16# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chunk_utils.py53# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chunk_utils.py55# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chunk_utils.py82# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chunk_utils.py84# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py12# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py14# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chapter_merge_normalize.py92# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chapter_merge_normalize.py94# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chapter_merge_normalize.py142# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_chapter_merge_normalize.py144# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_output_paths.py146# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_output_paths.py148# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py16# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py18# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py52# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py54# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py76# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py78# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py91# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py93# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py113# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py115# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py222# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py224# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_domain_speaker_metadata.py86# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_domain_speaker_metadata.py88# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_domain_speaker_metadata.py263# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_domain_speaker_metadata.py265# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py15# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py17# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py212# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py214# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py471# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py473# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py116# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py118# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py157# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py159# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py180# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py182# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py192# ──────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/test_supertonic_plugin.py194# ──────────────────────────────────────────────────────────────COMMENT
165 more matches not shown…
Empty Error Handlers104 hits · 520 pts
SeverityFileLineSnippetContext
HIGHplugins/supertonic/pipeline.py269except Exception:CODE
HIGHtests/conftest.py29except Exception:CODE
HIGHtests/conftest.py36except Exception:CODE
HIGHtests/conftest.py14except Exception:CODE
HIGHtests/test_preview_applies_manual_overrides.py55except Exception:CODE
HIGHtests/test_domain_normalization_pipeline.py280except ImportError:CODE
HIGHtests/__init__.py25except Exception:CODE
HIGHtests/test_domain_audio_sink.py17except AttributeError:CODE
HIGHtests/test_domain_audio_sink.py116except Exception:CODE
HIGHabogen/spacy_utils.py146except Exception:CODE
HIGHabogen/pronunciation_store.py85except Exception:CODE
HIGHabogen/predownload_gui.py192except Exception:CODE
HIGHabogen/predownload_gui.py562except Exception:CODE
HIGHabogen/shutdown.py62except Exception:CODE
HIGHabogen/shutdown.py71except Exception:CODE
HIGHabogen/shutdown.py95except Exception:CODE
HIGHabogen/shutdown.py104except Exception:CODE
HIGHabogen/shutdown.py143except Exception:CODE
HIGHabogen/shutdown.py44except Exception:CODE
HIGHabogen/shutdown.py127except Exception:CODE
HIGHabogen/shutdown.py87except Exception:CODE
HIGHabogen/shutdown.py93except Exception:CODE
HIGHabogen/utils.py202except (ImportError, FileNotFoundError):CODE
HIGHabogen/utils.py222except Exception:CODE
HIGHabogen/utils.py546except Exception:CODE
HIGHabogen/utils.py257except OSError:CODE
HIGHabogen/utils.py264except OSError:CODE
HIGHabogen/utils.py632except Exception:CODE
HIGHabogen/utils.py524except Exception:CODE
HIGHabogen/voice_cache.py142except LocalEntryNotFoundError:CODE
HIGHabogen/check_cuda.py20except Exception:CODE
HIGHabogen/kokoro_text_normalization.py214except Exception:CODE
HIGHabogen/kokoro_text_normalization.py1992except ValueError:CODE
HIGHabogen/book_parser.py911except ValueError:CODE
HIGHabogen/book_parser.py898except ValueError:CODE
HIGHabogen/tts_plugin/utils.py216except Exception:CODE
HIGHabogen/tts_plugin/plugin_manager.py134except Exception:CODE
HIGHabogen/integrations/calibre_opds.py282except CalibreOPDSError:CODE
HIGHabogen/integrations/calibre_opds.py269except CalibreOPDSError:CODE
HIGHabogen/integrations/calibre_opds.py345except CalibreOPDSError:CODE
HIGHabogen/integrations/calibre_opds.py1277except CalibreOPDSError:CODE
HIGHabogen/integrations/calibre_opds.py311except CalibreOPDSError:CODE
HIGHabogen/integrations/calibre_opds.py1201except ValueError:CODE
HIGHabogen/integrations/calibre_opds.py299except CalibreOPDSError:CODE
HIGHabogen/webui/service.py837except Exception:CODE
HIGHabogen/webui/service.py60except Exception:CODE
HIGHabogen/webui/service.py870except Exception:CODE
HIGHabogen/webui/debug_tts_runner.py161except Exception:CODE
HIGHabogen/webui/debug_tts_runner.py249except Exception:CODE
HIGHabogen/webui/debug_tts_runner.py170except Exception:CODE
HIGHabogen/webui/debug_tts_runner.py159except (ValueError, AttributeError):CODE
HIGHabogen/webui/routes/main.py187except OSError:CODE
HIGHabogen/webui/routes/main.py248except OSError:CODE
HIGHabogen/webui/routes/utils/synthesize.py33except Exception:CODE
HIGHabogen/webui/routes/utils/form.py382except ValueError:CODE
HIGHabogen/webui/routes/utils/form.py464except ValueError:CODE
HIGHabogen/webui/routes/utils/form.py523except (ValueError, AttributeError):CODE
HIGHabogen/webui/services/settings_service.py42except (TypeError, ValueError):CODE
HIGHabogen/webui/services/settings_service.py46except (TypeError, ValueError):CODE
HIGHabogen/webui/services/settings_service.py62except ValueError:CODE
44 more matches not shown…
Unused Imports396 hits · 344 pts
SeverityFileLineSnippetContext
LOWbuild_pypi.py38CODE
LOWplugins/supertonic/__init__.py13CODE
LOWplugins/supertonic/engine.py7CODE
LOWplugins/supertonic/engine.py16CODE
LOWplugins/supertonic/engine.py17CODE
LOWplugins/supertonic/engine.py17CODE
LOWplugins/supertonic/pipeline.py8CODE
LOWplugins/kokoro/__init__.py13CODE
LOWplugins/kokoro/engine.py11CODE
LOWplugins/kokoro/engine.py19CODE
LOWplugins/kokoro/engine.py20CODE
LOWplugins/kokoro/engine.py20CODE
LOWtests/test_opds_import_metadata_mapping.py1CODE
LOWtests/test_kokoro_plugin.py11CODE
LOWtests/test_kokoro_plugin.py19CODE
LOWtests/test_kokoro_plugin.py23CODE
LOWtests/test_kokoro_plugin.py23CODE
LOWtests/test_kokoro_plugin.py23CODE
LOWtests/test_kokoro_plugin.py23CODE
LOWtests/test_kokoro_plugin.py40CODE
LOWtests/test_pronunciation.py3CODE
LOWtests/test_pronunciation.py5CODE
LOWtests/test_pronunciation.py6CODE
LOWtests/test_chunk_utils.py6CODE
LOWtests/test_chunk_utils.py11CODE
LOWtests/test_chapter_merge_normalize.py6CODE
LOWtests/test_chapter_merge_normalize.py8CODE
LOWtests/test_regression_webui_domain.py7CODE
LOWtests/test_output_paths.py6CODE
LOWtests/test_output_paths.py9CODE
LOWtests/test_output_paths.py11CODE
LOWtests/test_output_paths.py13CODE
LOWtests/test_domain_metadata_overrides.py3CODE
LOWtests/test_subtitle_generation.py3CODE
LOWtests/test_domain_normalization_pipeline.py5CODE
LOWtests/test_domain_normalization_pipeline.py6CODE
LOWtests/test_domain_pipeline_factory.py1CODE
LOWtests/test_service.py1CODE
LOWtests/test_domain_speaker_metadata.py7CODE
LOWtests/test_domain_speaker_metadata.py9CODE
LOWtests/test_domain_speaker_metadata.py9CODE
LOWtests/test_domain_speaker_metadata.py12CODE
LOWtests/test_domain_conversion_pipeline.py4CODE
LOWtests/test_domain_conversion_pipeline.py4CODE
LOWtests/test_domain_conversion_pipeline.py5CODE
LOWtests/test_domain_conversion_pipeline.py8CODE
LOWtests/test_domain_audio_buffer_extras.py4CODE
LOWtests/test_settings_integrations_secrets.py1CODE
LOWtests/test_settings_integrations_secrets.py3CODE
LOWtests/test_supertonic_plugin.py11CODE
LOWtests/test_supertonic_plugin.py19CODE
LOWtests/test_supertonic_plugin.py40CODE
LOWtests/test_split_pattern.py6CODE
LOWtests/test_audio_buffer.py4CODE
LOWtests/test_ffmetadata.py1CODE
LOWtests/test_epub_ncx_parsing.py10CODE
LOWtests/test_metadata_helpers_abs.py2CODE
LOWtests/test_metadata_helpers_abs.py125CODE
LOWtests/test_audiobookshelf_client.py1CODE
LOWtests/test_audio_helpers.py6CODE
336 more matches not shown…
Excessive Try-Catch Wrapping298 hits · 310 pts
SeverityFileLineSnippetContext
LOWbuild_pypi.py26 except Exception:CODE
LOWplugins/supertonic/__init__.py135 except Exception as e:CODE
LOWplugins/supertonic/engine.py158 except Exception as e:CODE
LOWplugins/supertonic/pipeline.py95 except Exception:CODE
LOWplugins/supertonic/pipeline.py141 except Exception as exc:CODE
LOWplugins/supertonic/pipeline.py182 except Exception as exc: # pragma: no coverCODE
LOWplugins/supertonic/pipeline.py269 except Exception:CODE
LOWplugins/kokoro/__init__.py185 except Exception as e:CODE
LOWplugins/kokoro/engine.py176 except Exception as e:CODE
LOWtests/conftest.py14 except Exception:CODE
LOWtests/conftest.py29 except Exception:CODE
LOWtests/conftest.py36 except Exception:CODE
LOWtests/test_preview_applies_manual_overrides.py55 except Exception:CODE
LOWtests/__init__.py25 except Exception:CODE
LOW⚡tests/test_domain_audio_sink.py116 except Exception:CODE
LOWtests/test_epub_missing_file_error_handling.py97 except Exception as e:CODE
LOWabogen/spacy_utils.py54 except Exception:CODE
LOWabogen/spacy_utils.py113 except Exception as e:CODE
LOWabogen/spacy_utils.py119 except Exception as e:CODE
LOWabogen/spacy_utils.py146 except Exception:CODE
LOWabogen/is_nvidia.py7 except Exception:CODE
MEDIUMabogen/is_nvidia.py4def check():CODE
LOWabogen/pronunciation_store.py85 except Exception:CODE
MEDIUMabogen/pronunciation_store.py19def _store_path() -> Path:CODE
LOWabogen/voice_profiles.py29 except Exception:CODE
MEDIUMabogen/predownload_gui.py476def _check_kokoro_model(self) -> bool:CODE
MEDIUMabogen/predownload_gui.py489def _check_kokoro_config(self) -> bool:CODE
LOWabogen/predownload_gui.py40 except Exception:CODE
LOWabogen/predownload_gui.py100 except Exception as exc: # pragma: no cover - best-effort reportingCODE
LOWabogen/predownload_gui.py111 except Exception:CODE
LOWabogen/predownload_gui.py137 except Exception as exc:CODE
LOWabogen/predownload_gui.py148 except Exception:CODE
LOWabogen/predownload_gui.py168 except Exception as exc:CODE
LOWabogen/predownload_gui.py192 except Exception:CODE
LOWabogen/predownload_gui.py198 except Exception:CODE
LOWabogen/predownload_gui.py224 except Exception as exc:CODE
LOWabogen/predownload_gui.py471 except Exception:CODE
LOWabogen/predownload_gui.py486 except Exception:CODE
LOWabogen/predownload_gui.py499 except Exception:CODE
LOWabogen/predownload_gui.py562 except Exception:CODE
LOWabogen/word_substitution.py211 except Exception:CODE
MEDIUMabogen/word_substitution.py206def replace_number(match):CODE
MEDIUMabogen/text_extractor.py547def _extract_cover(self) -> Tuple[Optional[bytes], Optional[str]]:CODE
LOW⚡abogen/text_extractor.py457 except Exception as exc:CODE
LOW⚡abogen/text_extractor.py466 except Exception as exc:CODE
LOW⚡abogen/text_extractor.py473 except Exception as exc:CODE
LOW⚡abogen/text_extractor.py480 except Exception as exc:CODE
LOW⚡abogen/text_extractor.py491 except Exception as exc:CODE
LOW⚡abogen/text_extractor.py498 except Exception as exc:CODE
LOW⚡abogen/text_extractor.py506 except Exception as exc:CODE
LOWabogen/text_extractor.py417 except Exception as exc:CODE
LOWabogen/text_extractor.py554 except Exception as exc:CODE
LOWabogen/text_extractor.py569 except Exception as exc:CODE
LOWabogen/text_extractor.py637 except Exception as exc:CODE
LOWabogen/text_extractor.py711 except Exception:CODE
LOWabogen/text_extractor.py762 except Exception as exc:CODE
LOWabogen/text_extractor.py899 except Exception:CODE
LOW⚡abogen/shutdown.py62 except Exception:CODE
LOW⚡abogen/shutdown.py71 except Exception:CODE
LOW⚡abogen/shutdown.py79 except Exception:CODE
238 more matches not shown…
Deep Nesting109 hits · 86 pts
SeverityFileLineSnippetContext
LOWplugins/supertonic/pipeline.py44CODE
LOWplugins/supertonic/pipeline.py189CODE
LOWtests/test_epub_heuristic_nav.py31CODE
LOWtests/test_epub_content_slicing.py31CODE
LOWtests/test_epub_content_slicing.py118CODE
LOWtests/test_domain_normalization_pipeline.py268CODE
LOWtests/test_epub_standard_nav.py32CODE
LOWtests/test_epub_html_nav_parsing.py29CODE
LOWtests/test_epub_missing_file_error_handling.py36CODE
LOWtests/plugins/conftest.py23CODE
LOWabogen/voice_profiles.py16CODE
LOWabogen/predownload_gui.py521CODE
LOWabogen/text_extractor.py574CODE
LOWabogen/text_extractor.py655CODE
LOWabogen/subtitle_utils.py121CODE
LOWabogen/subtitle_utils.py229CODE
LOWabogen/subtitle_utils.py299CODE
LOWabogen/speaker_analysis.py479CODE
LOWabogen/heteronym_overrides.py213CODE
LOWabogen/utils.py126CODE
LOWabogen/utils.py445CODE
LOWabogen/utils.py585CODE
LOWabogen/utils.py621CODE
LOWabogen/llm_client.py129CODE
LOWabogen/check_cuda.py7CODE
LOWabogen/entity_analysis.py204CODE
LOWabogen/kokoro_text_normalization.py981CODE
LOWabogen/kokoro_text_normalization.py1666CODE
LOWabogen/kokoro_text_normalization.py1871CODE
LOWabogen/book_parser.py697CODE
LOWabogen/book_parser.py781CODE
LOWabogen/book_parser.py984CODE
LOWabogen/book_parser.py1035CODE
LOWabogen/tts_plugin/utils.py84CODE
LOWabogen/tts_plugin/loader.py112CODE
LOWabogen/tts_plugin/plugin_manager.py34CODE
LOWabogen/epub3/exporter.py81CODE
LOWabogen/integrations/calibre_opds.py221CODE
LOWabogen/integrations/calibre_opds.py243CODE
LOWabogen/integrations/calibre_opds.py274CODE
LOWabogen/integrations/calibre_opds.py377CODE
LOWabogen/integrations/calibre_opds.py612CODE
LOWabogen/integrations/calibre_opds.py1249CODE
LOWabogen/integrations/calibre_opds.py1375CODE
LOWabogen/integrations/audiobookshelf.py127CODE
LOWabogen/integrations/audiobookshelf.py208CODE
LOWabogen/integrations/audiobookshelf.py386CODE
LOWabogen/webui/service.py704CODE
LOWabogen/webui/routes/voices.py84CODE
LOWabogen/webui/routes/api.py247CODE
LOWabogen/webui/routes/main.py266CODE
LOWabogen/webui/routes/utils/form.py76CODE
LOWabogen/webui/routes/utils/form.py592CODE
LOWabogen/webui/routes/utils/form.py839CODE
LOWabogen/webui/routes/utils/settings.py68CODE
LOWabogen/webui/routes/utils/epub.py106CODE
LOWabogen/webui/routes/utils/epub.py206CODE
LOWabogen/application/conversion_planner.py87CODE
LOWabogen/application/conversion_planner.py164CODE
LOWabogen/application/conversion_executor.py147CODE
49 more matches not shown…
Docstring Block Structure12 hits · 60 pts
SeverityFileLineSnippetContext
HIGHplugins/supertonic/__init__.py115Create a SuperTonic engine instance. This function is the plugin entry point. It must be atomic: succeed fully STRING
HIGHplugins/kokoro/__init__.py150Create a Kokoro engine instance. This function is the plugin entry point. It must be atomic: succeed fully or rSTRING
HIGHtests/plugins/conftest.py84Load a plugin and return its load result. This fixture loads the plugin using the loader, providing access to: STRING
HIGHabogen/tts_plugin/engine.py31Synthesize audio from text. Args: request: The synthesis request containing text, voice, parametersSTRING
HIGHabogen/tts_plugin/capabilities.py23List available voices for a given source. Args: sourceId: The voice source identifier. RetSTRING
HIGHabogen/tts_plugin/capabilities.py45Generate a preview audio for a voice. Args: voice: Voice selection for the preview. texSTRING
HIGHabogen/tts_plugin/capabilities.py69Synthesize audio in streaming mode. Args: request: The synthesis request. Yields: STRING
HIGHabogen/tts_plugin/plugin.py39Create an engine instance. This is the factory function that creates an Engine from a plugin. It must bSTRING
HIGHabogen/tts_plugin/plugin_manager.py88Create an engine instance for the given plugin. Args: plugin_id: The plugin identifier (e.g., "kokoSTRING
HIGHabogen/application/conversion_service.py35Execute a conversion request and return the result. This is the single entry point for both UIs. It orchestrates: STRING
HIGHabogen/application/conversion_planner.py31Build a complete conversion plan from a request. This is the single entry point that both UIs will call. It hanSTRING
HIGHabogen/application/conversion_executor.py156Execute a conversion plan and return the result. Args: plan: The conversion plan from build_conversion_planSTRING
Modern Structural Boilerplate40 hits · 43 pts
SeverityFileLineSnippetContext
LOWplugins/supertonic/engine.py28logger = logging.getLogger(__name__)CODE
LOWplugins/supertonic/pipeline.py17logger = logging.getLogger(__name__)CODE
LOWplugins/kokoro/engine.py32logger = logging.getLogger(__name__)CODE
LOW⚡abogen/predownload_gui.py425 def _update_model_status(self, ok: bool) -> None:CODE
LOW⚡abogen/predownload_gui.py432 def _update_config_status(self, ok: bool) -> None:CODE
LOW⚡abogen/predownload_gui.py439 def _update_spacy_status(self, ok: bool, missing: List[str]) -> None:CODE
LOWabogen/predownload_gui.py266 def _setup_ui(self) -> None:CODE
LOWabogen/predownload_gui.py413 def _update_voices_status(self, ok: bool, missing: List[str]) -> None:CODE
LOWabogen/predownload_gui.py452 def _set_status(self, key: str, text: str, color: str) -> None:CODE
LOWabogen/voice_formula_gui.py11__all__ = ["VoiceFormulaDialog"]CODE
LOWabogen/text_extractor.py22logger = logging.getLogger(__name__)CODE
LOWabogen/shutdown.py162__all__ = ["register_shutdown", "install_qt_hook", "request_shutdown", "register_cleanup"]CODE
LOWabogen/queue_manager_gui.py11__all__ = ["QueueManager"]CODE
LOWabogen/utils.py19logger = logging.getLogger(__name__)CODE
LOWabogen/gui.py11__all__ = ["abogen"]CODE
LOWabogen/kokoro_text_normalization.py24logger = logging.getLogger(__name__)CODE
LOWabogen/spacy_contraction_resolver.py17logger = logging.getLogger(__name__)CODE
LOWabogen/tts_plugin/__init__.py121__all__ = [CODE
LOWabogen/epub3/__init__.py3__all__ = ["EPUB3PackageBuilder", "build_epub3_package"]CODE
LOWabogen/integrations/audiobookshelf.py15logger = logging.getLogger(__name__)CODE
LOWabogen/webui/service.py740 def _update_queue_positions_locked(self) -> None:CODE
LOWabogen/webui/__init__.py1__all__ = ["create_app"]CODE
LOWabogen/webui/routes/__init__.py9__all__ = [CODE
LOWabogen/webui/routes/jobs.py31logger = logging.getLogger(__name__)CODE
LOWabogen/webui/routes/main.py27logger = logging.getLogger(__name__)CODE
LOWabogen/application/integration_hooks.py34logger = logging.getLogger(__name__)CODE
LOWabogen/application/cleanup.py73__all__ = [CODE
LOWabogen/infrastructure/subtitle_writer.py377__all__ = [CODE
LOWabogen/infrastructure/exporters.py23logger = logging.getLogger(__name__)CODE
LOWabogen/infrastructure/exporters.py321__all__ = [CODE
LOWabogen/domain/subtitle_processor.py32logger = logging.getLogger(__name__)CODE
LOWabogen/domain/metadata_extraction.py16logger = logging.getLogger(__name__)CODE
LOWabogen/domain/conversion_pipeline.py22logger = logging.getLogger(__name__)CODE
LOW⚡abogen/pyqt/predownload_gui.py425 def _update_model_status(self, ok: bool) -> None:CODE
LOW⚡abogen/pyqt/predownload_gui.py432 def _update_config_status(self, ok: bool) -> None:CODE
LOW⚡abogen/pyqt/predownload_gui.py439 def _update_spacy_status(self, ok: bool, missing: List[str]) -> None:CODE
LOWabogen/pyqt/predownload_gui.py266 def _setup_ui(self) -> None:CODE
LOWabogen/pyqt/predownload_gui.py413 def _update_voices_status(self, ok: bool, missing: List[str]) -> None:CODE
LOWabogen/pyqt/predownload_gui.py452 def _set_status(self, key: str, text: str, color: str) -> None:CODE
LOWabogen/pyqt/conversion.py54logger = logging.getLogger(__name__)CODE
Self-Referential Comments13 hits · 35 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_epub_content_slicing.py39 # Create a single content file with two sectionsCOMMENT
MEDIUMtests/test_conversion_executor_unified.py80 # Create a fake segment objectCOMMENT
MEDIUMtests/test_epub_html_nav_parsing.py46 # Create the Nav item manually to control the HTML structure exactlyCOMMENT
MEDIUMtests/plugins/test_all_plugins.py170 # Create a minimal request (won't actually synthesize, just test error)COMMENT
MEDIUMtests/plugins/import_error/__init__.py8# The following code will never be reached, but is here for documentationCOMMENT
MEDIUMtests/contracts/test_plugin_manager_contract.py153 # Create a session by callingCOMMENT
MEDIUMabogen/pyqt/voice_formula_gui.py440 # Create main container layout with profile section and mixer sectionSTRING
MEDIUMabogen/pyqt/voice_formula_gui.py1429 # Create the profile with the new nameCOMMENT
MEDIUMabogen/pyqt/conversion.py1440 # Create a unique filename based on voice_id, language, and speedCOMMENT
MEDIUMabogen/pyqt/book_handler.py168 # Create a centered loading overlay and show it while background load runsCOMMENT
MEDIUMabogen/pyqt/gui.py3812 # Create the directory if it doesn't existCOMMENT
MEDIUMabogen/pyqt/gui.py4212 # Create a custom message box with checkboxCOMMENT
MEDIUMabogen/pyqt/gui.py3849 icon = target # Create a more direct PowerShell commandCODE
Redundant / Tautological Comments26 hits · 35 pts
SeverityFileLineSnippetContext
LOWbuild_pypi.py31 # Check if build module is installed, install if notCOMMENT
LOWtests/plugins/test_all_plugins.py195 # Check if listVoices method existsCOMMENT
LOWabogen/pronunciation_store.py43 # Check if table existsCOMMENT
LOWabogen/subtitle_utils.py156 # Check if first line is timestampCOMMENT
LOWabogen/kokoro_text_normalization.py1985 # Check if it really looks like a number (e.g. 1.05)COMMENT
LOWabogen/hf_tracker.py28 if show_warning_signal_emitter: # Check if the emitter is setCODE
LOWabogen/book_parser.py258 # Check if this page STARTS bookmarksCOMMENT
LOWabogen/tts_plugin/loader.py223 # Check if directory existsCOMMENT
LOWabogen/tts_plugin/loader.py300 # Check if any errors occurredCOMMENT
LOWabogen/integrations/calibre_opds.py256 # Check if it has a navigation linkCOMMENT
LOWabogen/integrations/calibre_opds.py327 # Check if the server ignored the query and returned the default feedCOMMENT
LOWabogen/integrations/calibre_opds.py1132 # Check if all tokens match at least one fragmentCOMMENT
LOWabogen/domain/subtitle_generation.py301 # Check if we've hit a sentence boundary or max wordsCOMMENT
LOWabogen/pyqt/conversion.py413 # Check if input is a subtitle file for additional configurationCOMMENT
LOWabogen/pyqt/conversion.py464 # Check if the input is a subtitle file or timestamp text fileCOMMENT
LOWabogen/pyqt/book_handler.py347 # Check if content is already cachedCOMMENT
LOWabogen/pyqt/queue_manager_gui.py547 # Read file content and calculate total_char_count using calculate_text_lengthCOMMENT
LOW⚡abogen/pyqt/gui.py2738 # Check if path is a directory (for multiple chapter files)COMMENT
LOW⚡abogen/pyqt/gui.py2754 # Check if path exists and is a file before openingCOMMENT
LOWabogen/pyqt/gui.py724 # Check if text is empty based on character countCOMMENT
LOWabogen/pyqt/gui.py733 # Check if we need to warn about overwriting a non-temporary fileCOMMENT
LOWabogen/pyqt/gui.py1717 # Check if this is a cache fileCOMMENT
LOWabogen/pyqt/gui.py1727 # Check if this is a cache fileCOMMENT
LOWabogen/pyqt/gui.py1793 # Check if current file is a subtitle fileCOMMENT
LOWabogen/pyqt/gui.py2468 # Check if override was active (this determines which settings were ACTUALLY used)COMMENT
LOWabogen/pyqt/gui.py3283 # Check if this is a timestamp detection (-1) or chapter detectionCOMMENT
Verbosity Indicators7 hits · 14 pts
SeverityFileLineSnippetContext
LOW⚡tests/contracts/test_integration.py124 # Step 1: Consumer gets pluginCOMMENT
LOW⚡tests/contracts/test_integration.py127 # Step 2: Plugin creates engineCOMMENT
LOW⚡tests/contracts/test_integration.py132 # Step 3: Engine creates sessionCOMMENT
LOW⚡tests/contracts/test_integration.py137 # Step 4: Session synthesizesCOMMENT
LOW⚡tests/contracts/test_integration.py146 # Step 5: Result returnedCOMMENT
LOWabogen/book_parser.py212 # Step 1: Build the Skeleton Tree from TOCCOMMENT
LOWabogen/book_parser.py238 # Step 3: Add gap pages.COMMENT
Structural Annotation Overuse7 hits · 14 pts
SeverityFileLineSnippetContext
LOW⚡tests/contracts/test_integration.py124 # Step 1: Consumer gets pluginCOMMENT
LOW⚡tests/contracts/test_integration.py127 # Step 2: Plugin creates engineCOMMENT
LOW⚡tests/contracts/test_integration.py132 # Step 3: Engine creates sessionCOMMENT
LOW⚡tests/contracts/test_integration.py137 # Step 4: Session synthesizesCOMMENT
LOW⚡tests/contracts/test_integration.py146 # Step 5: Result returnedCOMMENT
LOWabogen/book_parser.py212 # Step 1: Build the Skeleton Tree from TOCCOMMENT
LOWabogen/book_parser.py238 # Step 3: Add gap pages.COMMENT
Fake / Example Data10 hits · 11 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_title_builder.py23 result = build_title_intro_text({"title": "My Book", "author": "John Doe"}, "book.epub")CODE
LOWtests/test_title_builder.py49 result = build_outro_text({"author": "John Doe"}, "book.epub")CODE
LOWtests/test_title_builder.py53 result = build_outro_text({"title": "My Book", "author": "John Doe"}, "book.epub")CODE
LOW⚡tests/test_subtitle_scenarios.py397 "text": "Lorem ipsum... Lorem... Lorem...", "whitespace": ""}],CODE
LOW⚡tests/test_subtitle_scenarios.py402 assert [e[2] for e in entries] == ["Lorem ipsum...", "Lorem...", "Lorem..."]CODE
LOWtests/test_subtitle_scenarios.py378 assert [e[2] for e in entries] == ["Test.", "Lorem ipsum...", "Lorem..."]CODE
LOWtests/test_subtitle_scenarios.py353 'Lorem ipsum... Lorem...' stayed a single subtitle entry. AndSTRING
LOW⚡tests/test_regression_fixes.py96 normalized = normalize("Test. Lorem ipsum...\n\nLorem...\n\nLorem ...")CODE
LOWtests/test_metadata_helpers.py50 assert format_author_sentence("John Doe") == "By John Doe"CODE
LOWabogen/domain/subtitle_generation.py240 # boundary ("Lorem ipsum... Lorem..." stays one sentence), so ellipsisCOMMENT
AI Slop Vocabulary4 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_domain_normalization_pipeline.py11 """Tests for the comprehensive TTS text preparation pipeline."""STRING
LOWabogen/integrations/calibre_opds.py1450 # Only add if not found elsewhere? Or just add small amount?COMMENT
LOW⚡abogen/webui/routes/api.py588 # For now, just use base settings as in original code (presumably)COMMENT
LOWabogen/infrastructure/subtitle_writer.py242 # For now, just return the text with the highlight colorCOMMENT
Dead Code2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMabogen/infrastructure/exporters.py316CODE
MEDIUMabogen/infrastructure/exporters.py318CODE
AI Structural Patterns4 hits · 4 pts
SeverityFileLineSnippetContext
LOWabogen/kokoro_text_normalization.py289CODE
LOWabogen/webui/service.py349CODE
LOWabogen/domain/subtitle_processor.py146CODE
LOWabogen/domain/conversion_pipeline.py293CODE
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWdocker-compose.yaml6# Usage:COMMENT
LOWdocker-compose.webui.yml6# Usage:COMMENT
Over-Commented Block3 hits · 3 pts
SeverityFileLineSnippetContext
LOWdocker-compose.yaml1# Docker Compose for AbogenCOMMENT
LOWdocker-compose.yaml61 # Runtime flag is only honored by legacy docker-compose (v1) CLI.COMMENT
LOWdocker-compose.webui.yml1# Docker Compose for Abogen Web UI (Flask-based interface)COMMENT