AI Slop Code RIsk Monitor

WEIFENG2333/VideoCaptioner

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

21.2 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for WEIFENG2333/VideoCaptioner, a Python project with 16,209 GitHub stars. SynthScan examined 54,319 lines of code across 262 source files, recording 726 pattern matches distributed across 20 syntactic categories. The legacy adjusted pattern signal is 21.2 (Elevated 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.

21.2
Adjusted Signal
21.2
Raw Pattern Score
100%
Time Factor
2026-09-12
Last Push
16.2K
Stars
Python
Language
54.3K
Lines of Code
262
Files
726
Pattern Hits
2026-10-12
Scan Date
0.18
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 34.5/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 9.9/100 · LOW

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

Agent Over-Engineering Ratio 54.7/100 · HIGH

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

PR Review Velocity Impact 65.0/100 · HIGH

Which changes need focused human review? 726 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 2HIGH 46MEDIUM 84LOW 594

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 726 distinct pattern matches across 20 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 Identifiers287 hits · 280 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
LOW⚡videocaptioner/ui/view/subtitle_interface.py421 def _update_prompt_button_style(self) -> None:CODE
LOW⚡videocaptioner/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
LOW⚡videocaptioner/ui/view/subtitle_interface.py956 def on_target_language_changed(self, language: str) -> None:CODE
LOW⚡videocaptioner/ui/view/subtitle_interface.py964 def on_subtitle_optimization_changed(self, checked: bool) -> None:CODE
LOW⚡videocaptioner/ui/view/subtitle_interface.py969 def on_subtitle_translation_changed(self, checked: bool) -> None:CODE
LOW⚡videocaptioner/ui/view/subtitle_interface.py976 def on_subtitle_layout_changed(self, layout: str) -> None:CODE
LOW⚡videocaptioner/ui/view/subtitle_style_interface.py687 def on_open_style_folder_clicked(self):CODE
LOW⚡videocaptioner/ui/view/subtitle_style_interface.py691 def on_subtitle_layout_changed(self, layout: str):CODE
LOW⚡videocaptioner/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
MEDIUM⚡tests/test_tts/test_tts_integration.py195# ============================================================================COMMENT
MEDIUM⚡tests/test_tts/test_tts_integration.py197# ============================================================================COMMENT
MEDIUMtests/test_tts/test_tts_core.py504# ============================================================================COMMENT
MEDIUMtests/test_tts/test_tts_core.py506# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py61# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py63# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py193# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py195# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py353# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py355# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py468# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py470# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py691# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py693# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunk_merger.py746# ============================================================================COMMENT
MEDIUM⚡tests/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
MEDIUM⚡tests/test_asr/test_chunking.py163# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py165# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py277# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py279# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py282# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py293# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py295# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py303# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py305# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py313# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py315# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py323# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py325# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunking.py333# ============================================================================COMMENT
MEDIUM⚡tests/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
MEDIUM⚡tests/test_asr/test_chunked_asr.py340# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunked_asr.py342# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunked_asr.py406# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunked_asr.py408# ============================================================================COMMENT
MEDIUM⚡tests/test_asr/test_chunked_asr.py463# ============================================================================COMMENT
MEDIUM⚡tests/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…
Empty Error Handlers23 hits · 115 pts
SeverityFileLineSnippetContext
HIGHvideocaptioner/ui/view/subtitle_interface.py75except json.JSONDecodeError:CODE
HIGHvideocaptioner/ui/view/subtitle_style_interface.py554except (OSError, IOError):CODE
HIGHvideocaptioner/ui/view/subtitle_style_interface.py794except (json.JSONDecodeError, OSError):CODE
HIGHvideocaptioner/ui/thread/file_download_thread.py121except Exception:CODE
HIGHvideocaptioner/core/llm/request_logger.py44except Exception:CODE
HIGHvideocaptioner/core/optimize/optimize.py415except Exception:CODE
HIGHvideocaptioner/core/subtitle/ass_utils.py165except (ValueError, IndexError, KeyError):CODE
HIGHvideocaptioner/core/subtitle/style_manager.py276except Exception:CODE
HIGHvideocaptioner/core/subtitle/style_manager.py298except Exception:CODE
HIGHvideocaptioner/core/subtitle/style_manager.py289except Exception:CODE
HIGHvideocaptioner/cli/config.py275except OSError:CODE
HIGHvideocaptioner/cli/main.py32except Exception:CODE
HIGHvideocaptioner/cli/commands/config_cmd.py270except OSError:CODE
HIGHvideocaptioner/cli/commands/synthesize.py132except Exception:CODE
HIGHvideocaptioner/cli/commands/synthesize.py212except (ValueError, TypeError):CODE
HIGHvideocaptioner/cli/commands/transcribe.py186except OSError:CODE
HIGHvideocaptioner/cli/commands/doctor.py99except Exception:CODE
HIGHvideocaptioner/cli/commands/doctor.py105except Exception:CODE
HIGHtests/test_subtitle/test_subtitle_thread.py49except Exception:CODE
HIGHtests/test_split/test_split.py273except (ValueError, AssertionError):CODE
HIGHtests/test_split/test_split.py388except Exception:CODE
HIGHtests/test_split/test_split_core.py511except (ValueError, Exception):CODE
HIGHscripts/build_desktop.py34except Exception:CODE
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
LOW⚡videocaptioner/ui/view/subtitle_interface.py421 def _update_prompt_button_style(self) -> None:CODE
LOW⚡videocaptioner/ui/view/subtitle_interface.py430 def set_task(self, task: SubtitleTask) -> None:CODE
LOW⚡videocaptioner/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
LOW⚡videocaptioner/core/subtitle/text_utils.py124 # Step 2: Calculate total width and target width per lineCOMMENT
LOW⚡videocaptioner/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
LOW⚡videocaptioner/core/subtitle/text_utils.py202 # Step 2: Calculate target widthCOMMENT
LOW⚡videocaptioner/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
LOW⚡skills/SKILL.md87# Step 1: TranscribeCOMMENT
LOW⚡skills/SKILL.md90# Step 2: Translate (bilingual, original text above translation)COMMENT
LOW⚡skills/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
LOW⚡videocaptioner/core/subtitle/text_utils.py124 # Step 2: Calculate total width and target width per lineCOMMENT
LOW⚡videocaptioner/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
LOW⚡videocaptioner/core/subtitle/text_utils.py202 # Step 2: Calculate target widthCOMMENT
LOW⚡videocaptioner/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
LOW⚡videocaptioner/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