whisper-windows-mcp 2.5.0 → 2.5.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.
- package/.github/workflows/ci.yml +24 -24
- package/.github/workflows/publish.yml +4 -3
- package/ROADMAP.es.md +158 -116
- package/ROADMAP.id.md +101 -59
- package/ROADMAP.ja.md +153 -111
- package/ROADMAP.ko.md +141 -99
- package/ROADMAP.md +346 -0
- package/ROADMAP.pl.md +149 -103
- package/ROADMAP.pt-BR.md +72 -30
- package/ROADMAP.ro.md +119 -73
- package/ROADMAP.uk.md +120 -74
- package/ROADMAP.vi.md +112 -70
- package/TROUBLESHOOTING.md +349 -0
- package/dist/index.js +20 -0
- package/dist/region_guard.d.ts +18 -0
- package/dist/region_guard.js +244 -0
- package/package.json +8 -3
package/.github/workflows/ci.yml
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
pull_request:
|
|
6
|
-
|
|
7
|
-
permissions:
|
|
8
|
-
contents: read
|
|
9
|
-
|
|
10
|
-
jobs:
|
|
11
|
-
test:
|
|
12
|
-
name: build + test
|
|
13
|
-
runs-on: windows-latest
|
|
14
|
-
strategy:
|
|
15
|
-
matrix:
|
|
16
|
-
node-version: [20, 22]
|
|
17
|
-
steps:
|
|
18
|
-
- uses: actions/checkout@v4
|
|
19
|
-
- uses: actions/setup-node@v4
|
|
20
|
-
with:
|
|
21
|
-
node-version: ${{ matrix.node-version }}
|
|
22
|
-
cache: npm
|
|
23
|
-
- run: npm ci
|
|
24
|
-
- run: npm test
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
name: build + test
|
|
13
|
+
runs-on: windows-latest
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
node-version: [20, 22]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: actions/setup-node@v4
|
|
20
|
+
with:
|
|
21
|
+
node-version: ${{ matrix.node-version }}
|
|
22
|
+
cache: npm
|
|
23
|
+
- run: npm ci
|
|
24
|
+
- run: npm test
|
|
@@ -2,7 +2,8 @@ name: Publish
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
release:
|
|
5
|
-
types: [
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
6
7
|
|
|
7
8
|
permissions:
|
|
8
9
|
id-token: write
|
|
@@ -15,10 +16,10 @@ jobs:
|
|
|
15
16
|
- uses: actions/checkout@v4
|
|
16
17
|
- uses: actions/setup-node@v4
|
|
17
18
|
with:
|
|
18
|
-
node-version: '
|
|
19
|
+
node-version: '22'
|
|
19
20
|
registry-url: 'https://registry.npmjs.org'
|
|
20
21
|
- run: npm install
|
|
21
22
|
- run: npm run build
|
|
22
|
-
- run: npm publish
|
|
23
|
+
- run: npm publish
|
|
23
24
|
env:
|
|
24
25
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/ROADMAP.es.md
CHANGED
|
@@ -6,246 +6,288 @@ Versión actual: **v2.5.0**
|
|
|
6
6
|
|
|
7
7
|
## Principios de diseño
|
|
8
8
|
|
|
9
|
-
Estos principios rigen cada decisión
|
|
9
|
+
Estos principios rigen cada decisión de este proyecto y tienen prioridad sobre la velocidad de adición de funcionalidades.
|
|
10
10
|
|
|
11
|
-
**Minimizar el uso de la API de Claude.** Todo el flujo de trabajo de transcripción — escaneo, análisis,
|
|
11
|
+
**Minimizar el uso de la API de Claude.** Todo el flujo de trabajo de transcripción — escaneo, análisis, encolado, ejecución, validación, cambio de modelos — debe poder ejecutarse con la menor cantidad posible de interacciones con Claude. Esta herramienta debe ser plenamente funcional para los usuarios de Claude del plan gratuito que no pagan una suscripción Pro o Max. Cada llamada a una herramienta consume presupuesto de uso. Diseña en consecuencia.
|
|
12
12
|
|
|
13
|
-
**
|
|
13
|
+
**Una única instancia de whisper en todo momento.** Nunca crees un segundo proceso whisper-cli.exe mientras haya uno en ejecución. El bloqueo de proceso es obligatorio e innegociable.
|
|
14
14
|
|
|
15
|
-
**Local primero, privado por defecto.** El audio nunca sale de la máquina. No se
|
|
15
|
+
**Local primero, privado por defecto.** El audio nunca sale de la máquina. No se requiere ninguna API de nube para la funcionalidad principal. Las integraciones opcionales (por ejemplo, las descargas de modelos de Hugging Face) deben documentarse claramente como opcionales.
|
|
16
16
|
|
|
17
|
-
**Control explícito del usuario.** Sin operaciones masivas silenciosas. Las acciones destructivas o irreversibles requieren confirmación. El usuario debe saber
|
|
17
|
+
**Control explícito del usuario.** Sin operaciones masivas silenciosas. Las acciones destructivas o irreversibles requieren confirmación. El usuario siempre debe saber qué va a ocurrir antes de que ocurra.
|
|
18
18
|
|
|
19
|
-
**Rutas seguras para Unicode.** Toda E/S de
|
|
19
|
+
**Rutas seguras para Unicode.** Toda la E/S de archivos debe manejar correctamente los nombres de archivo no-ASCII, incluidos japonés, chino, emoji, corchetes y otros caracteres especiales.
|
|
20
20
|
|
|
21
|
-
**Modular y combinable.** Las herramientas son independientes. Los usuarios usan lo que necesitan. Ninguna funcionalidad debe requerir otra, a menos que sea inevitable.
|
|
21
|
+
**Modular y combinable.** Las herramientas son independientes. Los usuarios usan lo que necesitan. Ninguna funcionalidad debe requerir otra para funcionar, a menos que sea inevitable.
|
|
22
22
|
|
|
23
|
-
**Optimización antes que funcionalidades.**
|
|
23
|
+
**Optimización antes que funcionalidades.** Ante la duda entre agregar una funcionalidad y reducir la carga del sistema o el número de llamadas a la API, reduce la carga. Las pasadas intensivas de optimización son costosas. Acierta con la arquitectura desde el primer momento.
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
27
|
## Completado
|
|
28
28
|
|
|
29
29
|
### ✅ v1.3.1 — Bloqueo de proceso
|
|
30
|
-
Añadida verificación `isWhisperRunning()`
|
|
30
|
+
Añadida la verificación `isWhisperRunning()` mediante `tasklist /FI` antes de crear cualquier proceso de transcripción. Devuelve un error claro con instrucciones del Administrador de Tareas en lugar de crear un proceso concurrente.
|
|
31
31
|
|
|
32
|
-
### ✅ v1.4.0 — Aceleración GPU Vulkan
|
|
33
|
-
Compilado whisper.cpp desde el código fuente con `-DGGML_VULKAN=ON` usando VS Build Tools 2022 y Vulkan SDK. Binarios Vulkan precompilados distribuidos como `whisper-vulkan-win-x64.zip`.
|
|
32
|
+
### ✅ v1.4.0 — Aceleración GPU con Vulkan
|
|
33
|
+
Compilado whisper.cpp desde el código fuente con `-DGGML_VULKAN=ON` usando VS Build Tools 2022 y el Vulkan SDK. Binarios Vulkan precompilados distribuidos como `whisper-vulkan-win-x64.zip`.
|
|
34
34
|
|
|
35
|
-
**Resultados en AMD Radeon RX Vega 56:**
|
|
35
|
+
**Resultados en una AMD Radeon RX Vega 56:** utilización media de GPU de ~16%. Un archivo de 58 minutos se completa en ~4,5 minutos en GPU frente a ~88 minutos solo con CPU.
|
|
36
36
|
|
|
37
37
|
### ✅ v1.5.0 — Diagnóstico del sistema
|
|
38
|
-
Herramienta `check_system`: detección de GPU
|
|
38
|
+
Herramienta `check_system`: detección de GPU mediante `wmic`, verificación de las DLL de Vulkan, reporte de VRAM y recomendación de tamaño de modelo.
|
|
39
39
|
|
|
40
|
-
### ✅ v1.6.0 — Pre-análisis de
|
|
41
|
-
Herramienta `analyze_media`
|
|
40
|
+
### ✅ v1.6.0 — Pre-análisis de archivos
|
|
41
|
+
Herramienta `analyze_media` mediante FFprobe: duración, tamaño, códec, estado de transcripción y estimaciones de tiempo en CPU y GPU. Escaneo de un solo archivo o de una carpeta con opciones de ordenación.
|
|
42
42
|
|
|
43
43
|
### ✅ v1.7.0 — Transcripción en segundo plano + Visibilidad del progreso
|
|
44
|
-
Arquitectura de proceso
|
|
44
|
+
Arquitectura de proceso desacoplado: `transcribe_audio` con `background=true` crea whisper como proceso desacoplado y devuelve de inmediato un ID de trabajo. `check_progress` analiza las marcas de tiempo de segmento del stderr de whisper para obtener el porcentaje y el ETA en tiempo real.
|
|
45
45
|
|
|
46
46
|
### ✅ v1.8.0 — Lote secuencial con validación
|
|
47
|
-
`start_batch` y `check_batch_progress`: procesamiento secuencial
|
|
47
|
+
`start_batch` y `check_batch_progress`: procesamiento secuencial automatizado, validación de la transcripción (detección de salida vacía o corta), avance automático de la cola y marcas de tiempo de progreso por archivo.
|
|
48
48
|
|
|
49
49
|
### ✅ v1.9.0 — Soporte multilingüe y traducción
|
|
50
|
-
`generate_subtitles` con detección `language=auto` y salida SRT doble `translate_to_english=true`. Añadido soporte para formatos `.3gp` y `.ts`. `language=auto` también disponible en `transcribe_audio`.
|
|
50
|
+
`generate_subtitles` con detección `language=auto` y salida SRT doble mediante `translate_to_english=true`. Añadido soporte para los formatos `.3gp` y `.ts`. `language=auto` también disponible en `transcribe_audio`.
|
|
51
51
|
|
|
52
|
-
**Limitación conocida:**
|
|
52
|
+
**Limitación conocida:** la traducción integrada de Whisper solo apunta al inglés. Requiere el modelo `large-v3` para idiomas distintos del inglés — los modelos solo en inglés (`*.en.bin`) producen `[FOREIGN]` con audio que no está en inglés.
|
|
53
53
|
|
|
54
54
|
### ✅ v2.0.0 — Rutas seguras para Unicode + SRT en segundo plano
|
|
55
|
-
**Nombres de archivo Unicode:**
|
|
55
|
+
**Nombres de archivo Unicode:** los archivos con caracteres no-ASCII en el nombre provocaban que la transcripción en segundo plano fallara silenciosamente. Corregido enrutando toda la salida a través de una ruta temporal saneada basada en el ID de trabajo y moviendo después el resultado al destino correcto una vez completado.
|
|
56
56
|
|
|
57
|
-
**SRT en modo en segundo plano:** `spawnDetached`
|
|
57
|
+
**SRT en modo en segundo plano:** `spawnDetached` codificaba antes de forma rígida `-otxt` sin importar el formato solicitado. Corregido añadiendo un parámetro `outputFormat` a `spawnDetached`, con soporte de salida `text` y `srt` en modo en segundo plano.
|
|
58
58
|
|
|
59
|
-
### ✅ v2.0.1 — Correcciones de
|
|
60
|
-
- `--max-context 0`
|
|
61
|
-
- `--no-speech-thold 0.6`
|
|
62
|
-
- Validación de
|
|
59
|
+
### ✅ v2.0.1 — Correcciones de errores (incluidas en v2.2.0)
|
|
60
|
+
- `--max-context 0` fijado tanto en `buildArgs` como en `spawnDetached` — previene los bucles de alucinación en audio de larga duración.
|
|
61
|
+
- `--no-speech-thold 0.6` fijado en ambas funciones — los segmentos por debajo del umbral de confianza se tratan como silencio en lugar de como contenido alucinado.
|
|
62
|
+
- Validación de rutas (`validateInputPath`) — rechaza rutas UNC y el recorrido `..`.
|
|
63
63
|
- Guarda de tamaño de archivo `MAX_FILE_SIZE_MB = 10240`.
|
|
64
|
-
- Comentario de seguridad
|
|
65
|
-
- Comando CLI de lote corregido en TROUBLESHOOTING.md.
|
|
64
|
+
- Comentario de seguridad sobre inyección de transcripción en `transcribeSingle`.
|
|
65
|
+
- Comando CLI de lote roto corregido en TROUBLESHOOTING.md.
|
|
66
66
|
|
|
67
|
-
### ✅ v2.1.0 — Suite de gestión de modelos (
|
|
67
|
+
### ✅ v2.1.0 — Suite de gestión de modelos (incluida en v2.2.0)
|
|
68
68
|
- `WHISPER_MODEL` cambiado de `const` a `let` (mutable dentro de la sesión).
|
|
69
|
-
- `MODEL_REGISTRY` — 16 modelos, variantes de precisión
|
|
70
|
-
- `ALLOWED_HF_PREFIXES` — lista de permitidos de URL que
|
|
71
|
-
- Herramienta `list_models` — escanea el directorio de modelos
|
|
72
|
-
- Herramienta `download_model` — descarga
|
|
73
|
-
- Herramienta `switch_model` — valida extensión `.bin`, restricción de directorio
|
|
74
|
-
- `recommendedModel()` actualizado para recomendar `large-v3-turbo`
|
|
69
|
+
- `MODEL_REGISTRY` — 16 modelos, variantes de precisión completa y cuantizadas, URLs de descarga de Hugging Face.
|
|
70
|
+
- `ALLOWED_HF_PREFIXES` — lista de permitidos de URL que restringe las descargas a los espacios de nombres `ggerganov/whisper.cpp` y `ggml-org`.
|
|
71
|
+
- Herramienta `list_models` — escanea el directorio de modelos y muestra el modelo activo, los tamaños, los casos de uso y las descargas disponibles.
|
|
72
|
+
- Herramienta `download_model` — descarga desde Hugging Face mediante el módulo `https` integrado de Node.js, con renombrado atómico.
|
|
73
|
+
- Herramienta `switch_model` — valida la extensión `.bin`, la restricción de directorio y la verificación del bloqueo de proceso.
|
|
74
|
+
- `recommendedModel()` actualizado para recomendar `large-v3-turbo` con 6GB o más de VRAM.
|
|
75
75
|
|
|
76
76
|
### ✅ v2.2.0 — Expansión de calidad, parámetros y hardware
|
|
77
|
-
- Interfaz `WhisperOptions`
|
|
77
|
+
- Interfaz `WhisperOptions` que reemplaza los argumentos posicionales en `buildArgs`.
|
|
78
78
|
- Nuevos parámetros en `transcribe_audio`: `temperature`, `prompt`, `condition_on_prev_text`, `no_speech_thold`, `beam_size`, `best_of`, `gpu_device`, `processors`, `word_timestamps`, `max_segment_length`, `split_on_word`, `diarize`, `vad_model`, `offset_t`, `duration`.
|
|
79
79
|
- Nuevos parámetros en `generate_subtitles`: `temperature`, `prompt`, `beam_size`, `best_of`, `diarize`, `vad_model`.
|
|
80
|
-
- `spawnDetached` refactorizado — todos los flags de calidad
|
|
80
|
+
- `spawnDetached` refactorizado — todos los flags de calidad se aplican en el modo en segundo plano/por lotes.
|
|
81
81
|
- Salida de lote corregida — `readBatchProgress` ahora mueve la salida temporal al destino final antes de validar.
|
|
82
82
|
|
|
83
|
-
**Nota de compatibilidad de flags:** `gpu_device` / `--device`
|
|
83
|
+
**Nota de compatibilidad de flags:** `gpu_device` / `--device` se añadió en whisper.cpp v1.8.4. El binario Vulkan precompilado de los releases es de la generación v1.8.3 — este parámetro es aceptado por la herramienta, pero no tendrá efecto hasta que el usuario actualice a un binario v1.8.4+.
|
|
84
84
|
|
|
85
85
|
### ✅ v2.2.2 — Parche
|
|
86
|
-
- Corrección de licencia dual —
|
|
86
|
+
- Corrección de la licencia dual — LICENSE y LICENSE-COMMERCIAL.md corregidos.
|
|
87
87
|
- Correcciones menores de documentación.
|
|
88
88
|
|
|
89
89
|
### ✅ v2.3.0 — Avance automático de lote, arquitectura de privacidad, expansión de formatos de salida
|
|
90
90
|
|
|
91
|
-
**Avance automático de lote (corrección de
|
|
91
|
+
**Avance automático de lote (corrección de error crítico):** `start_batch` requería antes un sondeo activo para avanzar por la cola. Ahora se adjunta un handler `on('exit')` a cada proceso hijo whisper-cli creado. Cuando el proceso finaliza, el lote avanza de inmediato por sí mismo a través del callback de salida, sin coste de sondeo y sin consumir llamadas a la API. Un mutex previene la doble creación entre el handler de salida concurrente y las llamadas a `check_batch_progress`.
|
|
92
92
|
|
|
93
93
|
**Arquitectura de privacidad:**
|
|
94
|
-
- Variable de entorno `WHISPER_PRIVACY_MODE` — cuando
|
|
95
|
-
- Variable de entorno `WHISPER_CONSENT_ACKNOWLEDGED` — cuando
|
|
96
|
-
- Parámetro `privacy_mode` por llamada en `transcribe_audio`, `transcribe_batch`, `start_batch
|
|
97
|
-
- Puerta de modo de privacidad (`checkPrivacyGate()`) — se
|
|
98
|
-
- Puerta de consentimiento de sesión (`transcriptPolicy()`) — se
|
|
99
|
-
- `PRIVACY.md` — documentación de cumplimiento completa que cubre HIPAA, GDPR, privilegio abogado-cliente, FERPA, SOX, PCI-DSS
|
|
100
|
-
- Avisos de privacidad en
|
|
94
|
+
- Variable de entorno `WHISPER_PRIVACY_MODE` — cuando es `true`, todas las respuestas de las herramientas devuelven solo metadatos (nombre de archivo, conteo de palabras, ruta de guardado). Ningún texto de transcripción se transmite jamás a la API de Claude. Las transcripciones existen únicamente como archivos locales.
|
|
95
|
+
- Variable de entorno `WHISPER_CONSENT_ACKNOWLEDGED` — cuando es `true`, suprime la puerta de consentimiento única por sesión para el contenido no sensible.
|
|
96
|
+
- Parámetro `privacy_mode` por llamada en `transcribe_audio`, `transcribe_batch`, `start_batch` y `check_progress`. Anula la variable de entorno global en cualquiera de los dos sentidos. No requiere reinicio para alternarlo por llamada.
|
|
97
|
+
- Puerta de modo de privacidad (`checkPrivacyGate()`) — se dispara antes de cada operación cuando el modo de privacidad efectivo está activo. Se arma en la primera llamada (muestra la divulgación) y se libera en la segunda (permite). Se reinicia tras cada operación. Es completamente independiente de la puerta de consentimiento de sesión.
|
|
98
|
+
- Puerta de consentimiento de sesión (`transcriptPolicy()`) — se dispara una vez por sesión antes de la primera llamada que devuelve transcripción en modo estándar. La consume el flag `sessionConsentGiven`.
|
|
99
|
+
- `PRIVACY.md` — documentación de cumplimiento completa que cubre HIPAA, GDPR, privilegio abogado-cliente, FERPA, SOX, PCI-DSS y NDA/secreto comercial.
|
|
100
|
+
- Avisos de privacidad en la descripción de todas las herramientas que devuelven transcripción.
|
|
101
101
|
|
|
102
102
|
**Expansión de formatos de salida:**
|
|
103
|
-
- `vtt` — salida de subtítulos WebVTT
|
|
104
|
-
- `lrc` — formato de letras/karaoke LRC
|
|
105
|
-
- `csv` — CSV con marcas de tiempo
|
|
106
|
-
- El valor
|
|
107
|
-
|
|
108
|
-
**Correcciones de
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
**
|
|
114
|
-
- Limpieza automática del directorio temporal — `cleanupOldJobFiles()` se ejecuta al arrancar y elimina archivos `.json` y `.log` con más de 7 días de antigüedad
|
|
103
|
+
- `vtt` — salida de subtítulos WebVTT mediante `-ovtt`. Disponible en `transcribe_audio`, `generate_subtitles`, `start_batch` y el modo en segundo plano.
|
|
104
|
+
- `lrc` — formato de letras/karaoke LRC mediante `-olrc`. Disponible en `transcribe_audio` y el modo en segundo plano.
|
|
105
|
+
- `csv` — CSV con marcas de tiempo mediante `-ocsv`. Disponible en `transcribe_audio` y el modo en segundo plano.
|
|
106
|
+
- El valor por defecto de `output_format` cambió de `"text"` a `"timestamps"` en todas las herramientas y rutas de código. El texto plano ahora es opcional.
|
|
107
|
+
|
|
108
|
+
**Correcciones de errores:**
|
|
109
|
+
- Error 1: `output_format` no se reenviaba a los trabajos en segundo plano — se usaba el valor por defecto `"text"` sin importar el formato solicitado. Corregido cambiando el valor por defecto a `"timestamps"` y reenviándolo correctamente.
|
|
110
|
+
- Error 2: un `catch {}` silencioso en la operación de movimiento de la salida del trabajo en segundo plano se tragaba los fallos. Añadida una verificación explícita con `existsSync`, con un mensaje de fallo detallado, tras el movimiento.
|
|
111
|
+
- Error 3: añadido un comentario de diseño en el punto de creación en segundo plano que documenta por qué la puerta de consentimiento se difiere intencionadamente a `check_progress` para los trabajos en segundo plano no privados.
|
|
112
|
+
|
|
113
|
+
**Adicional:**
|
|
114
|
+
- Limpieza automática del directorio temporal — `cleanupOldJobFiles()` se ejecuta al arrancar y elimina los archivos `.json` y `.log` con más de 7 días de antigüedad de `%TEMP%\whisper-mcp-jobs\`.
|
|
115
115
|
- `check_config` ahora reporta el estado del modo de privacidad.
|
|
116
|
-
- El log de arranque reporta modo de privacidad activado
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
- El tipo `BackgroundFormat` excluye `json` (json en modo en segundo plano
|
|
116
|
+
- El log de arranque reporta si el modo de privacidad está activado o desactivado.
|
|
117
|
+
- La interfaz `Job` se amplía con el campo `privacyMode: boolean`.
|
|
118
|
+
- La interfaz `BatchState` se amplía con el campo `privacyMode: boolean`.
|
|
119
|
+
- El tipo `BackgroundFormat` excluye `json` (json en modo en segundo plano sigue sin estar soportado — recurre a `text`).
|
|
120
120
|
|
|
121
|
-
### ✅ v2.4.0 — Fortalecimiento, guarda de
|
|
121
|
+
### ✅ v2.4.0 — Fortalecimiento, guarda de primer plano, suite de pruebas y CI
|
|
122
122
|
|
|
123
123
|
Una pasada de seguridad/robustez; la migración a Bun planificada se trasladó a v2.5.0.
|
|
124
124
|
|
|
125
125
|
**Seguridad y corrección:**
|
|
126
|
-
- Corrección de contención de rutas en `switch_model` — un directorio con prefijo hermano (
|
|
127
|
-
-
|
|
128
|
-
- `download_model` rechaza descargas truncadas (comprobación de Content-Length) antes de promover un archivo `.part`. (La verificación completa del
|
|
129
|
-
- Coerción de entrada — los parámetros numéricos de herramientas que no son números reales se descartan en lugar de entregarse a whisper-cli como `NaN`.
|
|
126
|
+
- Corrección de contención de rutas en `switch_model` — un directorio con prefijo hermano (por ejemplo, `…\models-evil`) podía antes satisfacer la comprobación de "dentro del directorio de modelos" mediante un `startsWith` ingenuo; reemplazado por una contención normalizada basada en `relative()`. Cierra la fuga que describe SECURITY.md.
|
|
127
|
+
- Puerta de privacidad/consentimiento vinculada **por operación** (herramienta + argumentos) — confirmar una transcripción ya no puede satisfacer la puerta de otra operación distinta.
|
|
128
|
+
- `download_model` rechaza las descargas truncadas (comprobación de Content-Length) antes de promover un archivo `.part`. (La verificación completa del hash SHA256 queda registrada para una pasada posterior.)
|
|
129
|
+
- Coerción de entrada — los parámetros numéricos de las herramientas que no son números reales se descartan en lugar de entregarse a whisper-cli como `NaN`.
|
|
130
130
|
|
|
131
131
|
**Robustez:**
|
|
132
|
-
- **Guarda de tiempo de espera en primer plano** — un archivo lo bastante largo como para superar el tiempo de espera de herramienta MCP de ~4 minutos de Claude Desktop en modo bloqueante se detecta de antemano y se enruta a segundo plano en lugar de agotar el tiempo silenciosamente. Umbral configurable mediante `WHISPER_FOREGROUND_MAX_SEC`. Estimaciones de tiempo corregidas (la antigua estimación de GPU subestimaba
|
|
132
|
+
- **Guarda de tiempo de espera en primer plano** — un archivo lo bastante largo como para superar el tiempo de espera de herramienta MCP de ~4 minutos de Claude Desktop en modo bloqueante se detecta de antemano y se enruta a segundo plano en lugar de agotar el tiempo silenciosamente. Umbral configurable mediante `WHISPER_FOREGROUND_MAX_SEC`. Estimaciones de tiempo corregidas (la antigua estimación de GPU subestimaba gravemente; ahora se modela el coste dominante de recarga del modelo — medido, no adivinado).
|
|
133
133
|
- Escrituras atómicas del estado de trabajos/lotes (archivo temporal + renombrado) para que un lector concurrente no pueda observar un archivo JSON a medio escribir.
|
|
134
134
|
- IDs de trabajo/lote/temporales a prueba de colisiones (con sufijo UUID).
|
|
135
135
|
- Apagado controlado ante SIGINT/SIGTERM que limpia los archivos temporales del modo bloqueante.
|
|
136
136
|
|
|
137
137
|
**Selección de dispositivo GPU:**
|
|
138
|
-
- Variable de entorno `WHISPER_GPU_DEVICE`, y `gpu_device` ahora propagado a través de `generate_subtitles` y la pasada de detección de idioma (antes solo `transcribe_audio`). `check_config`
|
|
138
|
+
- Variable de entorno `WHISPER_GPU_DEVICE`, y `gpu_device` ahora propagado a través de `generate_subtitles` y la pasada de detección de idioma (antes solo en `transcribe_audio`). `check_config` reporta el dispositivo activo. `check_system` ya no reporta erróneamente un problema de controlador cuando `wmic` (obsoleto en Windows 11 24H2+) no devuelve nada.
|
|
139
139
|
|
|
140
140
|
**Calidad:**
|
|
141
|
-
-
|
|
141
|
+
- Una suite de pruebas unitarias con `node:test` sobre la lógica pura (contención de rutas, clave de las puertas, escrituras atómicas, coerción de entrada y la estimación de tiempo de espera), con cero dependencias añadidas, más un flujo de trabajo de CI de GitHub Actions que la ejecuta en cada push/PR.
|
|
142
142
|
|
|
143
|
-
**Identificado para una versión futura:** una ruta de modelo persistente (
|
|
143
|
+
**Identificado para una versión futura:** una ruta de modelo persistente (por ejemplo, el `whisper-server` de whisper.cpp) para eliminar el coste de recarga del modelo que se paga en cada transcripción — una gran mejora de rendimiento para el trabajo por lotes/de archivo.
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
## Planificado — v2.5.0: Servidor de modelo persistente
|
|
148
|
-
|
|
149
|
-
Mantener el modelo Whisper residente entre transcripciones en lugar de recargarlo en cada invocación.
|
|
150
|
-
|
|
151
|
-
Esta es la mayor mejora de rendimiento disponible. whisper-cli es de un solo uso: recarga el modelo completo en cada llamada, y v2.4.0 midió esa recarga en ~110 s en una GPU con memoria limitada — un impuesto fijo pagado por archivo, independiente de la duración del audio. Para cargas de trabajo por lotes y de archivo, domina el tiempo total de ejecución más que la propia transcripción.
|
|
145
|
+
### ✅ v2.5.0 — Servidor de modelo persistente + TinyDiarize
|
|
152
146
|
|
|
153
|
-
**
|
|
154
|
-
|
|
155
|
-
|
|
147
|
+
**Servidor de modelo persistente (Fase 1).** whisper-cli es de un solo uso: recarga el modelo completo en cada llamada — v2.4.0 midió esa recarga en ~110 s en una GPU con memoria limitada, un impuesto fijo por archivo que domina el tiempo total de ejecución en el trabajo por lotes/de archivo. v2.5.0 añade un modo opcional de modelo residente que mantiene el modelo en memoria entre transcripciones.
|
|
148
|
+
- Herramienta `whisper_server` (`start` / `stop` / `status`). El servidor residente *se convierte* en la única instancia, preservando la regla de una única instancia de whisper: las solicitudes se serializan contra él, sin introducir concurrencia.
|
|
149
|
+
- Los `transcribe_audio` y `transcribe_batch` bloqueantes se enrutan a través del servidor residente por localhost (`127.0.0.1`) mediante `POST /inference`, evitando el coste de recarga. La guarda de tiempo de espera en primer plano se omite en modo servidor (no hay recarga que pagar).
|
|
150
|
+
- `switch_model` intercambia en caliente el modelo residente mediante `POST /load` sin reinicio. `check_config` reporta el estado del servidor; el servidor propio se termina al apagar para liberar la VRAM.
|
|
151
|
+
- La regla de un solo motor / VRAM compartida se impone con un respaldo estricto en la ruta de creación desacoplada, más rechazos amistosos: mientras el servidor está activo, los trabajos en segundo plano, `start_batch`, `generate_subtitles`, la salida `lrc`/`csv` y las opciones por solicitud que la API HTTP no respeta (`beam_size`, `best_of`, `word_timestamps`, `diarize`, `tinydiarize`, `vad_model`, `offset_t`, `duration`, etc.) se rechazan con un mensaje de "detén el servidor primero" en lugar de degradarse silenciosamente.
|
|
152
|
+
- Configuración: `WHISPER_SERVER_PATH`, `WHISPER_SERVER_PORT` (por defecto 8571, solo localhost).
|
|
156
153
|
|
|
157
154
|
**Restricciones de diseño:**
|
|
158
155
|
- Ciclo de vida explícito: start / stop / status, con una verificación de salud. El servidor nunca se inicia silenciosamente como efecto secundario de una llamada no relacionada.
|
|
159
|
-
- Vincular solo a localhost — nunca a una interfaz enrutable. Sin exposición de red (coherente con el principio de local primero y el fortalecimiento de v2.4.0).
|
|
156
|
+
- Vincular solo a localhost — nunca a una interfaz enrutable. Sin exposición de red (coherente con el principio de local primero y con el fortalecimiento de v2.4.0).
|
|
160
157
|
- Reserva elegante: si el servidor no está en ejecución, la transcripción sigue funcionando a través de la ruta existente de whisper-cli de un solo uso. El servidor es una optimización, no una dependencia obligatoria.
|
|
161
158
|
- `switch_model` recarga el modelo en el servidor residente (aún mucho más barato amortizado que recargar por archivo).
|
|
162
159
|
- Las puertas de privacidad y consentimiento no cambian — se sitúan por encima del mecanismo de transcripción.
|
|
163
160
|
- Selección de puerto con manejo de colisiones; apagado limpio ante SIGINT/SIGTERM junto con la limpieza existente de archivos temporales.
|
|
164
161
|
|
|
165
|
-
**
|
|
166
|
-
|
|
167
|
-
|
|
162
|
+
**TinyDiarize.** Soporte de `--tinydiarize` con modelos habilitados para `tdrz`. A diferencia del flag `--diarize` estéreo (v2.2.0), TinyDiarize marca los turnos de hablante en grabaciones **mono** y no necesita nada más allá del archivo de modelo — ni Python, ni servicio externo.
|
|
163
|
+
- Parámetro `tinydiarize` en `transcribe_audio` y `generate_subtitles` (modos bloqueante y en segundo plano); `--tinydiarize` propagado a través de ambos constructores de argumentos.
|
|
164
|
+
- `small.en-tdrz` añadido a `MODEL_REGISTRY` para que `download_model` pueda obtenerlo de los espacios de nombres de confianza existentes de Hugging Face.
|
|
168
165
|
|
|
169
166
|
---
|
|
170
167
|
|
|
171
|
-
## Planificado — v2.6.0:
|
|
168
|
+
## Planificado — v2.6.0: Servidor de modelo persistente — Fase 2
|
|
172
169
|
|
|
173
|
-
|
|
170
|
+
Enrutar los trabajos en segundo plano y `start_batch` a través del servidor residente. La Fase 1 (v2.5.0) cubre solo la transcripción bloqueante; esta es la mayor mejora de archivo/rendimiento, y requiere rehacer la capa de trabajos/cola en torno a solicitudes HTTP en lugar de PIDs desacoplados — seguimiento del progreso sin un PID, y cancelación basada en HTTP.
|
|
174
171
|
|
|
175
|
-
**
|
|
176
|
-
- Añadir la(s) variante(s) de modelo `tdrz` a `MODEL_REGISTRY` para que `download_model` pueda obtenerlas de los espacios de nombres de Hugging Face de confianza existentes.
|
|
177
|
-
- Propagar una opción `tinydiarize` a través de `buildArgs` y `spawnDetached` para que funcione en modos bloqueante, en segundo plano y por lotes.
|
|
172
|
+
Las **restricciones de diseño** del servidor residente establecidas en v2.5.0 siguen rigiendo la Fase 2 — vinculación solo a localhost, ciclo de vida explícito, reserva elegante de un solo uso y puertas de privacidad/consentimiento sin cambios. La Fase 2 añade el enrutamiento de trabajos/cola sin relajar ninguna de ellas.
|
|
178
173
|
|
|
179
|
-
**Estado:**
|
|
174
|
+
**Estado:** Planificado.
|
|
180
175
|
|
|
181
176
|
---
|
|
182
177
|
|
|
183
178
|
## Planificado — v2.7.0: Búsqueda de transcripciones en todo el proyecto
|
|
184
179
|
|
|
185
|
-
Una herramienta independiente para buscar una frase o patrón en cada transcripción de un directorio de proyecto y devolver las coincidencias con su archivo de origen y timecode. Descompuesta del flujo de trabajo mayor de proyecto de video (ver "Más adelante / En consideración") — esta mitad es útil de forma independiente, de bajo riesgo y ligera en API: la búsqueda se ejecuta localmente, y Claude solo interviene cuando el usuario revisa los resultados.
|
|
180
|
+
Una herramienta independiente para buscar una frase o un patrón en cada transcripción de un directorio de proyecto y devolver las coincidencias con su archivo de origen y su timecode. Descompuesta del flujo de trabajo mayor de proyecto de video (ver "Más adelante / En consideración") — esta mitad es útil de forma independiente, de bajo riesgo y ligera en API: la búsqueda se ejecuta localmente, y Claude solo interviene cuando el usuario revisa los resultados.
|
|
181
|
+
|
|
182
|
+
**Estado:** Planificado.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Planificado — v2.8.0: Salida importable en editores y formatos de integración
|
|
187
|
+
|
|
188
|
+
Convertir las transcripciones en artefactos que un editor de video importa directamente, de modo que la transcripción alimente la edición en lugar de detenerse en un archivo de texto — la motivación central del proyecto: hacer manejable un gran archivo de metraje en bruto para un creador en solitario.
|
|
189
|
+
|
|
190
|
+
- **CSV de marcadores primero** — los inicios de segmento como un CSV de marcadores/capítulos que Premiere, Resolve y YouTube importan de forma nativa. Aporta la mayor parte del valor de "meterlo en mi editor" a una fracción del coste y la fragilidad entre versiones de un formato de línea de tiempo completo.
|
|
191
|
+
- **Datos de tiempo a nivel de palabra** — exponer el JSON de tokens completos de whisper.cpp (`--output-json-full` / `-ojf`) y las marcas de tiempo de palabra alineadas con DTW (`--dtw <preset>`, emparejado automáticamente con el modelo activo; existen presets para todas las familias, incluida `large.v3.turbo`, y se aplican a los modelos cuantizados). Esta es la capa de tiempo preciso sobre la que se asientan el SRT a nivel de palabra, la colocación de marcadores y la alineación de clips; el JSON por token también incluye valores de confianza para quien los quiera. Nota: `--dtw` es un **flag de carga/contexto** (se establece en la inicialización del modelo, no por solicitud), por lo que reside en la ruta CLI de un solo uso — la API `/inference` del `whisper-server` residente no puede aplicarlo por solicitud, coherente con el rechazo del nivel de palabra en modo servidor de v2.5.0.
|
|
192
|
+
- **Cerrar la brecha de JSON en segundo plano** — JSON actualmente recurre a texto en modo en segundo plano.
|
|
193
|
+
- **FCPXML / EDL — diferido:** verbosos, sensibles a la versión y arrastran hacia el alcance de la integración con el editor. Reconsiderar solo si el CSV de marcadores resulta insuficiente.
|
|
194
|
+
|
|
195
|
+
**Límite de alcance:** esto genera archivos que el editor *importa* — no automatiza la interfaz del editor. El intercambio estándar está alineado con la filosofía y es ligero en dependencias; controlar la aplicación es una cuestión aparte.
|
|
196
|
+
|
|
197
|
+
Combina con v2.7.0: busca en el archivo para encontrar el momento y luego entrega al editor un archivo de marcadores para saltar directamente a él.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Planificado — v2.9.0: Calidad y ajuste de la transcripción
|
|
202
|
+
|
|
203
|
+
Profundidad en la precisión y el control de la transcripción — todos son passthroughs de cero dependencias de flags de whisper.cpp que el wrapper aún no expone. Cada opción de aquí es un parámetro de transcripción de un solo uso: sin sobrecarga adicional de llamadas a herramientas, plenamente funcional para los usuarios del plan gratuito.
|
|
204
|
+
|
|
205
|
+
- **Ajuste de VAD** — los controles de detección de actividad de voz (`--vad-threshold`, duración mínima de habla / mínima de silencio / máxima de habla, relleno de habla, solapamiento de muestras). El VAD ya está activo pero no es ajustable; estos corrigen la sobre- y sub-segmentación que hay detrás de la mayoría de las quejas de calidad del mundo real.
|
|
206
|
+
- **Supresión de tokens no de habla** (`--suppress-nst`) — descarta los artefactos de `[music]`/ruido para transcripciones más limpias.
|
|
207
|
+
- **Solo detección de idioma** (`--detect-language`) — una sonda barata de "¿qué idioma es este?" que retorna sin una pasada de transcripción completa. Valiosa para la audiencia multilingüe y para el enrutamiento previo a la transcripción.
|
|
208
|
+
- **Umbrales de robustez / decodificación** — `--entropy-thold`, `--logprob-thold`, `--word-thold`, `--no-fallback`, `--temperature-inc`, `--carry-initial-prompt`, `--suppress-regex` para audio difícil.
|
|
209
|
+
- **Controles de rendimiento** — flash attention (ahora **activo por defecto** en el whisper.cpp actual; exponer la vía de desactivación `--no-flash-attn` / `-nfa` en lugar de tratarlo como opcional), solo CPU (`--no-gpu`), tamaño del contexto de audio (`--audio-ctx`).
|
|
186
210
|
|
|
187
211
|
**Estado:** Planificado.
|
|
188
212
|
|
|
189
213
|
---
|
|
190
214
|
|
|
191
|
-
## Planificado —
|
|
215
|
+
## Planificado — v3.0.0: Suite de post-procesamiento de subtítulos
|
|
216
|
+
|
|
217
|
+
Una capa de procesamiento por lotes en TypeScript puro sobre el SRT / VTT / JSON que el servidor ya emite — sin re-transcripción, sin nuevas dependencias, con un único parser/serializador compartido. Refleja la cadena de "conversión por lotes" de los editores de subtítulos dedicados (Subtitle Edit, Aegisub), que ningún MCP de transcripción competidor ofrece. La pasada de reparación de tiempos, en particular, apunta a los defectos que exhibe la salida cruda de Whisper — cues en blanco sobre el silencio, segmentos solapados o demasiado cortos, duplicados por bucle de repetición, líneas demasiado largas — de modo que la suite limpia la *propia* salida de este servidor, no solo los archivos importados.
|
|
218
|
+
|
|
219
|
+
- **Reparación y validación de tiempos** — imponer una duración mínima / máxima de cue; corregir los cues solapados; aplicar un intervalo mínimo entre cues; salvar los intervalos por debajo del umbral (extender hasta el siguiente); descartar los cues vacíos; fusionar los cues duplicados (bucles de repetición de whisper); limitar a dos líneas; ordenar y renumerar. Más un **informe de lint** no mutante que señala, por cue, las infracciones de velocidad de lectura (CPS), caracteres por línea y número de líneas frente a un perfil seleccionable (por ejemplo, YouTube 42 CPL / 20 CPS, Netflix 42 / 17) — el entregable que los editores realmente quieren antes de importar.
|
|
220
|
+
- **Re-temporización** — desplazar / ajustar todos los cues; re-temporizar por velocidad de fotogramas (por ejemplo, 23.976 ↔ 25).
|
|
221
|
+
- **Reflujo** — fusionar los cues cortos; dividir las líneas largas hasta un máximo de caracteres por línea / caracteres por segundo, equilibrando las dos líneas en lugar de una división voraz.
|
|
222
|
+
- **Conversión de formato** — convertir archivos existentes entre SRT / VTT / LRC / CSV / Markdown / texto plano, más salida ASS/SSA (con estilo por defecto), sin re-transcribir. Normalización de UTF-8 / fin de línea al escribir (satisface el requisito de UTF-8 de YouTube, evita el mojibake al re-importar).
|
|
223
|
+
- **Limpieza de texto** — buscar/reemplazar (regex opcional), eliminación de muletillas a partir de una lista de palabras estática (no un LLM), normalización de mayúsculas/minúsculas, eliminación de anotaciones para personas con discapacidad auditiva. Estrictamente mecánica — cualquier cosa que requiera juicio (reparación de OCR, inferencia de puntuación) queda fuera; el Claude anfitrión se encarga de eso sobre el texto devuelto.
|
|
224
|
+
- **Formateo de etiquetas de hablante** — formatear los turnos existentes de estéreo / TinyDiarize como bloques con prefijo de hablante.
|
|
225
|
+
- **Estadísticas de resumen** — conteo de palabras, duración, PPM, CPS medio, proporción de silencio.
|
|
192
226
|
|
|
193
|
-
|
|
227
|
+
**Restricciones de diseño:**
|
|
228
|
+
- TypeScript puro sobre el SRT / VTT / JSON que el servidor ya emite — sin re-transcripción, sin nuevas dependencias en tiempo de ejecución, con un único parser/serializador compartido.
|
|
229
|
+
- Opera solo sobre archivos de subtítulos/transcripción existentes — nunca invoca whisper ni ffmpeg, nunca toca el audio.
|
|
230
|
+
- Determinista y basada únicamente en reglas — sin LLM, sin nube, sin reparación "inteligente". Cualquier cosa que requiera juicio (correcciones de OCR, inferencia de puntuación) queda fuera; el Claude anfitrión se encarga de eso sobre el texto devuelto.
|
|
231
|
+
- No destructiva — escribe archivos nuevos; nunca sobrescribe un archivo de origen in situ sin la confirmación explícita del usuario.
|
|
232
|
+
- La pasada de lint / validación es no mutante — informa de las infracciones, nunca reescribe silenciosamente.
|
|
233
|
+
- Solo formatos de intercambio estándar — nunca controla la interfaz de un editor.
|
|
234
|
+
|
|
235
|
+
**Estado:** Planificado.
|
|
194
236
|
|
|
195
237
|
---
|
|
196
238
|
|
|
197
239
|
## Más adelante / En consideración
|
|
198
240
|
|
|
199
|
-
|
|
241
|
+
Sin programar, pero fiel a la filosofía y revisado según lo permita la capacidad.
|
|
200
242
|
|
|
201
243
|
### Migración a Bun
|
|
202
244
|
Migrar el runtime de Node.js a [Bun](https://bun.sh) para recortar el tiempo de arranque en frío del servidor MCP y eliminar el paso de compilación `tsc` (el código fuente se ejecuta directamente). Degradada de su antiguo puesto en v2.5.0: dado que el coste de recarga del modelo por invocación es el verdadero cuello de botella (ver v2.5.0 arriba), recortar el arranque de Node es una ganancia marginal, y la madurez de Bun en Windows más un cambio en el modelo de distribución conllevan riesgo. Vale la pena hacerlo eventualmente como una optimización opcional, no como una prioridad.
|
|
203
245
|
|
|
204
246
|
### Flujo de trabajo de renombrado y coincidencia de proyecto de video
|
|
205
|
-
La mitad más pesada de las herramientas de proyecto, una vez que aterrice la Búsqueda de transcripciones en todo el proyecto (v2.7.0): coincidencia aproximada de transcripciones de clips editados con transcripciones fuente para
|
|
247
|
+
La mitad más pesada de las herramientas de proyecto, una vez que aterrice la Búsqueda de transcripciones en todo el proyecto (v2.7.0): coincidencia aproximada de las transcripciones de clips editados con las transcripciones fuente para localizar los puntos de origen, y presentar nombres de archivo descriptivos sugeridos por Claude.
|
|
206
248
|
|
|
207
249
|
**Restricciones de diseño:**
|
|
208
|
-
- Los archivos fuente **nunca
|
|
250
|
+
- Los archivos fuente **nunca se renombran ni se modifican**
|
|
209
251
|
- Todos los renombrados requieren **confirmación explícita del usuario**
|
|
210
|
-
- El análisis y la coincidencia ocurren localmente — Claude solo
|
|
252
|
+
- El análisis y la coincidencia ocurren localmente — Claude solo se invoca cuando el usuario revisa los resultados, minimizando las llamadas a la API
|
|
211
253
|
|
|
212
254
|
**Estado:** Fase de diseño.
|
|
213
255
|
|
|
214
256
|
### Limpieza de transcripciones basada en reglas
|
|
215
|
-
Post-procesamiento local y determinista — eliminación de muletillas y falsos comienzos,
|
|
257
|
+
Post-procesamiento local y determinista — eliminación de muletillas y falsos comienzos, controlada por el usuario. Más valiosa para los usuarios del modo de privacidad, donde la transcripción nunca llega a Claude para su limpieza. Deliberadamente acotada: los saltos de párrafo y la segmentación por temas son cosas que Claude ya hace bien sobre el texto devuelto, y la exportación a PDF/DOCX es un desbordamiento de alcance hacia la generación de documentos — ambos fuera de alcance aquí.
|
|
216
258
|
|
|
217
|
-
**Estado:**
|
|
259
|
+
**Estado:** Promovida — la limpieza determinista está programada en la Suite de post-procesamiento de subtítulos de v3.0.0; las notas sobre lo fuera de alcance (saltos de párrafo, PDF/DOCX) siguen vigentes.
|
|
218
260
|
|
|
219
261
|
### Diarización de hablantes (pyannote-audio)
|
|
220
|
-
Diarización de hablantes mono completa con etiquetas de ID de hablante a lo largo de toda la grabación.
|
|
262
|
+
Diarización de hablantes mono completa con etiquetas de ID de hablante a lo largo de toda la grabación. Distinta del flag `--diarize` estéreo integrado (v2.2.0) y de TinyDiarize (v2.5.0).
|
|
221
263
|
|
|
222
|
-
**Implementación:** requiere [pyannote-audio](https://github.com/pyannote/pyannote-audio) — una biblioteca de Python con requisito de token de acceso a Hugging Face, un stack de dependencias completamente
|
|
264
|
+
**Implementación:** requiere [pyannote-audio](https://github.com/pyannote/pyannote-audio) — una biblioteca de Python con un requisito de token de acceso a Hugging Face, un stack de dependencias completamente aparte. Despriorizada: choca con la filosofía de local primero / cero dependencias, y TinyDiarize ya cubre el caso mono de cero dependencias. Si se persigue, se distribuiría como un complemento avanzado opcional con su propia documentación de configuración, nunca en el paquete principal.
|
|
223
265
|
|
|
224
266
|
**Estado:** Despriorizada / opcional.
|
|
225
267
|
|
|
226
|
-
### Traducción a idiomas
|
|
268
|
+
### Traducción a idiomas distintos del inglés
|
|
227
269
|
El flag `--translate` de Whisper solo apunta al inglés. Los idiomas de destino arbitrarios necesitan una API de traducción externa o un modelo de traducción local.
|
|
228
270
|
|
|
229
|
-
**Opciones bajo consideración:** LibreTranslate (
|
|
271
|
+
**Opciones bajo consideración:** LibreTranslate (autoalojable, local primero), traducción con un LLM local, o documentación explícita como fuera de alcance.
|
|
230
272
|
|
|
231
|
-
**Estado:** Aplazado pendiente de una decisión de local primero
|
|
273
|
+
**Estado:** Aplazado pendiente de una decisión de local primero frente a dependencia de API.
|
|
232
274
|
|
|
233
275
|
---
|
|
234
276
|
|
|
235
277
|
## Fuera de alcance / No planificado
|
|
236
278
|
|
|
237
|
-
Funcionalidades excluidas
|
|
279
|
+
Funcionalidades excluidas intencionadamente, registradas aquí para que la decisión sea explícita y no resurja repetidamente.
|
|
238
280
|
|
|
239
281
|
### Transcripción de micrófono en vivo — no planificada
|
|
240
282
|
La transcripción en tiempo real desde un micrófono en vivo estaba antes prevista para v2.7.0. Descartada porque choca con el diseño central del proyecto:
|
|
241
|
-
- **Desajuste de arquitectura:** MCP es de solicitud/respuesta, no de streaming. La captura en vivo requeriría o bien
|
|
242
|
-
- **Principios de una única instancia / minimizar API:** devolver segmentos continuos a Claude es una constante
|
|
243
|
-
- **Dependencia externa:**
|
|
283
|
+
- **Desajuste de arquitectura:** MCP es de solicitud/respuesta, no de streaming. La captura en vivo requeriría o bien un sondeo continuo (que quema presupuesto de API) o bien una llamada de bloqueo prolongado que alcanza la guarda de tiempo de espera en primer plano de v2.4.0.
|
|
284
|
+
- **Principios de una única instancia / minimizar API:** devolver segmentos continuos a Claude es una rotación constante de llamadas a herramientas — lo opuesto a "funcional para los usuarios del plan gratuito" — y un proceso de streaming de larga duración tensiona el bloqueo de proceso.
|
|
285
|
+
- **Dependencia externa:** requeriría una dependencia externa adicional.
|
|
244
286
|
|
|
245
287
|
El subtitulado en vivo es una categoría de producto distinta (baja latencia, gestión de dispositivos, VAD) de una herramienta de transcripción de archivos/lotes. Los usuarios que lo necesiten están mejor servidos por una herramienta dedicada en tiempo real.
|
|
246
288
|
|
|
247
289
|
### Transcripción de URL de YouTube (yt-dlp) — no planificada como herramienta incluida
|
|
248
|
-
La transcripción directa de YouTube a texto
|
|
290
|
+
La transcripción directa de YouTube a texto mediante yt-dlp estaba antes planificada. Descartada como funcionalidad de primera clase porque:
|
|
249
291
|
- **Superficie de seguridad:** añade la obtención de URLs arbitrarias y una llamada a subproceso con entrada controlada por el usuario, revirtiendo el fortalecimiento de v2.4.0 que redujo exactamente esa superficie.
|
|
250
292
|
- **Mantenimiento:** yt-dlp se rompe con frecuencia a medida que YouTube cambia — un compromiso de mantenimiento continuo.
|
|
251
293
|
- **Local primero y licencias:** la adquisición de contenido por red se sitúa fuera del alcance de local primero, y empaquetar un descargador en un proyecto con licencia comercial es una zona gris de ToS/responsabilidad.
|
|
@@ -257,11 +299,11 @@ La transcripción directa de YouTube a texto via yt-dlp estaba antes planificada
|
|
|
257
299
|
|
|
258
300
|
## Licenciamiento
|
|
259
301
|
|
|
260
|
-
whisper-windows-mcp
|
|
302
|
+
whisper-windows-mcp tiene licencia dual.
|
|
261
303
|
|
|
262
304
|
**Uso no comercial:** MIT — gratuito para uso personal, educativo y no comercial. Ver [LICENSE](LICENSE).
|
|
263
305
|
|
|
264
|
-
**Uso comercial:**
|
|
306
|
+
**Uso comercial:** se requiere una licencia comercial separada para cualquier uso empresarial, profesional o que genere ingresos. Ver [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md) para los términos y la información de contacto.
|
|
265
307
|
|
|
266
308
|
---
|
|
267
309
|
|
|
@@ -273,7 +315,7 @@ Disponible en [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpserv
|
|
|
273
315
|
|
|
274
316
|
## Documentación multilingüe
|
|
275
317
|
|
|
276
|
-
Los siguientes archivos deben
|
|
318
|
+
Los siguientes archivos deben actualizarse para coincidir con los documentos en inglés tras cada release:
|
|
277
319
|
|
|
278
320
|
**Japonés (`*.ja.md`)** — `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
|
|
279
321
|
|
|
@@ -285,7 +327,7 @@ Los siguientes archivos deben ser actualizados para coincidir con los documentos
|
|
|
285
327
|
|
|
286
328
|
**Ucraniano (`*.uk.md`)** — `README.uk.md` / `TROUBLESHOOTING.uk.md` / `ROADMAP.uk.md` / `PRIVACY.uk.md` / `SECURITY.uk.md`
|
|
287
329
|
|
|
288
|
-
**Portugués
|
|
330
|
+
**Portugués brasileño (`*.pt-BR.md`)** — `README.pt-BR.md` / `TROUBLESHOOTING.pt-BR.md` / `ROADMAP.pt-BR.md` / `PRIVACY.pt-BR.md` / `SECURITY.pt-BR.md`
|
|
289
331
|
|
|
290
332
|
**Español (`*.es.md`)** — `README.es.md` / `TROUBLESHOOTING.es.md` / `ROADMAP.es.md` / `PRIVACY.es.md` / `SECURITY.es.md`
|
|
291
333
|
|
|
@@ -299,6 +341,6 @@ Las contribuciones de la comunidad para otros idiomas son bienvenidas.
|
|
|
299
341
|
|
|
300
342
|
## Contribuciones
|
|
301
343
|
|
|
302
|
-
Los pull requests son bienvenidos. Revisa las issues existentes antes de
|
|
344
|
+
Los pull requests son bienvenidos. Revisa las issues existentes antes de empezar a trabajar.
|
|
303
345
|
|
|
304
|
-
Si has probado la aceleración por GPU en hardware no listado arriba, abre una issue con el modelo de GPU, VRAM, tamaño
|
|
346
|
+
Si has probado la aceleración por GPU en hardware no listado arriba, abre una issue con el modelo de tu GPU, la VRAM, el tamaño del modelo y el throughput observado. Esto ayuda a construir una referencia de rendimiento precisa para otros usuarios.
|