forked from CrispStrobe/CrispASR
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeature-matrix.html
More file actions
executable file
·174 lines (170 loc) · 40.8 KB
/
Copy pathfeature-matrix.html
File metadata and controls
executable file
·174 lines (170 loc) · 40.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CrispASR feature matrix</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
:root {
--bg: #ffffff; --fg: #1f2328; --muted: #6e7781;
--border: #d0d7de; --hover: #f6f8fa; --accent: #0969da;
--y-bg: #dafbe1; --y-fg: #1a7f37;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0d1117; --fg: #e6edf3; --muted: #7d8590;
--border: #30363d; --hover: #161b22; --accent: #2f81f7;
--y-bg: #1f3a26; --y-fg: #56d364;
}
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; background: var(--bg); color: var(--fg); }
body { font: 14px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; }
header { padding: 24px 32px 8px; }
h1 { margin: 0 0 4px; font-size: 22px; font-weight: 600; }
.sub { color: var(--muted); font-size: 13px; }
.controls { padding: 16px 32px; display: flex; flex-wrap: wrap; gap: 12px; align-items: center; border-bottom: 1px solid var(--border); }
.controls input[type="text"] {
padding: 6px 10px; font: inherit; border: 1px solid var(--border);
border-radius: 6px; background: var(--bg); color: var(--fg);
min-width: 200px;
}
.controls input[type="text"]:focus { outline: 2px solid var(--accent); outline-offset: -1px; }
.pills { display: flex; flex-wrap: wrap; gap: 4px; }
.pill {
padding: 4px 8px; font-size: 12px; border: 1px solid var(--border);
border-radius: 12px; cursor: pointer; user-select: none;
background: var(--bg); color: var(--fg);
}
.pill.active { background: var(--accent); color: white; border-color: var(--accent); }
.pill:hover { background: var(--hover); }
.pill.active:hover { background: var(--accent); opacity: 0.9; }
.stats { color: var(--muted); font-size: 12px; margin-left: auto; }
.table-wrap { overflow: auto; padding: 0 32px 32px; }
table { border-collapse: collapse; font-size: 13px; }
th, td {
padding: 6px 10px; border-bottom: 1px solid var(--border);
text-align: center; white-space: nowrap;
}
th:first-child, td:first-child { text-align: left; position: sticky; left: 0; background: var(--bg); }
thead th {
position: sticky; top: 0; background: var(--bg); cursor: pointer;
user-select: none; font-weight: 600; border-bottom: 2px solid var(--border);
z-index: 1;
}
thead th:first-child { z-index: 2; }
thead th:hover { background: var(--hover); }
thead th .arrow { color: var(--muted); margin-left: 4px; font-size: 11px; }
tbody tr:hover { background: var(--hover); }
tbody tr:hover td:first-child { background: var(--hover); }
td.y { background: var(--y-bg); color: var(--y-fg); font-weight: 600; }
code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.meta { padding: 0 32px 24px; color: var(--muted); font-size: 12px; }
.meta a { color: var(--accent); }
</style>
</head>
<body>
<header>
<h1>CrispASR feature matrix</h1>
<div class="sub">Auto-generated from <code>crispasr --list-backends-json</code>. Click any column header to sort. Type to filter rows by backend name; click cap pills below to require that capability.</div>
</header>
<div class="controls">
<input type="text" id="filter" placeholder="Filter by backend name…" autofocus>
<div class="pills" id="pills"></div>
<div class="stats" id="stats"></div>
</div>
<div class="table-wrap">
<table id="matrix"><thead><tr id="head"></tr></thead><tbody id="body"></tbody></table>
</div>
<div class="meta">
Regenerate via <code>python tools/gen-feature-matrix.py</code>. Single source of truth: the C++ binary's
<code>--list-backends-json</code> output (capability bits in <code>examples/cli/crispasr_backend.h</code>).
Drift between the matrix and the binary is impossible by construction.
</div>
<script>
const DATA = {"caps":[["tts","TTS"],["voice-cloning","Voice cloning"],["translate","Translate"],["src-tgt-language","Src/Tgt language"],["language-detect","Language detect"],["auto-download","Auto-download"],["timestamps-native","Timestamps (native)"],["timestamps-ctc","Timestamps (CTC)"],["word-timestamps","Word timestamps"],["token-confidence","Token confidence"],["temperature","Temperature"],["beam-search","Beam search"],["punctuation-toggle","Punctuation toggle"],["flash-attn","Flash attention"],["diarize","Diarize"],["grammar","GBNF grammar"],["vad-internal","VAD (internal)"],["parallel-processors","Parallel processors"],["punctuation-native","Punctuation Native"],["s2s","S2S"]],"rows":[{"name":"whisper","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":false,"language-detect":true,"auto-download":true,"timestamps-native":true,"timestamps-ctc":false,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":true,"vad-internal":true,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"nemotron","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":true,"timestamps-ctc":false,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":true,"s2s":false}},{"name":"parakeet","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":true,"timestamps-ctc":false,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"canary","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":true,"timestamps-ctc":true,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"lfm2-audio","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":true,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":true}},{"name":"mini-omni2","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":true}},{"name":"cohere","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":true,"timestamps-ctc":false,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"granite","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"granite-4.1","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"granite-4.1-plus","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"granite-4.1-nar","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":true,"s2s":false}},{"name":"voxtral","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"voxtral4b","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"qwen3","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"qwen3-1.7b","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"mega-asr","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"fastconformer-ctc","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"wav2vec2","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"hubert","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"data2vec","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"vibevoice","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"kugelaudio","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":false,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"qwen3-tts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"vibevoice-1.5b","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"qwen3-tts-customvoice","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"qwen3-tts-1.7b-base","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"qwen3-tts-1.7b-customvoice","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"qwen3-tts-1.7b-voicedesign","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"orpheus","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"lex-au-orpheus-de","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"kartoffel-orpheus-de-natural","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"kartoffel-orpheus-de-synthetic","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"chatterbox","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"chatterbox-turbo","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"kartoffelbox-turbo","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"lahgtna-chatterbox","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"indextts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"f5-tts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"pocket-tts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"fastpitch","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":false,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"kokoro","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"melotts","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":false,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"piper","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":false,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"outetts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"voxcpm2-tts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"cosyvoice3-tts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"m2m100","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":true,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"m2m100-wmt21","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":true,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"madlad","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":true,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"glm-asr","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"kyutai-stt","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":true,"timestamps-ctc":false,"word-timestamps":true,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"firered-asr","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":false,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"moonshine","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"moonshine-streaming","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"gemma4-e2b","caps":{"tts":false,"voice-cloning":false,"translate":true,"src-tgt-language":true,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":true,"punctuation-native":false,"s2s":false}},{"name":"omniasr","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"omniasr-300m","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"omniasr-llm","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"omniasr-llm-1b","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"mimo-asr","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"moss-audio","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":true,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":true,"s2s":false}},{"name":"funasr","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"fun-asr-mlt-nano","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":true,"temperature":true,"beam-search":true,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"paraformer","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"sensevoice","caps":{"tts":false,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":true,"auto-download":true,"timestamps-native":false,"timestamps-ctc":true,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":true,"flash-attn":true,"diarize":true,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"bark","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"bark-tts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"speecht5","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":false,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"dia","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"dia-tts","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"parler-tts","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"zonos","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"zonos-tts","caps":{"tts":true,"voice-cloning":true,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":true,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"csm","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"csm-tts","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}},{"name":"sesame","caps":{"tts":true,"voice-cloning":false,"translate":false,"src-tgt-language":false,"language-detect":false,"auto-download":true,"timestamps-native":false,"timestamps-ctc":false,"word-timestamps":false,"token-confidence":false,"temperature":true,"beam-search":false,"punctuation-toggle":false,"flash-attn":false,"diarize":false,"grammar":false,"vad-internal":false,"parallel-processors":false,"punctuation-native":false,"s2s":false}}]};
const $ = (id) => document.getElementById(id);
let sortKey = null, sortDesc = true;
const requiredCaps = new Set();
function render() {
const head = $("head"), body = $("body");
head.innerHTML = "";
const th0 = document.createElement("th");
th0.textContent = "Backend";
th0.dataset.key = "name";
th0.onclick = () => clickSort("name");
if (sortKey === "name") th0.innerHTML += " <span class='arrow'>" + (sortDesc ? "▼" : "▲") + "</span>";
head.appendChild(th0);
for (const [slug, label] of DATA.caps) {
const th = document.createElement("th");
th.textContent = label;
th.dataset.key = slug;
th.title = slug;
th.onclick = () => clickSort(slug);
if (sortKey === slug) th.innerHTML += " <span class='arrow'>" + (sortDesc ? "▼" : "▲") + "</span>";
head.appendChild(th);
}
const filter = ($("filter").value || "").toLowerCase().trim();
let rows = DATA.rows.filter(r => {
if (filter && !r.name.toLowerCase().includes(filter)) return false;
for (const c of requiredCaps) {
if (!r.caps[c]) return false;
}
return true;
});
if (sortKey) {
rows = rows.slice().sort((a, b) => {
let va, vb;
if (sortKey === "name") { va = a.name; vb = b.name; }
else { va = a.caps[sortKey] ? 1 : 0; vb = b.caps[sortKey] ? 1 : 0; }
if (va < vb) return sortDesc ? 1 : -1;
if (va > vb) return sortDesc ? -1 : 1;
// Tie-break by name (asc) so the result is stable.
return a.name.localeCompare(b.name);
});
}
body.innerHTML = "";
for (const r of rows) {
const tr = document.createElement("tr");
const td0 = document.createElement("td");
const code = document.createElement("code");
code.textContent = r.name;
td0.appendChild(code);
tr.appendChild(td0);
for (const [slug, _] of DATA.caps) {
const td = document.createElement("td");
if (r.caps[slug]) { td.className = "y"; td.textContent = "✓"; }
tr.appendChild(td);
}
body.appendChild(tr);
}
$("stats").textContent = rows.length + " of " + DATA.rows.length + " backends";
}
function clickSort(key) {
if (sortKey === key) sortDesc = !sortDesc;
else { sortKey = key; sortDesc = key !== "name"; }
render();
}
function renderPills() {
const c = $("pills");
c.innerHTML = "";
for (const [slug, label] of DATA.caps) {
const p = document.createElement("span");
p.className = "pill" + (requiredCaps.has(slug) ? " active" : "");
p.textContent = label;
p.title = "require " + slug;
p.onclick = () => {
if (requiredCaps.has(slug)) requiredCaps.delete(slug);
else requiredCaps.add(slug);
renderPills();
render();
};
c.appendChild(p);
}
}
$("filter").addEventListener("input", render);
renderPills();
render();
</script>
</body>
</html>