whisper-windows-mcp 2.2.1 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,323 @@
1
+ # whisper-windows-mcp — Depanare
2
+
3
+ ---
4
+
5
+ ## Listă de verificare rapidă
6
+
7
+ Înainte de a investiga mai profund, verifică toate punctele de mai jos:
8
+
9
+ - Căile din `claude_desktop_config.json` folosesc **bare oblice inverse duble** (`C:\\whisper\\...`)
10
+ - `whisper-cli.exe` există la calea specificată în `WHISPER_CLI_PATH`
11
+ - Fișierul model `.bin` există la calea specificată în `WHISPER_MODEL`
12
+ - FFmpeg este instalat și accesibil (`ffmpeg -version` funcționează în linia de comandă)
13
+ - Claude Desktop a fost **repornit complet** după editarea configurației (ieșit din bara de sistem, nu doar închis fereastra)
14
+ - Serverul whisper apare ca **în execuție** (insignă verde) în Setări → Dezvoltator
15
+
16
+ ---
17
+
18
+ ## "whisper nu este conectat" sau niciun instrument disponibil
19
+
20
+ **Cauza cea mai frecventă:** Claude Desktop nu a fost repornit complet după editarea configurației.
21
+
22
+ 1. Fă clic dreapta pe pictograma Claude din bara de sistem → Ieși
23
+ 2. Redeschide Claude Desktop
24
+ 3. Mergi la Setări → Dezvoltator și verifică insigna verde **în execuție** de lângă whisper
25
+
26
+ Dacă tot nu apare:
27
+
28
+ 1. Deschide `claude_desktop_config.json` și verifică erorile de sintaxă JSON (virgule lipsă, acolade nepotrivite)
29
+ 2. Asigură-te că toate căile folosesc bare oblice inverse duble
30
+ 3. Rulează `check_config` în Claude Desktop pentru a obține o diagnosticare
31
+
32
+ ---
33
+
34
+ ## download_model atinge limita de timp pentru modele mari
35
+
36
+ Claude Desktop are o limită de timp de 4 minute pentru apelurile instrumentelor MCP. Descărcările de modele mari pe conexiuni lente pot depăși acest lucru.
37
+
38
+ **Dimensiunile fișierelor:**
39
+ - `large-v3` — 2,9 GB
40
+ - `large-v3-turbo` — 1,6 GB
41
+ - `large-v3-q5_0` — 1,1 GB
42
+ - `large-v3-turbo-q5_0` — 547 MB
43
+ - `medium.en` — 1,5 GB
44
+ - `medium.en-q5_0` — 514 MB
45
+
46
+ Pe o conexiune rapidă (100 Mbps+), chiar și large-v3 se descarcă în mai puțin de 4 minute. Pe conexiuni mai lente, folosește un browser sau PowerShell pentru a descărca direct și plasează fișierul în directorul de modele manual:
47
+
48
+ ```powershell
49
+ # Exemplu — descărcare directă large-v3-turbo
50
+ Invoke-WebRequest -Uri "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin" `
51
+ -OutFile "C:\whisper\models\ggml-large-v3-turbo.bin"
52
+ ```
53
+
54
+ Apoi folosește `switch_model ggml-large-v3-turbo.bin` pentru activare.
55
+
56
+ ---
57
+
58
+ ## `check_config` raportează că whisper-cli.exe nu a fost găsit
59
+
60
+ Calea din configurația ta nu corespunde locației reale a fișierului.
61
+
62
+ Verifică dacă fișierul există:
63
+ ```
64
+ dir C:\whisper\Release\whisper-cli.exe
65
+ ```
66
+
67
+ Dacă este altundeva, actualizează `WHISPER_CLI_PATH` în configurația ta pentru a corespunde căii reale.
68
+
69
+ ---
70
+
71
+ ## `check_config` raportează că FFmpeg nu a fost găsit
72
+
73
+ FFmpeg nu este instalat sau nu este în PATH-ul sistemului.
74
+
75
+ Instalare via winget:
76
+ ```
77
+ winget install ffmpeg
78
+ ```
79
+
80
+ Sau descarcă de la [ffmpeg.org](https://ffmpeg.org/download.html), extrage și adaugă folderul `bin` la PATH-ul sistemului.
81
+
82
+ După instalare, deschide o nouă linie de comandă și verifică:
83
+ ```
84
+ ffmpeg -version
85
+ ```
86
+
87
+ Dacă ai instalat FFmpeg într-o locație non-standard, setează variabila de mediu `FFMPEG_PATH` în configurația Claude Desktop:
88
+ ```json
89
+ "env": {
90
+ "FFMPEG_PATH": "C:\\ffmpeg\\bin\\ffmpeg.exe"
91
+ }
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Ieșirea transcrierii este plină de etichete `[FOREIGN]`
97
+
98
+ **Cauza:** Folosești un model numai engleză (ex.: `ggml-medium.en.bin`) pe audio în altă limbă decât engleza. Modelele numai engleză nu pot procesa alte limbi și generează `[FOREIGN]` ca substituent pentru fiecare segment pe care nu îl pot gestiona.
99
+
100
+ **Soluție:** Descarcă și folosește `ggml-large-v3.bin` — modelul multilingv. Acesta este necesar pentru orice transcriere non-engleză, detectarea automată a limbii sau traducere.
101
+
102
+ ```
103
+ https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin
104
+ ```
105
+
106
+ Salvează în `C:\whisper\models\` și actualizează configurația:
107
+ ```json
108
+ "WHISPER_MODEL": "C:\\whisper\\models\\ggml-large-v3.bin"
109
+ ```
110
+
111
+ Sau suprascrie per-transcriere folosind parametrul `model` în `transcribe_audio` sau `generate_subtitles`.
112
+
113
+ > **Notă:** Modelele numai engleză (`*.en.bin`) sunt mai rapide și mai precise pentru conținut în engleză, dar sunt complet incapabile să gestioneze alte limbi. Dacă lucrezi cu conținut multilingv, `large-v3` este modelul corect indiferent de hardware.
114
+
115
+ ---
116
+
117
+ ## Transcrierea nu produce ieșire sau fișier gol
118
+
119
+ **Cauze posibile:**
120
+
121
+ 1. **Model greșit pentru limbă** — Modelele numai engleză (`*.en.bin`) nu pot transcriere alte limbi. Folosește `ggml-large-v3.bin` pentru conținut multilingv.
122
+
123
+ 2. **Calitate audio prea scăzută** — Fișierele cu rată de biți foarte mică (ex.: înregistrări vechi de telefon `.3gp` folosind codec AMR-NB ~12kbps) pot fi la limita a ceea ce whisper poate procesa. Mediile zgomotoase (zgomot de fundal, ecou, vorbitori depărtați) sunt de asemenea dificile. Încearcă `large-v3` care gestionează mai bine audio degradat.
124
+
125
+ 3. **Fișier silențios sau corupt** — Rulează `analyze_media` pe fișier pentru a verifica dacă FFprobe detectează un flux audio valid.
126
+
127
+ 4. **Eșec de conversie** — Fișierul poate să nu se convertească corect la WAV. Încearcă să convertești manual mai întâi:
128
+ ```
129
+ ffmpeg -i yourfile.3gp -ar 16000 -ac 1 output.wav
130
+ ```
131
+ Apoi transcrie WAV-ul direct.
132
+
133
+ ---
134
+
135
+ ## Sarcina în fundal eșuează pe fișiere cu caractere speciale sau Unicode în nume
136
+
137
+ **Cauza:** whisper-cli.exe nu poate scrie fișierul de ieșire când calea conține caractere Unicode (română, japoneză, chineză, emoji, paranteze etc.) sau anumite caractere speciale.
138
+
139
+ **Soluție temporară curentă:** Redenumește fișierul pentru a folosi doar caractere ASCII înainte de transcriere, apoi redenumește înapoi dacă este necesar.
140
+
141
+ ```
142
+ ren "fisier_romanesc.mp4" "temp_transcribe.mp4"
143
+ ```
144
+
145
+ **Status:** Acesta este un bug cunoscut. O corecție este planificată care va direcționa ieșirea printr-o cale temporară igienizată și va muta rezultatul la destinația corectă după finalizare.
146
+
147
+ ---
148
+
149
+ ## Sarcina în fundal arată "eșuat" fără ieșire
150
+
151
+ **Cauze posibile:**
152
+
153
+ 1. **Nume de fișier Unicode** — Vezi mai sus.
154
+
155
+ 2. **Cale model greșită** — Procesul detașat nu moștenește căile corectate. Rulează `check_config` pentru a verifica căile.
156
+
157
+ 3. **Procesul a fost terminat** — Dacă whisper-cli.exe a fost terminat manual în mijlocul unei sarcini, nu va exista niciun fișier de ieșire. Încearcă din nou.
158
+
159
+ 4. **VRAM insuficient** — Modelele mari pe GPU-uri cu VRAM redus pot eșua silențios. Încearcă un model mai mic.
160
+
161
+ 5. **Eșec de conversie a fișierului** — Încearcă să transcrii direct un fișier WAV pentru a izola dacă problema este la conversie sau transcriere.
162
+
163
+ ---
164
+
165
+ ## Transcrierea în fundal nu produce ieșire SRT
166
+
167
+ **Cauza:** Modul în fundal (`background=true` în `transcribe_audio`) produce în prezent doar ieșire `.txt`. Formatul SRT în modul fundal nu a fost încă implementat.
168
+
169
+ **Soluție temporară:** Pentru fișiere sub ~4 minute, folosește `generate_subtitles` în modul de blocare. Pentru fișiere mai lungi, transcrie mai întâi în modul fundal pentru a obține `.txt`, apoi dacă este nevoie de SRT, folosește `generate_subtitles` pe același fișier (va transcriere din nou).
170
+
171
+ **Status:** Suportul SRT în modul fundal este planificat pentru o versiune viitoare.
172
+
173
+ ---
174
+
175
+ ## GPU-ul nu este folosit (CPU blocat peste 50%)
176
+
177
+ **Cauza:** Rulezi binarul numai CPU care vine cu versiunea standard whisper.cpp.
178
+
179
+ **Soluție:** Descarcă compilarea cu Vulkan activat de pe [pagina de versiuni](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0) și extrage în `C:\whisper\Release\`.
180
+
181
+ Verifică că accelerarea GPU este activă:
182
+ - Cere lui Claude să ruleze `check_system`
183
+ - Caută `✅ Vulkan binary: ggml-vulkan.dll found` în ieșire
184
+ - Urmărește Task Manager → Performanță → GPU în timpul unei transcrieri — utilizarea GPU ar trebui să urce la 15–30%
185
+
186
+ ---
187
+
188
+ ## `check_system` raportează cantitatea greșită de VRAM
189
+
190
+ Aceasta este o limitare cunoscută Windows. Comanda `wmic` citește VRAM din registry, care pe multe plăci AMD raportează jumătate din VRAM-ul fizic. Un Vega 56 cu 8GB HBM2 va arăta de obicei 4GB. Aceasta este doar o problemă de afișare — whisper folosește tot VRAM-ul fizic în timpul inferenței.
191
+
192
+ ---
193
+
194
+ ## Eroarea "Transcrierea este deja în curs"
195
+
196
+ Un proces `whisper-cli.exe` rulează dintr-o sarcină anterioară. Așteaptă să se termine, sau:
197
+
198
+ 1. Deschide Task Manager → fila Detalii
199
+ 2. Găsește `whisper-cli.exe`
200
+ 3. Fă clic dreapta → Încheie sarcina
201
+
202
+ Apoi încearcă din nou.
203
+
204
+ ---
205
+
206
+ ## Detectarea automată a limbii este greșită
207
+
208
+ Detectarea automată a Whisper rulează pe primele 30 de secunde de audio. Dacă fișierul începe într-o limbă diferită față de cea mai mare parte a conținutului său, detectarea poate fi greșită.
209
+
210
+ **Soluție:** Specifică limba explicit (ex.: `language=ro`) în loc să te bazezi pe detectarea automată.
211
+
212
+ ---
213
+
214
+ ## Generarea subtitrărilor produce "(vorbind în limbă străină)" pe tot videoclipul
215
+
216
+ Whisper a detectat vorbire, dar nu a putut transcriere. Cele mai frecvente cauze:
217
+
218
+ 1. **Model greșit** — Folosind un model numai engleză pe audio non-englezesc. Folosește `large-v3`.
219
+
220
+ 2. **Calitate audio** — Mediile zgomotoase (bucătării, mulțimi, ecou) pot depăși modelul medium. Încearcă `large-v3`.
221
+
222
+ 3. **Limbă mixtă** — Fișierele cu două limbi alternante vor avea limba minoritară înlocuită cu substituenți cu setare de limbă unică.
223
+
224
+ ---
225
+
226
+ ## Traducerea subtitrărilor produce doar engleză
227
+
228
+ Acesta este comportamentul intenționat. Indicatorul `--translate` integrat al Whisper traduce doar **în engleză**. Pentru traducere în alte limbi țintă, procesează conținutul fișierului `.srt` separat.
229
+
230
+ ---
231
+
232
+ ## Transcrierea în lot a încetat să avanseze
233
+
234
+ Apelează din nou `check_batch_progress`. Dacă tot este blocată:
235
+
236
+ 1. Verifică Task Manager pentru un proces `whisper-cli.exe` care rulează
237
+ 2. Verifică jurnalele sarcinilor în `%TEMP%\whisper-mcp-jobs\`
238
+ 3. Fișierele cu erori sunt marcate în raportul lotului — rulează-le individual cu `transcribe_audio`
239
+
240
+ ---
241
+
242
+ ## Curățarea directorului temporar de sarcini
243
+
244
+ whisper-windows-mcp scrie fișiere de stare a sarcinilor și jurnale în `%TEMP%\whisper-mcp-jobs\` în timpul transcrierii. Acestea se acumulează în timp și pot consuma spațiu pe disc, în special fișierele `.log` din sarcinile lungi de transcriere.
245
+
246
+ Odată ce un lot sau o sarcină este finalizată și ai verificat transcrierile de ieșire, poți șterge în siguranță totul din acest director:
247
+
248
+ ```powershell
249
+ Remove-Item "$env:TEMP\whisper-mcp-jobs\*" -Recurse -Force
250
+ ```
251
+
252
+ Directorul va fi recreat automat la următoarea transcriere. Niciun fișier de ieșire a transcrierii nu este stocat permanent aici — sunt mutate în directorul sursă la finalizare. Rămân doar metadate ale sarcinilor și jurnale.
253
+
254
+ **Notă:** Nu șterge acest director în timp ce o transcriere este în curs — fișierele de stare a lotului sunt necesare pentru funcționarea `check_batch_progress`.
255
+
256
+ ---
257
+
258
+ ## Lot mare nesupravegheit din linia de comandă
259
+
260
+ Pentru loturi foarte mari în care vrei să rulezi peste noapte fără Claude, folosește PowerShell.
261
+
262
+ **Important:** whisper-cli.exe nu poate citi direct MP4, MKV sau majoritatea formatelor video. FFmpeg trebuie să preconvertească fiecare fișier la WAV mai întâi. Whisper scrie de asemenea transcrierea la stdout și ieșirea de diagnosticare la stderr — folosește `Start-Process -RedirectStandardOutput` pentru a capta corect transcrierea. Folosirea pipe `|` sau redirecționarea stderr cu `2>$null` nu capturează nimic.
263
+
264
+ ```powershell
265
+ $whisper = "C:\whisper\Release\whisper-cli.exe"
266
+ $model = "C:\whisper\models\ggml-medium.en.bin"
267
+ $dir = "C:\path\to\your\folder"
268
+ $ffmpeg = "ffmpeg"
269
+ $tmp = "$env:TEMP\whisper_convert.wav"
270
+
271
+ Get-ChildItem "$dir\*.mp4" | ForEach-Object {
272
+ $out = ($_.FullName -replace '\.mp4$', '') + ".txt"
273
+ if (Test-Path $out) {
274
+ Write-Host "SKIP (exists): $($_.Name)"
275
+ return
276
+ }
277
+ Write-Host "Converting: $($_.Name)"
278
+ & $ffmpeg -y -i $_.FullName -ar 16000 -ac 1 -c:a pcm_s16le $tmp 2>$null
279
+ Write-Host "Transcribing: $($_.Name)"
280
+ $wArgs = "-m `"$model`" -f `"$tmp`" --threads 8 --condition-on-previous-text 0 --no-speech-thold 0.6"
281
+ Start-Process -FilePath $whisper -ArgumentList $wArgs -RedirectStandardOutput $out -Wait -NoNewWindow
282
+ Write-Host "Done: $($_.BaseName).txt"
283
+ }
284
+
285
+ Remove-Item $tmp -ErrorAction SilentlyContinue
286
+ Write-Host "All done."
287
+ ```
288
+
289
+ Schimbă `*.mp4` cu `*.mkv`, `*.m4a` etc. pentru a corespunde tipurilor tale de fișiere. Verificarea de sărire `Test-Path` înseamnă că rularea din nou a scriptului după o întrerupere nu va reprocesa fișierele deja finalizate.
290
+
291
+ Aceasta scrie fișiere `.txt` lângă fiecare sursă. Instrumentele MCP le vor recunoaște ca deja transcrise când rulezi ulterior `analyze_media` sau `start_batch`.
292
+
293
+ ---
294
+
295
+ ## Locația fișierului de configurare
296
+
297
+ ```
298
+ C:\Users\NumeUtilizator\AppData\Roaming\Claude\claude_desktop_config.json
299
+ ```
300
+
301
+ Dacă `AppData` nu este vizibil: Vizualizare → Afișare → Elemente ascunse în File Explorer.
302
+
303
+ ---
304
+
305
+ ## Exemplu de configurare completă funcțională
306
+
307
+ ```json
308
+ {
309
+ "mcpServers": {
310
+ "whisper": {
311
+ "command": "npx",
312
+ "args": ["-y", "whisper-windows-mcp"],
313
+ "env": {
314
+ "WHISPER_CLI_PATH": "C:\\whisper\\Release\\whisper-cli.exe",
315
+ "WHISPER_MODEL": "C:\\whisper\\models\\ggml-medium.en.bin",
316
+ "FFMPEG_PATH": "ffmpeg"
317
+ }
318
+ }
319
+ }
320
+ }
321
+ ```
322
+
323
+ `FFMPEG_PATH` are implicit valoarea `ffmpeg` (presupune că este în PATH). Setează explicit doar dacă FFmpeg este instalat într-o locație non-standard.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whisper-windows-mcp",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "Windows-native MCP server for local audio transcription using whisper.cpp with Vulkan GPU acceleration",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -31,7 +31,7 @@
31
31
  "multilingual"
32
32
  ],
33
33
  "author": "eviscerations",
34
- "license": "MIT",
34
+ "license": "SEE LICENSE IN LICENSE",
35
35
  "dependencies": {
36
36
  "@modelcontextprotocol/sdk": "^1.0.0"
37
37
  },
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ patch_roadmaps.py
4
+ Adds new language entries to the multilingual documentation tracking section
5
+ in existing ROADMAP files. Run from the repo root. Outputs to ./patched_output/.
6
+
7
+ NOTE: ROADMAP.pl.md and ROADMAP.ro.md are NOT in the target list because those
8
+ files were generated fresh with the complete language list already included.
9
+ Only the previously-existing ROADMAPs need patching.
10
+ """
11
+
12
+ import os
13
+
14
+ NEW_ENTRIES = [
15
+ "**Polish (`*.pl.md`)** — `README.pl.md` / `TROUBLESHOOTING.pl.md` / `ROADMAP.pl.md` / `PRIVACY.pl.md` / `SECURITY.pl.md`",
16
+ "**Romanian (`*.ro.md`)** — `README.ro.md` / `TROUBLESHOOTING.ro.md` / `ROADMAP.ro.md` / `PRIVACY.ro.md` / `SECURITY.ro.md`",
17
+ ]
18
+
19
+ # Only patch the previously-existing ROADMAPs.
20
+ # ROADMAP.pl.md and ROADMAP.ro.md are excluded — they were generated with
21
+ # the full language list already in their native languages.
22
+ ROADMAP_FILES = {
23
+ "ROADMAP.md": "Community contributions for other languages welcome.",
24
+ "ROADMAP.ja.md": "他の言語へのコミュニティ貢献を歓迎します。",
25
+ "ROADMAP.ko.md": "다른 언어로의 커뮤니티 기여를 환영합니다.",
26
+ "ROADMAP.vi.md": "Chào mừng đóng góp cộng đồng cho các ngôn ngữ khác.",
27
+ "ROADMAP.id.md": "Kontribusi komunitas untuk bahasa lain disambut.",
28
+ "ROADMAP.uk.md": "Внески спільноти для інших мов вітаються.",
29
+ "ROADMAP.pt-BR.md": "Contribuições da comunidade para outros idiomas são bem-vindas.",
30
+ "ROADMAP.es.md": "Las contribuciones de la comunidad para otros idiomas son bienvenidas.",
31
+ }
32
+
33
+ OUTPUT_DIR = "patched_output"
34
+
35
+ def patch_roadmap(filename, marker, entries):
36
+ with open(filename, "r", encoding="utf-8") as f:
37
+ content = f.read()
38
+ if marker not in content:
39
+ print(f" WARNING: marker not found in {filename} — skipping")
40
+ return None
41
+ to_insert = [e for e in entries if e.split("(")[0].strip() not in content]
42
+ if not to_insert:
43
+ print(f" INFO: all entries already present in {filename} — skipping")
44
+ return content
45
+ insert_block = "\n".join(to_insert) + "\n\n"
46
+ return content.replace(marker, f"{insert_block}{marker}")
47
+
48
+ def main():
49
+ os.makedirs(OUTPUT_DIR, exist_ok=True)
50
+ print(f"Output directory: {OUTPUT_DIR}/")
51
+ print(f"Processing {len(ROADMAP_FILES)} ROADMAP files...\n")
52
+ success = 0
53
+ for filename, marker in ROADMAP_FILES.items():
54
+ if not os.path.exists(filename):
55
+ print(f" MISSING: {filename} — skipping")
56
+ continue
57
+ print(f" Patching {filename}...")
58
+ patched = patch_roadmap(filename, marker, NEW_ENTRIES)
59
+ if patched is None:
60
+ continue
61
+ out_path = os.path.join(OUTPUT_DIR, filename)
62
+ with open(out_path, "w", encoding="utf-8") as f:
63
+ f.write(patched)
64
+ print(f" OK -> {out_path}")
65
+ success += 1
66
+ print(f"\nDone. {success}/{len(ROADMAP_FILES)} files patched.")
67
+ print(f"\nReview files in ./{OUTPUT_DIR}/ before replacing originals.")
68
+ print("To replace originals (cmd.exe):")
69
+ print(f" copy /Y {OUTPUT_DIR}\\ROADMAP*.md .")
70
+
71
+ if __name__ == "__main__":
72
+ main()