Repository Analysis

denizsafak/abogen

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

33.8 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of denizsafak/abogen, a Python project with 5,478 GitHub stars. SynthScan v2.0 examined 85,158 lines of code across 305 source files, recording 2163 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 33.8 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).

33.8
Adjusted Score
33.8
Raw Score
100%
Time Factor
2026-07-30
Last Push
5.5K
Stars
Python
Language
85.2K
Lines of Code
305
Files
2.2K
Pattern Hits
2026-08-02
Scan Date
0.04
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 0HIGH 12MEDIUM 266LOW 1885

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 2163 distinct pattern matches across 17 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.

Hyper-Verbose Identifiers1027 hits · 1109 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
LOWtests/test_kokoro_plugin.py108 def test_plugin_loads_successfully(self, kokoro_plugin_dir: Path) -> None:CODE
LOWtests/test_kokoro_plugin.py114 def test_plugin_has_valid_manifest(self, kokoro_plugin_dir: Path) -> None:CODE
LOWtests/test_kokoro_plugin.py123 def test_plugin_has_model_requirements(self, kokoro_plugin_dir: Path) -> None:CODE
LOWtests/test_kokoro_plugin.py129 def test_plugin_manifest_capabilities(self, kokoro_plugin_dir: Path) -> None:CODE
LOWtests/test_kokoro_plugin.py134 def test_plugin_manifest_engine(self, kokoro_plugin_dir: Path) -> None:CODE
LOWtests/test_kokoro_plugin.py158 def test_engine_satisfies_protocol(self, kokoro_plugin_dir: Path, host_context: HostContext) -> None:CODE
LOWtests/test_pronunciation.py34 def test_skips_entries_without_pronunciation(self):CODE
LOWtests/test_pronunciation.py40 def test_skips_entries_without_token(self):CODE
LOWtests/test_pronunciation.py46 def test_deduplication_by_casefold(self):CODE
LOWtests/test_pronunciation.py56 def test_longer_token_sorted_first(self):CODE
LOWtests/test_pronunciation.py67 def test_normalized_fallback_to_entity_token(self):CODE
LOWtests/test_pronunciation.py74 def test_pattern_is_case_insensitive(self):CODE
LOWtests/test_pronunciation.py82 def test_non_mapping_items_skipped(self):CODE
LOWtests/test_pronunciation.py115 def test_skips_without_sentence(self):CODE
LOWtests/test_pronunciation.py121 def test_skips_without_choice(self):CODE
LOWtests/test_pronunciation.py127 def test_skips_when_no_matching_option(self):CODE
LOWtests/test_pronunciation.py189 def test_possessive_preserved(self):CODE
LOWtests/test_pronunciation.py196 def test_usage_counter_increments(self):CODE
LOWtests/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
LOWtests/test_chunk_utils.py61 def test_non_mapping_returns_empty(self):CODE
LOWtests/test_chunk_utils.py71 def test_empty_dict_returns_empty(self):CODE
LOWtests/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
LOWtests/test_chapter_merge_normalize.py28 def test_basic_override_by_index(self):CODE
LOWtests/test_chapter_merge_normalize.py38 def test_override_by_source_title(self):CODE
LOWtests/test_chapter_merge_normalize.py46 def test_disabled_override_skipped(self):CODE
LOWtests/test_chapter_merge_normalize.py54 def test_metadata_updates_collected(self):CODE
LOWtests/test_chapter_merge_normalize.py62 def test_no_matching_chapter_diagnostic(self):CODE
LOWtests/test_chapter_merge_normalize.py70 def test_non_dict_override_skipped(self):CODE
LOWtests/test_chapter_merge_normalize.py76 def test_text_from_base_when_not_provided(self):CODE
LOWtests/test_chapter_merge_normalize.py84 def test_default_title_when_no_base(self):CODE
LOWtests/test_chapter_merge_normalize.py123 def test_none_value_deletes_key(self):CODE
LOWtests/test_chapter_merge_normalize.py129 def test_none_values_in_extracted_skipped(self):CODE
LOWtests/test_chapter_merge_normalize.py135 def test_numeric_values_stringified(self):CODE
LOWtests/test_voice_formulas_pairs.py23 def test_all_zero_returns_none(self):CODE
LOWtests/test_voice_formulas_pairs.py31 def test_none_values_filtered(self):CODE
LOWtests/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
LOWtests/test_chunk_text_for_tts_prefers_raw.py15def test_chunk_text_for_tts_falls_back_to_original_text_then_normalized_text():CODE
LOWtests/test_preview_applies_manual_overrides.py5def test_preview_applies_manual_override_before_normalization(monkeypatch):CODE
967 more matches not shown…
Decorative Section Separators223 hits · 788 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_kokoro_plugin.py102# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py104# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py143# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py145# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py166# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py168# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_kokoro_plugin.py178# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/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_pronunciation.py9# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_pronunciation.py13# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py14# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py16# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py53# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py55# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py82# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chunk_utils.py84# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py12# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py14# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py92# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py94# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py142# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_chapter_merge_normalize.py144# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_output_paths.py146# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/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
MEDIUMtests/test_domain_speaker_metadata.py86# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py88# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_domain_speaker_metadata.py263# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/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
MEDIUMtests/test_supertonic_plugin.py116# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py118# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py157# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py159# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py180# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py182# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py192# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py194# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py235# ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_supertonic_plugin.py237# ──────────────────────────────────────────────────────────────COMMENT
163 more matches not shown…
Unused Imports391 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
331 more matches not shown…
Excessive Try-Catch Wrapping294 hits · 318 pts
SeverityFileLineSnippetContext
LOWbuild_pypi.py26 except Exception:CODE
LOWplugins/supertonic/__init__.py135 except Exception as e:CODE
LOWplugins/supertonic/engine.py145 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.py140 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
LOWtests/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.py111 except Exception as e:CODE
LOWabogen/spacy_utils.py117 except Exception as e:CODE
LOWabogen/spacy_utils.py144 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.py28 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
LOWabogen/text_extractor.py457 except Exception as exc:CODE
LOWabogen/text_extractor.py466 except Exception as exc:CODE
LOWabogen/text_extractor.py473 except Exception as exc:CODE
LOWabogen/text_extractor.py480 except Exception as exc:CODE
LOWabogen/text_extractor.py491 except Exception as exc:CODE
LOWabogen/text_extractor.py498 except Exception as exc:CODE
LOWabogen/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
LOWabogen/shutdown.py38 except Exception:CODE
LOWabogen/shutdown.py52 except Exception:CODE
LOWabogen/shutdown.py61 except Exception:CODE
234 more matches not shown…
Deep Nesting106 hits · 90 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.py15CODE
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.py201CODE
LOWabogen/utils.py322CODE
LOWabogen/utils.py466CODE
LOWabogen/utils.py502CODE
LOWabogen/llm_client.py129CODE
LOWabogen/check_cuda.py7CODE
LOWabogen/entity_analysis.py192CODE
LOWabogen/kokoro_text_normalization.py955CODE
LOWabogen/kokoro_text_normalization.py1630CODE
LOWabogen/kokoro_text_normalization.py1832CODE
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.py706CODE
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.py837CODE
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
LOWabogen/infrastructure/subtitle_writer.py280CODE
46 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 Boilerplate38 hits · 41 pts
SeverityFileLineSnippetContext
LOWplugins/supertonic/engine.py27logger = logging.getLogger(__name__)CODE
LOWplugins/supertonic/pipeline.py17logger = logging.getLogger(__name__)CODE
LOWplugins/kokoro/engine.py30logger = logging.getLogger(__name__)CODE
LOWabogen/predownload_gui.py425 def _update_model_status(self, ok: bool) -> None:CODE
LOWabogen/predownload_gui.py432 def _update_config_status(self, ok: bool) -> None:CODE
LOWabogen/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.py144__all__ = ["register_shutdown", "request_shutdown", "register_cleanup"]CODE
LOWabogen/queue_manager_gui.py11__all__ = ["QueueManager"]CODE
LOWabogen/gui.py11__all__ = ["abogen"]CODE
LOWabogen/kokoro_text_normalization.py24logger = logging.getLogger(__name__)CODE
LOWabogen/spacy_contraction_resolver.py18logger = 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.py742 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.py68__all__ = [CODE
LOWabogen/infrastructure/subtitle_writer.py362__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
LOWabogen/pyqt/predownload_gui.py425 def _update_model_status(self, ok: bool) -> None:CODE
LOWabogen/pyqt/predownload_gui.py432 def _update_config_status(self, ok: bool) -> None:CODE
LOWabogen/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
Redundant / Tautological Comments26 hits · 40 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.py1937 # 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.py197 # Check if we've hit a sentence boundary or max wordsCOMMENT
LOWabogen/pyqt/conversion.py410 # Check if input is a subtitle file for additional configurationCOMMENT
LOWabogen/pyqt/conversion.py461 # 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
LOWabogen/pyqt/gui.py2706 # Check if path is a directory (for multiple chapter files)COMMENT
LOWabogen/pyqt/gui.py2722 # Check if path exists and is a file before openingCOMMENT
LOWabogen/pyqt/gui.py701 # Check if text is empty based on character countCOMMENT
LOWabogen/pyqt/gui.py710 # Check if we need to warn about overwriting a non-temporary fileCOMMENT
LOWabogen/pyqt/gui.py1684 # Check if this is a cache fileCOMMENT
LOWabogen/pyqt/gui.py1694 # Check if this is a cache fileCOMMENT
LOWabogen/pyqt/gui.py1759 # Check if current file is a subtitle fileCOMMENT
LOWabogen/pyqt/gui.py2436 # Check if override was active (this determines which settings were ACTUALLY used)COMMENT
LOWabogen/pyqt/gui.py3231 # Check if this is a timestamp detection (-1) or chapter detectionCOMMENT
Self-Referential Comments13 hits · 36 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.py441 # Create main container layout with profile section and mixer sectionSTRING
MEDIUMabogen/pyqt/voice_formula_gui.py1428 # Create the profile with the new nameCOMMENT
MEDIUMabogen/pyqt/conversion.py1442 # 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.py3760 # Create the directory if it doesn't existCOMMENT
MEDIUMabogen/pyqt/gui.py4148 # Create a custom message box with checkboxCOMMENT
MEDIUMabogen/pyqt/gui.py3797 icon = target # Create a more direct PowerShell commandCODE
Verbosity Indicators7 hits · 14 pts
SeverityFileLineSnippetContext
LOWtests/contracts/test_integration.py124 # Step 1: Consumer gets pluginCOMMENT
LOWtests/contracts/test_integration.py127 # Step 2: Plugin creates engineCOMMENT
LOWtests/contracts/test_integration.py132 # Step 3: Engine creates sessionCOMMENT
LOWtests/contracts/test_integration.py137 # Step 4: Session synthesizesCOMMENT
LOWtests/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
LOWtests/contracts/test_integration.py124 # Step 1: Consumer gets pluginCOMMENT
LOWtests/contracts/test_integration.py127 # Step 2: Plugin creates engineCOMMENT
LOWtests/contracts/test_integration.py132 # Step 3: Engine creates sessionCOMMENT
LOWtests/contracts/test_integration.py137 # Step 4: Session synthesizesCOMMENT
LOWtests/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
AI Slop Vocabulary4 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMtests/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
LOWabogen/webui/routes/api.py588 # For now, just use base settings as in original code (presumably)COMMENT
LOWabogen/infrastructure/subtitle_writer.py240 # For now, just return the text with the highlight colorCOMMENT
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOWtests/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
LOWtests/test_metadata_helpers.py50 assert format_author_sentence("John Doe") == "By John Doe"CODE
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.py351CODE
LOWabogen/domain/subtitle_processor.py146CODE
LOWabogen/domain/conversion_pipeline.py278CODE
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