Repository Analysis

WEIFENG2333/VideoCaptioner

🎬 卡卡字幕助手 | VideoCaptioner - 基于 LLM 的智能字幕助手 - 视频字幕生成、断句、校正、字幕翻译全流程处理!- A powered tool for easy and efficient video subtitling.

19.1 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of WEIFENG2333/VideoCaptioner, a Python project with 15,316 GitHub stars. SynthScan v2.0 examined 54,319 lines of code across 262 source files, recording 703 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 19.1 places this repository in the Moderate 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).

19.1
Adjusted Score
19.1
Raw Score
100%
Time Factor
2026-07-12
Last Push
15.3K
Stars
Python
Language
54.3K
Lines of Code
262
Files
703
Pattern Hits
2026-07-14
Scan Date
0.10
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

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.

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 2HIGH 23MEDIUM 84LOW 594

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 703 distinct pattern matches across 19 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 Identifiers287 hits · 281 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/ui/task_factory.py245 def create_transcript_and_subtitle_task(CODE
LOWvideocaptioner/ui/components/WhisperCppSettingWidget.py408 def _on_model_download_progress(value, msg):CODE
LOWvideocaptioner/ui/components/WhisperCppSettingWidget.py412 def _on_model_download_finished():CODE
LOWvideocaptioner/ui/components/WhisperCppSettingWidget.py489 def _set_all_download_buttons_enabled(self, enabled: bool):CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py126def check_faster_whisper_exists() -> tuple[bool, list[str]]:CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py451 def _on_program_download_progress(self, value, status_msg):CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py456 def _on_program_download_finished(self, save_path):CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py479 def _on_program_download_error(self, error):CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py533 def _on_model_download_progress(value, msg):CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py537 def _on_model_download_finished():CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py607 def _set_all_download_buttons_enabled(self, enabled: bool):CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py634 def _finish_program_installation(self):CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py878 def check_faster_whisper_model(self):CODE
LOWvideocaptioner/ui/components/WhisperAPISettingWidget.py161 def on_connection_check_finished(self, success, result):CODE
LOWvideocaptioner/ui/components/WhisperAPISettingWidget.py184 def on_connection_check_error(self, message):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py285 def on_soft_subtitle_action_triggered(self, checked: bool):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py316 def on_need_video_action_triggered(self, checked: bool):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py344 def on_video_quality_action_changed(self, quality_text: str):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py363 def on_use_style_action_triggered(self, checked: bool):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py406 def on_render_mode_changed_external(self, mode_text: str):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py410 def _update_synthesis_controls_state(self):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py422 def _update_style_controls_state(self):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py499 def on_video_synthesis_finished(self, task):CODE
LOWvideocaptioner/ui/view/video_synthesis_interface.py511 def on_video_synthesis_progress(self, progress, message):CODE
LOWvideocaptioner/ui/view/subtitle_interface.py421 def _update_prompt_button_style(self) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py449 def start_subtitle_optimization(self, need_create_task: bool = True) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py502 def on_subtitle_optimization_finished(CODE
LOWvideocaptioner/ui/view/subtitle_interface.py518 def on_subtitle_optimization_error(self, error: str) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py529 def on_subtitle_optimization_progress(self, value: int, status: str) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py861 def retranslate_selected_rows(self, rows: List[int]) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py956 def on_target_language_changed(self, language: str) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py964 def on_subtitle_optimization_changed(self, checked: bool) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py969 def on_subtitle_translation_changed(self, checked: bool) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py976 def on_subtitle_layout_changed(self, layout: str) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_style_interface.py687 def on_open_style_folder_clicked(self):CODE
LOWvideocaptioner/ui/view/subtitle_style_interface.py691 def on_subtitle_layout_changed(self, layout: str):CODE
LOWvideocaptioner/ui/view/subtitle_style_interface.py696 def on_render_mode_changed_external(self, mode_text: str):CODE
LOWvideocaptioner/ui/view/transcription_interface.py216 def update_audio_track_button_text(CODE
LOWvideocaptioner/ui/view/transcription_interface.py458 def on_transcription_model_changed(self, model_name: str):CODE
LOWvideocaptioner/ui/view/task_creation_interface.py327 def on_video_download_finished(self, video_file_path):STRING
LOWvideocaptioner/ui/view/home_interface.py85 def switch_to_subtitle_optimization(self, file_path, video_path):CODE
LOWvideocaptioner/ui/view/home_interface.py95 def switch_to_video_synthesis(self, video_path, subtitle_path):CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py177 def _on_trans_sub_progress_wrapper(CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py184 def _on_trans_sub_finished_wrapper(CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py212 def _on_trans_sub_subtitle_progress_wrapper(CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py219 def _handle_full_process_task(self, batch_task: BatchTask):CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py273 def on_full_process_subtitle_progress(CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py281 def on_full_process_subtitle_finished(CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py304 def on_full_process_synthesis_progress(CODE
LOWvideocaptioner/ui/thread/transcript_thread.py58 def _check_downloaded_subtitle(self) -> bool:CODE
LOWvideocaptioner/ui/thread/subtitle_thread.py38def create_translator_from_config(CODE
LOWvideocaptioner/ui/thread/modelscope_download_thread.py33def create_progress_callback_class(CODE
LOWvideocaptioner/ui/thread/version_checker_thread.py132 def check_new_version_announcement(self) -> None:CODE
LOWvideocaptioner/core/entities.py476def _get_all_languages_except_auto() -> list[TranscribeLanguageEnum]:CODE
LOWvideocaptioner/core/entities.py511def get_asr_language_capability(model: TranscribeModelEnum) -> ASRLanguageCapability:CODE
LOWvideocaptioner/core/split/split.py591 def _merge_processed_segments(CODE
LOWvideocaptioner/core/split/split.py661 def _merge_segments_based_on_sentences(CODE
LOWvideocaptioner/core/llm/request_logger.py83def create_logging_http_client() -> httpx.Client:CODE
LOWvideocaptioner/core/optimize/optimize.py273 def _validate_optimization_result(CODE
LOWvideocaptioner/core/translate/base.py150 def _set_segments_translated_text(CODE
227 more matches not shown…
Decorative Section Separators72 hits · 267 pts
SeverityFileLineSnippetContext
MEDIUMvideocaptioner/cli/main.py526# ── Command runners ──────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_tts/test_tts_integration.py195# ============================================================================COMMENT
MEDIUMtests/test_tts/test_tts_integration.py197# ============================================================================COMMENT
MEDIUMtests/test_tts/test_tts_core.py504# ============================================================================COMMENT
MEDIUMtests/test_tts/test_tts_core.py506# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py61# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py63# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py193# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py195# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py353# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py355# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py468# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py470# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py691# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py693# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py746# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py748# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py536# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py538# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py615# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunk_merger.py617# ============================================================================COMMENT
MEDIUMtests/test_asr/conftest.py11# ============================================================================COMMENT
MEDIUMtests/test_asr/conftest.py13# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py163# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py165# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py277# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py279# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py282# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py293# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py295# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py303# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py305# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py313# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py315# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py323# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py325# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py333# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py335# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py22# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py24# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py117# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py119# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py413# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunking.py421# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py340# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py342# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py406# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py408# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py463# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py465# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py28# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py30# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py119# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py121# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py210# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py212# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py284# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py286# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py366# ============================================================================COMMENT
MEDIUMtests/test_asr/test_chunked_asr.py368# ============================================================================COMMENT
12 more matches not shown…
Excessive Try-Catch Wrapping116 hits · 126 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/config.py11except Exception:CODE
LOWvideocaptioner/ui/components/WhisperCppSettingWidget.py459 except Exception as e:CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py176 except Exception as e:CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py475 except Exception as e:CODE
MEDIUM…ocaptioner/ui/components/FasterWhisperSettingWidget.py164def run(self):CODE
LOWvideocaptioner/ui/components/WhisperAPISettingWidget.py217 except Exception as e:CODE
LOWvideocaptioner/ui/components/MyVideoWidget.py255 except Exception:CODE
LOWvideocaptioner/ui/components/MyVideoWidget.py370 except Exception:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py602 except Exception as e:CODE
LOWvideocaptioner/ui/view/log_window.py60 except Exception as e:CODE
LOWvideocaptioner/ui/view/log_window.py110 except Exception as e:CODE
LOWvideocaptioner/ui/view/log_window.py152 except Exception as e:CODE
LOWvideocaptioner/ui/view/setting_interface.py1014 except Exception as e:CODE
LOWvideocaptioner/ui/view/setting_interface.py1036 except Exception as e:CODE
LOWvideocaptioner/ui/view/llm_logs_interface.py325 except Exception as e:CODE
LOWvideocaptioner/ui/view/llm_logs_interface.py466 except Exception as e:CODE
LOWvideocaptioner/ui/thread/subtitle_pipeline_thread.py128 except Exception as e:CODE
MEDIUMvideocaptioner/ui/thread/subtitle_pipeline_thread.py36def run(self):CODE
LOWvideocaptioner/ui/thread/video_download_thread.py35 except Exception as e:CODE
LOWvideocaptioner/ui/thread/video_download_thread.py163 except Exception:CODE
MEDIUMvideocaptioner/ui/thread/video_download_thread.py29def run(self):CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py89 except Exception as e:CODE
LOWvideocaptioner/ui/thread/transcript_thread.py37 except Exception as e:CODE
MEDIUMvideocaptioner/ui/thread/transcript_thread.py24def run(self):CODE
LOWvideocaptioner/ui/thread/subtitle_thread.py235 except Exception as e:CODE
LOWvideocaptioner/ui/thread/subtitle_thread.py276 except Exception as e:CODE
LOWvideocaptioner/ui/thread/subtitle_thread.py288 except Exception as e:CODE
LOWvideocaptioner/ui/thread/subtitle_thread.py351 except Exception as e:CODE
LOWvideocaptioner/ui/thread/video_synthesis_thread.py103 except Exception as e:CODE
MEDIUMvideocaptioner/ui/thread/video_synthesis_thread.py25def run(self):CODE
LOWvideocaptioner/ui/thread/modelscope_download_thread.py79 except Exception as e:CODE
MEDIUMvideocaptioner/ui/thread/modelscope_download_thread.py64def run(self):CODE
LOWvideocaptioner/ui/thread/version_checker_thread.py90 except Exception as e:CODE
LOWvideocaptioner/ui/thread/version_checker_thread.py158 except Exception:CODE
LOWvideocaptioner/ui/thread/video_info_thread.py36 except Exception as e:CODE
MEDIUMvideocaptioner/ui/thread/video_info_thread.py21def run(self):CODE
LOWvideocaptioner/ui/thread/file_download_thread.py121 except Exception:CODE
LOWvideocaptioner/ui/thread/file_download_thread.py219 except Exception as e:CODE
MEDIUMvideocaptioner/ui/thread/file_download_thread.py197def run(self):CODE
LOWvideocaptioner/core/split/split_by_llm.py36 except Exception as e:CODE
LOWvideocaptioner/core/split/split.py165 except Exception as e:CODE
LOWvideocaptioner/core/split/split.py264 except Exception as e:CODE
LOWvideocaptioner/core/split/split.py275 except Exception as e:CODE
LOWvideocaptioner/core/split/split.py781 except Exception as e:CODE
LOWvideocaptioner/core/llm/check_whisper.py74 except Exception as e:CODE
LOWvideocaptioner/core/llm/request_logger.py44 except Exception:CODE
LOWvideocaptioner/core/llm/check_llm.py50 except Exception as e:CODE
LOWvideocaptioner/core/llm/check_llm.py108 except Exception:CODE
LOWvideocaptioner/core/optimize/optimize.py101 except Exception as e:CODE
LOWvideocaptioner/core/optimize/optimize.py148 except Exception as e:CODE
LOWvideocaptioner/core/optimize/optimize.py183 except Exception as e:CODE
LOWvideocaptioner/core/optimize/optimize.py378 except Exception as e:CODE
LOWvideocaptioner/core/optimize/optimize.py415 except Exception:CODE
LOWvideocaptioner/core/translate/google_translator.py67 except Exception as e:CODE
LOWvideocaptioner/core/translate/bing_translator.py48 except Exception as e:CODE
LOWvideocaptioner/core/translate/bing_translator.py87 except Exception as e:CODE
LOWvideocaptioner/core/translate/bing_translator.py96 except Exception as e:CODE
LOWvideocaptioner/core/translate/factory.py72 except Exception as e:CODE
LOWvideocaptioner/core/translate/deeplx_translator.py53 except Exception as e:CODE
LOWvideocaptioner/core/translate/llm_translator.py95 except Exception as e:CODE
56 more matches not shown…
Unused Imports75 hits · 73 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/core/entities.py8CODE
LOWvideocaptioner/core/llm/__init__.py3CODE
LOWvideocaptioner/core/llm/__init__.py3CODE
LOWvideocaptioner/core/llm/__init__.py4CODE
LOWvideocaptioner/core/llm/__init__.py5CODE
LOWvideocaptioner/core/llm/__init__.py5CODE
LOWvideocaptioner/core/translate/__init__.py7CODE
LOWvideocaptioner/core/translate/__init__.py8CODE
LOWvideocaptioner/core/translate/__init__.py9CODE
LOWvideocaptioner/core/translate/__init__.py10CODE
LOWvideocaptioner/core/translate/__init__.py11CODE
LOWvideocaptioner/core/translate/__init__.py12CODE
LOWvideocaptioner/core/translate/__init__.py13CODE
LOWvideocaptioner/core/translate/__init__.py14CODE
LOWvideocaptioner/core/translate/__init__.py14CODE
LOWvideocaptioner/core/utils/video_utils.py22CODE
LOWvideocaptioner/core/speech/__init__.py3CODE
LOWvideocaptioner/core/speech/__init__.py3CODE
LOWvideocaptioner/core/speech/__init__.py3CODE
LOWvideocaptioner/core/speech/__init__.py4CODE
LOWvideocaptioner/core/speech/__init__.py4CODE
LOWvideocaptioner/core/speech/__init__.py4CODE
LOWvideocaptioner/core/speech/__init__.py4CODE
LOWvideocaptioner/core/speech/__init__.py4CODE
LOWvideocaptioner/core/asr/__init__.py1CODE
LOWvideocaptioner/core/asr/__init__.py2CODE
LOWvideocaptioner/core/asr/__init__.py3CODE
LOWvideocaptioner/core/asr/__init__.py4CODE
LOWvideocaptioner/core/asr/__init__.py5CODE
LOWvideocaptioner/core/asr/__init__.py6CODE
LOWvideocaptioner/core/asr/__init__.py7CODE
LOWvideocaptioner/core/asr/__init__.py8CODE
LOWvideocaptioner/core/subtitle/rounded_renderer.py21CODE
LOWvideocaptioner/core/subtitle/ass_renderer.py19CODE
LOWvideocaptioner/core/subtitle/__init__.py5CODE
LOWvideocaptioner/core/subtitle/__init__.py5CODE
LOWvideocaptioner/core/subtitle/__init__.py6CODE
LOWvideocaptioner/core/subtitle/__init__.py6CODE
LOWvideocaptioner/core/subtitle/__init__.py6CODE
LOWvideocaptioner/core/subtitle/__init__.py6CODE
LOWvideocaptioner/core/subtitle/__init__.py6CODE
LOWvideocaptioner/core/subtitle/__init__.py13CODE
LOWvideocaptioner/core/subtitle/__init__.py13CODE
LOWvideocaptioner/core/subtitle/__init__.py13CODE
LOWvideocaptioner/core/subtitle/__init__.py13CODE
LOWvideocaptioner/core/subtitle/__init__.py13CODE
LOWvideocaptioner/core/subtitle/__init__.py20CODE
LOWvideocaptioner/core/subtitle/__init__.py20CODE
LOWvideocaptioner/core/subtitle/__init__.py21CODE
LOWvideocaptioner/core/subtitle/__init__.py21CODE
LOWvideocaptioner/core/subtitle/__init__.py21CODE
LOWvideocaptioner/core/subtitle/__init__.py21CODE
LOWvideocaptioner/core/subtitle/__init__.py21CODE
LOWvideocaptioner/core/subtitle/__init__.py29CODE
LOWvideocaptioner/core/subtitle/__init__.py30CODE
LOWvideocaptioner/core/subtitle/__init__.py30CODE
LOWvideocaptioner/core/subtitle/__init__.py30CODE
LOWvideocaptioner/core/tts/__init__.py6CODE
LOWvideocaptioner/core/tts/__init__.py7CODE
LOWvideocaptioner/core/tts/__init__.py8CODE
15 more matches not shown…
Deep Nesting54 hits · 54 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/ui/task_factory.py110CODE
LOWvideocaptioner/ui/components/WhisperCppSettingWidget.py383CODE
LOWvideocaptioner/ui/components/WhisperCppSettingWidget.py412CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py503CODE
LOW…ocaptioner/ui/components/FasterWhisperSettingWidget.py537CODE
LOWvideocaptioner/ui/components/MyVideoWidget.py185CODE
LOWvideocaptioner/ui/view/subtitle_interface.py78CODE
LOWvideocaptioner/ui/view/subtitle_interface.py915CODE
LOWvideocaptioner/ui/view/subtitle_style_interface.py909CODE
LOWvideocaptioner/ui/view/llm_logs_interface.py308CODE
LOWvideocaptioner/ui/view/batch_process_interface.py176CODE
LOWvideocaptioner/ui/thread/video_download_thread.py115CODE
LOWvideocaptioner/ui/thread/batch_process_thread.py73CODE
LOWvideocaptioner/ui/thread/subtitle_thread.py100CODE
LOWvideocaptioner/ui/thread/file_download_thread.py136CODE
LOWvideocaptioner/core/split/alignment.py74CODE
LOWvideocaptioner/core/split/split_by_llm.py110CODE
LOWvideocaptioner/core/split/split.py57CODE
LOWvideocaptioner/core/split/split.py343CODE
LOWvideocaptioner/core/split/split.py661CODE
LOWvideocaptioner/core/llm/client.py52CODE
LOWvideocaptioner/core/llm/check_llm.py54CODE
LOWvideocaptioner/core/translate/bing_translator.py52CODE
LOWvideocaptioner/core/translate/factory.py20CODE
LOWvideocaptioner/core/utils/video_utils.py173CODE
LOWvideocaptioner/core/utils/platform_utils.py15CODE
LOWvideocaptioner/core/utils/platform_utils.py56CODE
LOWvideocaptioner/core/utils/subprocess_helper.py90CODE
LOWvideocaptioner/core/utils/subprocess_helper.py142CODE
LOWvideocaptioner/core/asr/whisper_cpp.py114CODE
LOWvideocaptioner/core/asr/asr_data.py220CODE
LOWvideocaptioner/core/asr/asr_data.py248CODE
LOWvideocaptioner/core/asr/asr_data.py275CODE
LOWvideocaptioner/core/asr/asr_data.py320CODE
LOWvideocaptioner/core/asr/asr_data.py515CODE
LOWvideocaptioner/core/asr/asr_data.py782CODE
LOWvideocaptioner/core/asr/faster_whisper.py227CODE
LOWvideocaptioner/core/asr/transcribe.py45CODE
LOWvideocaptioner/core/subtitle/font_utils.py18CODE
LOWvideocaptioner/core/subtitle/font_utils.py74CODE
LOWvideocaptioner/core/subtitle/text_utils.py98CODE
LOWvideocaptioner/core/subtitle/text_utils.py172CODE
LOWvideocaptioner/core/subtitle/rounded_renderer.py268CODE
LOWvideocaptioner/core/subtitle/ass_renderer.py244CODE
LOWvideocaptioner/core/subtitle/ass_utils.py52CODE
LOWvideocaptioner/core/tts/siliconflow.py30CODE
LOWvideocaptioner/cli/commands/config_cmd.py24CODE
LOWvideocaptioner/cli/commands/subtitle.py49CODE
LOWvideocaptioner/cli/commands/style_cmd.py28CODE
LOWvideocaptioner/cli/commands/synthesize.py39CODE
LOWvideocaptioner/cli/commands/synthesize.py155CODE
LOWvideocaptioner/cli/commands/transcribe.py13CODE
LOWtests/test_split/test_split_realistic.py13CODE
LOWscripts/translate_llm.py188CODE
Docstring Block Structure9 hits · 45 pts
SeverityFileLineSnippetContext
HIGHvideocaptioner/core/split/split.py119分割字幕(主入口) 处理流程: 1. Reading并预处理字幕 2. 按字数Segments 3. 并发调用LLM处理 4. 合并结果并优化 STRING
HIGHvideocaptioner/core/split/split.py667基于LLM返回的句子列表合并ASRSegments 使用滑动窗口匹配算法: 1. 对每个LLM句子,寻找最佳匹配的ASRSegments序列 2. 使用相似度算法进行匹配 3STRING
HIGHvideocaptioner/core/optimize/optimize.py188使用agent loop优化字幕 LLM → 验证 → 反馈 → 重试 (最多MAX_STEPS次) Args: subtitle_chunk: 字幕批次字典 RSTRING
HIGHvideocaptioner/core/utils/cache.py72Decorator to cache function results with global switch support. This is a thin wrapper around diskcache.Cache.memoiSTRING
HIGHvideocaptioner/core/asr/asr_data.py516Load ASRData from subtitle file. Args: file_path: Subtitle file path (supports .srt, .vtt, .ass, .jSTRING
HIGHvideocaptioner/core/asr/chunk_merger.py43合并多个音频片段的 ASR 结果 Args: chunks: ASRData 对象列表(每个 chunk 的 segments 应从 0 开始) chunk_offsets:STRING
HIGHvideocaptioner/core/tts/siliconflow.py36上传音频并获取声音克隆 URI Args: audio_path: 音频文件路径 text: 对应文本内容 model: 模型名称 STRING
HIGHvideocaptioner/core/prompts/__init__.py25从文件加载提示词(带LRU缓存) Args: prompt_path: 提示词相对路径,如 "split/semantic" Returns: 提示词原始文本 Raises: STRING
HIGHvideocaptioner/core/prompts/__init__.py48获取提示词并进行变量替换 Args: prompt_path: 提示词路径,如 "split/semantic", "optimize/subtitle" **kwargs: 模板变量,用于替换提示STRING
Cross-File Repetition9 hits · 45 pts
SeverityFileLineSnippetContext
HIGHtests/test_asr/test_bcut_asr.py0test transcription with different configurations and languages. args: need_word_ts: whether to use word-level timestampsSTRING
HIGHtests/test_asr/test_jianying_asr.py0test transcription with different configurations and languages. args: need_word_ts: whether to use word-level timestampsSTRING
HIGHtests/test_asr/test_whisper_api_asr.py0test transcription with different configurations and languages. args: need_word_ts: whether to use word-level timestampsSTRING
HIGHtests/test_translate/test_deeplx_translator.py0test translating simple asr data with quality validation.STRING
HIGHtests/test_translate/test_bing_translator.py0test translating simple asr data with quality validation.STRING
HIGHtests/test_translate/test_google_translator.py0test translating simple asr data with quality validation.STRING
HIGHtests/test_translate/test_deeplx_translator.py0test translating a single chunk of data with quality validation.STRING
HIGHtests/test_translate/test_bing_translator.py0test translating a single chunk of data with quality validation.STRING
HIGHtests/test_translate/test_google_translator.py0test translating a single chunk of data with quality validation.STRING
Modern Structural Boilerplate24 hits · 26 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/ui/view/subtitle_interface.py171 def update_data(self, new_data: Dict[str, str]) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py190 def update_all(self, data: Dict[str, Any]) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py403 def _setup_signals(self) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py421 def _update_prompt_button_style(self) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py430 def set_task(self, task: SubtitleTask) -> None:CODE
LOWvideocaptioner/ui/view/subtitle_interface.py439 def update_info(self, task: SubtitleTask) -> None:CODE
LOWvideocaptioner/ui/view/transcription_interface.py153 def update_info(self, video_info: VideoInfo) -> None:CODE
LOWvideocaptioner/ui/view/transcription_interface.py176 def update_audio_tracks(self, video_info: VideoInfo) -> None:CODE
LOWvideocaptioner/ui/view/transcription_interface.py430 def _setup_signals(self) -> None:CODE
LOWvideocaptioner/ui/view/transcription_interface.py452 def _set_value(self) -> None:CODE
LOWvideocaptioner/ui/view/transcription_interface.py513 def set_task(self, task: TranscribeTask) -> None:CODE
LOWvideocaptioner/core/llm/__init__.py7__all__ = [CODE
LOWvideocaptioner/core/llm/context.py30def set_task_context(task_id: str, file_name: str, stage: str) -> None:CODE
LOWvideocaptioner/core/llm/context.py43def update_stage(stage: str) -> None:CODE
LOWvideocaptioner/core/translate/__init__.py16__all__ = [CODE
LOWvideocaptioner/core/utils/platform_utils.py12logger = logging.getLogger(__name__)CODE
LOWvideocaptioner/core/speech/__init__.py12__all__ = [CODE
LOWvideocaptioner/core/asr/__init__.py10__all__ = [CODE
LOWvideocaptioner/core/subtitle/__init__.py44__all__ = [CODE
LOWvideocaptioner/core/subtitle/style_manager.py14logger = logging.getLogger(__name__)CODE
LOWvideocaptioner/core/tts/__init__.py13__all__ = [CODE
LOWvideocaptioner/core/prompts/__init__.py96__all__ = ["get_prompt", "list_prompts", "reload_cache"]CODE
LOWvideocaptioner/core/dubbing/__init__.py7__all__ = [CODE
LOWvideocaptioner/cli/config.py156def _set_nested(d: dict, dotted_key: str, value: Any) -> None:CODE
Structural Annotation Overuse13 hits · 25 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/core/subtitle/text_utils.py103 # Step 1: Calculate minimum required lines using greedy algorithmCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py124 # Step 2: Calculate total width and target width per lineCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py129 # Step 3: Redistribute text to achieve balanced linesCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py181 # Step 1: Calculate minimum required linesCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py202 # Step 2: Calculate target widthCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py207 # Step 3: Redistribute words to achieve balanced linesCOMMENT
LOWvideocaptioner/cli/commands/process.py74 # Step 1: TranscribeCOMMENT
LOWvideocaptioner/cli/commands/process.py98 # Step 2: Subtitle (optimize + translate)COMMENT
LOWvideocaptioner/cli/commands/process.py132 # Step 3: DubCOMMENT
LOWvideocaptioner/cli/commands/process.py196 # Step 4: SynthesizeCOMMENT
LOWskills/SKILL.md87# Step 1: TranscribeCOMMENT
LOWskills/SKILL.md90# Step 2: Translate (bilingual, original text above translation)COMMENT
LOWskills/SKILL.md93# Step 3: Burn into video with rounded background, high qualityCOMMENT
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALvideocaptioner/core/tts/openai_tts.py47 with self.client.audio.speech.with_streaming_response.create(CODE
CRITICALtests/test_tts/test_tts_core.py416 mock_client.audio.speech.with_streaming_response.create.assert_called_once_with(CODE
Verbosity Indicators10 hits · 18 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/core/subtitle/text_utils.py103 # Step 1: Calculate minimum required lines using greedy algorithmCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py124 # Step 2: Calculate total width and target width per lineCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py129 # Step 3: Redistribute text to achieve balanced linesCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py181 # Step 1: Calculate minimum required linesCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py202 # Step 2: Calculate target widthCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py207 # Step 3: Redistribute words to achieve balanced linesCOMMENT
LOWvideocaptioner/cli/commands/process.py74 # Step 1: TranscribeCOMMENT
LOWvideocaptioner/cli/commands/process.py98 # Step 2: Subtitle (optimize + translate)COMMENT
LOWvideocaptioner/cli/commands/process.py132 # Step 3: DubCOMMENT
LOWvideocaptioner/cli/commands/process.py196 # Step 4: SynthesizeCOMMENT
Magic Placeholder Names4 hits · 15 pts
SeverityFileLineSnippetContext
HIGHtests/README.md54OPENAI_API_KEY=sk-your-api-keyCODE
HIGHtests/test_tts/test_tts_integration.py5 OPENAI_TTS_API_KEY=your-api-key-hereSTRING
HIGHtests/test_tts/test_tts_integration.py10 OPENAI_API_KEY=your-api-key-hereSTRING
HIGHdocs/dev/translate-module.md109export OPENAI_API_KEY="your-api-key"CODE
Over-Commented Block14 hits · 13 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/ui/thread/version_checker_thread.py41 data = response.json()COMMENT
LOWvideocaptioner/core/asr/asr_data.py421 WebVTT format subtitle contentCOMMENT
LOWtests/test_asr/test_chunking.py281# 现在使用 ChunkedASR 包装器模式,相关测试已在 test_chunked_asr.py 中实现COMMENT
LOWtests/test_asr/test_chunking.py401COMMENT
LOWtests/test_asr/test_bcut_asr.py61 # print(f" Total segments: {len(result.segments)}")COMMENT
LOWtests/test_asr/test_bcut_asr.py81 # print("BcutASR Word-Level Transcription Results:")COMMENT
LOWtests/test_asr/test_jianying_asr.py21 # @pytest.fixtureCOMMENT
LOWtests/test_asr/test_jianying_asr.py41 # test_audio_path: Path to test audio fileCOMMENT
LOWtests/test_asr/test_jianying_asr.py61 # print("\n" + "=" * 60)COMMENT
LOWtests/test_asr/test_jianying_asr.py81COMMENT
LOW.github/workflows/claude-code-review.yml1name: Claude Code ReviewCOMMENT
LOW.github/workflows/claude-code-review.yml61 # - For TypeScript files: Type safety and proper interface usageCOMMENT
LOW.github/workflows/claude.yml41 actions: readCOMMENT
LOW.github/workflows/claude.yml61 # Optional: Custom environment variables for ClaudeCOMMENT
Redundant / Tautological Comments8 hits · 13 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/core/subtitle/text_utils.py137 # Check if we should break the lineCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py150 # Check if next char would significantly exceed targetCOMMENT
LOWvideocaptioner/core/subtitle/text_utils.py227 # Check if next word would significantly exceed targetCOMMENT
LOWvideocaptioner/cli/commands/transcribe.py151 # Check if the temp file is empty (no audio track)COMMENT
LOWtests/test_subtitle/test_subtitle_thread.py33 # Check if model specified in environmentCOMMENT
LOWscripts/trans-extract.sh17# Check if pylupdate5 is availableCOMMENT
LOWscripts/run.sh26# Check if running from within the project directoryCOMMENT
LOWscripts/run.sh28 # Check if in project directoryCOMMENT
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/claude-code-review.yml63 # - For React components: Performance, accessibility, and best practicesCOMMENT
MEDIUM.github/workflows/claude-code-review.yml70 # 'Please provide a thorough code review focusing on our coding standards and best practices.' }}COMMENT
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHvideocaptioner/ui/components/MyVideoWidget.py277 path = media.toLocalFile() or media.toString()CODE
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_thread/conftest.py37 # Create a simple video with a solid color and the audioCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/core/asr/bcut.py195 # Example usageCOMMENT
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWvideocaptioner/core/asr/faster_whisper.py31CODE