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.
package/ROADMAP.pt-BR.md CHANGED
@@ -1,287 +1,286 @@
1
- # whisper-windows-mcp — Roadmap
2
-
3
- Versão atual: **v2.2.0**
4
-
5
- ---
6
-
7
- ## Princípios de design
8
-
9
- Estes princípios regem cada decisão neste projeto e têm prioridade sobre a velocidade de adição de funcionalidades.
10
-
11
- **Minimizar o uso da API do Claude.** Todo o fluxo de trabalho de transcrição — varredura, análise, fila, execução, validação, troca de modelos — deve ser executável com o menor número possível de interações com o Claude. Esta ferramenta deve funcionar completamente para usuários do Claude no plano gratuito que não pagam por assinaturas Pro ou Max. Cada chamada de ferramenta consome orçamento de uso. Projete de acordo.
12
-
13
- **Sempre uma única instância do whisper.** Nunca crie um segundo processo whisper-cli.exe enquanto um estiver em execução. O bloqueio de processo é obrigatório e inegociável.
14
-
15
- **Local em primeiro lugar, privado por padrão.** O áudio nunca sai da máquina. Nenhuma API de nuvem é necessária para a funcionalidade principal. Integrações opcionais (ex.: downloads de modelos do Hugging Face) devem ser claramente documentadas como opcionais.
16
-
17
- **Controle explícito do usuário.** Sem operações em massa silenciosas. Ações destrutivas ou irreversíveis exigem confirmação. O usuário deve sempre saber o que vai acontecer antes de acontecer.
18
-
19
- **Caminhos seguros para Unicode.** Toda E/S de arquivo deve lidar corretamente com nomes de arquivo não-ASCII, incluindo português, japonês, chinês, emoji, colchetes e outros caracteres especiais.
20
-
21
- **Modular e combinável.** As ferramentas são independentes. Os usuários usam o que precisam. Nenhuma funcionalidade deve exigir outra, a menos que seja inevitável.
22
-
23
- **Otimização antes de funcionalidades.** Quando em dúvida entre adicionar uma funcionalidade e reduzir a carga do sistema ou o número de chamadas de API, reduza a carga. Sessões de otimização grandes são caras. Projete a arquitetura corretamente desde o início.
24
-
25
- ---
26
-
27
- ## Concluído
28
-
29
- ### ✅ v1.3.1 — Bloqueio de processo
30
- Adicionada verificação `isWhisperRunning()` usando `tasklist /FI` antes de criar qualquer processo de transcrição. Retorna um erro claro com instruções do Gerenciador de Tarefas em vez de criar um processo concorrente.
31
-
32
- ### ✅ v1.4.0 — Aceleração GPU Vulkan
33
- Compilado whisper.cpp a partir do código-fonte com `-DGGML_VULKAN=ON` usando VS Build Tools 2022 e Vulkan SDK. Binários Vulkan pré-compilados distribuídos como `whisper-vulkan-win-x64.zip`.
34
-
35
- **Resultados no AMD Radeon RX Vega 56:** Utilização média de GPU ~16%. Arquivo de 58 minutos concluído em ~4,5 minutos na GPU vs. ~88 minutos apenas na CPU.
36
-
37
- ### ✅ v1.5.0 — Diagnóstico do sistema
38
- Ferramenta `check_system`: detecção de GPU via `wmic`, verificação de DLL Vulkan, relatório de VRAM, recomendação de tamanho de modelo.
39
-
40
- ### ✅ v1.6.0 — Pré-análise de arquivo
41
- Ferramenta `analyze_media` via FFprobe: duração, tamanho, codec, status de transcrição, estimativas de tempo de CPU e GPU. Varredura de arquivo único ou pasta com opções de ordenação.
42
-
43
- ### ✅ v1.7.0 — Transcrição em segundo plano + Visibilidade do progresso
44
- Arquitetura de processo desanexado: `transcribe_audio` com `background=true` cria o whisper como um processo desanexado e retorna imediatamente um ID de tarefa. `check_progress` analisa os carimbos de tempo de segmento do stderr do whisper para porcentagem e ETA em tempo real.
45
-
46
- ### ✅ v1.8.0 — Lote sequencial com validação
47
- `start_batch` e `check_batch_progress`: processamento sequencial automático, validação de transcrição (detecção de saída vazia/curta), avanço automático da fila, carimbos de tempo de progresso por arquivo.
48
-
49
- ### ✅ v1.9.0 — Suporte multilíngue e tradução
50
- `generate_subtitles` com detecção `language=auto` e saída SRT dupla `translate_to_english=true`. Adicionado suporte para formatos `.3gp` e `.ts`. `language=auto` também disponível em `transcribe_audio`.
51
-
52
- **Limitação conhecida:** A tradução integrada do Whisper é direcionada apenas ao inglês. Requer modelo `large-v3` para idiomas que não sejam inglês — modelos somente inglês (`*.en.bin`) geram `[FOREIGN]` em áudio que não seja inglês.
53
-
54
- ### ✅ v2.0.0 — Caminhos seguros para Unicode + SRT em segundo plano
55
- **Nomes de arquivo Unicode:** Arquivos com caracteres não-ASCII nos nomes causavam falha silenciosa na transcrição em segundo plano. Corrigido roteando toda a saída por um caminho temporário sanitizado baseado em ID de tarefa, depois movendo o resultado para o destino correto após a conclusão.
56
-
57
- **SRT no modo em segundo plano:** `spawnDetached` anteriormente codificava rigidamente `-otxt` independentemente do formato solicitado, e `generate_subtitles` bloqueava de forma síncrona e atingia o timeout MCP de 4 minutos em arquivos mais longos. Corrigido adicionando parâmetro `outputFormat` ao `spawnDetached`, suportando saída `text` e `srt` no modo em segundo plano.
58
-
59
- ### ✅ v2.0.1 — Correções de bugs (incluído no v2.2.0)
60
- - `--max-context 0` fixo em `buildArgs` e `spawnDetached` — previne loops de alucinação em áudio longo. `--condition-on-previous-text` e `--no-context` não são flags válidos no binário atual (era v1.8.3) — `--max-context N` é o flag correto.
61
- - `--no-speech-thold 0.6` fixo em ambas as funções — segmentos abaixo do limiar de confiança são tratados como silêncio em vez de conteúdo alucinado.
62
- - Validação de caminho (`validateInputPath`) — rejeita caminhos UNC e travessias `..`.
63
- - Proteção de tamanho de arquivo `MAX_FILE_SIZE_MB = 10240`.
64
- - Comentário de segurança de injeção de transcrição em `transcribeSingle`.
65
- - Comando CLI de lote corrigido no TROUBLESHOOTING.md — documentado o método correto de pré-conversão do FFmpeg e o método `Start-Process -RedirectStandardOutput`.
66
-
67
- ### ✅ v2.1.0 — Suite de gerenciamento de modelos (incluído no v2.2.0)
68
- - `WHISPER_MODEL` alterado de `const` para `let` (mutável dentro da sessão).
69
- - `MODEL_REGISTRY` — 16 modelos, variantes de precisão total e quantizadas, URLs de download do Hugging Face.
70
- - `ALLOWED_HF_PREFIXES` — lista de permissões de URL que limita downloads aos namespaces `ggerganov/whisper.cpp` e `ggml-org`.
71
- - Ferramenta `list_models` — varre o diretório de modelos, mostra o modelo ativo, tamanhos, casos de uso, downloads disponíveis.
72
- - Ferramenta `download_model` — baixa do Hugging Face via `https` integrado do Node.js, renomeação atômica (corrige condição de corrida de liberação de handle de arquivo do Windows).
73
- - Ferramenta `switch_model` — valida extensão `.bin`, restrição de diretório, verificação de bloqueio de processo.
74
- - `recommendedModel()` atualizado para recomendar `large-v3-turbo` para VRAM de 6GB+.
75
-
76
- ### ✅ v2.2.0 — Expansão de qualidade, parâmetros e hardware (atual)
77
- - Interface `WhisperOptions` substituindo argumentos posicionais em `buildArgs`.
78
- - Novos parâmetros em `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
- - Novos parâmetros em `generate_subtitles`: `temperature`, `prompt`, `beam_size`, `best_of`, `diarize`, `vad_model`.
80
- - `spawnDetached` refatorado — todos os flags de qualidade agora são aplicados no modo em segundo plano/lote.
81
- - `runSrtPass` atualizado para aceitar `extraOpts`.
82
- - Saída de lote corrigida — `readBatchProgress` agora move a saída temporária para o destino final antes de validar (esta era a causa raiz de todos os resultados de lote "com falha").
83
-
84
- **Nota de compatibilidade de flags:** `gpu_device` / `-g` foi adicionado no whisper.cpp v1.8.4. O binário Vulkan pré-compilado nos releases é da era v1.8.3 — este parâmetro é aceito pela ferramenta mas não terá efeito até que os usuários atualizem para binários v1.8.4+.
85
-
86
- **Flags válidos confirmados no binário atual (era v1.8.3):**
87
- `--max-context`, `--no-speech-thold`, `--processors`, `--offset-t`, `--duration`, `--best-of`, `--beam-size`, `--diarize`, `--tinydiarize`, `--temperature`, `--prompt`, flags VAD.
88
-
89
- **Ausentes no binário atual:** `--no-context` (use `--max-context 0`), `--condition-on-previous-text` (apenas nome da API Python), `--gpu-device` / `-g` (v1.8.4+).
90
-
91
- ---
92
-
93
- ## Bug crítico — Avanço automático do lote (confirmado, aguardando correção)
94
-
95
- ### Lote não avança sem polling ativo
96
-
97
- `start_batch` não avança a fila autonomamente entre os arquivos. O lote só avança quando `check_batch_progress` é chamado. Sem polling, o lote fica parado indefinidamente após cada arquivo — o whisper-cli.exe sai, nenhum novo processo é criado e a fila não avança.
98
-
99
- Isso destrói o objetivo de design central de processamento em lote autônomo durante a noite e viola diretamente o princípio de design de minimizar chamadas à API do Claude. Um lote de 95 clipes curtos exigiu cerca de 200 chamadas de polling ao longo de 100 minutos para ser concluído.
100
-
101
- **Causa raiz:** `readBatchProgress` contém toda a lógica de avanço de fila. Ele só é executado quando `check_batch_progress` é chamado explicitamente. Não há timer em segundo plano, observador de arquivo ou loop autônomo.
102
-
103
- **Correção planejada — Opção B (callback de saída, fortemente preferido):** Attach de um handler `on('exit')` ao processo filho whisper-cli criado. Quando o processo sair, imediatamente chamar a lógica de avanço para validar a saída e criar a próxima tarefa. Baseado em eventos, disparado exatamente uma vez por conclusão de arquivo, sem overhead de polling, sem chamadas de API consumidas.
104
-
105
- **Opção A (somente fallback):** `setInterval` em segundo plano com intervalo de polling baseado em duração derivado dos dados de duração do FFprobe já presentes no JSON de estado do lote. O tamanho do arquivo não é um substituto confiável para a duração.
106
-
107
- **Restrição adicional:** A correção não deve criar um segundo whisper-cli.exe quando um já está em execução — o bloqueio de processo deve ser respeitado no caminho de avanço automático.
108
-
109
- **Solução alternativa (atual):** Chame `check_batch_progress` repetidamente até que o lote seja concluído. Cerca de um polling por arquivo é necessário.
110
-
111
- ---
112
-
113
- ## Planejado — Arquitetura de Privacidade (antes da migração para o Bun)
114
-
115
- Essas mudanças devem ser lançadas antes da migração para o Bun e antes de quaisquer mudanças de licença que facilitem a adoção comercial ou empresarial. Lançar uma ferramenta de nível empresarial sem proteções de conformidade resolvidas cria responsabilidade para usuários em setores regulamentados.
116
-
117
- ### Variável de ambiente `WHISPER_PRIVACY_MODE`
118
- A ferramenta atualmente garante que nenhum **áudio** sai da máquina. Ela não estende essa garantia ao **texto de transcrição** — quando o conteúdo de transcrição é retornado inline em uma resposta de ferramenta, esse texto é processado pela API do Claude e sai do ambiente local.
119
-
120
- Essa lacuna é invisível para usuários que razoavelmente interpretam "nenhum dado sai da sua máquina" como cobrindo todo o conteúdo derivado do seu áudio.
121
-
122
- Adicionar `WHISPER_PRIVACY_MODE` como variável de ambiente em `claude_desktop_config.json`. Quando ativado:
123
- - Todas as respostas das ferramentas retornam apenas metadados: nome do arquivo, duração, contagem de palavras, status de conclusão
124
- - Nenhum texto de transcrição é incluído em qualquer resposta de ferramenta
125
- - O Claude não pode ler, analisar ou retransmitir conteúdo de transcrição de nenhuma forma
126
- - As transcrições existem apenas como arquivos `.txt` locais
127
-
128
- Esta é a configuração correta para implantações médicas, jurídicas, financeiras e corporativas. Zero chamadas de API, zero transmissão de dados, zero risco de conformidade.
129
-
130
- ### Gateway de consentimento para conteúdo de transcrição
131
- Quando `WHISPER_PRIVACY_MODE` não está ativado (padrão), qualquer resposta de ferramenta que inclua texto de transcrição deve ser precedida de uma divulgação no primeiro uso por sessão. A divulgação deve comunicar claramente que o texto de transcrição é enviado à API da Anthropic, que isso está fora da garantia "nenhum dado sai da sua máquina", e que usuários que lidam com conteúdo regulamentado devem verificar suas obrigações de conformidade antes de prosseguir.
132
-
133
- Implementação: variável de ambiente `WHISPER_CONSENT_ACKNOWLEDGED` com padrão `false`. No primeiro retorno de transcrição por sessão, se não reconhecido, o Claude apresenta a divulgação e solicita confirmação explícita. Uma vez reconhecido para a sessão, as transcrições subsequentes são retornadas sem solicitar novamente.
134
-
135
- ### Documentação `PRIVACY.md`
136
- Criar `PRIVACY.md` na raiz do repositório cobrindo:
137
- - Quais dados sempre ficam locais: arquivos de áudio, vídeo, modelos
138
- - Quais dados podem sair do local (por padrão): texto de transcrição em respostas de ferramentas
139
- - Quais dados nunca saem do local (com modo de privacidade): tudo
140
- - Orientação de framework de conformidade por setor (HIPAA, GDPR, privilégio advogado-cliente, FERPA, SOX, PCI-DSS, NDA/segredo comercial)
141
- - Como configurar o modo de privacidade
142
- - Isenção de responsabilidade de que os autores da ferramenta não são consultores jurídicos
143
-
144
- ### Avisos de privacidade no esquema de ferramentas
145
- Atualizar as descrições de ferramentas `ListToolsRequestSchema` para incluir uma nota de privacidade em qualquer ferramenta que retorne texto de transcrição. Isso aparece nas descrições de ferramentas do Claude Desktop e cria consciência no ponto de uso.
146
-
147
- ### Limpeza automática do diretório temporário
148
- `%TEMP%\whisper-mcp-jobs\` acumula arquivos de estado de tarefas e logs ao longo do tempo. Adicionar limpeza automática de arquivos de tarefas concluídas após uma janela de retenção configurável (padrão: 7 dias). Atualmente requer `Remove-Item` manual pelo usuário.
149
-
150
- ---
151
-
152
- ## Planejado — Migração para o Bun
153
-
154
- Migrar o runtime do Node.js para o [Bun](https://bun.sh) após a conclusão da arquitetura de privacidade e antes das adições de funcionalidades do v2.3.0.
155
-
156
- Como o Claude Desktop cria um novo servidor MCP a cada início de sessão, o tempo de inicialização está no caminho crítico. O Bun executa TypeScript nativamente sem etapa de compilação, inicia significativamente mais rápido que o Node e tem E/S mais rápida.
157
-
158
- **O que muda:**
159
- - Eliminação da etapa de build `tsc` e do diretório `dist/`
160
- - Os usuários executam o código TypeScript fonte diretamente
161
- - `tsconfig.json` torna-se opcional
162
- - Scripts `package.json` atualizados
163
- - Fluxo de trabalho de publicação no npm atualizado
164
-
165
- **O que não muda:**
166
- - Código-fonte `src/index.ts` — o Bun é compatível com o TypeScript existente e as APIs integradas do Node.js
167
- - Todos os comportamentos de ferramentas e formatos de saída
168
- - Configuração do Claude Desktop para usuários finais
169
-
170
- **Por que após a privacidade, antes do v2.3.0:** O código-fonte está em seu estado mais fácil de migrar agora. Migrar após adicionar mais ferramentas apenas aumenta a área de superfície sem benefício. A arquitetura de privacidade deve ser lançada primeiro conforme observado acima.
171
-
172
- ---
173
-
174
- ## Planejado — Revisão de licença (após a migração para o Bun)
175
-
176
- A licença MIT atual permite uso comercial irrestrito. Antes que a ferramenta alcance mercados profissionais e empresariais em escala, a situação de licenciamento deve ser avaliada.
177
-
178
- **Abordagem planejada — Licença dupla:**
179
- - MIT para uso pessoal e não comercial (sem mudanças para usuários existentes)
180
- - Licença comercial separada para uso empresarial e corporativo
181
- - Ponto de transição: próximo release de versão principal após a migração para o Bun
182
-
183
- **Por que não agora:** Mudar a licença antes que a arquitetura de privacidade seja concluída significaria vender licenças comerciais para uma ferramenta com lacunas de conformidade HIPAA/GDPR não resolvidas. A privacidade é lançada primeiro. A revisão de licença segue.
184
-
185
- A licença comercial, os avisos de privacidade no esquema de ferramentas e o `PRIVACY.md` juntos formam a história mínima viável de conformidade para compradores empresariais.
186
-
187
- ---
188
-
189
- ## Planejado — v2.3.0: Expansão de formatos de saída
190
-
191
- ### Formato de legenda VTT
192
- Saída WebVTT (`.vtt`) junto com SRT. VTT é o padrão web usado pelo YouTube, HTML5 `<video>` e a maioria dos players modernos. O whisper-cli o suporta nativamente. Adicionar `vtt` como formato de saída válido em `transcribe_audio`, `generate_subtitles` e `spawnDetached`. Atualizar `buildArgs` e todos os esquemas de ferramentas relevantes, README e documentação multilíngue.
193
-
194
- ### Formato LRC
195
- Saída no formato LRC (`.lrc`) de letras/karaokê via `-olrc`. Usado por players de mídia para exibição sincronizada de letras. Custo de implementação zero — flag CLI nativo.
196
-
197
- ### Formato CSV
198
- Saída CSV (`.csv`) via `-ocsv`. Dados tabulares estruturados com timing de segmentos — útil para análise downstream, fluxos de trabalho de alinhamento de clipes e importação em ferramentas de planilha. Custo de implementação zero — flag CLI nativo.
199
-
200
- ---
201
-
202
- ## Planejado — Releases futuros
203
-
204
- ### TinyDiarize
205
- Suporte ao flag `--tinydiarize` com variantes de modelo que suportam `tdrz` (ex.: `large-v2-tdrz`). Ao contrário do flag `--diarize` estéreo, o TinyDiarize funciona em gravações mono. Requer download de variante de modelo especial. Precisão menor que a diarização baseada em pyannote, mas sem dependências adicionais além do arquivo de modelo.
206
-
207
- **Status:** Planejado. Depende do `download_model` suportar variantes de modelo tdrz.
208
-
209
- ### Transcrição de URL do YouTube
210
- Transcrição direta de URLs do YouTube via yt-dlp. Baixa áudio e transcreve em uma única etapa. Requer yt-dlp instalado e no PATH.
211
-
212
- **Restrições de design:** yt-dlp é opcional. A ferramenta deve degradar graciosamente com instruções claras de instalação se não encontrado. Sem mudanças na funcionalidade principal para usuários que não precisam disso.
213
-
214
- ### Ferramentas de fluxo de trabalho de projeto de vídeo
215
- Para usuários que gerenciam grandes projetos de edição de vídeo com diretórios de clipes fonte e editados:
216
-
217
- 1. Varrer diretório fonte e subdiretórios de clipes
218
- 2. Fazer correspondência fuzzy de transcrições de clipes editados com transcrições fonte para encontrar pontos de origem
219
- 3. Exibir nomes de arquivo descritivos sugeridos pelo Claude com base no conteúdo de transcrição, exigindo confirmação explícita do usuário antes de executar qualquer renomeação
220
- 4. Pesquisa de transcrição em todo o diretório do projeto com resultados de timecode
221
-
222
- **Restrições de design:**
223
- - Arquivos fonte **nunca são renomeados ou modificados**
224
- - Todas as renomeações exigem **confirmação explícita do usuário**
225
- - A pesquisa é uma ferramenta autônoma utilizável de forma independente
226
- - A análise e correspondência acontecem localmente — o Claude é chamado apenas quando o usuário revisa os resultados, minimizando chamadas de API
227
-
228
- **Status:** Fase de design.
229
-
230
- ### Diarização de falantes (pyannote-audio)
231
- Diarização de falantes mono completa com rótulos de ID de falante — marca transições de falantes em toda a gravação independentemente da configuração de canal. Diferente do flag `--diarize` estéreo integrado (v2.2.0) e do TinyDiarize.
232
-
233
- **Implementação:** Requer [pyannote-audio](https://github.com/pyannote/pyannote-audio) — biblioteca baseada em Python com requisito de token de acesso a modelos do Hugging Face. Pilha de dependências completamente separada do pipeline whisper.cpp.
234
-
235
- **Status:** Funcionalidade avançada opcional com sua própria documentação de configuração. Não incluída no pacote principal.
236
-
237
- ### Tradução para idiomas que não sejam inglês
238
- O flag `--translate` do Whisper é direcionado apenas ao inglês. Suportar idiomas de destino arbitrários requer uma API de tradução externa ou modelo de tradução local.
239
-
240
- **Opções em consideração:** LibreTranslate (pode ser auto-hospedado, local em primeiro lugar), tradução via LLM local ou documentação explícita de fora do escopo.
241
-
242
- **Status:** Adiado aguardando decisão de design sobre local em primeiro lugar vs. dependência de API.
243
-
244
- ### Limpeza e formatação de transcrições
245
- Pipeline de pós-processamento:
246
- - Remoção de palavras de preenchimento e falsos começos (opcional, controlado pelo usuário)
247
- - Quebras de parágrafo em limites de tópicos naturais
248
- - Formatação com consciência de falante combinada com saída de diarização
249
- - Exportação para PDF ou DOCX
250
-
251
- **Status:** Planejado. A variante com consciência de falante depende da diarização.
252
-
253
- ---
254
-
255
- ## Distribuição
256
-
257
- Disponível no [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org) e [Glama](https://glama.ai).
258
-
259
- ---
260
-
261
- ## Documentação multilíngue
262
-
263
- A documentação em japonês, coreano, vietnamita, indonésio, ucraniano, português brasileiro e espanhol é mantida em paralelo com o inglês. Os seguintes arquivos devem ser atualizados para corresponder aos documentos em inglês após cada release:
264
-
265
- **Japonês (`*.ja.md`)** — `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
266
-
267
- **Coreano (`*.ko.md`)** — `README.ko.md` / `TROUBLESHOOTING.ko.md` / `ROADMAP.ko.md` / `PRIVACY.ko.md` / `SECURITY.ko.md`
268
-
269
- **Vietnamita (`*.vi.md`)** — `README.vi.md` / `TROUBLESHOOTING.vi.md` / `ROADMAP.vi.md` / `PRIVACY.vi.md` / `SECURITY.vi.md`
270
-
271
- **Indonésio (`*.id.md`)** — `README.id.md` / `TROUBLESHOOTING.id.md` / `ROADMAP.id.md` / `PRIVACY.id.md` / `SECURITY.id.md`
272
-
273
- **Ucraniano (`*.uk.md`)** — `README.uk.md` / `TROUBLESHOOTING.uk.md` / `ROADMAP.uk.md` / `PRIVACY.uk.md` / `SECURITY.uk.md`
274
-
275
- **Português Brasileiro (`*.pt-BR.md`)** — `README.pt-BR.md` / `TROUBLESHOOTING.pt-BR.md` / `ROADMAP.pt-BR.md` / `PRIVACY.pt-BR.md` / `SECURITY.pt-BR.md`
276
-
277
- **Espanhol (`*.es.md`)** — `README.es.md` / `TROUBLESHOOTING.es.md` / `ROADMAP.es.md` / `PRIVACY.es.md` / `SECURITY.es.md`
278
-
279
- Contribuições da comunidade para outros idiomas são bem-vindas.
280
-
281
- ---
282
-
283
- ## Contribuições
284
-
285
- Pull requests são bem-vindos. Verifique as issues existentes antes de começar a trabalhar.
286
-
287
- Se você testou a aceleração por GPU em hardware não listado acima, abra uma issue com o modelo da GPU, VRAM, tamanho do modelo e throughput observado. Isso ajuda a construir uma referência de desempenho precisa para outros usuários.
1
+ # whisper-windows-mcp — Roadmap
2
+
3
+ Versão atual: **v2.2.0**
4
+
5
+ ---
6
+
7
+ ## Princípios de design
8
+
9
+ Estes princípios regem cada decisão neste projeto e têm prioridade sobre a velocidade de adição de funcionalidades.
10
+
11
+ **Minimizar o uso da API do Claude.** Todo o fluxo de trabalho de transcrição — varredura, análise, fila, execução, validação, troca de modelos — deve ser executável com o menor número possível de interações com o Claude. Esta ferramenta deve funcionar completamente para usuários do Claude no plano gratuito que não pagam por assinaturas Pro ou Max. Cada chamada de ferramenta consome orçamento de uso. Projete de acordo.
12
+
13
+ **Sempre uma única instância do whisper.** Nunca crie um segundo processo whisper-cli.exe enquanto um estiver em execução. O bloqueio de processo é obrigatório e inegociável.
14
+
15
+ **Local em primeiro lugar, privado por padrão.** O áudio nunca sai da máquina. Nenhuma API de nuvem é necessária para a funcionalidade principal. Integrações opcionais (ex.: downloads de modelos do Hugging Face) devem ser claramente documentadas como opcionais.
16
+
17
+ **Controle explícito do usuário.** Sem operações em massa silenciosas. Ações destrutivas ou irreversíveis exigem confirmação. O usuário deve sempre saber o que vai acontecer antes de acontecer.
18
+
19
+ **Caminhos seguros para Unicode.** Toda E/S de arquivo deve lidar corretamente com nomes de arquivo não-ASCII, incluindo português, japonês, chinês, emoji, colchetes e outros caracteres especiais.
20
+
21
+ **Modular e combinável.** As ferramentas são independentes. Os usuários usam o que precisam. Nenhuma funcionalidade deve exigir outra, a menos que seja inevitável.
22
+
23
+ **Otimização antes de funcionalidades.** Quando em dúvida entre adicionar uma funcionalidade e reduzir a carga do sistema ou o número de chamadas de API, reduza a carga. Sessões de otimização grandes são caras. Projete a arquitetura corretamente desde o início.
24
+
25
+ ---
26
+
27
+ ## Concluído
28
+
29
+ ### ✅ v1.3.1 — Bloqueio de processo
30
+ Adicionada verificação `isWhisperRunning()` usando `tasklist /FI` antes de criar qualquer processo de transcrição. Retorna um erro claro com instruções do Gerenciador de Tarefas em vez de criar um processo concorrente.
31
+
32
+ ### ✅ v1.4.0 — Aceleração GPU Vulkan
33
+ Compilado whisper.cpp a partir do código-fonte com `-DGGML_VULKAN=ON` usando VS Build Tools 2022 e Vulkan SDK. Binários Vulkan pré-compilados distribuídos como `whisper-vulkan-win-x64.zip`.
34
+
35
+ **Resultados no AMD Radeon RX Vega 56:** Utilização média de GPU ~16%. Arquivo de 58 minutos concluído em ~4,5 minutos na GPU vs. ~88 minutos apenas na CPU.
36
+
37
+ ### ✅ v1.5.0 — Diagnóstico do sistema
38
+ Ferramenta `check_system`: detecção de GPU via `wmic`, verificação de DLL Vulkan, relatório de VRAM, recomendação de tamanho de modelo.
39
+
40
+ ### ✅ v1.6.0 — Pré-análise de arquivo
41
+ Ferramenta `analyze_media` via FFprobe: duração, tamanho, codec, status de transcrição, estimativas de tempo de CPU e GPU. Varredura de arquivo único ou pasta com opções de ordenação.
42
+
43
+ ### ✅ v1.7.0 — Transcrição em segundo plano + Visibilidade do progresso
44
+ Arquitetura de processo desanexado: `transcribe_audio` com `background=true` cria o whisper como um processo desanexado e retorna imediatamente um ID de tarefa. `check_progress` analisa os carimbos de tempo de segmento do stderr do whisper para porcentagem e ETA em tempo real.
45
+
46
+ ### ✅ v1.8.0 — Lote sequencial com validação
47
+ `start_batch` e `check_batch_progress`: processamento sequencial automático, validação de transcrição (detecção de saída vazia/curta), avanço automático da fila, carimbos de tempo de progresso por arquivo.
48
+
49
+ ### ✅ v1.9.0 — Suporte multilíngue e tradução
50
+ `generate_subtitles` com detecção `language=auto` e saída SRT dupla `translate_to_english=true`. Adicionado suporte para formatos `.3gp` e `.ts`. `language=auto` também disponível em `transcribe_audio`.
51
+
52
+ **Limitação conhecida:** A tradução integrada do Whisper é direcionada apenas ao inglês. Requer modelo `large-v3` para idiomas que não sejam inglês — modelos somente inglês (`*.en.bin`) geram `[FOREIGN]` em áudio que não seja inglês.
53
+
54
+ ### ✅ v2.0.0 — Caminhos seguros para Unicode + SRT em segundo plano
55
+ **Nomes de arquivo Unicode:** Arquivos com caracteres não-ASCII nos nomes causavam falha silenciosa na transcrição em segundo plano. Corrigido roteando toda a saída por um caminho temporário sanitizado baseado em ID de tarefa, depois movendo o resultado para o destino correto após a conclusão.
56
+
57
+ **SRT no modo em segundo plano:** `spawnDetached` anteriormente codificava rigidamente `-otxt` independentemente do formato solicitado, e `generate_subtitles` bloqueava de forma síncrona e atingia o timeout MCP de 4 minutos em arquivos mais longos. Corrigido adicionando parâmetro `outputFormat` ao `spawnDetached`, suportando saída `text` e `srt` no modo em segundo plano.
58
+
59
+ ### ✅ v2.0.1 — Correções de bugs (incluído no v2.2.0)
60
+ - `--max-context 0` fixo em `buildArgs` e `spawnDetached` — previne loops de alucinação em áudio longo. `--condition-on-previous-text` e `--no-context` não são flags válidos no binário atual (era v1.8.3) — `--max-context N` é o flag correto.
61
+ - `--no-speech-thold 0.6` fixo em ambas as funções — segmentos abaixo do limiar de confiança são tratados como silêncio em vez de conteúdo alucinado.
62
+ - Validação de caminho (`validateInputPath`) — rejeita caminhos UNC e travessias `..`.
63
+ - Proteção de tamanho de arquivo `MAX_FILE_SIZE_MB = 10240`.
64
+ - Comentário de segurança de injeção de transcrição em `transcribeSingle`.
65
+ - Comando CLI de lote corrigido no TROUBLESHOOTING.md — documentado o método correto de pré-conversão do FFmpeg e o método `Start-Process -RedirectStandardOutput`.
66
+
67
+ ### ✅ v2.1.0 — Suite de gerenciamento de modelos (incluído no v2.2.0)
68
+ - `WHISPER_MODEL` alterado de `const` para `let` (mutável dentro da sessão).
69
+ - `MODEL_REGISTRY` — 16 modelos, variantes de precisão total e quantizadas, URLs de download do Hugging Face.
70
+ - `ALLOWED_HF_PREFIXES` — lista de permissões de URL que limita downloads aos namespaces `ggerganov/whisper.cpp` e `ggml-org`.
71
+ - Ferramenta `list_models` — varre o diretório de modelos, mostra o modelo ativo, tamanhos, casos de uso, downloads disponíveis.
72
+ - Ferramenta `download_model` — baixa do Hugging Face via `https` integrado do Node.js, renomeação atômica (corrige condição de corrida de liberação de handle de arquivo do Windows).
73
+ - Ferramenta `switch_model` — valida extensão `.bin`, restrição de diretório, verificação de bloqueio de processo.
74
+ - `recommendedModel()` atualizado para recomendar `large-v3-turbo` para VRAM de 6GB+.
75
+
76
+ ### ✅ v2.2.0 — Expansão de qualidade, parâmetros e hardware (atual)
77
+ - Interface `WhisperOptions` substituindo argumentos posicionais em `buildArgs`.
78
+ - Novos parâmetros em `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
+ - Novos parâmetros em `generate_subtitles`: `temperature`, `prompt`, `beam_size`, `best_of`, `diarize`, `vad_model`.
80
+ - `spawnDetached` refatorado — todos os flags de qualidade agora são aplicados no modo em segundo plano/lote.
81
+ - `runSrtPass` atualizado para aceitar `extraOpts`.
82
+ - Saída de lote corrigida — `readBatchProgress` agora move a saída temporária para o destino final antes de validar (esta era a causa raiz de todos os resultados de lote "com falha").
83
+
84
+ **Nota de compatibilidade de flags:** `gpu_device` / `-g` foi adicionado no whisper.cpp v1.8.4. O binário Vulkan pré-compilado nos releases é da era v1.8.3 — este parâmetro é aceito pela ferramenta mas não terá efeito até que os usuários atualizem para binários v1.8.4+.
85
+
86
+ **Flags válidos confirmados no binário atual (era v1.8.3):**
87
+ `--max-context`, `--no-speech-thold`, `--processors`, `--offset-t`, `--duration`, `--best-of`, `--beam-size`, `--diarize`, `--tinydiarize`, `--temperature`, `--prompt`, flags VAD.
88
+
89
+ **Ausentes no binário atual:** `--no-context` (use `--max-context 0`), `--condition-on-previous-text` (apenas nome da API Python), `--gpu-device` / `-g` (v1.8.4+).
90
+
91
+ ---
92
+
93
+ ## Bug crítico — Avanço automático do lote (confirmado, aguardando correção)
94
+
95
+ ### Lote não avança sem polling ativo
96
+
97
+ `start_batch` não avança a fila autonomamente entre os arquivos. O lote só avança quando `check_batch_progress` é chamado. Sem polling, o lote fica parado indefinidamente após cada arquivo — o whisper-cli.exe sai, nenhum novo processo é criado e a fila não avança.
98
+
99
+ Isso destrói o objetivo de design central de processamento em lote autônomo durante a noite e viola diretamente o princípio de design de minimizar chamadas à API do Claude. Um lote de 95 clipes curtos exigiu cerca de 200 chamadas de polling ao longo de 100 minutos para ser concluído.
100
+
101
+ **Causa raiz:** `readBatchProgress` contém toda a lógica de avanço de fila. Ele só é executado quando `check_batch_progress` é chamado explicitamente. Não há timer em segundo plano, observador de arquivo ou loop autônomo.
102
+
103
+ **Correção planejada — Opção B (callback de saída, fortemente preferido):** Attach de um handler `on('exit')` ao processo filho whisper-cli criado. Quando o processo sair, imediatamente chamar a lógica de avanço para validar a saída e criar a próxima tarefa. Baseado em eventos, disparado exatamente uma vez por conclusão de arquivo, sem overhead de polling, sem chamadas de API consumidas.
104
+
105
+ **Opção A (somente fallback):** `setInterval` em segundo plano com intervalo de polling baseado em duração derivado dos dados de duração do FFprobe já presentes no JSON de estado do lote. O tamanho do arquivo não é um substituto confiável para a duração.
106
+
107
+ **Restrição adicional:** A correção não deve criar um segundo whisper-cli.exe quando um já está em execução — o bloqueio de processo deve ser respeitado no caminho de avanço automático.
108
+
109
+ **Solução alternativa (atual):** Chame `check_batch_progress` repetidamente até que o lote seja concluído. Cerca de um polling por arquivo é necessário.
110
+
111
+ ---
112
+
113
+ ## Planejado — Arquitetura de Privacidade (antes da migração para o Bun)
114
+
115
+ Essas mudanças devem ser lançadas antes da migração para o Bun e antes de quaisquer mudanças de licença que facilitem a adoção comercial ou empresarial. Lançar uma ferramenta de nível empresarial sem proteções de conformidade resolvidas cria responsabilidade para usuários em setores regulamentados.
116
+
117
+ ### Variável de ambiente `WHISPER_PRIVACY_MODE`
118
+ A ferramenta atualmente garante que nenhum **áudio** sai da máquina. Ela não estende essa garantia ao **texto de transcrição** — quando o conteúdo de transcrição é retornado inline em uma resposta de ferramenta, esse texto é processado pela API do Claude e sai do ambiente local.
119
+
120
+ Essa lacuna é invisível para usuários que razoavelmente interpretam "nenhum dado sai da sua máquina" como cobrindo todo o conteúdo derivado do seu áudio.
121
+
122
+ Adicionar `WHISPER_PRIVACY_MODE` como variável de ambiente em `claude_desktop_config.json`. Quando ativado:
123
+ - Todas as respostas das ferramentas retornam apenas metadados: nome do arquivo, duração, contagem de palavras, status de conclusão
124
+ - Nenhum texto de transcrição é incluído em qualquer resposta de ferramenta
125
+ - O Claude não pode ler, analisar ou retransmitir conteúdo de transcrição de nenhuma forma
126
+ - As transcrições existem apenas como arquivos `.txt` locais
127
+
128
+ Esta é a configuração correta para implantações médicas, jurídicas, financeiras e corporativas. Zero chamadas de API, zero transmissão de dados, zero risco de conformidade.
129
+
130
+ ### Gateway de consentimento para conteúdo de transcrição
131
+ Quando `WHISPER_PRIVACY_MODE` não está ativado (padrão), qualquer resposta de ferramenta que inclua texto de transcrição deve ser precedida de uma divulgação no primeiro uso por sessão. A divulgação deve comunicar claramente que o texto de transcrição é enviado à API da Anthropic, que isso está fora da garantia "nenhum dado sai da sua máquina", e que usuários que lidam com conteúdo regulamentado devem verificar suas obrigações de conformidade antes de prosseguir.
132
+
133
+ Implementação: variável de ambiente `WHISPER_CONSENT_ACKNOWLEDGED` com padrão `false`. No primeiro retorno de transcrição por sessão, se não reconhecido, o Claude apresenta a divulgação e solicita confirmação explícita. Uma vez reconhecido para a sessão, as transcrições subsequentes são retornadas sem solicitar novamente.
134
+
135
+ ### Documentação `PRIVACY.md`
136
+ Criar `PRIVACY.md` na raiz do repositório cobrindo:
137
+ - Quais dados sempre ficam locais: arquivos de áudio, vídeo, modelos
138
+ - Quais dados podem sair do local (por padrão): texto de transcrição em respostas de ferramentas
139
+ - Quais dados nunca saem do local (com modo de privacidade): tudo
140
+ - Orientação de framework de conformidade por setor (HIPAA, GDPR, privilégio advogado-cliente, FERPA, SOX, PCI-DSS, NDA/segredo comercial)
141
+ - Como configurar o modo de privacidade
142
+ - Isenção de responsabilidade de que os autores da ferramenta não são consultores jurídicos
143
+
144
+ ### Avisos de privacidade no esquema de ferramentas
145
+ Atualizar as descrições de ferramentas `ListToolsRequestSchema` para incluir uma nota de privacidade em qualquer ferramenta que retorne texto de transcrição. Isso aparece nas descrições de ferramentas do Claude Desktop e cria consciência no ponto de uso.
146
+
147
+ ### Limpeza automática do diretório temporário
148
+ `%TEMP%\whisper-mcp-jobs\` acumula arquivos de estado de tarefas e logs ao longo do tempo. Adicionar limpeza automática de arquivos de tarefas concluídas após uma janela de retenção configurável (padrão: 7 dias). Atualmente requer `Remove-Item` manual pelo usuário.
149
+
150
+ ---
151
+
152
+ ## Planejado — Migração para o Bun
153
+
154
+ Migrar o runtime do Node.js para o [Bun](https://bun.sh) após a conclusão da arquitetura de privacidade e antes das adições de funcionalidades do v2.3.0.
155
+
156
+ Como o Claude Desktop cria um novo servidor MCP a cada início de sessão, o tempo de inicialização está no caminho crítico. O Bun executa TypeScript nativamente sem etapa de compilação, inicia significativamente mais rápido que o Node e tem E/S mais rápida.
157
+
158
+ **O que muda:**
159
+ - Eliminação da etapa de build `tsc` e do diretório `dist/`
160
+ - Os usuários executam o código TypeScript fonte diretamente
161
+ - `tsconfig.json` torna-se opcional
162
+ - Scripts `package.json` atualizados
163
+ - Fluxo de trabalho de publicação no npm atualizado
164
+
165
+ **O que não muda:**
166
+ - Código-fonte `src/index.ts` — o Bun é compatível com o TypeScript existente e as APIs integradas do Node.js
167
+ - Todos os comportamentos de ferramentas e formatos de saída
168
+ - Configuração do Claude Desktop para usuários finais
169
+
170
+ **Por que após a privacidade, antes do v2.3.0:** O código-fonte está em seu estado mais fácil de migrar agora. Migrar após adicionar mais ferramentas apenas aumenta a área de superfície sem benefício. A arquitetura de privacidade deve ser lançada primeiro conforme observado acima.
171
+
172
+ ---
173
+
174
+ ## Licenciamento
175
+
176
+ whisper-windows-mcp usa licença dupla.
177
+
178
+ **Uso não comercial:** MIT — gratuito para uso pessoal, educacional e não comercial. Veja [LICENSE](LICENSE).
179
+
180
+ **Uso comercial:** É necessário um contrato de licença comercial separado. Veja [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).
181
+
182
+ `WHISPER_PRIVACY_MODE` para implantações em setores regulamentados está em desenvolvimento e planejado para uma versão futura. Veja [PRIVACY.md](PRIVACY.md) para orientações atuais.
183
+
184
+ ## Planejado — v2.3.0: Expansão de formatos de saída
185
+
186
+ ### Formato de legenda VTT
187
+ Saída WebVTT (`.vtt`) junto com SRT. VTT é o padrão web usado pelo YouTube, HTML5 `<video>` e a maioria dos players modernos. O whisper-cli o suporta nativamente. Adicionar `vtt` como formato de saída válido em `transcribe_audio`, `generate_subtitles` e `spawnDetached`. Atualizar `buildArgs` e todos os esquemas de ferramentas relevantes, README e documentação multilíngue.
188
+
189
+ ### Formato LRC
190
+ Saída no formato LRC (`.lrc`) de letras/karaokê via `-olrc`. Usado por players de mídia para exibição sincronizada de letras. Custo de implementação zero — flag CLI nativo.
191
+
192
+ ### Formato CSV
193
+ Saída CSV (`.csv`) via `-ocsv`. Dados tabulares estruturados com timing de segmentos — útil para análise downstream, fluxos de trabalho de alinhamento de clipes e importação em ferramentas de planilha. Custo de implementação zero — flag CLI nativo.
194
+
195
+ ---
196
+
197
+ ## Planejado — Releases futuros
198
+
199
+ ### TinyDiarize
200
+ Suporte ao flag `--tinydiarize` com variantes de modelo que suportam `tdrz` (ex.: `large-v2-tdrz`). Ao contrário do flag `--diarize` estéreo, o TinyDiarize funciona em gravações mono. Requer download de variante de modelo especial. Precisão menor que a diarização baseada em pyannote, mas sem dependências adicionais além do arquivo de modelo.
201
+
202
+ **Status:** Planejado. Depende do `download_model` suportar variantes de modelo tdrz.
203
+
204
+ ### Transcrição de URL do YouTube
205
+ Transcrição direta de URLs do YouTube via yt-dlp. Baixa áudio e transcreve em uma única etapa. Requer yt-dlp instalado e no PATH.
206
+
207
+ **Restrições de design:** yt-dlp é opcional. A ferramenta deve degradar graciosamente com instruções claras de instalação se não encontrado. Sem mudanças na funcionalidade principal para usuários que não precisam disso.
208
+
209
+ ### Ferramentas de fluxo de trabalho de projeto de vídeo
210
+ Para usuários que gerenciam grandes projetos de edição de vídeo com diretórios de clipes fonte e editados:
211
+
212
+ 1. Varrer diretório fonte e subdiretórios de clipes
213
+ 2. Fazer correspondência fuzzy de transcrições de clipes editados com transcrições fonte para encontrar pontos de origem
214
+ 3. Exibir nomes de arquivo descritivos sugeridos pelo Claude com base no conteúdo de transcrição, exigindo confirmação explícita do usuário antes de executar qualquer renomeação
215
+ 4. Pesquisa de transcrição em todo o diretório do projeto com resultados de timecode
216
+
217
+ **Restrições de design:**
218
+ - Arquivos fonte **nunca são renomeados ou modificados**
219
+ - Todas as renomeações exigem **confirmação explícita do usuário**
220
+ - A pesquisa é uma ferramenta autônoma utilizável de forma independente
221
+ - A análise e correspondência acontecem localmente — o Claude é chamado apenas quando o usuário revisa os resultados, minimizando chamadas de API
222
+
223
+ **Status:** Fase de design.
224
+
225
+ ### Diarização de falantes (pyannote-audio)
226
+ Diarização de falantes mono completa com rótulos de ID de falante — marca transições de falantes em toda a gravação independentemente da configuração de canal. Diferente do flag `--diarize` estéreo integrado (v2.2.0) e do TinyDiarize.
227
+
228
+ **Implementação:** Requer [pyannote-audio](https://github.com/pyannote/pyannote-audio) — biblioteca baseada em Python com requisito de token de acesso a modelos do Hugging Face. Pilha de dependências completamente separada do pipeline whisper.cpp.
229
+
230
+ **Status:** Funcionalidade avançada opcional com sua própria documentação de configuração. Não incluída no pacote principal.
231
+
232
+ ### Tradução para idiomas que não sejam inglês
233
+ O flag `--translate` do Whisper é direcionado apenas ao inglês. Suportar idiomas de destino arbitrários requer uma API de tradução externa ou modelo de tradução local.
234
+
235
+ **Opções em consideração:** LibreTranslate (pode ser auto-hospedado, local em primeiro lugar), tradução via LLM local ou documentação explícita de fora do escopo.
236
+
237
+ **Status:** Adiado aguardando decisão de design sobre local em primeiro lugar vs. dependência de API.
238
+
239
+ ### Limpeza e formatação de transcrições
240
+ Pipeline de pós-processamento:
241
+ - Remoção de palavras de preenchimento e falsos começos (opcional, controlado pelo usuário)
242
+ - Quebras de parágrafo em limites de tópicos naturais
243
+ - Formatação com consciência de falante combinada com saída de diarização
244
+ - Exportação para PDF ou DOCX
245
+
246
+ **Status:** Planejado. A variante com consciência de falante depende da diarização.
247
+
248
+ ---
249
+
250
+ ## Distribuição
251
+
252
+ Disponível no [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org) e [Glama](https://glama.ai).
253
+
254
+ ---
255
+
256
+ ## Documentação multilíngue
257
+
258
+ A documentação em japonês, coreano, vietnamita, indonésio, ucraniano, português brasileiro e espanhol é mantida em paralelo com o inglês. Os seguintes arquivos devem ser atualizados para corresponder aos documentos em inglês após cada release:
259
+
260
+ **Japonês (`*.ja.md`)** — `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
261
+
262
+ **Coreano (`*.ko.md`)** — `README.ko.md` / `TROUBLESHOOTING.ko.md` / `ROADMAP.ko.md` / `PRIVACY.ko.md` / `SECURITY.ko.md`
263
+
264
+ **Vietnamita (`*.vi.md`)** — `README.vi.md` / `TROUBLESHOOTING.vi.md` / `ROADMAP.vi.md` / `PRIVACY.vi.md` / `SECURITY.vi.md`
265
+
266
+ **Indonésio (`*.id.md`)** — `README.id.md` / `TROUBLESHOOTING.id.md` / `ROADMAP.id.md` / `PRIVACY.id.md` / `SECURITY.id.md`
267
+
268
+ **Ucraniano (`*.uk.md`)** — `README.uk.md` / `TROUBLESHOOTING.uk.md` / `ROADMAP.uk.md` / `PRIVACY.uk.md` / `SECURITY.uk.md`
269
+
270
+ **Português Brasileiro (`*.pt-BR.md`)** — `README.pt-BR.md` / `TROUBLESHOOTING.pt-BR.md` / `ROADMAP.pt-BR.md` / `PRIVACY.pt-BR.md` / `SECURITY.pt-BR.md`
271
+
272
+ **Espanhol (`*.es.md`)** — `README.es.md` / `TROUBLESHOOTING.es.md` / `ROADMAP.es.md` / `PRIVACY.es.md` / `SECURITY.es.md`
273
+
274
+ **Polish (`*.pl.md`)** — `README.pl.md` / `TROUBLESHOOTING.pl.md` / `ROADMAP.pl.md` / `PRIVACY.pl.md` / `SECURITY.pl.md`
275
+
276
+ **Romanian (`*.ro.md`)** — `README.ro.md` / `TROUBLESHOOTING.ro.md` / `ROADMAP.ro.md` / `PRIVACY.ro.md` / `SECURITY.ro.md`
277
+
278
+ Contribuições da comunidade para outros idiomas são bem-vindas.
279
+
280
+ ---
281
+
282
+ ## Contribuições
283
+
284
+ Pull requests são bem-vindos. Verifique as issues existentes antes de começar a trabalhar.
285
+
286
+ Se você testou a aceleração por GPU em hardware não listado acima, abra uma issue com o modelo da GPU, VRAM, tamanho do modelo e throughput observado. Isso ajuda a construir uma referência de desempenho precisa para outros usuários.