debpalash/VoiceStudio
VoiceStudio is the open-source, fully-local ElevenLabs alternative — voice cloning, voice design, video dubbing, dictation, transcription & audiobook creation in 646 languages.
The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
Most complex files
- electron/src/renderer/src/features/dub/dub-page.tsx762 cx
- electron/src/renderer/src/features/dub/dub-session.ts653 cx
- electron/src/shared/components/CaptureWidget.jsx645 cx
- backend/api/routers/dub_export.py578 cx
- backend/services/asr_backend.py541 cx
- backend/api/routers/dub_core.py479 cx
- backend/api/routers/dub_generate.py435 cx
- electron/src/shared/components/CaptureWidget.test.jsx424 cx
- backend/services/model_manager.py421 cx
- electron/src/main/backend.ts406 cx
Dead code 1.31% unused · 277 findings
- electron/src/shared/components/Sidebar.jsxunused-file
- electron/src/shared/hooks/useProfiles.jsunused-file
- backend/services/subtitle_segmenter.pyunused-file
- electron/src/shared/components/WorkspaceVoices.jsxunused-file
- electron/src/shared/components/CompareModal.jsxunused-file
- backend/core/job_queue.pyunused-file
- electron/src/main/repair-mcp-server.tsunused-file
- electron/src/shared/components/VoicePreview.jsxunused-file
- electron/src/shared/components/UiScaleSetup.jsxunused-file
- backend/services/gpu_sandbox.pyunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 1 generated file: omnivoice/utils/lang_map.py.
Largest clones in the code
- 144 lines in 2 placespython742 tokensomnivoice/scripts/extract_audio_tokens.py:246–389omnivoice/scripts/extract_audio_tokens_add_noise.py:436–579
246# Convert to numpy format for subsequent serialization (int16 to save space) 247audio_tokens_np = audio_tokens.to(torch.int16).cpu().numpy() 248 249return { 250 "status": "success", 251 "key": key, 252 "audio_tokens": audio_tokens_np, 253 "metadata": metadata, 254 "error_msg": None, 255}First 10 of 144 lines.
- 117 lines in 2 placespython643 tokensomnivoice/scripts/extract_audio_tokens.py:430–546omnivoice/scripts/extract_audio_tokens_add_noise.py:625–743
430) 431 432# Shared GPU rank queue for process assignment 433manager = mp.Manager() 434rank_queue = manager.Queue() 435for rank in list(range(num_devices)) * args.nj_per_gpu: 436 rank_queue.put(rank) 437if num_devices == 0: 438 for _ in range(num_processes): 439 rank_queue.put(-1)First 10 of 117 lines.
- 27 lines in 5 placespython136 tokensbackend/engines/confucius4/main.py:253–279backend/engines/dots_tts/main.py:240–269backend/engines/moss_tts_v15/main.py:321–350backend/engines/omnivoice_subprocess/main.py:350–379backend/engines/pockettts/main.py:320–349
253 "sample_rate": CONFUCIUS_SAMPLE_RATE, 254}) 255 256while True: 257 try: 258 msg = _recv(stdin) 259 except Exception as exc: 260 _send(stdout, { 261 "op": "error", "stage": "recv", 262 "message": f"{type(exc).__name__}: {exc}",240 "sample_rate": DOTS_SAMPLE_RATE, 241}) 242 243while True: 244 try: 245 msg = _recv(stdin) 246 except Exception as exc: 247 _send(stdout, { 248 "op": "error", 249 "stage": "recv",First 10 of 27 lines, the second copy on the right.
7 more
- 99 lines in 2 placesjavascript456 tokens
- 36 lines in 3 placespython188 tokens
- 80 lines in 2 placespython350 tokens
- 24 lines in 3 placespython167 tokens
- 56 lines in 2 placespython323 tokens
- 96 lines in 2 placespython310 tokens
- 31 lines in 2 placesjsx299 tokens
Largest clones over all files, tests and data included
- 30 lines in 27 placesjsondata files92 tokensbackend/config/model_licenses.json:185–214backend/config/model_licenses.json:227–256backend/config/model_licenses.json:269–298backend/config/model_licenses.json:311–340backend/config/model_licenses.json:353–382and 22 more
185"runtime_revision": "edaa852ec7e145841d8ffdb056a99866b5f0a478", 186"runtime_pin_scope": "central", 187"runtime_pin_source": "backend/services/hf_revisions.py", 188"component_closure": "incomplete", 189"commercial_inference": "unknown", 190"commercial_outputs": "unknown", 191"documents": [], 192"artifacts": [], 193"required_components": [], 194"upstream_access": "unknown",First 10 of 30 lines.
- 22 lines in 31 placesjsondocs and examples66 tokensdocs/licensing/model-license-data.json:147–168docs/licensing/model-license-data.json:181–202docs/licensing/model-license-data.json:249–270docs/licensing/model-license-data.json:319–340docs/licensing/model-license-data.json:355–376and 26 more
147"runtime_revision": "edaa852ec7e145841d8ffdb056a99866b5f0a478", 148"review_status": "unreviewed", 149"commercial_inference": "unknown", 150"commercial_outputs": "unknown", 151"component_closure": "incomplete", 152"readiness": "not_verified", 153"blockers": [ 154 "component_closure_incomplete", 155 "artifact_manifest_unverified", 156 "terms_unverified",First 10 of 22 lines.
- 144 lines in 2 placespython742 tokensomnivoice/scripts/extract_audio_tokens.py:246–389omnivoice/scripts/extract_audio_tokens_add_noise.py:436–579
246# Convert to numpy format for subsequent serialization (int16 to save space) 247audio_tokens_np = audio_tokens.to(torch.int16).cpu().numpy() 248 249return { 250 "status": "success", 251 "key": key, 252 "audio_tokens": audio_tokens_np, 253 "metadata": metadata, 254 "error_msg": None, 255}First 10 of 144 lines.
- 117 lines in 2 placespython643 tokens
- 24 lines in 9 placesjsondocs and examples72 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| python | 334 | 132,080 | 200 | 3,347 | 2.53% |
| jsx | 216 | 52,701 | 43 | 588 | 1.12% |
| javascript | 158 | 18,753 | 31 | 525 | 2.8% |
| typescript | 247 | 34,590 | 30 | 426 | 1.23% |
| tsx | 230 | 48,200 | 19 | 175 | 0.36% |
| rust | 7 | 4,081 | 5 | 39 | 0.96% |
| bash | 28 | 3,512 | 2 | 16 | 0.46% |
| powershell | 6 | 649 | 0 | 0 | 0% |
| perl | 1 | 168 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| json | 82 | 145,161 | 1,102 | 33,170 | 22.85% |
| python | 1,070 | 274,397 | 622 | 8,339 | 3.04% |
| jsx | 412 | 85,335 | 312 | 3,489 | 4.09% |
| typescript | 499 | 61,148 | 169 | 1,993 | 3.26% |
| javascript | 378 | 43,813 | 125 | 1,434 | 3.27% |
| tsx | 341 | 61,188 | 94 | 819 | 1.34% |
| yaml | 38 | 4,050 | 21 | 268 | 6.62% |
| markdown | 206 | 44,999 | 20 | 153 | 0.34% |
| bash | 59 | 4,471 | 8 | 83 | 1.86% |
| rust | 8 | 4,139 | 5 | 39 | 0.94% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Oct 15, 2026 | #2 | 66,998 (+3,538) | 3,193 | 737,547 | 2,481 | 6.76% | 1.74% | B 70.3 | 6f0ed2e |
| Oct 14, 2026 | #3 | 63,980 (+1,748) | 3,192 | 737,330 | 2,481 | 6.76% | 1.74% | B 70.2 | fdeeec5 |
| Oct 1, 2026 | #2 | 50,678 (+3,483) | 3,055 | 744,829 | 2,488 | 7.31% | 1.87% | C 68.7 | 0834c8b |
| Sep 30, 2026 | #1 | 48,721 (+4,758) | 3,055 | 744,829 | 2,488 | 7.31% | 1.87% | C 68.7 | 0834c8b |
| Sep 29, 2026 | #1 | 44,895 (+3,221) | 3,037 | 739,222 | 2,408 | 7.34% | 1.88% | C 68.8 | eef0e23 |
| Sep 28, 2026 | #2 | 40,714 (+3,086) | 2,957 | 720,393 | 2,312 | 7.05% | 1.91% | C 68.5 | 08a1592 |
| Sep 16, 2026 | #3 | 31,256 (+2,072) | 2,795 | 690,586 | 2,233 | 7.27% | 1.98% | — | 4e55180 |
| Sep 15, 2026 | #4 | 29,666 (+2,776) | 2,795 | 690,586 | 2,233 | 7.27% | 1.98% | — | 4e55180 |
| Sep 14, 2026 | #9 | 27,365 (+2,632) | 2,137 | 545,556 | 1,278 | 2.91% | 2.19% | — | eaf8bb9 |
| Sep 5, 2026 | #6 | 18,231 (+1,345) | 2,005 | 515,196 | 1,247 | 2.99% | 2.14% | — | f2302e8 |
| Sep 4, 2026 | #10 | 16,593 (+1,672) | 2,005 | 515,196 | 1,247 | 2.99% | 2.14% | — | f2302e8 |
| Sep 3, 2026 | #3 | 15,176 (+832) | 1,989 | 506,780 | 1,217 | 2.98% | 2.15% | — | 9d30774 |
| Sep 1, 2026 | #6 | 13,049 (+509) | 1,960 | 497,872 | 1,182 | 2.98% | 2.18% | — | a30b716 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.