The open-source ElevenLabs alternative for local voice cloning, design, create, dubbing and dictation Desktop App
This report presents the forensic synthetic code analysis of debpalash/OmniVoice-Studio, a Python project with 8,387 GitHub stars. SynthScan v2.0 examined 301,943 lines of code across 1251 source files, recording 5623 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 30.6 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
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.
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.
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.
The scanner identified 5623 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src-tauri/appimage/AppRun.test.sh | 75 | # ── Bundled-version marker cases (#961 follow-up) ─────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/reset.rs | 550 | // ── End-to-end deletion against a real on-disk tree ─────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/tools.rs | 34 | // ── Sidecar detection ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/tools.rs | 74 | // ── On-demand ffmpeg / ffprobe download ─────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/tools.rs | 368 | // ── uv resolution ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/crash.rs | 38 | // ── Exit-status decomposition ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/crash.rs | 77 | // ── Marker model ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/crash.rs | 132 | // ── Version gating ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/crash.rs | 161 | // ── Persistence ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/crash.rs | 228 | // ── Tauri commands ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/config.rs | 10 | // ── Persistent app config ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/config.rs | 182 | // ── Region helpers ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/config.rs | 227 | // ── Tauri commands ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/backend.rs | 21 | // ── Port probing ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/backend.rs | 207 | // ── Log paths ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/backend.rs | 279 | // ── Spawn the backend via the bootstrapped venv Python ──────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/backend.rs | 528 | // attached to) ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/updater_channel.rs | 189 | // ── GitHub releases (changelog/history panel) ───────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 34 | // ── Port ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 43 | // ── Shared state types ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 67 | // ── WebView media-capture permissions ───────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 219 | // ── Windows: dictation pill must never take foreground focus (#982) ──────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 219 | // ── Windows: dictation pill must never take foreground focus (#982) ──────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 333 | // ── Tauri entry ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 342 | // ── Detect pill mode from CLI args OR persisted config ──────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 442 | // ── Programmatic widget window creation ────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 487 | // ── Global dictation shortcut (hold-to-talk) ───────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 559 | // ── System tray ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 719 | // ── Hide the unused window per mode ────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/lib.rs | 786 | // ── Bootstrap ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 19 | // ── Bootstrap stages ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 71 | // ── Splash log + byte-progress event channel ───────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 127 | // ── Tauri commands ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 377 | // ── Backend supervisor (auto-restart) ───────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 582 | // ── Venv bootstrap ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 678 | // ── plan-03 (#130): restricted-network bootstrap resilience ──────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 678 | // ── plan-03 (#130): restricted-network bootstrap resilience ──────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 823 | // ── #314: broken-venv detection + self-heal ──────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 823 | // ── #314: broken-venv detection + self-heal ──────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/bootstrap.rs | 958 | // ── Linux/Windows: cuDNN 8 compat side-load ──────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 15 | // ── System metrics ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 47 | // ── Log tail ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 161 | // ── HuggingFace cache scan ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 256 | // ── Simulate paste ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 380 | // ── Simulate live typing ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 429 | // ── Tray icon swap ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 445 | // ── Quit ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 453 | // ── Dictation hotkey ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 497 | // ── Launch-mode persistence ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 531 | // ── WebView cache repair (issue #879) ───────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/commands.rs | 531 | // ── WebView cache repair (issue #879) ───────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 24 | // ── Requirements ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 45 | // ── Disk probing ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 104 | // ── Path resolution ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 202 | // ── First-run detection ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 245 | // ── IPC payloads ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 473 | // ── Plan validation + application ───────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 567 | // ── Tauri commands ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src-tauri/src/setup.rs | 724 | // ── Tests ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/ui/index.js | 1 | // ───────────────────────────────────────────────────────────────── | COMMENT |
| 1254 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/utils/download.js | 14 | export function parseFilenameFromContentDisposition(header) { | CODE |
| LOW | frontend/src/utils/segments.js | 53 | export function applySpeakerCloneDefaults(segments, speakerClones) { | CODE |
| LOW | frontend/src/utils/globalErrorHandlers.js | 48 | export function installGlobalErrorHandlers() { | CODE |
| LOW | frontend/src/utils/backendCrash.ts | 50 | export async function getUnacknowledgedBackendCrash(): Promise<BackendCrashMarker | null> { | CODE |
| LOW | frontend/src/components/EngineCompatibilityMatrix.jsx | 220 | export default function EngineCompatibilityMatrix({ | CODE |
| LOW | frontend/src/components/WizardLibrary.jsx | 115 | export function reduceWizardDownloadEvent(prev, ev) { | CODE |
| LOW | frontend/src/components/dub/DubLeftColumn.jsx | 201 | async function hydrateMissingTranslations(code) { | CODE |
| LOW | omnivoice/training/builder.py | 49 | def build_model_and_tokenizer( | CODE |
| LOW | omnivoice/training/trainer.py | 161 | def create_optimizer_and_scheduler(self): | CODE |
| LOW | omnivoice/utils/voice_design.py | 77 | def _valid_instruct_from_items(items): | CODE |
| LOW⚡ | omnivoice/models/omnivoice.py | 222 | def _can_set_experts_implementation(cls) -> bool: | CODE |
| LOW⚡ | omnivoice/models/omnivoice.py | 226 | def _can_set_attn_implementation(cls) -> bool: | CODE |
| LOW | omnivoice/models/omnivoice.py | 630 | def create_voice_clone_prompt( | CODE |
| LOW | omnivoice/models/omnivoice.py | 1084 | def _prepare_inference_inputs( | CODE |
| LOW | omnivoice/models/omnivoice.py | 1319 | def _predict_tokens_with_scoring(self, c_logits, u_logits, gen_config): | CODE |
| LOW | omnivoice/models/omnivoice.py | 1552 | def _tokenize_with_nonverbal_tags(text: str, tokenizer) -> torch.Tensor: | CODE |
| LOW | omnivoice/cli/infer_batch.py | 255 | def estimate_sample_total_duration( | CODE |
| LOW | omnivoice/cli/infer_batch.py | 274 | def cluster_samples_by_duration( | CODE |
| LOW | omnivoice/cli/infer_batch.py | 316 | def cluster_samples_by_batch_size( | CODE |
| LOW | omnivoice/eval/wer/sensevoice.py | 185 | def run_eval_worker_sensevoice(data_chunk, batch_size): | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 48 | def read_language_mapping_from_tsv( | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 333 | def run_eval_worker_paraformer(data_chunk, batch_size): | CODE |
| LOW | omnivoice/eval/wer/fleurs.py | 90 | def read_language_mapping_from_tsv( | CODE |
| LOW | omnivoice/data/dataset.py | 66 | def prepare_data_manifests_from_json( | CODE |
| LOW | omnivoice/data/dataset.py | 161 | def webdataset_manifest_reader( | CODE |
| LOW⚡ | tests/test_mastering_no_hidden_reverb.py | 40 | def test_mastering_chain_contains_no_reverb(self): | CODE |
| LOW⚡ | tests/test_mastering_no_hidden_reverb.py | 44 | def test_mastering_chain_keeps_highpass_and_compressor(self): | CODE |
| LOW⚡ | tests/test_mastering_no_hidden_reverb.py | 53 | def test_no_reverb_presets_stay_reverb_free(self, preset_id): | CODE |
| LOW⚡ | tests/test_mastering_no_hidden_reverb.py | 58 | def test_user_chosen_reverb_survives(self, preset_id): | CODE |
| LOW⚡ | tests/test_mastering_no_hidden_reverb.py | 64 | def test_returns_same_shape_and_device(self): | CODE |
| LOW⚡ | tests/test_mastering_no_hidden_reverb.py | 72 | def test_no_echo_tail_bleeds_into_silence(self): | CODE |
| LOW | tests/test_mastering_no_hidden_reverb.py | 88 | def test_passthrough_when_pedalboard_missing(self, monkeypatch): | CODE |
| LOW | tests/test_db_schema_reconcile.py | 44 | def test_init_db_self_heals_missing_columns_when_alembic_fails(tmp_path, monkeypatch): | STRING |
| LOW | tests/test_db_schema_reconcile.py | 69 | def test_reconcile_converges_voice_profiles_to_base_schema(tmp_path): | STRING |
| LOW | tests/test_db_schema_reconcile.py | 78 | def test_reconcile_is_idempotent_and_additive_only(tmp_path): | STRING |
| LOW | tests/test_pkg_resources_available.py | 11 | def test_pkg_resources_importable(): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 41 | def test_off_by_default_even_when_the_build_ships_a_token(monkeypatch): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 48 | def test_opting_in_without_a_token_still_cannot_transmit(monkeypatch): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 62 | def test_kill_switch_outranks_everything(monkeypatch): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 69 | def test_withdrawing_consent_takes_effect_immediately(monkeypatch): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 79 | def test_a_broken_prefs_file_does_not_enable_tracking(monkeypatch): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 92 | def test_allowlist_drops_anything_that_could_carry_user_content(): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 125 | def test_a_long_string_is_refused_even_on_an_allowlisted_key(): | CODE |
| LOW⚡ | tests/test_analytics_optin.py | 132 | def test_sanitize_handles_none_and_empty(): | CODE |
| LOW | tests/test_analytics_optin.py | 171 | def test_capture_never_raises_even_if_the_sdk_explodes(monkeypatch): | CODE |
| LOW | tests/test_analytics_optin.py | 189 | def test_installation_id_is_random_not_derived_from_the_machine(): | CODE |
| LOW | tests/test_dub_voice_match.py | 45 | def test_consistent_pick_prefers_speaker_clone(): | CODE |
| LOW | tests/test_dub_voice_match.py | 76 | def test_consistent_pick_tie_breaks_on_lowest_segment_id(): | CODE |
| LOW | tests/test_dub_voice_match.py | 94 | def test_consistent_pick_all_clips_short_degrades_to_longest_overall(): | CODE |
| LOW | tests/test_dub_voice_match.py | 111 | def test_consistent_pick_scoped_per_speaker_and_memoized(): | CODE |
| LOW | tests/test_dub_voice_match.py | 133 | def test_consistent_pick_unknown_speaker_returns_none(): | CODE |
| LOW⚡ | tests/test_dub_voice_match.py | 153 | def test_voice_match_default_is_per_line(): | CODE |
| LOW⚡ | tests/test_dub_voice_match.py | 158 | def test_voice_match_accepts_both_modes_and_rejects_junk(): | CODE |
| LOW⚡ | tests/test_dub_voice_match.py | 168 | def test_fingerprint_mixes_in_voice_match_only_when_non_default(): | CODE |
| LOW | tests/test_dub_voice_match.py | 258 | async def _fake_resolve_generation_backend(**kwargs): | CODE |
| LOW | tests/test_dub_voice_match.py | 322 | def test_per_line_default_unchanged_four_different_refs(patched_generate): | CODE |
| LOW | tests/test_dub_voice_match.py | 333 | def test_consistent_heuristic_job_all_lines_share_one_ref(patched_generate): | CODE |
| LOW | tests/test_dub_voice_match.py | 347 | def test_consistent_pick_is_deterministic_across_runs(patched_generate): | CODE |
| LOW | tests/test_dub_voice_match.py | 358 | def test_consistent_auto_binding_uses_speaker_clone_not_segment_clip(patched_generate): | CODE |
| LOW | tests/test_dub_voice_match.py | 378 | def test_per_line_auto_binding_still_prefers_segment_clip(patched_generate): | CODE |
| 2360 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | omnivoice/models/omnivoice.py | 203 | except Exception: | CODE |
| LOW | omnivoice/cli/infer_batch.py | 499 | except Exception as e: | CODE |
| LOW⚡ | omnivoice/cli/demo.py | 213 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens.py | 256 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens.py | 317 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens.py | 506 | except Exception as exc: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens.py | 579 | except Exception: | CODE |
| LOW | omnivoice/scripts/denoise_audio.py | 607 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/denoise_audio.py | 670 | except Exception: | CODE |
| LOW | omnivoice/scripts/denoise_audio.py | 930 | except Exception as exc: | CODE |
| LOW | omnivoice/scripts/denoise_audio.py | 1002 | except Exception: | CODE |
| LOW | omnivoice/scripts/jsonl_to_webdataset.py | 186 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/jsonl_to_webdataset.py | 401 | except Exception as e: | CODE |
| MEDIUM | omnivoice/scripts/jsonl_to_webdataset.py | 421 | print(f"Error details: {error_log_path}") | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 334 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 345 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 380 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 446 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 507 | except Exception as e: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 701 | except Exception as exc: | CODE |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 779 | except Exception: | CODE |
| LOW | omnivoice/eval/mos/utmos.py | 127 | except Exception as e: | CODE |
| LOW | omnivoice/eval/mos/utmos.py | 151 | except Exception as e: | CODE |
| LOW | omnivoice/eval/mos/utmos.py | 191 | except Exception as e: | CODE |
| LOW | omnivoice/eval/speaker_similarity/sim.py | 178 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/sensevoice.py | 138 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/sensevoice.py | 157 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/sensevoice.py | 223 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/sensevoice.py | 309 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 191 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 211 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 226 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 324 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 365 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 482 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/minimax.py | 514 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/fleurs.py | 220 | except Exception as e: | STRING |
| LOW | omnivoice/eval/wer/fleurs.py | 236 | except Exception: | STRING |
| LOW | omnivoice/eval/wer/fleurs.py | 250 | except Exception as e: | STRING |
| LOW | omnivoice/eval/wer/fleurs.py | 318 | except Exception: | STRING |
| LOW | omnivoice/eval/wer/fleurs.py | 423 | except Exception as e: | STRING |
| LOW | omnivoice/eval/wer/hubert.py | 102 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/hubert.py | 115 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/hubert.py | 192 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/seedtts.py | 194 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/seedtts.py | 210 | except Exception as e: | CODE |
| LOW | omnivoice/eval/wer/seedtts.py | 273 | except Exception: | CODE |
| LOW | omnivoice/eval/wer/seedtts.py | 353 | except Exception as e: | CODE |
| LOW | omnivoice/data/batching.py | 144 | except Exception as e: | CODE |
| LOW | omnivoice/data/dataset.py | 447 | except Exception as e: | CODE |
| MEDIUM | tests/conftest.py | 255 | def _llm_prefs_snapshot() -> dict: | CODE |
| LOW | tests/conftest.py | 205 | except Exception: | CODE |
| LOW | tests/conftest.py | 223 | except Exception: | CODE |
| LOW | tests/conftest.py | 244 | except Exception: | CODE |
| LOW | tests/conftest.py | 259 | except Exception: | CODE |
| LOW | tests/conftest.py | 274 | except Exception: | CODE |
| LOW | tests/conftest.py | 312 | except Exception: | CODE |
| LOW | tests/test_dub_error_transparency.py | 234 | except Exception: | CODE |
| LOW | tests/test_dub_download_403.py | 92 | except Exception: | CODE |
| LOW | tests/test_generation_audio_guard.py | 88 | except Exception as inner: | CODE |
| 757 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | omnivoice/__init__.py | 22 | CODE | |
| LOW | omnivoice/__init__.py | 22 | CODE | |
| LOW | omnivoice/__init__.py | 22 | CODE | |
| LOW | omnivoice/utils/text.py | 27 | CODE | |
| LOW | omnivoice/cli/dub.py | 23 | CODE | |
| LOW | omnivoice/scripts/denoise_audio.py | 50 | CODE | |
| LOW | tests/test_analytics_optin.py | 13 | CODE | |
| LOW | tests/test_dub_voice_match.py | 18 | CODE | |
| LOW | tests/test_pronunciation.py | 6 | CODE | |
| LOW | tests/test_pronunciation.py | 10 | CODE | |
| LOW | tests/test_nemo_parakeet_install_hint.py | 16 | CODE | |
| LOW | tests/test_translator.py | 9 | CODE | |
| LOW | tests/test_translator.py | 10 | CODE | |
| LOW | tests/test_model_load_timeout.py | 8 | CODE | |
| LOW | tests/test_longform_e2e.py | 12 | CODE | |
| LOW | tests/test_longform_e2e.py | 16 | CODE | |
| LOW | tests/test_model_manager_preload.py | 1 | CODE | |
| LOW | tests/test_dub_dialect.py | 7 | CODE | |
| LOW | tests/test_dub_dialect.py | 9 | CODE | |
| LOW | tests/test_profile_design_save_decouple.py | 16 | CODE | |
| LOW | tests/test_llm_skills.py | 15 | CODE | |
| LOW | tests/test_confucius4_sidecar.py | 14 | CODE | |
| LOW | tests/test_segmentation.py | 5 | CODE | |
| LOW | tests/test_segmentation.py | 5 | CODE | |
| LOW | tests/test_segmentation.py | 5 | CODE | |
| LOW | tests/test_segmentation.py | 5 | CODE | |
| LOW | tests/test_segmentation.py | 5 | CODE | |
| LOW | tests/test_unified_memory_offload.py | 17 | CODE | |
| LOW | tests/test_mlx_supported.py | 6 | CODE | |
| LOW | tests/test_longform_synth_params.py | 22 | CODE | |
| LOW | tests/test_dub_transcribe.py | 8 | CODE | |
| LOW | tests/test_dub_transcribe.py | 10 | CODE | |
| LOW | tests/test_dub_transcribe.py | 12 | CODE | |
| LOW | tests/test_dub_transcribe.py | 165 | CODE | |
| LOW | tests/test_duration_planner.py | 16 | CODE | |
| LOW | tests/test_dub_no_tts_load_for_asr.py | 19 | CODE | |
| LOW | tests/test_socks_proxy.py | 22 | CODE | |
| LOW | tests/test_recurrence_hardening.py | 8 | CODE | |
| LOW | tests/test_asr_vram_preflight.py | 13 | CODE | |
| LOW | tests/test_asr_vram_preflight.py | 15 | CODE | |
| LOW | tests/test_generation_takes.py | 18 | CODE | |
| LOW | tests/test_memory_budget.py | 7 | CODE | |
| LOW | tests/test_generate_engine.py | 26 | CODE | |
| LOW | tests/test_pytorch_whisper_fallback.py | 11 | CODE | |
| LOW | tests/test_llm_openai_available.py | 10 | CODE | |
| LOW | tests/test_llm_openai_available.py | 14 | CODE | |
| LOW | tests/test_llm_openai_available.py | 15 | CODE | |
| LOW | tests/test_longform_render.py | 7 | CODE | |
| LOW | tests/test_longform_limits.py | 6 | CODE | |
| LOW | tests/test_asr_ffmpeg_decode.py | 14 | CODE | |
| LOW | tests/test_shutdown_preload_race_1000.py | 21 | CODE | |
| LOW | tests/test_longform_resume.py | 6 | CODE | |
| LOW | tests/test_longform_segment_cache.py | 11 | CODE | |
| LOW | tests/test_persona_kind.py | 9 | CODE | |
| LOW | tests/test_storage_report.py | 5 | CODE | |
| LOW | tests/test_dub_export_unique.py | 3 | CODE | |
| LOW | tests/test_dub_export_unique.py | 7 | CODE | |
| LOW | tests/test_window_launch_state.py | 10 | CODE | |
| LOW | tests/test_engine_memory.py | 13 | CODE | |
| LOW | tests/test_engines.py | 294 | CODE | |
| 385 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 41 | "pydub", | COMMENT |
| LOW | pyproject.toml | 61 | "pyinstaller>=6.19.0", | COMMENT |
| LOW | pyproject.toml | 81 | "yt-dlp>=2024.12.13", | COMMENT |
| LOW | pyproject.toml | 101 | "websockets", | COMMENT |
| LOW | pyproject.toml | 121 | # catalog — FDL spike 2026-06-13; plan removed with .planning/, see git history). | COMMENT |
| LOW | pyproject.toml | 141 | # openai` hint landed in the wrong interpreter on a managed venv. | COMMENT |
| LOW | pyproject.toml | 161 | # OS trust store for TLS (#976). Users behind a corporate/antivirus proxy | COMMENT |
| LOW | pyproject.toml | 201 | # `uv sync --extra supertonic` after accepting the OpenRAIL-M model | COMMENT |
| LOW | frontend/src-tauri/Cargo.toml | 41 | # Windows), creates a Python 3.11 venv, and runs `uv sync` against the | COMMENT |
| LOW | frontend/src-tauri/Cargo.toml | 61 | dirs-next = "2" | COMMENT |
| LOW | frontend/src-tauri/src/reset.rs | 1 | //! Scoped reset — Settings → Storage → "Reset & remove". | COMMENT |
| LOW | frontend/src-tauri/src/reset.rs | 21 | //! pointing at paths that no longer exist. | COMMENT |
| LOW | frontend/src-tauri/src/reset.rs | 201 | /// empty scope rather than silently omitting it. | COMMENT |
| LOW | frontend/src-tauri/src/tools.rs | 21 | // run setup. The string appears *twice* in each URL (once as the release tag, | COMMENT |
| LOW | frontend/src-tauri/src/crash.rs | 1 | //! Backend crash forensics (#941). | COMMENT |
| LOW | frontend/src-tauri/src/crash.rs | 81 | /// Unix seconds when the death was detected. | COMMENT |
| LOW | frontend/src-tauri/src/crash.rs | 101 | /// Tail of backend_err.log captured at death time. | COMMENT |
| LOW | frontend/src-tauri/src/crash.rs | 241 | /// | COMMENT |
| LOW | frontend/src-tauri/src/config.rs | 21 | /// - restricted: ghproxy.net for GitHub (catch-all for MENA, Africa, etc.) | COMMENT |
| LOW | frontend/src-tauri/src/config.rs | 41 | /// `updater_channel.rs` via `UpdaterExt::endpoints`, so switching takes | COMMENT |
| LOW | frontend/src-tauri/src/config.rs | 61 | /// None → backend platform default (env var not set at all). | COMMENT |
| LOW | frontend/src-tauri/src/backend.rs | 281 | /// Env the spawned backend needs in order to have an analytics destination at all. | COMMENT |
| LOW | frontend/src-tauri/src/updater_channel.rs | 1 | //! Channel-aware auto-update (Stable / Preview). | COMMENT |
| LOW | frontend/src-tauri/src/updater_channel.rs | 21 | const STABLE_MANIFEST: &str = | COMMENT |
| LOW | frontend/src-tauri/src/updater_channel.rs | 81 | /// `a` (the earlier-checked manifest, i.e. preview) wins ties. | COMMENT |
| LOW | frontend/src-tauri/src/updater_channel.rs | 261 | /// Documents the #326 root cause: under plain semver (the plugin's | COMMENT |
| LOW | frontend/src-tauri/src/lib.rs | 61 | pub current: Mutex<Option<tauri_plugin_global_shortcut::Shortcut>>, | COMMENT |
| LOW | frontend/src-tauri/src/lib.rs | 81 | // applies on top. | COMMENT |
| LOW | frontend/src-tauri/src/lib.rs | 221 | // Windows counterpart of #287 (macOS auto-paste — don't steal focus). The | COMMENT |
| LOW | frontend/src-tauri/src/lib.rs | 241 | // `set_focus()` calls at those same sites are skipped on Windows (the | COMMENT |
| LOW | frontend/src-tauri/src/lib.rs | 501 | if let Some(win) = app_handle.get_webview_window("widget") { | COMMENT |
| LOW | frontend/src-tauri/src/lib.rs | 721 | // Pill mode: hide the main window | COMMENT |
| LOW | frontend/src-tauri/src/lib.rs | 761 | // runtime: macOS can ignore `maximized: true` from | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 21 | #[derive(Clone, Serialize, Debug)] | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 381 | // uvicorn process then died mid-session — a CUDA OOM/context fault under a | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 681 | /// default GitHub releases host is blocked/unresolvable (#60). Points | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 741 | COMMENT | |
| LOW | frontend/src-tauri/src/bootstrap.rs | 761 | low.contains("download.pytorch.org") | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 781 | /// into this venv) on every single update. `--inexact` still installs/ | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 821 | } | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 901 | /// itself is structurally broken — either the CPython venv launcher's | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 961 | // (dev loop only). Neither `scripts/` nor `setup.py` is bundled as a Tauri | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 1061 | /// Marker recording a cached negative CUDA probe for this venv. Lives inside | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 1301 | if res_backend.is_dir() { | COMMENT |
| LOW | frontend/src-tauri/src/bootstrap.rs | 2101 | // No structural problem + interpreter provably healthy → NEVER delete | COMMENT |
| LOW | frontend/src-tauri/src/commands.rs | 381 | COMMENT | |
| LOW | frontend/src-tauri/src/commands.rs | 541 | // Deleting EBWebView from inside a running app fails — the WebView2 browser | COMMENT |
| LOW | frontend/src-tauri/src/uninstall.rs | 1 | //! In-app uninstall — "remove all OmniVoice data" (#1089). | COMMENT |
| LOW | frontend/src-tauri/src/setup.rs | 1 | //! First-run install setup: the pre-bootstrap configuration surface. | COMMENT |
| LOW | frontend/src-tauri/src/setup.rs | 201 | COMMENT | |
| LOW | frontend/src-tauri/src/setup.rs | 261 | COMMENT | |
| LOW | frontend/src/main.jsx | 21 | COMMENT | |
| LOW | frontend/src/App.jsx | 101 | COMMENT | |
| LOW | frontend/src/App.jsx | 541 | const setIsSidebarCollapsed = useAppStore((s) => s.setIsSidebarCollapsed); | COMMENT |
| LOW | frontend/src/ui/Panel.jsx | 1 | import React, { forwardRef } from 'react'; | COMMENT |
| LOW | frontend/src/ui/index.js | 1 | // ───────────────────────────────────────────────────────────────── | COMMENT |
| LOW | frontend/src/ui/Tabs.jsx | 21 | size = 'md', | COMMENT |
| LOW | frontend/src/test/DubTrackTabsRestore.test.jsx | 1 | import React from 'react'; | COMMENT |
| LOW | frontend/src/test/featureCoverage.test.js | 1 | // WebUI feature-coverage guard — the frontend counterpart to the backend's | COMMENT |
| LOW | frontend/src/test/LaunchpadDeck.test.jsx | 1 | // Launchpad feature-card regression suite (feat/launchpad-fullwidth). | COMMENT |
| 194 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | omnivoice/cli/infer.py | 0 | auto-detect the best available device: cuda > mps > cpu. | STRING |
| HIGH | omnivoice/cli/infer_batch.py | 0 | auto-detect the best available device: cuda > mps > cpu. | STRING |
| HIGH | omnivoice/cli/demo.py | 0 | auto-detect the best available device: cuda > mps > cpu. | STRING |
| HIGH | omnivoice/scripts/extract_audio_tokens.py | 0 | convert tensors and numpy scalars to serialisable python objects. | STRING |
| HIGH | omnivoice/scripts/denoise_audio.py | 0 | convert tensors and numpy scalars to serialisable python objects. | STRING |
| HIGH | omnivoice/scripts/extract_audio_tokens_add_noise.py | 0 | convert tensors and numpy scalars to serialisable python objects. | STRING |
| HIGH | omnivoice/eval/wer/minimax.py | 0 | cleans and normalizes text for wer calculation. args: text (str): the input text to be processed. returns: str: the clea | STRING |
| HIGH | omnivoice/eval/wer/fleurs.py | 0 | cleans and normalizes text for wer calculation. args: text (str): the input text to be processed. returns: str: the clea | STRING |
| HIGH | omnivoice/eval/wer/seedtts.py | 0 | cleans and normalizes text for wer calculation. args: text (str): the input text to be processed. returns: str: the clea | STRING |
| HIGH | omnivoice/eval/wer/hubert.py | 0 | cleans and normalizes text for wer calculation. args: text (str): the input text to be processed. returns: str: the clea | STRING |
| HIGH | omnivoice/eval/wer/minimax.py | 0 | worker function to process a chunk of data. uses the global worker_pipe initialized by process_init. | STRING |
| HIGH | omnivoice/eval/wer/fleurs.py | 0 | worker function to process a chunk of data. uses the global worker_pipe initialized by process_init. | STRING |
| HIGH | omnivoice/eval/wer/seedtts.py | 0 | worker function to process a chunk of data. uses the global worker_pipe initialized by process_init. | STRING |
| HIGH | tests/test_migration_0007_instruct_rebuild.py | 0 | create table voice_profiles ( id text primary key, name text not null, ref_audio_path text, ref_text text default '', in | STRING |
| HIGH | tests/test_profile_consent.py | 0 | create table voice_profiles ( id text primary key, name text not null, ref_audio_path text, ref_text text default '', in | STRING |
| HIGH | tests/test_migration_0006_instruct.py | 0 | create table voice_profiles ( id text primary key, name text not null, ref_audio_path text, ref_text text default '', in | STRING |
| HIGH | tests/test_dub_multispeaker_voice_486.py | 0 | adapts the list-returning _fakemodel above to the ttsbackend.generate() contract (a single tensor, not a list) that reso | STRING |
| HIGH | tests/test_smart_fit_generate.py | 0 | adapts the list-returning _fakemodel above to the ttsbackend.generate() contract (a single tensor, not a list) that reso | STRING |
| HIGH | tests/test_redub_incremental.py | 0 | adapts the list-returning _fakemodel above to the ttsbackend.generate() contract (a single tensor, not a list) that reso | STRING |
| HIGH | backend/engines/moss_tts_v15/bootstrap.py | 0 | clear the resolved-python cache. tests call this between scenarios. | STRING |
| HIGH | backend/engines/dots_tts/bootstrap.py | 0 | clear the resolved-python cache. tests call this between scenarios. | STRING |
| HIGH | backend/engines/confucius4/bootstrap.py | 0 | clear the resolved-python cache. tests call this between scenarios. | STRING |
| HIGH | backend/engines/indextts/bootstrap.py | 0 | clear the resolved-python cache. tests call this between scenarios. | STRING |
| HIGH | backend/engines/moss_tts_v15/main.py | 0 | dispatch one synthesize request. emits the audio frame or raises. | STRING |
| HIGH | backend/engines/dots_tts/main.py | 0 | dispatch one synthesize request. emits the audio frame or raises. | STRING |
| HIGH | backend/engines/supertonic3/sidecar.py | 0 | dispatch one synthesize request. emits the audio frame or raises. | STRING |
| HIGH | backend/engines/indextts/main.py | 0 | dispatch one synthesize request. emits the audio frame or raises. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | omnivoice/training/checkpoint.py | 85 | CODE | |
| LOW | omnivoice/training/trainer.py | 243 | CODE | |
| LOW | omnivoice/utils/text.py | 120 | CODE | |
| LOW | omnivoice/cli/dub.py | 85 | CODE | |
| LOW | omnivoice/cli/infer_batch.py | 405 | CODE | |
| LOW | omnivoice/cli/demo.py | 154 | CODE | |
| LOW | omnivoice/scripts/extract_audio_tokens.py | 322 | CODE | |
| LOW | omnivoice/scripts/denoise_audio.py | 740 | CODE | |
| LOW | omnivoice/scripts/denoise_audio.py | 426 | CODE | |
| LOW | omnivoice/scripts/jsonl_to_webdataset.py | 190 | CODE | |
| LOW | omnivoice/scripts/jsonl_to_webdataset.py | 267 | CODE | |
| LOW | omnivoice/scripts/extract_audio_tokens_add_noise.py | 512 | CODE | |
| LOW | omnivoice/eval/mos/utmos.py | 159 | CODE | |
| LOW | omnivoice/eval/speaker_similarity/sim.py | 183 | CODE | |
| LOW | omnivoice/eval/wer/sensevoice.py | 230 | CODE | |
| LOW | omnivoice/eval/wer/minimax.py | 372 | CODE | |
| LOW | omnivoice/eval/wer/fleurs.py | 327 | CODE | |
| LOW | omnivoice/eval/wer/seedtts.py | 215 | CODE | |
| LOW | omnivoice/eval/wer/seedtts.py | 282 | CODE | |
| LOW | omnivoice/data/dataset.py | 66 | CODE | |
| LOW | omnivoice/data/dataset.py | 222 | CODE | |
| LOW | tests/conftest.py | 186 | CODE | |
| LOW | tests/conftest.py | 228 | CODE | |
| LOW | tests/test_no_literal_borders.py | 107 | CODE | |
| LOW | tests/test_no_hardcoded_cjk.py | 101 | CODE | |
| LOW | tests/test_sherpa_ws_streaming.py | 102 | CODE | |
| LOW | tests/test_api.py | 322 | CODE | |
| LOW | tests/backend/test_dub_pipeline_wav.py | 55 | CODE | |
| LOW | tests/probe/spec.py | 182 | CODE | |
| LOW | backend/main.py | 215 | CODE | |
| LOW | backend/core/db.py | 228 | CODE | |
| LOW | backend/core/tasks.py | 96 | CODE | |
| LOW | backend/core/archetypes.py | 378 | CODE | |
| LOW | backend/core/device_caps.py | 85 | CODE | |
| LOW | backend/core/failure.py | 367 | CODE | |
| LOW | backend/core/logging_filter.py | 32 | CODE | |
| LOW | backend/core/error_journal.py | 137 | CODE | |
| LOW | backend/core/error_journal.py | 161 | CODE | |
| LOW | backend/core/job_queue.py | 174 | CODE | |
| LOW | backend/engines/_echo/main.py | 79 | CODE | |
| LOW | backend/engines/omnivoice_gguf/backend.py | 147 | CODE | |
| LOW | backend/engines/omnivoice_gguf/backend.py | 272 | CODE | |
| LOW | backend/engines/omnivoice_gguf/backend.py | 394 | CODE | |
| LOW | backend/engines/moss_tts_v15/main.py | 250 | CODE | |
| LOW | backend/engines/dots_tts/main.py | 206 | CODE | |
| LOW | backend/engines/supertonic3/sidecar.py | 316 | CODE | |
| LOW | backend/engines/_asr_sidecar/main.py | 69 | CODE | |
| LOW | backend/engines/_asr_sidecar/main.py | 116 | CODE | |
| LOW | backend/engines/confucius4/main.py | 173 | CODE | |
| LOW | backend/engines/indextts/main.py | 269 | CODE | |
| LOW | backend/api/routers/audiobook.py | 759 | CODE | |
| LOW | backend/api/routers/dub_generate.py | 256 | CODE | |
| LOW | backend/api/routers/dub_generate.py | 1421 | CODE | |
| LOW | backend/api/routers/dub_generate.py | 279 | CODE | |
| LOW | backend/api/routers/dub_generate.py | 1439 | CODE | |
| LOW | backend/api/routers/dub_generate.py | 370 | CODE | |
| LOW | backend/api/routers/dub_generate.py | 548 | CODE | |
| LOW | backend/api/routers/exports.py | 67 | CODE | |
| LOW | backend/api/routers/exports.py | 130 | CODE | |
| LOW | backend/api/routers/system.py | 44 | CODE | |
| 95 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_sentence_chunker.py | 29 | emitted.extend(chunker.push(token)) | CODE |
| HIGH⚡ | tests/test_sentence_chunker.py | 57 | out = chunker.push("First thing here today. Second thing follows it. Third!") | CODE |
| HIGH⚡ | tests/test_sentence_chunker.py | 64 | out = chunker.push("Just the one sentence without much else going on.") | CODE |
| HIGH⚡ | tests/test_dub_translation_quality.py | 80 | "TERM: Chef Okonkwo || Chef Okonkwo\n" | CODE |
| HIGH⚡ | tests/test_dub_translation_quality.py | 81 | "TERM: flat-top grill || plancha\n" | CODE |
| HIGH | tests/probe/web.py | 229 | raise RuntimeError("playwright not installed: `uv add playwright && playwright install chromium`") | CODE |
| HIGH⚡ | tests/probe/test_probe_web.py | 171 | pytest.importorskip("playwright", reason="L2 live browser: `uv add playwright && playwright install chromium`") | CODE |
| HIGH | backend/engines/moss_tts_v15/__init__.py | 74 | uv venv && uv pip install -e ".[torch-runtime]" | STRING |
| HIGH | backend/engines/dots_tts/__init__.py | 56 | uv venv && uv pip install -e . -c constraints/recommended.txt | STRING |
| HIGH | backend/engines/confucius4/__init__.py | 49 | uv venv --python 3.10 && uv pip install -r requirements.txt | STRING |
| HIGH | backend/engines/indextts/__init__.py | 65 | cd index-tts && uv pip install -e . # NOT uv sync --all-extras | STRING |
| HIGH⚡ | backend/api/routers/system.py | 1030 | returns ``{"quarantined": false, "error_class": null}``. The React | STRING |
| HIGH | backend/api/routers/tts_stream.py | 194 | sentences = _chunker.push(text) | CODE |
| HIGH | backend/api/routers/glossary.py | 180 | SOURCE || TARGET || one-line note (or empty) | CODE |
| HIGH | backend/services/translation_quality.py | 47 | TERM: SOURCE || TARGET | CODE |
| HIGH | backend/services/translation_quality.py | 48 | TERM: SOURCE || TARGET | CODE |
| HIGH | backend/services/tts_backend.py | 1747 | "moss-tts-nano": "git clone OpenMOSS/MOSS-TTS-Nano && pip install -e . (not on PyPI)", | CODE |
| HIGH | backend/services/tts_backend.py | 1748 | "indextts2": "git clone index-tts/index-tts && uv pip install -e . (NOT uv sync --all-extras)", | CODE |
| HIGH | backend/services/tts_backend.py | 1237 | cd CosyVoice && pip install -r requirements.txt | STRING |
| HIGH | backend/services/sentence_chunker.py | 310 | for sentence in chunker.push(token): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 86 | # zero-shot clone: when the caller just needs fast English narration with | COMMENT |
| MEDIUM⚡ | tests/test_speaker_clone_purity.py | 157 | # ref_text) breaks zero-shot TTS prompt priming badly enough that the | COMMENT |
| MEDIUM⚡ | tests/test_autofit_838.py | 84 | assert res["text"] == text # hallucination never adopted | CODE |
| MEDIUM | tests/probe/README.md | 127 | uv add anthropic # L2 agentic self-heal (LLMHealer); set ANTHROPIC_API_KEY | CODE |
| MEDIUM⚡ | tests/probe/test_probe_web.py | 111 | # ── LLM-backed agentic healer (offline, injected completion) ───────────────────── | COMMENT |
| MEDIUM | backend/api/routers/dub_generate.py | 169 | # Below ~3 s zero-shot prompt-priming gets unstable, so prefer clips at or | COMMENT |
| MEDIUM | backend/api/routers/capture.py | 118 | # Wave 1.1: strip Whisper hallucination loops from the final text. | COMMENT |
| MEDIUM⚡ | backend/api/routers/capture_ws.py | 142 | # WebSocket dependency injection differs across FastAPI versions, so we | COMMENT |
| MEDIUM | backend/api/routers/capture_ws.py | 819 | # Wave 1.1: strip Whisper hallucination loops from the final | COMMENT |
| MEDIUM | backend/api/routers/profiles.py | 423 | # check — agentic features and gallery sharing gate on the flag; plain local | COMMENT |
| MEDIUM | backend/api/routers/glossary.py | 210 | # Concat all text — capped so we don't blow the context window on long projects. | COMMENT |
| MEDIUM | backend/services/tts_backend.py | 447 | # OmniVoice advertises 600+ zero-shot — `"multi"` is the honest tag. | COMMENT |
| MEDIUM | backend/services/tts_backend.py | 1649 | # cross-lingual zero-shot cloning, Apache-2.0. Opt-in + subprocess-isolated | COMMENT |
| MEDIUM | backend/services/refinement.py | 157 | # ("wooooooow", "hmmmmm") that aren't hallucinations. re.DOTALL so a | COMMENT |
| MEDIUM | backend/services/speaker_clone.py | 42 | # is the empirical floor below which our zero-shot clone gets unstable. | COMMENT |
| MEDIUM | docs/competitive-analysis.md | 17 | the feature roadmap announced in discussion #346 — agentic voice workflows, remote | CODE |
| MEDIUM | docs/competitive-analysis.md | 235 | | 3 | **Dictation refinement**: deterministic repetition-collapse pre-pass + optional local-LLM filler-word removal befo | CODE |
| MEDIUM | docs/specs/00-roadmap-elevenlabs-parity.md | 151 | | `longform/` (#21–#34) | **F** | Granular per-task implementation specs (tied to tasks #21–34). Their capabilities feed | CODE |
| MEDIUM | docs/specs/longform/32-phone-calls.md | 5 | Ship the §R1 **v3 telephony** rung of the agentic-voice workflow: outbound phone calls placed by an embedded [pipecat](h | CODE |
| MEDIUM | docs/specs/longform/32-phone-calls.md | 5 | Ship the §R1 **v3 telephony** rung of the agentic-voice workflow: outbound phone calls placed by an embedded [pipecat](h | CODE |
| MEDIUM | docs/specs/longform/32-phone-calls.md | 197 | ### Watermark: always-on for agentic output | COMMENT |
| MEDIUM | scripts/validate-install-docs.py | 59 | # Skip pure-comment lines — they're docs scaffolding, not commands. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/test/SupportPageSponsors.test.jsx | 64 | name: 'Acme Corp', | CODE |
| LOW | frontend/src/test/SupportPageSponsors.test.jsx | 87 | const img = screen.getByAltText('Acme Corp'); | CODE |
| LOW | frontend/src/test/visual/specs.jsx | 379 | <Input placeholder="Jane Doe" /> | CODE |
| LOW | frontend/src/config/sponsors.js | 22 | * name: 'Acme Corp', // display name + <img alt> | COMMENT |
| LOW | …src/components/settings/HistoryRetentionPanel.test.jsx | 87 | expect(screen.getByTestId('history-retention-input')).toHaveAttribute('placeholder', '200'); | CODE |
| LOW | frontend/src/i18n/locales/tr.json | 1382 | "placeholder": "örneğin acil ve şaşırmış / sıcak, umutlu / fısıldayan, samimi", | CODE |
| LOW | frontend/src/i18n/locales/tr.json | 1493 | "placeholder": "Duymak için bir şeyler yazın…", | CODE |
| LOW | frontend/src/i18n/locales/nl.json | 1382 | "placeholder": "bijv. urgent en verrast/warm, hoopvol/gefluisterd, intiem", | CODE |
| LOW | frontend/src/i18n/locales/nl.json | 1493 | "placeholder": "Typ iets om te horen...", | CODE |
| LOW | frontend/src/i18n/locales/ja.json | 1382 | "placeholder": "例:緊急で驚いた / 温かく、希望に満ちた / ささやき、親密な", | CODE |
| LOW | frontend/src/i18n/locales/ja.json | 1493 | "placeholder": "聞きたいことを入力してください…", | CODE |
| LOW | frontend/src/i18n/locales/de.json | 1382 | "placeholder": "z.B. dringend und überrascht / warm, hoffnungsvoll / geflüstert, intim", | CODE |
| LOW | frontend/src/i18n/locales/de.json | 1493 | "placeholder": "Geben Sie etwas ein, das Sie hören möchten …", | CODE |
| LOW | frontend/src/i18n/locales/ru.json | 1382 | "placeholder": "например настойчиво и удивленно / тепло, обнадеживающе / шепотом, интимно", | CODE |
| LOW | frontend/src/i18n/locales/ru.json | 1493 | "placeholder": "Введите что-нибудь, чтобы услышать…", | CODE |
| LOW | frontend/src/i18n/locales/pl.json | 1382 | "placeholder": "np. pilne i zaskoczone / ciepłe, pełne nadziei / szeptane, intymne", | CODE |
| LOW | frontend/src/i18n/locales/pl.json | 1493 | "placeholder": "Wpisz coś, co chcesz usłyszeć…", | CODE |
| LOW | frontend/src/i18n/locales/uk.json | 1382 | "placeholder": "напр. терміновий і здивований / теплий, з надією / прошепотів, інтимний", | CODE |
| LOW | frontend/src/i18n/locales/uk.json | 1493 | "placeholder": "Введіть щось, щоб почути…", | CODE |
| LOW | frontend/src/i18n/locales/zh-CN.json | 1388 | "placeholder": "例如紧急而惊讶/温暖、充满希望/低声、亲密", | CODE |
| LOW | frontend/src/i18n/locales/zh-CN.json | 1499 | "placeholder": "输入要听的内容...", | CODE |
| LOW | frontend/src/i18n/locales/pt.json | 1382 | "placeholder": "por exemplo urgente e surpreso / caloroso, esperançoso / sussurrado, íntimo", | CODE |
| LOW | frontend/src/i18n/locales/pt.json | 1493 | "placeholder": "Digite algo para ouvir…", | CODE |
| LOW | frontend/src/i18n/locales/en.json | 1737 | "placeholder": "e.g. urgent and surprised / warm, hopeful / whispered, intimate", | CODE |
| LOW | frontend/src/i18n/locales/en.json | 1983 | "placeholder": "Type something to hear…", | CODE |
| LOW | frontend/src/i18n/locales/it.json | 1382 | "placeholder": "ad es. urgente e sorpreso / caldo, speranzoso / sussurrato, intimo", | CODE |
| LOW | frontend/src/i18n/locales/it.json | 1493 | "placeholder": "Digita qualcosa da ascoltare...", | CODE |
| LOW | frontend/src/i18n/locales/fr.json | 1382 | "placeholder": "par ex. urgent et surpris / chaleureux, plein d'espoir / murmuré, intime", | CODE |
| LOW | frontend/src/i18n/locales/fr.json | 1493 | "placeholder": "Tapez quelque chose à entendre…", | CODE |
| LOW | frontend/src/i18n/locales/hi.json | 1382 | "placeholder": "जैसे अत्यावश्यक और आश्चर्यचकित / गर्म, आशावान / फुसफुसाए हुए, अंतरंग", | CODE |
| LOW | frontend/src/i18n/locales/hi.json | 1493 | "placeholder": "सुनने के लिए कुछ टाइप करें...", | CODE |
| LOW | frontend/src/i18n/locales/ko.json | 1382 | "placeholder": "예를 들어 다급하고 놀라는 / 따뜻하고 희망적인 / 속삭이는, 친밀한", | CODE |
| LOW | frontend/src/i18n/locales/ko.json | 1493 | "placeholder": "듣고 싶은 내용을 입력하세요…", | CODE |
| LOW | frontend/src/i18n/locales/zh-TW.json | 1382 | "placeholder": "例如緊急而驚訝/溫暖、充滿希望/低聲、親密", | CODE |
| LOW | frontend/src/i18n/locales/zh-TW.json | 1493 | "placeholder": "輸入要聽的內容...", | CODE |
| LOW | frontend/src/i18n/locales/vi.json | 1382 | "placeholder": "ví dụ: cấp bách và ngạc nhiên/ấm áp, hy vọng/thì thầm, thân mật", | CODE |
| LOW | frontend/src/i18n/locales/vi.json | 1493 | "placeholder": "Nhập nội dung nào đó để nghe…", | CODE |
| LOW | frontend/src/i18n/locales/id.json | 1382 | "placeholder": "misalnya mendesak dan terkejut / hangat, penuh harapan / berbisik, intim", | CODE |
| LOW | frontend/src/i18n/locales/id.json | 1493 | "placeholder": "Ketik sesuatu untuk didengar…", | CODE |
| LOW | frontend/src/i18n/locales/th.json | 1382 | "placeholder": "เช่น เร่งด่วนและประหลาดใจ / อบอุ่น มีความหวัง / กระซิบใกล้ชิด", | CODE |
| LOW | frontend/src/i18n/locales/th.json | 1493 | "placeholder": "พิมพ์บางอย่างเพื่อฟัง...", | CODE |
| LOW | frontend/src/i18n/locales/sv.json | 1382 | "placeholder": "t.ex. akut och förvånad / varm, hoppfull / viskande, intim", | CODE |
| LOW | frontend/src/i18n/locales/sv.json | 1493 | "placeholder": "Skriv något att höra...", | CODE |
| LOW | frontend/src/i18n/locales/es.json | 1382 | "placeholder": "por ej. urgente y sorprendido / cálido, esperanzado / susurrado, íntimo", | CODE |
| LOW | frontend/src/i18n/locales/es.json | 1493 | "placeholder": "Escribe algo para escuchar...", | CODE |
| LOW | frontend/src/i18n/locales/ar.json | 1382 | "placeholder": "على سبيل المثال عاجل ومتفاجئ / دافئ، متفائل / هامس، حميم", | CODE |
| LOW | frontend/src/i18n/locales/ar.json | 1493 | "placeholder": "اكتب شيئًا لسماعه...", | CODE |
| LOW | tests/backend/engines/test_omnivoice_gguf.py | 136 | fake_bin.write_bytes(b"placeholder") | CODE |
| LOW | tests/backend/engines/test_omnivoice_gguf.py | 152 | fake_bin.write_bytes(b"placeholder") | CODE |
| LOW⚡ | tests/backend/services/test_tts_backend_registry.py | 340 | fake_token = "hf_" + "A" * 34 | CODE |
| LOW⚡ | tests/backend/services/test_tts_backend_registry.py | 341 | masked = tts_backend._available_hint(f"ready — re-auth with {fake_token}") | CODE |
| LOW⚡ | tests/backend/services/test_tts_backend_registry.py | 343 | assert fake_token not in masked | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | omnivoice/__init__.py | 28 | __all__ = ["OmniVoice", "OmniVoiceConfig", "OmniVoiceGenerationConfig"] | CODE |
| LOW | omnivoice/training/checkpoint.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | omnivoice/training/builder.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | omnivoice/training/trainer.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | omnivoice/models/omnivoice.py | 76 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/probe/__init__.py | 26 | __all__ = ["JudgeResult", "Spec", "load_spec", "run_judges", "JUDGE_REGISTRY"] | CODE |
| LOW⚡ | backend/core/device_caps.py | 271 | __all__ = [ | CODE |
| LOW | backend/core/onboarding.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | backend/core/user_env.py | 63 | def set_user_env(key: str, value: str, path: Optional[str] = None) -> None: | CODE |
| LOW | backend/core/analytics.py | 86 | def set_opted_in(enabled: bool) -> None: | CODE |
| LOW | backend/core/job_store.py | 65 | def _update_status(job_id: str, status: str, *, finished: bool = False, error: Optional[str] = None) -> None: | CODE |
| LOW | backend/utils/hf_progress.py | 75 | def set_byte_sink(fn: Optional[Callable]) -> None: | CODE |
| LOW | backend/utils/download_aggregator.py | 65 | def update_byte_bar(self, key: object, downloaded: int, total: Optional[int]) -> None: | CODE |
| LOW | backend/utils/download_aggregator.py | 77 | def update_files(self, done: int, total: Optional[int]) -> None: | CODE |
| LOW | backend/engines/omnivoice_gguf/backend.py | 779 | __all__ = [ | CODE |
| LOW | backend/engines/omnivoice_gguf/__init__.py | 22 | __all__ = ["OmniVoiceGGUFBackend"] | CODE |
| LOW | backend/engines/omnivoice_gguf/hardware_probe.py | 127 | __all__ = ["ComputeClass", "HardwareCapabilities", "detect_capabilities"] | CODE |
| LOW | backend/engines/moss_tts_v15/bootstrap.py | 267 | __all__ = [ | CODE |
| LOW | backend/engines/moss_tts_v15/__init__.py | 194 | __all__ = ["MossTTSV15Backend", "TOKENS_PER_SECOND"] | CODE |
| LOW | backend/engines/dots_tts/bootstrap.py | 221 | __all__ = [ | CODE |
| LOW | backend/engines/dots_tts/__init__.py | 187 | __all__ = ["DotsTTSBackend"] | CODE |
| LOW | backend/engines/supertonic3/backend.py | 215 | __all__ = ["Supertonic3Backend", "SUPERTONIC3_SIDECAR_SCRIPT"] | CODE |
| LOW | backend/engines/supertonic3/__init__.py | 35 | __all__ = ["Supertonic3Backend"] | CODE |
| LOW | backend/engines/confucius4/bootstrap.py | 212 | __all__ = [ | CODE |
| LOW | backend/engines/confucius4/__init__.py | 134 | __all__ = ["Confucius4Backend"] | CODE |
| LOW | backend/engines/indextts/bootstrap.py | 270 | __all__ = [ | CODE |
| LOW | backend/engines/indextts/__init__.py | 213 | __all__ = ["IndexTTS2Backend"] | CODE |
| LOW | backend/api/routers/setup/models.py | 396 | def _set_cache(key: str, value: object) -> None: | CODE |
| LOW | backend/services/persona_bundle.py | 430 | __all__ = [ | CODE |
| LOW | backend/services/subprocess_backend.py | 684 | __all__ = [ | CODE |
| LOW | backend/services/settings_store.py | 76 | def set_hf_token(token: str) -> None: | CODE |
| LOW | backend/services/settings_store.py | 166 | def set_secret(name: str, value: str) -> None: | CODE |
| LOW | backend/services/settings_store.py | 250 | def set_text(key: str, value: str) -> None: | CODE |
| LOW | backend/services/settings_store.py | 297 | def set_quant_override(value: Optional[str]) -> None: | CODE |
| LOW | backend/services/settings_store.py | 408 | def set_license_accepted(engine_id: str, accepted: bool) -> None: | CODE |
| LOW | backend/services/llm_providers.py | 292 | def set_active_provider(pid: str) -> None: | CODE |
| LOW | backend/services/engine_routing.py | 167 | __all__ = [ | CODE |
| LOW⚡ | backend/services/media_tools.py | 117 | def _set_op(op: str, **fields) -> None: | CODE |
| LOW⚡ | backend/services/loudness.py | 68 | __all__ = ["measure_loudness"] | CODE |
| LOW | backend/services/sidecar_install.py | 910 | __all__ = [ | CODE |
| LOW⚡ | backend/services/endpoint_race.py | 282 | def set_mode_pref(value: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src/App.jsx | 146 | // Measuring a real zoomed element is robust where @supports(zoom)/UA-sniffing | COMMENT |
| MEDIUM | frontend/src/App.jsx | 666 | // 4. Global Drag and drop for seamless native feeling | COMMENT |
| MEDIUM | tests/test_dub_error_transparency.py | 89 | # Capture directly on the task logger — robust against the app's logging | COMMENT |
| MEDIUM | tests/test_dictation_router.py | 64 | # the store the handler actually used — robust to prefs-reference swaps). | COMMENT |
| MEDIUM | tests/probe/specs/i18n_parity.probe.yaml | 8 | # since fixing the en locale is a product change, not a harness change. | COMMENT |
| MEDIUM | backend/services/srt_parser.py | 66 | # timing line (or end of file). This is robust to missing index | COMMENT |
| MEDIUM | backend/services/pronunciation.py | 84 | # casefold (not lower) for robust Unicode case-insensitive lookup. | COMMENT |
| LOW | backend/services/speech_rate.py | 70 | # Max LLM attempts per segment. Past this we just return the best we got. | COMMENT |
| MEDIUM | scripts/smoke-test.sh | 331 | # isn't reachable from this harness. | COMMENT |
| MEDIUM | scripts/smoke-test.sh | 344 | # bootstrap regression, not harness networking. UV_PYTHON_PREFERENCE=only-system | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .claude/skills/omnivoice/scripts/record-reference.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/build-omnivoice-tts.sh | 9 | # Usage: | COMMENT |
| LOW⚡ | scripts/desktop-prod.sh | 11 | # Usage: | COMMENT |
| LOW | scripts/macos-dev-unquarantine.sh | 13 | # Usage: | COMMENT |
| LOW | scripts/install.sh | 7 | # Usage: | COMMENT |
| LOW | scripts/run.sh | 7 | # Usage: | COMMENT |
| LOW | scripts/build_demos.sh | 13 | # Usage: | COMMENT |
| LOW | scripts/smoke-gguf.sh | 10 | # Usage: | COMMENT |
| LOW | scripts/verify-macos-signing.sh | 24 | # Usage: | COMMENT |
| LOW | scripts/smoke-test.sh | 21 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | omnivoice/models/omnivoice.py | 505 | CODE | |
| LOW | omnivoice/models/omnivoice.py | 918 | CODE | |
| LOW | omnivoice/scripts/denoise_audio.py | 237 | CODE | |
| LOW | omnivoice/scripts/jsonl_to_webdataset.py | 267 | CODE | |
| LOW | omnivoice/eval/models/ecapa_tdnn_wavlm.py | 158 | CODE | |
| LOW | omnivoice/eval/models/ecapa_tdnn_wavlm.py | 222 | CODE | |
| LOW | omnivoice/eval/models/ecapa_tdnn_wavlm.py | 272 | CODE | |
| LOW | tests/test_device_caps.py | 19 | CODE | |
| LOW | backend/core/archetypes.py | 439 | CODE | |
| LOW | backend/api/routers/audiobook.py | 481 | CODE | |
| LOW | backend/api/routers/generation.py | 745 | CODE | |
| LOW | backend/api/routers/archetypes.py | 200 | CODE | |
| LOW | backend/api/routers/sonitranslate.py | 59 | CODE | |
| LOW | backend/api/routers/community.py | 177 | CODE | |
| LOW | backend/api/routers/profiles.py | 43 | CODE | |
| LOW | backend/services/tts_backend.py | 209 | CODE | |
| LOW | backend/services/segmented_download.py | 106 | CODE | |
| LOW | backend/services/asr_backend.py | 1067 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_router_smoke.py | 23 | # Create the DB schema explicitly against whatever DB is active *now*. | COMMENT |
| MEDIUM | tests/backend/engines/test_omnivoice_gguf.py | 107 | # Create a fake binary on disk with known contents. | COMMENT |
| MEDIUM | backend/core/user_env.py | 32 | # Create the file with 0600 from the start (no world-readable window before | COMMENT |
| MEDIUM | backend/config/models.yaml | 3 | # This file is the source of truth for all known HuggingFace models. | COMMENT |
| MEDIUM | backend/api/routers/marketplace.py | 203 | # Create the profile in the database | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | omnivoice/data/batching.py | 153 | # Check if adding this sample exceeds the batch token limit | COMMENT |
| LOW⚡ | backend/services/model_manager.py | 1462 | # Check if there's enough free VRAM to skip offloading | COMMENT |
| LOW | backend/services/model_manager.py | 1229 | # Check if the required model checkpoint exists before attempting | COMMENT |
| LOW | scripts/setup.py | 45 | # Check if vcruntime140.dll is already loadable | COMMENT |
| LOW | scripts/setup.py | 154 | # Check if CUDA is available before installing GPU-only libs | COMMENT |
| LOW | scripts/translate_all.py | 140 | # Check if the split parts match the batch keys length | COMMENT |
| LOW | scripts/smoke-test.sh | 220 | # Check if app crashed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | omnivoice/models/omnivoice.py | 1385 | Validate and normalise a voice-design instruct string. Supported instruct items (case-insensitive for English): | STRING |
| HIGH | omnivoice/eval/utils.py | 34 | Load an audio file, preprocess it, and convert to a PyTorch tensor. Args: fname (str): Path to the aud | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | pyproject.toml | 92 | # in AI-generated speech for provenance detection (SynthID-like). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/README.md | 54 | ### Step 1: Prepare Your Data | COMMENT |
| LOW | examples/README.md | 67 | ### Step 2: Configure the Script | COMMENT |
| LOW | examples/README.md | 79 | ### Step 3: Run | COMMENT |