Netflix-level subtitle cutting, translation, alignment, and even dubbing - one-click fully automated AI video subtitle team | Netflix级字幕切割、翻译、对齐、甚至加上配音,一键全自动视频搬运AI字幕组
This report summarizes scanner evidence for Huanshere/VideoLingo, a Python project with 18,750 GitHub stars. SynthScan examined 27,347 lines of code across 164 source files, recording 713 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 40.4 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 415 finding(s).
Are imports declared and package/API names verified? 79 finding(s).
Are wrappers, guards, and repeated structures necessary? 567 finding(s).
Which changes need focused human review? 713 finding(s).
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.
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.
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.
The scanner identified 713 distinct pattern matches across 16 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | config.yaml | 3 | # ------------------- | COMMENT |
| MEDIUM⚡ | config.yaml | 6 | # ------------------- | COMMENT |
| MEDIUM | core/prompts.py | 4 | ## ================================================================ | COMMENT |
| MEDIUM | core/prompts.py | 51 | ## ================================================================ | COMMENT |
| MEDIUM | core/prompts.py | 126 | ## ================================================================ | STRING |
| MEDIUM | core/prompts.py | 266 | ## ================================================================ | STRING |
| MEDIUM | core/prompts.py | 316 | ## ================================================================ | STRING |
| MEDIUM | core/prompts.py | 357 | ## ================================================================ | STRING |
| MEDIUM | core/spacy_utils/load_nlp_model.py | 57 | # -------------------- | COMMENT |
| MEDIUM | core/spacy_utils/load_nlp_model.py | 59 | # -------------------- | COMMENT |
| MEDIUM | core/utils/models.py | 1 | # ------------------------------------------ | COMMENT |
| MEDIUM | core/utils/models.py | 3 | # ------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/utils/models.py | 17 | # ------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/utils/models.py | 19 | # ------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/utils/models.py | 29 | # ------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/utils/models.py | 32 | # ------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/utils/models.py | 36 | # ------------------------------------------ | COMMENT |
| MEDIUM⚡ | core/utils/models.py | 38 | # ------------------------------------------ | COMMENT |
| MEDIUM | core/utils/decorator.py | 8 | # ------------------------------ | COMMENT |
| MEDIUM | core/utils/decorator.py | 10 | # ------------------------------ | COMMENT |
| MEDIUM | core/utils/decorator.py | 34 | # ------------------------------ | COMMENT |
| MEDIUM | core/utils/decorator.py | 36 | # ------------------------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 13 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 15 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 42 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 44 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 67 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 69 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 81 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 83 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 101 | # ------------ | COMMENT |
| MEDIUM | core/utils/ask_gpt.py | 103 | # ------------ | COMMENT |
| MEDIUM | core/utils/config_utils.py | 11 | # ----------------------- | COMMENT |
| MEDIUM | core/utils/config_utils.py | 13 | # ----------------------- | COMMENT |
| MEDIUM | core/st_utils/tts_settings.py | 19 | # ------------ | COMMENT |
| MEDIUM | core/st_utils/tts_settings.py | 21 | # ------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 109 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 111 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 181 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 183 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 226 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 228 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 480 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 482 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 550 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 552 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 644 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/qwen_asr_local.py | 646 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | core/asr_backend/elevenlabs_asr.py | 10 | # ---------------------------------------- | COMMENT |
| MEDIUM | core/asr_backend/elevenlabs_asr.py | 12 | # ---------------------------------------- | COMMENT |
| MEDIUM | core/asr_backend/elevenlabs_asr.py | 27 | # ---------------------------- | COMMENT |
| MEDIUM | core/asr_backend/elevenlabs_asr.py | 29 | # ---------------------------- | COMMENT |
| MEDIUM | core/asr_backend/whisperX_local.py | 14 | # ============================================================================= | COMMENT |
| MEDIUM | core/asr_backend/whisperX_local.py | 16 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | core/asr_backend/whisperX_local.py | 32 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | core/asr_backend/whisperX_local.py | 34 | # ============================================================================= | COMMENT |
| MEDIUM | core/asr_backend/whisperX_local.py | 138 | # ------------------------- | COMMENT |
| MEDIUM | core/asr_backend/whisperX_local.py | 140 | # ------------------------- | COMMENT |
| MEDIUM | core/asr_backend/whisperX_local.py | 157 | # ------------------------- | COMMENT |
| MEDIUM | core/asr_backend/whisperX_local.py | 159 | # ------------------------- | COMMENT |
| 88 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | st.py | 134 | def _subtitle_length_controls(): | CODE |
| LOW | installer.py | 224 | def required_by_other_packages(names: list[str]) -> set[str]: | CODE |
| LOW⚡ | installer.py | 282 | def detect_cuda_version_from_smi() -> tuple[int, int] | None: | CODE |
| LOW | installer.py | 349 | def install_base_requirements(force: bool = False, upgrade: bool = False) -> None: | CODE |
| LOW | core/prompts.py | 144 | def get_translation_style_prompt(): | STRING |
| LOW | core/prompts.py | 205 | def get_prompt_expressiveness(faithfulness_result, lines, shared_prompt): | STRING |
| LOW | core/_3_2_split_meaning.py | 144 | def split_sentences_by_meaning(): | CODE |
| LOW | core/_8_2_dub_chunks.py | 64 | def analyze_subtitle_timing_and_speed(df): | CODE |
| LOW | core/_4_1_summarize.py | 17 | def search_things_to_note_in_prompt(sentence): | CODE |
| LOW | core/spacy_utils/split_long_by_root.py | 43 | def split_extremely_long_sentence(doc): | CODE |
| LOW | core/tts_backend/sf_cosyvoice2.py | 30 | def cosyvoice_tts_for_videolingo(text, save_as, number, task_df): | CODE |
| LOW | core/tts_backend/sf_fishtts.py | 181 | def siliconflow_fish_tts_for_videolingo(text, save_as, number, task_df): | CODE |
| LOW | core/tts_backend/gpt_sovits_tts.py | 54 | def gpt_sovits_tts_for_videolingo(text, save_as, number, task_df): | CODE |
| LOW | core/tts_backend/gpt_sovits_tts.py | 110 | def find_and_check_config_path(dubbing_character): | CODE |
| LOW | core/st_utils/imports_and_utils.py | 8 | def download_subtitle_zip_button(text: str): | CODE |
| LOW | core/st_utils/sidebar_setting.py | 18 | def burned_subtitles_settings(): | CODE |
| LOW | core/asr_backend/elevenlabs_asr.py | 66 | def transcribe_audio_elevenlabs(raw_audio_path, vocal_audio_path, start = None, end = None): | CODE |
| LOW⚡ | core/asr_backend/whisperX_local.py | 42 | def _complete_model_directory(path): | CODE |
| LOW | tests/test_runtime_compatibility.py | 43 | def test_arbitrary_expressions_rejected(parse, text): | CODE |
| LOW | tests/test_runtime_compatibility.py | 48 | def test_old_workbook_readers(tmp_path, parse): | CODE |
| LOW | tests/test_runtime_compatibility.py | 60 | def test_sovits_network_failure_is_not_ready(monkeypatch): | CODE |
| LOW | tests/test_runtime_compatibility.py | 71 | def test_cache_resolution_offline_first(tmp_path, monkeypatch, mode): | CODE |
| LOW | tests/test_runtime_compatibility.py | 122 | def test_sovits_exited_child_and_cwd(tmp_path, monkeypatch): | CODE |
| LOW | tests/test_runtime_compatibility.py | 153 | def test_windows_log_roundtrip(tmp_path): | CODE |
| LOW⚡ | tests/test_dubbing_loudness.py | 38 | def test_silence_does_not_drive_speech_gain(tmp_path, normalize): | CODE |
| LOW⚡ | tests/test_dubbing_loudness.py | 47 | def test_gain_preserves_sentence_dynamics_and_peak_headroom(tmp_path, normalize): | CODE |
| LOW⚡ | tests/test_dubbing_loudness.py | 55 | def test_transient_peak_limits_gain(tmp_path, normalize): | CODE |
| LOW⚡ | tests/test_dubbing_loudness.py | 63 | def test_silent_audio_remains_silent(tmp_path, normalize): | CODE |
| LOW⚡ | tests/test_dubbing_loudness.py | 68 | def test_short_stereo_clip_is_preserved(tmp_path, normalize): | CODE |
| LOW⚡ | tests/test_dubbing_loudness.py | 75 | def test_ffmpeg_failure_is_reported(tmp_path, normalize): | CODE |
| LOW⚡ | tests/test_dubbing_loudness.py | 81 | def test_final_video_merge_with_real_ffmpeg(tmp_path, monkeypatch, has_background): | CODE |
| LOW | tests/test_dubbing_loudness.py | 117 | def test_reference_audio_uses_raw_track_without_demucs(tmp_path, monkeypatch): | CODE |
| LOW | tests/test_ffmpeg_runtime.py | 26 | def test_whisperx_audio_probe_without_torchcodec(): | CODE |
| LOW⚡ | tests/test_ffmpeg_runtime.py | 55 | def test_override_is_process_local_and_idempotent(tmp_path, monkeypatch): | STRING |
| LOW⚡ | tests/test_ffmpeg_runtime.py | 64 | def test_incomplete_override_is_not_silently_replaced(tmp_path, monkeypatch): | STRING |
| LOW⚡ | tests/test_ffmpeg_runtime.py | 70 | def test_offline_check_never_downloads(tmp_path, monkeypatch): | STRING |
| LOW | tests/test_ffmpeg_runtime.py | 83 | def test_setup_repairs_incomplete_download(tmp_path, monkeypatch, surviving_name, readonly_marker): | STRING |
| LOW | tests/test_ffmpeg_runtime.py | 111 | def test_real_tools_work_without_system_ffmpeg(tmp_path): | STRING |
| LOW | tests/test_ffmpeg_runtime.py | 161 | def test_validation_rejects_build_without_subtitle_filter(tmp_path, monkeypatch): | STRING |
| LOW | tests/test_ffmpeg_runtime.py | 171 | def test_managed_cli_does_not_hide_whisperx_dlls(tmp_path, monkeypatch): | STRING |
| LOW⚡ | tests/test_audio_timeline.py | 33 | def test_all_extraction_paths_preserve_timeline(tmp_path, monkeypatch, function, encoder): | CODE |
| LOW⚡ | tests/test_audio_timeline.py | 43 | def test_existing_audio_is_not_overwritten(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_audio_timeline.py | 53 | def test_decoded_duration_follows_source_clock(tmp_path, shift): | CODE |
| LOW | tests/test_transcription_cache.py | 30 | def test_identity_uses_content_and_settings_not_path_or_key(self): | CODE |
| LOW | tests/test_transcription_cache.py | 41 | def test_identity_separates_local_backends_and_qwen_options(self): | CODE |
| LOW | tests/test_transcription_cache.py | 48 | def test_mai_cache_ignores_credentials_and_local_model_settings(self): | CODE |
| LOW | tests/test_transcription_cache.py | 78 | def test_identity_tracks_asr_package_versions(self): | CODE |
| LOW | tests/test_transcription_cache.py | 90 | def test_corrupt_and_invalid_results_are_misses(self): | CODE |
| LOW | tests/test_transcription_cache.py | 101 | def test_failed_atomic_write_does_not_publish_partial_result(self): | CODE |
| LOW | tests/test_transcription_cache.py | 120 | def test_complete_hit_recreates_workbook_without_asr_and_keeps_downstream_audio(self): | CODE |
| LOW⚡ | tests/test_transcription_cache.py | 131 | def test_partial_failure_reuses_successful_segment(self): | CODE |
| LOW⚡ | tests/test_transcription_cache.py | 141 | def test_disabled_cache_calls_backend_again(self): | CODE |
| LOW⚡ | tests/test_transcription_cache.py | 150 | def test_cancelled_result_is_not_cached(self): | CODE |
| LOW | tests/test_pipeline_integration.py | 42 | def test_video_translation_and_dubbing(configured_workdir): | CODE |
| LOW | tests/test_pipeline_integration.py | 57 | def test_audio_only_translation(configured_workdir): | CODE |
| LOW⚡ | tests/test_mai_asr.py | 28 | def test_word_timestamps_and_language_survive_conversion(self): | CODE |
| LOW⚡ | tests/test_mai_asr.py | 37 | def test_definition_requests_clean_word_timestamps(self): | CODE |
| LOW⚡ | tests/test_mai_asr.py | 47 | def test_resource_endpoint_cannot_send_audio_and_key_to_another_host(self): | CODE |
| LOW⚡ | tests/test_mai_asr.py | 57 | def test_legacy_config_detects_region_and_retries_transient_errors(self): | CODE |
| LOW | tests/test_mai_asr.py | 88 | def test_openrouter_key_uses_its_endpoint_and_preserves_word_timing(self): | CODE |
| 288 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup_env.py | 8 | CODE | |
| LOW | st.py | 17 | CODE | |
| LOW | start.py | 7 | CODE | |
| LOW | installer.py | 22 | CODE | |
| LOW | runtime_libraries.py | 108 | CODE | |
| LOW | install.py | 8 | CODE | |
| LOW | core/_3_1_split_nlp.py | 1 | CODE | |
| LOW | core/_11_merge_audio.py | 7 | CODE | |
| LOW | core/_11_merge_audio.py | 8 | CODE | |
| LOW | core/translate_lines.py | 7 | CODE | |
| LOW | core/_9_refer_audio.py | 6 | CODE | |
| LOW | core/_9_refer_audio.py | 7 | CODE | |
| LOW | core/_9_refer_audio.py | 11 | CODE | |
| LOW | core/_8_1_audio_task.py | 8 | CODE | |
| LOW | core/_8_1_audio_task.py | 9 | CODE | |
| LOW | core/task_runner.py | 3 | CODE | |
| LOW | core/_7_sub_into_vid.py | 5 | CODE | |
| LOW | core/_6_gen_sub.py | 7 | CODE | |
| LOW | core/_6_gen_sub.py | 8 | CODE | |
| LOW | core/_4_2_translate.py | 8 | CODE | |
| LOW | core/_4_2_translate.py | 12 | CODE | |
| LOW | core/_1_ytdlp.py | 6 | CODE | |
| LOW | core/prompts.py | 2 | CODE | |
| LOW | core/_5_split_sub.py | 12 | CODE | |
| LOW | core/_5_split_sub.py | 14 | CODE | |
| LOW | core/_3_2_split_meaning.py | 8 | CODE | |
| LOW | core/_10_gen_audio.py | 15 | CODE | |
| LOW | core/_10_gen_audio.py | 16 | CODE | |
| LOW | core/_2_asr.py | 1 | CODE | |
| LOW | core/_2_asr.py | 4 | CODE | |
| LOW | core/_8_2_dub_chunks.py | 7 | CODE | |
| LOW | core/_8_2_dub_chunks.py | 8 | CODE | |
| LOW | core/_4_1_summarize.py | 4 | CODE | |
| LOW | core/_12_dub_to_vid.py | 10 | CODE | |
| LOW | core/_12_dub_to_vid.py | 11 | CODE | |
| LOW | core/spacy_utils/__init__.py | 1 | CODE | |
| LOW | core/spacy_utils/__init__.py | 2 | CODE | |
| LOW | core/spacy_utils/__init__.py | 3 | CODE | |
| LOW | core/spacy_utils/__init__.py | 4 | CODE | |
| LOW | core/spacy_utils/__init__.py | 5 | CODE | |
| LOW | core/spacy_utils/split_by_comma.py | 4 | CODE | |
| LOW | core/spacy_utils/split_long_by_root.py | 5 | CODE | |
| LOW | core/utils/__init__.py | 4 | CODE | |
| LOW | core/utils/__init__.py | 5 | CODE | |
| LOW | core/utils/__init__.py | 5 | CODE | |
| LOW | core/utils/__init__.py | 6 | CODE | |
| LOW | core/utils/__init__.py | 6 | CODE | |
| LOW | core/utils/__init__.py | 6 | CODE | |
| LOW | core/utils/__init__.py | 6 | CODE | |
| LOW | core/utils/__init__.py | 6 | CODE | |
| LOW | core/utils/__init__.py | 6 | CODE | |
| LOW | core/utils/__init__.py | 7 | CODE | |
| LOW | core/tts_backend/sf_cosyvoice2.py | 6 | CODE | |
| LOW | core/tts_backend/fish_audio_tts.py | 11 | CODE | |
| LOW | core/tts_backend/tts_main.py | 15 | CODE | |
| LOW | core/tts_backend/sf_fishtts.py | 13 | CODE | |
| LOW | core/tts_backend/sf_fishtts.py | 14 | CODE | |
| LOW | core/tts_backend/edge_tts.py | 3 | CODE | |
| LOW | core/tts_backend/gpt_sovits_tts.py | 3 | CODE | |
| LOW | core/tts_backend/gpt_sovits_tts.py | 7 | CODE | |
| 16 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | installer.py | 90 | except Exception as exc: | CODE |
| LOW | installer.py | 113 | except Exception: | CODE |
| LOW | installer.py | 131 | except Exception: | CODE |
| LOW⚡ | installer.py | 278 | except Exception: | CODE |
| LOW⚡ | installer.py | 288 | except Exception: | CODE |
| LOW | installer.py | 324 | except Exception as exc: | CODE |
| LOW | installer.py | 414 | except Exception as exc: | CODE |
| LOW | installer.py | 478 | except Exception as exc: | CODE |
| MEDIUM | installer.py | 282 | def detect_cuda_version_from_smi() -> tuple[int, int] | None: | CODE |
| LOW⚡ | core/translate_lines.py | 76 | except Exception as e: | CODE |
| LOW | core/_8_1_audio_task.py | 38 | except Exception: | CODE |
| LOW | core/task_runner.py | 160 | except Exception as e: | CODE |
| LOW | core/_7_sub_into_vid.py | 77 | except Exception as e: | CODE |
| MEDIUM | core/_7_sub_into_vid.py | 13 | def check_gpu_available(): | CODE |
| LOW | core/_1_ytdlp.py | 167 | except Exception: | CODE |
| MEDIUM | core/_1_ytdlp.py | 21 | def update_ytdlp(): | CODE |
| LOW | core/_3_2_split_meaning.py | 90 | except Exception as e: | CODE |
| LOW | core/_10_gen_audio.py | 108 | except Exception as e: | CODE |
| LOW | core/_10_gen_audio.py | 130 | except Exception as e: | CODE |
| LOW | core/pipeline.py | 89 | except Exception as e: # locked by the spreadsheet program, no longer a spreadsheet, a missing column | CODE |
| LOW⚡ | core/utils/delete_retry_dubbing.py | 16 | except Exception as e: | CODE |
| MEDIUM⚡ | core/utils/delete_retry_dubbing.py | 17 | print(f"Error deleting {file_path}: {str(e)}") | CODE |
| LOW⚡ | core/utils/delete_retry_dubbing.py | 26 | except Exception as e: | CODE |
| MEDIUM⚡ | core/utils/delete_retry_dubbing.py | 27 | print(f"Error deleting folder {segs_folder}: {str(e)}") | CODE |
| LOW | core/utils/decorator.py | 22 | except Exception as e: | CODE |
| LOW | core/utils/pypi_autochoose.py | 81 | except Exception as exc: | CODE |
| LOW⚡ | core/utils/onekeycleanup.py | 65 | except Exception as e: | CODE |
| MEDIUM⚡ | core/utils/onekeycleanup.py | 67 | print(f"Error message: {str(e)}") | CODE |
| LOW⚡ | core/utils/onekeycleanup.py | 68 | except Exception as e: | CODE |
| MEDIUM⚡ | core/utils/onekeycleanup.py | 70 | print(f"Error message: {str(e)}") | CODE |
| MEDIUM | core/utils/onekeycleanup.py | 42 | def move_file(src, dst): | CODE |
| LOW | core/tts_backend/sf_cosyvoice2.py | 45 | except Exception as e: | CODE |
| LOW | core/tts_backend/tts_main.py | 79 | except Exception as e: | CODE |
| LOW | core/tts_backend/estimate_duration.py | 55 | except Exception: | CODE |
| LOW | core/tts_backend/estimate_duration.py | 62 | except Exception: | CODE |
| LOW | core/tts_backend/gpt_sovits_tts.py | 94 | except Exception as e: | CODE |
| LOW | core/tts_backend/_302_f5tts.py | 72 | except Exception as e: | CODE |
| LOW | core/tts_backend/custom_tts.py | 29 | except Exception as e: | CODE |
| MEDIUM | core/tts_backend/custom_tts.py | 30 | print(f"Error occurred during TTS conversion: {str(e)}") | CODE |
| LOW | core/st_utils/download_video_section.py | 131 | except Exception: | CODE |
| LOW | core/st_utils/download_video_section.py | 162 | except Exception as e: | CODE |
| LOW | core/st_utils/download_video_section.py | 178 | except Exception: | CODE |
| LOW | core/st_utils/sidebar_setting.py | 103 | except Exception: | CODE |
| LOW | core/st_utils/sidebar_setting.py | 502 | except Exception as e: | CODE |
| LOW | core/asr_backend/audio_preprocess.py | 37 | except Exception: | CODE |
| LOW | core/asr_backend/audio_preprocess.py | 121 | except Exception as e: | CODE |
| LOW | translations/translations.py | 45 | except Exception: | CODE |
| LOW | translations/translations.py | 64 | except Exception: | CODE |
| LOW | translations/translations.py | 78 | except Exception: | CODE |
| LOW | translations/translations.py | 90 | except Exception: | CODE |
| LOW | translations/translations.py | 96 | except Exception: | CODE |
| MEDIUM | translations/translations.py | 40 | def _config_language(): | CODE |
| MEDIUM | translations/translations.py | 49 | def _streamlit_language(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | st.py | 130 | except OSError: | CODE |
| HIGH | installer.py | 288 | except Exception: | CODE |
| HIGH | installer.py | 607 | except (ImportError, RuntimeError, OSError): | CODE |
| HIGH | core/utils/onekeycleanup.py | 39 | except OSError: | CODE |
| HIGH | core/utils/subtitle_style.py | 85 | except KeyError: | CODE |
| HIGH | core/st_utils/download_video_section.py | 131 | except Exception: | CODE |
| HIGH | core/asr_backend/qwen_asr_local.py | 564 | except ImportError: | CODE |
| HIGH | core/asr_backend/transcription_cache.py | 97 | except (OSError, ValueError, TypeError, AttributeError): | CODE |
| HIGH | core/asr_backend/transcription_cache.py | 113 | except (OSError, TypeError, ValueError): | CODE |
| HIGH | core/asr_backend/transcription_cache.py | 120 | except OSError: | CODE |
| HIGH | tests/test_dependencies.py | 698 | except requests.RequestException: | CODE |
| HIGH | translations/translations.py | 78 | except Exception: | CODE |
| HIGH | translations/translations.py | 90 | except Exception: | CODE |
| HIGH | translations/translations.py | 96 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | st.py | 41 | CODE | |
| LOW | st.py | 202 | CODE | |
| LOW | st.py | 267 | CODE | |
| LOW | installer.py | 448 | CODE | |
| LOW | installer.py | 578 | CODE | |
| LOW | api.py | 102 | CODE | |
| LOW | runtime_libraries.py | 17 | CODE | |
| LOW | launch.py | 25 | CODE | |
| LOW | core/_11_merge_audio.py | 56 | CODE | |
| LOW | core/_8_1_audio_task.py | 52 | CODE | |
| LOW | core/_4_2_translate.py | 56 | CODE | |
| LOW | core/_5_split_sub.py | 19 | CODE | |
| LOW | core/_5_split_sub.py | 21 | CODE | |
| LOW | core/_10_gen_audio.py | 33 | CODE | |
| LOW | core/_10_gen_audio.py | 91 | CODE | |
| LOW | core/_10_gen_audio.py | 173 | CODE | |
| LOW | core/_2_asr.py | 38 | CODE | |
| LOW | core/spacy_utils/split_by_connector.py | 8 | CODE | |
| LOW | core/spacy_utils/split_by_connector.py | 84 | CODE | |
| LOW | core/spacy_utils/split_long_by_root.py | 10 | CODE | |
| LOW | core/spacy_utils/split_long_by_root.py | 64 | CODE | |
| LOW | core/utils/decorator.py | 12 | CODE | |
| LOW | core/utils/decorator.py | 13 | CODE | |
| LOW | core/utils/decorator.py | 15 | CODE | |
| LOW | core/utils/ask_gpt.py | 32 | CODE | |
| LOW | core/utils/pypi_autochoose.py | 60 | CODE | |
| LOW | core/tts_backend/tts_main.py | 24 | CODE | |
| LOW | core/tts_backend/sf_fishtts.py | 26 | CODE | |
| LOW | core/tts_backend/sf_fishtts.py | 181 | CODE | |
| LOW | core/tts_backend/estimate_duration.py | 25 | CODE | |
| LOW | core/tts_backend/estimate_duration.py | 50 | CODE | |
| LOW | core/tts_backend/estimate_duration.py | 75 | CODE | |
| LOW | core/tts_backend/gpt_sovits_tts.py | 54 | CODE | |
| LOW | core/tts_backend/gpt_sovits_tts.py | 126 | CODE | |
| LOW | core/tts_backend/gpt_sovits_tts.py | 143 | CODE | |
| LOW | core/st_utils/imports_and_utils.py | 8 | CODE | |
| LOW | core/st_utils/download_video_section.py | 88 | CODE | |
| LOW | core/st_utils/download_video_section.py | 104 | CODE | |
| LOW | core/st_utils/sidebar_setting.py | 120 | CODE | |
| LOW | core/asr_backend/qwen_asr_local.py | 649 | CODE | |
| LOW | core/asr_backend/transcription_cache.py | 65 | CODE | |
| LOW | core/asr_backend/elevenlabs_asr.py | 66 | CODE | |
| LOW | core/asr_backend/audio_preprocess.py | 164 | CODE | |
| LOW | core/asr_backend/demucs_vl.py | 92 | CODE | |
| LOW | tests/test_dependencies.py | 450 | CODE | |
| LOW | tests/test_dependencies.py | 676 | CODE | |
| LOW | tests/test_asr_runtime.py | 85 | CODE | |
| LOW | tests/test_ytdlp.py | 12 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | config.yaml | 14 | key: 'YOUR_API_KEY' | CODE |
| HIGH | config.yaml | 119 | api_key: 'YOUR_API_KEY' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | core/_7_sub_into_vid.py | 33 | # Create a black frame | COMMENT |
| MEDIUM | core/tts_backend/sf_fishtts.py | 104 | # Create an empty audio segment | COMMENT |
| MEDIUM | core/tts_backend/_302_f5tts.py | 54 | # Create an empty audio segment | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/translate_lines.py | 46 | ## Step 1: Faithful to the Original Text | COMMENT |
| LOW⚡ | core/translate_lines.py | 70 | ## Step 2: Express Smoothly | COMMENT |
| LOW⚡ | tests/test_audio_extract_quality.py | 41 | # Step 2: raw extraction quality (v2.2.1 parity, configurable) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/translate_lines.py | 46 | ## Step 1: Faithful to the Original Text | COMMENT |
| LOW⚡ | core/translate_lines.py | 70 | ## Step 2: Express Smoothly | COMMENT |
| LOW⚡ | tests/test_audio_extract_quality.py | 41 | # Step 2: raw extraction quality (v2.2.1 parity, configurable) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | core/_1_ytdlp.py | 54 | raise ValueError('youtube.proxy must be null, an empty string, or a proxy URL') | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/spacy_utils/split_long_by_root.py | 101 | # nlp = init_nlp() | COMMENT |
| LOW | core/tts_backend/sf_fishtts.py | 221 | # siliconflow_fish_tts("使用客制化音色测试", "custom_test.wav", mode="custom", voice_id="speech:your-voice-name:cm04pf7az0006 | COMMENT |
| LOW | core/tts_backend/edge_tts.py | 1 | from pathlib import Path | COMMENT |
| LOW | core/asr_backend/qwen_asr_local.py | 41 | # 1.6x that, and a 180 s window gets 2372 tokens (the old flat cap was 2048). | COMMENT |
| LOW | docs/next-env.d.ts | 1 | /// <reference types="next" /> | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/__init__.py | 23 | __all__ = [ | CODE |
| LOW | core/spacy_utils/__init__.py | 7 | __all__ = [ | CODE |
| LOW⚡ | core/utils/models.py | 40 | __all__ = [ | CODE |
| LOW | core/utils/__init__.py | 31 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/tts_backend/tts_main.py | 26 | # Check if text is empty or single character, single character voiceovers are prone to bugs | COMMENT |
| LOW | core/tts_backend/gpt_sovits_tts.py | 86 | # Check if the reference audio file exists | COMMENT |
| LOW | core/tts_backend/gpt_sovits_tts.py | 144 | # Check if port 9880 is already in use | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/_1_ytdlp.py | 171 | # Example usage | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | core/utils/decorator.py | 51 | def test_function(): | CODE |