OpenBMB/VoxCPM
VoxCPM2: Tokenizer-Free TTS for Multilingual Speech Generation, Creative Voice Design, and True-to-Life Cloning
Python★ 40,351+150 that day#6 on trending
C57.6/100
Duplication40
12.4% in python, docker, nginxDead code92
0.5%Complexity52
51.2% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
13.15%duplicated code · 1,425 of 10,833 lines
67clones in code
34code files of 66 scanned
12.16%duplicated over all files · 94 clones
Most complex files
- scripts/train_voxcpm_finetune.py150 cx
- src/voxcpm/model/voxcpm2.py132 cx
- src/voxcpm/model/voxcpm.py107 cx
- src/voxcpm/cli.py105 cx
- lora_ft_webui.py96 cx
- src/voxcpm/modules/audiovae/audio_vae_v2.py85 cx
- src/voxcpm/training/data.py82 cx
- src/voxcpm/training/validate.py57 cx
- src/voxcpm/model/utils.py50 cx
- src/voxcpm/core.py49 cx
Dead code 0.54% unused · 4 findings
- src/voxcpm/utils/text_normalize.py:split_paragraphunused-export
- src/voxcpm/training/config.py:parse_args_with_configunused-export
- src/voxcpm/model/voxcpm.py:tritonunused-import
- src/voxcpm/model/voxcpm2.py:tritonunused-import
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 107 lines in 2 placespython693 tokens
1import torch 2from ..minicpm4 import MiniCPMModel, MiniCPM4Config 3import torch.nn as nn 4import math 5 6 7class SinusoidalPosEmb(torch.nn.Module): 8 def __init__(self, dim): 9 super().__init__() 10 self.dim = dimFirst 10 of 107 lines.
- 89 lines in 2 placespython685 tokens
201 if self.lora_config is not None: 202 self._apply_lora() 203 204def _apply_lora(self): 205 """注入 LoRA 到 LM / DiT / 投影层""" 206 cfg = self.lora_config 207 lora_kwargs = dict(r=cfg.r, alpha=cfg.alpha, dropout=cfg.dropout) 208 209 # LM: base_lm + residual_lm 210 if cfg.enable_lm:First 10 of 89 lines.
- 90 lines in 2 placespython647 tokens
26 x_pad = F.pad(x, (self.__padding * 2, 0)) 27 return super().forward(x_pad) 28 29 30class CausalTransposeConv1d(nn.ConvTranspose1d): 31 def __init__(self, *args, padding: int = 0, output_padding: int = 0, **kwargs): 32 super().__init__(*args, **kwargs) 33 self.__padding = padding 34 self.__output_padding = output_padding 35First 10 of 90 lines.
7 more
- 90 lines in 2 placespython506 tokens
- 78 lines in 2 placespython484 tokens
- 53 lines in 2 placespython340 tokens
- 37 lines in 2 placespython284 tokens
- 42 lines in 2 placespython284 tokens
- 10 lines in 4 placespython66 tokens
- 25 lines in 2 placespython195 tokens
Largest clones over all files, tests and data included
- 107 lines in 2 placespython693 tokens
1import torch 2from ..minicpm4 import MiniCPMModel, MiniCPM4Config 3import torch.nn as nn 4import math 5 6 7class SinusoidalPosEmb(torch.nn.Module): 8 def __init__(self, dim): 9 super().__init__() 10 self.dim = dimFirst 10 of 107 lines.
- 89 lines in 2 placespython685 tokens
201 if self.lora_config is not None: 202 self._apply_lora() 203 204def _apply_lora(self): 205 """注入 LoRA 到 LM / DiT / 投影层""" 206 cfg = self.lora_config 207 lora_kwargs = dict(r=cfg.r, alpha=cfg.alpha, dropout=cfg.dropout) 208 209 # LM: base_lm + residual_lm 210 if cfg.enable_lm:First 10 of 89 lines.
- 90 lines in 2 placespython647 tokens
26 x_pad = F.pad(x, (self.__padding * 2, 0)) 27 return super().forward(x_pad) 28 29 30class CausalTransposeConv1d(nn.ConvTranspose1d): 31 def __init__(self, *args, padding: int = 0, output_padding: int = 0, **kwargs): 32 super().__init__(*args, **kwargs) 33 self.__padding = padding 34 self.__output_padding = output_padding 35First 10 of 90 lines.
- 28 lines in 2 placesmarkdowndocs and examples591 tokens
- 90 lines in 2 placespython506 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| python | 34 | 10,833 | 67 | 1,425 | 13.15% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| python | 46 | 12,983 | 79 | 1,617 | 12.45% |
| markdown | 3 | 1,542 | 8 | 128 | 8.3% |
| yaml | 8 | 278 | 5 | 89 | 32.01% |
| bash | 3 | 175 | 1 | 5 | 2.86% |
| text | 3 | 44 | 1 | 12 | 27.27% |
| toml | 1 | 100 | 0 | 0 | 0% |
| docker | 1 | 52 | 0 | 0 | 0% |
| nginx | 1 | 51 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Oct 24, 2026 | #6 | 40,351 (+150) | 66 | 15,225 | 94 | 12.16% | 13.15% | C 57.6 | cce58a5 |
| Sep 15, 2026 | #11 | 37,459 (+216) | 72 | 15,486 | 93 | 11.88% | 12.55% | — | f772e49 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.