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.uk.md CHANGED
@@ -1,291 +1,290 @@
1
- # whisper-windows-mcp — Дорожня карта
2
-
3
- Поточна версія: **v2.2.0**
4
-
5
- ---
6
-
7
- ## Принципи проєктування
8
-
9
- Ці принципи визначають кожне рішення в цьому проєкті і мають пріоритет над швидкістю додавання функцій.
10
-
11
- **Мінімізація використання Claude API.** Весь робочий процес транскрипції — сканування, аналіз, черга, виконання, перевірка, перемикання моделей — має виконуватися з мінімальною кількістю взаємодій з Claude. Цей інструмент має повноцінно працювати для користувачів безкоштовного плану Claude, які не платять за підписки Pro або Max. Кожен виклик інструменту витрачає ліміт використання. Проєктуйте відповідно.
12
-
13
- **Завжди лише один екземпляр whisper.** Ніколи не запускайте другий процес whisper-cli.exe, поки один вже виконується. Блокування процесу є обов'язковим і не підлягає переговорам.
14
-
15
- **Локальний пріоритет, приватно за замовчуванням.** Аудіо ніколи не покидає комп'ютер. Для основних функцій хмарні API не потрібні. Необов'язкові інтеграції (наприклад, завантаження моделей з Hugging Face) мають бути чітко задокументовані як необов'язкові.
16
-
17
- **Явний контроль користувача.** Жодних тихих масових операцій. Руйнівні або незворотні дії потребують підтвердження. Користувач завжди має знати, що відбуватиметься, до того, як це станеться.
18
-
19
- **Unicode-безпечні шляхи.** Весь файловий введення-виведення має правильно обробляти не-ASCII імена файлів, включно з українськими, японськими, китайськими, емодзі, дужками та іншими спеціальними символами.
20
-
21
- **Модульність і компонованість.** Інструменти незалежні. Користувачі використовують те, що їм потрібно. Жодна функція не повинна вимагати іншої, якщо цього неможливо уникнути.
22
-
23
- **Оптимізація перед функціями.** Якщо сумніваєтеся між додаванням функції та зменшенням навантаження на систему або кількості викликів API — зменшуйте навантаження. Великі оптимізаційні роботи дорого коштують. Спроєктуйте архітектуру правильно з першого разу.
24
-
25
- ---
26
-
27
- ## Завершено
28
-
29
- ### ✅ v1.3.1 — Блокування процесу
30
- Додано перевірку `isWhisperRunning()` з використанням `tasklist /FI` перед запуском будь-якої транскрипції. Повертає чітку помилку з інструкціями Диспетчера завдань замість запуску конкурентного процесу.
31
-
32
- ### ✅ v1.4.0 — Vulkan GPU-прискорення
33
- Скомпільовано whisper.cpp з вихідного коду з `-DGGML_VULKAN=ON` за допомогою VS Build Tools 2022 і Vulkan SDK. Готові Vulkan-бінарники розповсюджуються як `whisper-vulkan-win-x64.zip`.
34
-
35
- **Результати на AMD Radeon RX Vega 56:** Середнє навантаження GPU ~16%. 58-хвилинний файл завершується за ~4.5 хвилини на GPU проти ~88 хвилин лише на CPU.
36
-
37
- ### ✅ v1.5.0 — Системна діагностика
38
- Інструмент `check_system`: виявлення GPU через `wmic`, перевірка Vulkan DLL, звіт про VRAM, рекомендація розміру моделі.
39
-
40
- ### ✅ v1.6.0 — Попередній аналіз файлу
41
- Інструмент `analyze_media` через FFprobe: тривалість, розмір, кодек, статус транскрипції, оцінки часу CPU і GPU. Сканування одного файлу або теки з параметрами сортування.
42
-
43
- ### ✅ v1.7.0 — Фонова транскрипція + Відображення прогресу
44
- Архітектура відокремленого процесу: `transcribe_audio` з `background=true` запускає whisper як відокремлений процес і одразу повертає ID завдання. `check_progress` аналізує мітки часу сегментів stderr whisper для відсотку і ETA в реальному часі.
45
-
46
- ### ✅ v1.8.0 — Послідовний пакет з перевіркою
47
- `start_batch` і `check_batch_progress`: автоматична послідовна обробка, перевірка транскрипції (виявлення порожнього/короткого виводу), автоматичне просування черги, мітки часу прогресу для кожного файлу.
48
-
49
- ### ✅ v1.9.0 — Багатомовна підтримка і переклад
50
- `generate_subtitles` з виявленням `language=auto` і подвійним SRT-виводом `translate_to_english=true`. Додано підтримку форматів `.3gp` і `.ts`. `language=auto` також доступний у `transcribe_audio`.
51
-
52
- **Відоме обмеження:** Вбудований переклад Whisper орієнтований лише на англійську. Для не-англійських мов потрібна модель `large-v3` — моделі лише для англійської (`*.en.bin`) виводять `[FOREIGN]` для не-англійського аудіо.
53
-
54
- ### ✅ v2.0.0 — Unicode-безпечні шляхи + Фоновий SRT
55
- **Імена файлів Unicode:** Файли з не-ASCII символами в іменах спричиняли тихе невдале виконання фонової транскрипції. Виправлено шляхом спрямування всього виводу через санований тимчасовий шлях на основі ID завдання, а потім переміщення результату до правильного призначення після завершення.
56
-
57
- **SRT у фоновому режимі:** `spawnDetached` раніше жорстко кодував `-otxt` незалежно від запитаного формату, а `generate_subtitles` синхронно блокував і досягав 4-хвилинного тайм-ауту MCP на довших файлах. Виправлено додаванням параметра `outputFormat` до `spawnDetached`, що підтримує вивід `text` і `srt` у фоновому режимі.
58
-
59
- ### ✅ v2.0.1 — Виправлення помилок (включено у v2.2.0)
60
- - `--max-context 0` жорстко закодовано в `buildArgs` і `spawnDetached` — запобігає циклам галюцинацій на довгих аудіозаписах. `--condition-on-previous-text` і `--no-context` — недійсні прапорці в поточному бінарнику (покоління v1.8.3) — `--max-context N` є правильним прапорцем.
61
- - `--no-speech-thold 0.6` жорстко закодовано в обох функціях — сегменти нижче порогу впевненості обробляються як тиша, а не як галюцинований вміст.
62
- - Перевірка шляху (`validateInputPath`) — відхиляє UNC-шляхи і обходи `..`.
63
- - Захист розміру файлу `MAX_FILE_SIZE_MB = 10240`.
64
- - Коментар безпеки ін'єкції транскрипції у `transcribeSingle`.
65
- - Виправлено зламану команду CLI-пакету у TROUBLESHOOTING.md — задокументовано правильний підхід до попереднього конвертування FFmpeg і метод `Start-Process -RedirectStandardOutput`.
66
-
67
- ### ✅ v2.1.0 — Набір інструментів управління моделями (включено у v2.2.0)
68
- - `WHISPER_MODEL` змінено з `const` на `let` (змінюється в межах сеансу).
69
- - `MODEL_REGISTRY` — 16 моделей, варіанти повної точності та квантизовані, URL завантаження Hugging Face.
70
- - `ALLOWED_HF_PREFIXES` — список дозволених URL, що обмежує завантаження просторами імен `ggerganov/whisper.cpp` і `ggml-org`.
71
- - Інструмент `list_models` — сканує теку моделей, показує активну модель, розміри, випадки використання, доступні завантаження.
72
- - Інструмент `download_model` — завантажує з Hugging Face через вбудований `https` Node.js, атомарне перейменування (виправлення стану гонки звільнення файлового дескриптора Windows).
73
- - Інструмент `switch_model` — перевіряє розширення `.bin`, обмеження теки, перевірку блокування процесу.
74
- - `recommendedModel()` оновлено для рекомендації `large-v3-turbo` при VRAM 6 ГБ+.
75
-
76
- ### ✅ v2.2.0 — Розширення якості, параметрів і апаратного забезпечення (поточна)
77
- - Інтерфейс `WhisperOptions` замінює позиційні аргументи в `buildArgs`.
78
- - Нові параметри у `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
- - Нові параметри у `generate_subtitles`: `temperature`, `prompt`, `beam_size`, `best_of`, `diarize`, `vad_model`.
80
- - Рефакторинг `spawnDetached` — усі прапорці якості тепер застосовуються у фоновому/пакетному режимі.
81
- - `runSrtPass` оновлено для прийняття `extraOpts`.
82
- - Виправлення виводу пакету — `readBatchProgress` тепер переміщає тимчасовий вивід до кінцевого призначення перед перевіркою (це була корінна причина всіх результатів "помилка" у пакеті).
83
-
84
- **Примітка щодо сумісності прапорців:** `gpu_device` / `-g` додано у whisper.cpp v1.8.4. Готовий Vulkan-бінарник у релізах є покоління v1.8.3 — цей параметр приймається інструментом, але не матиме ефекту, доки користувачі не оновляться до бінарника v1.8.4+.
85
-
86
- **Підтверджені дійсні прапорці у поточному бінарнику (покоління v1.8.3):**
87
- `--max-context`, `--no-speech-thold`, `--processors`, `--offset-t`, `--duration`, `--best-of`, `--beam-size`, `--diarize`, `--tinydiarize`, `--temperature`, `--prompt`, VAD-прапорці.
88
-
89
- **Відсутні у поточному бінарнику:** `--no-context` (використовуйте `--max-context 0`), `--condition-on-previous-text` (лише назва Python API), `--gpu-device` / `-g` (v1.8.4+).
90
-
91
- ---
92
-
93
- ## Критична помилка — Автоматичне просування пакету (підтверджено, очікує виправлення)
94
-
95
- ### Пакет не просувається без активного опитування
96
-
97
- `start_batch` не просуває чергу автономно між файлами. Пакет просувається лише при виклику `check_batch_progress`. Без опитування пакет зависає на невизначений час після кожного файлу — whisper-cli.exe завершується, новий процес не запускається, черга не просувається.
98
-
99
- Це підриває мету дизайну автономної нічної пакетної обробки і безпосередньо порушує принцип мінімізації викликів Claude API. Пакет з 95 коротких кліпів вимагав близько 200 викликів опитування протягом 100 хвилин для завершення.
100
-
101
- **Корінна причина:** `readBatchProgress` містить всю логіку просування черги. Він виконується лише при явному виклику `check_batch_progress`. Немає фонового таймера, спостерігача файлів або автономного циклу.
102
-
103
- **Заплановане виправлення — Варіант Б (зворотній виклик виходу, наполегливо рекомендовано):** Прикріпити обробник `on('exit')` до породженого дочірнього процесу whisper-cli. Коли процес завершується, негайно викликати логіку просування для перевірки виводу і запуску наступного завдання. Подієво-орієнтований, спрацьовує рівно один раз при завершенні кожного файлу, нульові витрати на опитування, нуль спожитих викликів API.
104
-
105
- **Варіант А (лише резервний):** Фоновий `setInterval` з інтервалом опитування на основі тривалості, виведеним з даних тривалості FFprobe, вже наявних у JSON стану пакету. Розмір файлу не є надійним замінником тривалості.
106
-
107
- **Додаткове обмеження:** Виправлення не повинно породжувати другий whisper-cli.exe, поки один вже виконується — блокування процесу має дотримуватися в шляху автопросування.
108
-
109
- **Обхідне рішення (поточне):** Повторно викликайте `check_batch_progress` до завершення пакету. Приблизно один виклик опитування на файл.
110
-
111
- ---
112
-
113
- ## Заплановано — Архітектура конфіденційності (до міграції на Bun)
114
-
115
- Ці зміни мають бути випущені до міграції на Bun і до будь-яких змін ліцензії, що сприяють комерційному або корпоративному прийняттю. Випуск інструментів корпоративного рівня без вирішених засобів захисту відповідності створює відповідальність для користувачів у регульованих галузях.
116
-
117
- ### Змінна середовища `WHISPER_PRIVACY_MODE`
118
- Інструмент наразі гарантує, що жодне **аудіо** не покидає комп'ютер. Ця гарантія не поширюється на **текст транскрипції** — коли вміст транскрипції повертається в рядку у відповіді інструменту, цей текст опрацьовується API Claude і покидає локальне середовище.
119
-
120
- Цей розрив невидимий для користувачів, які розумно тлумачать "дані не покидають ваш комп'ютер" як таке, що охоплює весь контент, отриманий з їхнього аудіо.
121
-
122
- Додати `WHISPER_PRIVACY_MODE` як змінну середовища у `claude_desktop_config.json`. При увімкненні:
123
- - Усі відповіді інструментів повертають лише метадані: ім'я файлу, тривалість, кількість слів, статус завершення
124
- - Жоден текст транскрипції не включається до жодної відповіді інструменту
125
- - Claude не може читати, аналізувати або передавати вміст транскрипції в жодній формі
126
- - Транскрипція існує лише як локальний `.txt`-файл
127
-
128
- Це правильне рішення для медичних, юридичних, фінансових і корпоративних розгортань. Нуль викликів API, нуль передачі даних, нуль ризику відповідності.
129
-
130
- ### Ворота згоди для вмісту транскрипції
131
- Коли `WHISPER_PRIVACY_MODE` не увімкнено (типово), будь-яка відповідь інструменту, що містить текст транскрипції, має передуватися повідомленням про розкриття інформації при першому використанні за сеанс. Це повідомлення має чітко передати, що текст транскрипції передається до API Anthropic, що це виходить за межі гарантії "дані не покидають ваш комп'ютер", і що користувачі, які працюють з регульованим контентом, мають перевірити зобов'язання відповідності перед продовженням.
132
-
133
- Реалізація: змінна середовища `WHISPER_CONSENT_ACKNOWLEDGED` за замовчуванням `false`. При першому поверненні транскрипції за сеанс, якщо не підтверджено, Claude представляє повідомлення про розкриття і просить явного підтвердження. Після підтвердження для сеансу наступні транскрипції повертаються без повторного запиту.
134
-
135
- ### Документація `PRIVACY.md`
136
- Створити `PRIVACY.md` у кореневій теці репозиторію:
137
- - Які дані завжди залишаються локально: аудіо, відео, файли моделей
138
- - Які дані можуть покидати локальне середовище (за замовчуванням): текст транскрипції у відповідях інструментів
139
- - Які дані ніколи не покидають локальне середовище (з режимом конфіденційності): все
140
- - Настанови щодо відповідності за галуззю (HIPAA, GDPR, адвокатська таємниця, FERPA, SOX, PCI-DSS, NDA/комерційна таємниця)
141
- - Як налаштувати режим конфіденційності
142
- - Відмова від відповідальності: автори інструменту не є юридичними радниками
143
-
144
- ### Попередження конфіденційності у схемі інструментів
145
- Оновити описи інструментів `ListToolsRequestSchema`, включивши примітку про конфіденційність для будь-якого інструменту, що повертає текст транскрипції. Це відображається в описах інструментів Claude Desktop і підвищує обізнаність у точці використання.
146
-
147
- ### Автоматичне очищення тимчасової теки
148
- `%TEMP%\whisper-mcp-jobs\` накопичує файли стану завдань і журнали з часом. Додати автоматичне очищення завершених файлів завдань після налаштованого вікна збереження (типово: 7 днів). Наразі вимагає ручного `Remove-Item` від користувача.
149
-
150
- ---
151
-
152
- ## Заплановано — Міграція на Bun
153
-
154
- Перенести середовище виконання з Node.js на [Bun](https://bun.sh) після завершення архітектури конфіденційності і до додавання функцій v2.3.0.
155
-
156
- Оскільки Claude Desktop запускає MCP-сервер заново при кожному запуску сеансу, час запуску знаходиться на критичному шляху. Bun виконує TypeScript нативно без кроку компіляції, запускається значно швидше за Node і має швидший введення-виведення.
157
-
158
- **Що змінюється:**
159
- - Усунення кроку збірки `tsc` і теки `dist/`
160
- - Користувачі запускають вихідний код TypeScript безпосередньо
161
- - `tsconfig.json` стає необов'язковим
162
- - Оновлення скриптів `package.json`
163
- - Оновлення робочого процесу публікації npm
164
-
165
- **Що не змінюється:**
166
- - Вихідний код `src/index.ts` — Bun сумісний з існуючим TypeScript і вбудованими API Node.js
167
- - Уся поведінка інструментів і формати виводу
168
- - Конфігурація Claude Desktop для кінцевих користувачів
169
-
170
- **Чому після конфіденційності, до v2.3.0:** Кодова база найлегше піддається міграції зараз. Міграція після додавання більшої кількості інструментів лише збільшує поверхню без вигоди. Архітектура конфіденційності має бути реалізована першою, як зазначено вище.
171
-
172
- ---
173
-
174
- ## Заплановано — Перегляд ліцензії (після міграції на Bun)
175
-
176
- Поточна ліцензія MIT дозволяє необмежене комерційне використання. До того, як інструмент досягне профільних і корпоративних ринків у масштабі, ситуацію з ліцензією необхідно оцінити.
177
-
178
- **Запланований підхід — Подвійна ліцензія:**
179
- - MIT для особистого та некомерційного використання (без змін для існуючих користувачів)
180
- - Окрема комерційна ліцензія для бізнес- і корпоративного використання
181
- - Точка переходу: наступний мажорний реліз після міграції на Bun
182
-
183
- **Чому не зараз:** Зміна ліцензії до завершення архітектури конфіденційності означала б продаж комерційних ліцензій для інструменту з невирішеними прогалинами відповідності HIPAA/GDPR. Спочатку конфіденційність, потім перегляд ліцензії.
184
-
185
- Комерційна ліцензія, попередження конфіденційності у схемі інструментів і `PRIVACY.md` разом формують мінімально достатню розповідь про відповідність для корпоративних покупців.
186
-
187
- ---
188
-
189
- ## Заплановано — v2.3.0: Розширення форматів виводу
190
-
191
- ### Формат субтитрів VTT
192
- Вивід WebVTT (`.vtt`) разом з SRT. VTT — веб-стандарт, що використовується YouTube, HTML5 `<video>` і більшістю сучасних програвачів. whisper-cli підтримує його нативно. Додати `vtt` як дійсний формат виводу у `transcribe_audio`, `generate_subtitles` і `spawnDetached`. Оновити `buildArgs` і всі відповідні схеми інструментів, README і багатомовну документацію.
193
-
194
- ### Формат LRC
195
- Вивід у форматі LRC (`.lrc`) текстів пісень/караоке через `-olrc`. Використовується медіапрогравачами для синхронізованого відображення текстів. Нульові витрати на реалізацію — рідний прапорець CLI.
196
-
197
- ### Формат CSV
198
- Вивід CSV (`.csv`) через `-ocsv`. Структуровані табличні дані з часовою розміткою сегментів — корисні для аналізу нижнього рівня, робочих процесів вирівнювання кліпів та імпорту в табличні інструменти. Нульові витрати на реалізацію — рідний прапорець CLI.
199
-
200
- ---
201
-
202
- ## Заплановано — Майбутні релізи
203
-
204
- ### TinyDiarize
205
- Підтримка прапорця `--tinydiarize` з варіантами моделей, що підтримують `tdrz` (наприклад `large-v2-tdrz`). На відміну від стерео-прапорця `--diarize`, TinyDiarize працює з моно записами. Потребує завантаження спеціального варіанту моделі. Нижча точність, ніж дiaризація на основі pyannote, але нульові додаткові залежності за межами файлу моделі.
206
-
207
- **Статус:** Заплановано. Залежить від підтримки варіантів моделей tdrz у `download_model`.
208
-
209
- ### Транскрипція URL YouTube
210
- Пряма транскрипція з URL YouTube через yt-dlp. Завантаження аудіо і транскрипція в один крок. Потребує встановленого yt-dlp і наявності в PATH.
211
-
212
- **Обмеження проєктування:** yt-dlp є необов'язковим. Інструмент має коректно деградувати з чіткими інструкціями щодо встановлення, якщо його не знайдено. Жодних змін в основній функціональності для користувачів, яким це не потрібно.
213
-
214
- ### Інструменти робочого процесу відеопроєкту
215
- Для користувачів, що керують великими проєктами відеомонтажу з теками вихідних і відредагованих кліпів:
216
-
217
- 1. Сканування вихідної теки і підтеки кліпів
218
- 2. Нечітке зіставлення транскрипцій відредагованих кліпів з вихідними транскрипціями для визначення точок походження
219
- 3. Відображення описових імен файлів, запропонованих Claude на основі вмісту транскрипцій, з вимогою явного підтвердження від користувача перед виконанням будь-якого перейменування
220
- 4. Пошук транскрипцій у теці проєкту з результатами за часовим кодом
221
-
222
- **Обмеження проєктування:**
223
- - Вихідні файли **ніколи не перейменовуються і не змінюються**
224
- - Усі перейменування вимагають **явного підтвердження користувача**
225
- - Пошук — це окремий інструмент, що може використовуватися незалежно
226
- - Аналіз і зіставлення відбуваються локально — Claude викликається лише коли користувач переглядає результати, мінімізуючи виклики API
227
-
228
- **Статус:** Фаза проєктування.
229
-
230
- ### Розрізнення доповідачів (pyannote-audio)
231
- Повне розрізнення доповідачів у моно з мітками ID доповідача — позначає переходи між доповідачами по всьому запису незалежно від конфігурації каналів. Відрізняється від вбудованого стерео-прапорця `--diarize` (v2.2.0) і TinyDiarize.
232
-
233
- **Реалізація:** Потребує [pyannote-audio](https://github.com/pyannote/pyannote-audio) — бібліотеки на основі Python з вимогою токена доступу до моделей Hugging Face. Повністю окремий стек залежностей від конвеєра whisper.cpp.
234
-
235
- **Статус:** Необов'язкова розширена функція з власною документацією з налаштування. Не входить до основного пакету.
236
-
237
- ### Переклад на не-англійські мови
238
- Прапорець `--translate` Whisper орієнтований лише на англійську. Підтримка довільних цільових мов потребує зовнішнього API перекладу або локальної моделі перекладу.
239
-
240
- **Варіанти, що розглядаються:** LibreTranslate (можна розгорнути самостійно, локальний пріоритет), локальний LLM-переклад або явна документація поза межами охоплення.
241
-
242
- **Статус:** Відкладено, очікує дизайнерського рішення щодо локального пріоритету проти залежності від API.
243
-
244
- ### Очищення і форматування транскрипції
245
- Конвеєр постобробки:
246
- - Видалення слів-заповнювачів і невдалих початків (необов'язково, під контролем користувача)
247
- - Розриви абзаців на природних межах тем
248
- - Форматування з урахуванням доповідачів у поєднанні з виводом розрізнення
249
- - Експорт у PDF або DOCX
250
-
251
- **Статус:** Заплановано. Варіант з урахуванням доповідачів залежить від розрізнення.
252
-
253
- ---
254
-
255
- ## Поширення
256
-
257
- Доступно на [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org) і [Glama](https://glama.ai).
258
-
259
- ---
260
-
261
- ## Багатомовна документація
262
-
263
- Документація японською, корейською, в'єтнамською, індонезійською та українською мовами підтримується паралельно з англійською. Після кожного релізу необхідно оновлювати такі файли відповідно до англійської документації:
264
-
265
- **Японська (`*.ja.md`)**
266
- - `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
267
-
268
- **Корейська (`*.ko.md`)**
269
- - `README.ko.md` / `TROUBLESHOOTING.ko.md` / `ROADMAP.ko.md` / `PRIVACY.ko.md` / `SECURITY.ko.md`
270
-
271
- **В'єтнамська (`*.vi.md`)**
272
- - `README.vi.md` / `TROUBLESHOOTING.vi.md` / `ROADMAP.vi.md` / `PRIVACY.vi.md` / `SECURITY.vi.md`
273
-
274
- **Індонезійська (`*.id.md`)**
275
- - `README.id.md` / `TROUBLESHOOTING.id.md` / `ROADMAP.id.md` / `PRIVACY.id.md` / `SECURITY.id.md`
276
-
277
- **Українська (`*.uk.md`)** — `README.uk.md` / `TROUBLESHOOTING.uk.md` / `ROADMAP.uk.md` / `PRIVACY.uk.md` / `SECURITY.uk.md`
278
-
279
- **Бразильська португальська (`*.pt-BR.md`)** — `README.pt-BR.md` / `TROUBLESHOOTING.pt-BR.md` / `ROADMAP.pt-BR.md` / `PRIVACY.pt-BR.md` / `SECURITY.pt-BR.md`
280
-
281
- **Іспанська (`*.es.md`)** — `README.es.md` / `TROUBLESHOOTING.es.md` / `ROADMAP.es.md` / `PRIVACY.es.md` / `SECURITY.es.md`
282
-
283
- Внески спільноти для інших мов вітаються.
284
-
285
- ---
286
-
287
- ## Внески
288
-
289
- Pull requests вітаються. Перевірте наявні issues перед початком роботи.
290
-
291
- Якщо ви тестували прискорення GPU на обладнанні, не вказаному вище, будь ласка, відкрийте issue з результатами — модель GPU, обсяг VRAM, розмір моделі та спостережувана пропускна здатність. Це допомагає створити точний орієнтир продуктивності для інших користувачів.
1
+ # whisper-windows-mcp — Дорожня карта
2
+
3
+ Поточна версія: **v2.2.0**
4
+
5
+ ---
6
+
7
+ ## Принципи проєктування
8
+
9
+ Ці принципи визначають кожне рішення в цьому проєкті і мають пріоритет над швидкістю додавання функцій.
10
+
11
+ **Мінімізація використання Claude API.** Весь робочий процес транскрипції — сканування, аналіз, черга, виконання, перевірка, перемикання моделей — має виконуватися з мінімальною кількістю взаємодій з Claude. Цей інструмент має повноцінно працювати для користувачів безкоштовного плану Claude, які не платять за підписки Pro або Max. Кожен виклик інструменту витрачає ліміт використання. Проєктуйте відповідно.
12
+
13
+ **Завжди лише один екземпляр whisper.** Ніколи не запускайте другий процес whisper-cli.exe, поки один вже виконується. Блокування процесу є обов'язковим і не підлягає переговорам.
14
+
15
+ **Локальний пріоритет, приватно за замовчуванням.** Аудіо ніколи не покидає комп'ютер. Для основних функцій хмарні API не потрібні. Необов'язкові інтеграції (наприклад, завантаження моделей з Hugging Face) мають бути чітко задокументовані як необов'язкові.
16
+
17
+ **Явний контроль користувача.** Жодних тихих масових операцій. Руйнівні або незворотні дії потребують підтвердження. Користувач завжди має знати, що відбуватиметься, до того, як це станеться.
18
+
19
+ **Unicode-безпечні шляхи.** Весь файловий введення-виведення має правильно обробляти не-ASCII імена файлів, включно з українськими, японськими, китайськими, емодзі, дужками та іншими спеціальними символами.
20
+
21
+ **Модульність і компонованість.** Інструменти незалежні. Користувачі використовують те, що їм потрібно. Жодна функція не повинна вимагати іншої, якщо цього неможливо уникнути.
22
+
23
+ **Оптимізація перед функціями.** Якщо сумніваєтеся між додаванням функції та зменшенням навантаження на систему або кількості викликів API — зменшуйте навантаження. Великі оптимізаційні роботи дорого коштують. Спроєктуйте архітектуру правильно з першого разу.
24
+
25
+ ---
26
+
27
+ ## Завершено
28
+
29
+ ### ✅ v1.3.1 — Блокування процесу
30
+ Додано перевірку `isWhisperRunning()` з використанням `tasklist /FI` перед запуском будь-якої транскрипції. Повертає чітку помилку з інструкціями Диспетчера завдань замість запуску конкурентного процесу.
31
+
32
+ ### ✅ v1.4.0 — Vulkan GPU-прискорення
33
+ Скомпільовано whisper.cpp з вихідного коду з `-DGGML_VULKAN=ON` за допомогою VS Build Tools 2022 і Vulkan SDK. Готові Vulkan-бінарники розповсюджуються як `whisper-vulkan-win-x64.zip`.
34
+
35
+ **Результати на AMD Radeon RX Vega 56:** Середнє навантаження GPU ~16%. 58-хвилинний файл завершується за ~4.5 хвилини на GPU проти ~88 хвилин лише на CPU.
36
+
37
+ ### ✅ v1.5.0 — Системна діагностика
38
+ Інструмент `check_system`: виявлення GPU через `wmic`, перевірка Vulkan DLL, звіт про VRAM, рекомендація розміру моделі.
39
+
40
+ ### ✅ v1.6.0 — Попередній аналіз файлу
41
+ Інструмент `analyze_media` через FFprobe: тривалість, розмір, кодек, статус транскрипції, оцінки часу CPU і GPU. Сканування одного файлу або теки з параметрами сортування.
42
+
43
+ ### ✅ v1.7.0 — Фонова транскрипція + Відображення прогресу
44
+ Архітектура відокремленого процесу: `transcribe_audio` з `background=true` запускає whisper як відокремлений процес і одразу повертає ID завдання. `check_progress` аналізує мітки часу сегментів stderr whisper для відсотку і ETA в реальному часі.
45
+
46
+ ### ✅ v1.8.0 — Послідовний пакет з перевіркою
47
+ `start_batch` і `check_batch_progress`: автоматична послідовна обробка, перевірка транскрипції (виявлення порожнього/короткого виводу), автоматичне просування черги, мітки часу прогресу для кожного файлу.
48
+
49
+ ### ✅ v1.9.0 — Багатомовна підтримка і переклад
50
+ `generate_subtitles` з виявленням `language=auto` і подвійним SRT-виводом `translate_to_english=true`. Додано підтримку форматів `.3gp` і `.ts`. `language=auto` також доступний у `transcribe_audio`.
51
+
52
+ **Відоме обмеження:** Вбудований переклад Whisper орієнтований лише на англійську. Для не-англійських мов потрібна модель `large-v3` — моделі лише для англійської (`*.en.bin`) виводять `[FOREIGN]` для не-англійського аудіо.
53
+
54
+ ### ✅ v2.0.0 — Unicode-безпечні шляхи + Фоновий SRT
55
+ **Імена файлів Unicode:** Файли з не-ASCII символами в іменах спричиняли тихе невдале виконання фонової транскрипції. Виправлено шляхом спрямування всього виводу через санований тимчасовий шлях на основі ID завдання, а потім переміщення результату до правильного призначення після завершення.
56
+
57
+ **SRT у фоновому режимі:** `spawnDetached` раніше жорстко кодував `-otxt` незалежно від запитаного формату, а `generate_subtitles` синхронно блокував і досягав 4-хвилинного тайм-ауту MCP на довших файлах. Виправлено додаванням параметра `outputFormat` до `spawnDetached`, що підтримує вивід `text` і `srt` у фоновому режимі.
58
+
59
+ ### ✅ v2.0.1 — Виправлення помилок (включено у v2.2.0)
60
+ - `--max-context 0` жорстко закодовано в `buildArgs` і `spawnDetached` — запобігає циклам галюцинацій на довгих аудіозаписах. `--condition-on-previous-text` і `--no-context` — недійсні прапорці в поточному бінарнику (покоління v1.8.3) — `--max-context N` є правильним прапорцем.
61
+ - `--no-speech-thold 0.6` жорстко закодовано в обох функціях — сегменти нижче порогу впевненості обробляються як тиша, а не як галюцинований вміст.
62
+ - Перевірка шляху (`validateInputPath`) — відхиляє UNC-шляхи і обходи `..`.
63
+ - Захист розміру файлу `MAX_FILE_SIZE_MB = 10240`.
64
+ - Коментар безпеки ін'єкції транскрипції у `transcribeSingle`.
65
+ - Виправлено зламану команду CLI-пакету у TROUBLESHOOTING.md — задокументовано правильний підхід до попереднього конвертування FFmpeg і метод `Start-Process -RedirectStandardOutput`.
66
+
67
+ ### ✅ v2.1.0 — Набір інструментів управління моделями (включено у v2.2.0)
68
+ - `WHISPER_MODEL` змінено з `const` на `let` (змінюється в межах сеансу).
69
+ - `MODEL_REGISTRY` — 16 моделей, варіанти повної точності та квантизовані, URL завантаження Hugging Face.
70
+ - `ALLOWED_HF_PREFIXES` — список дозволених URL, що обмежує завантаження просторами імен `ggerganov/whisper.cpp` і `ggml-org`.
71
+ - Інструмент `list_models` — сканує теку моделей, показує активну модель, розміри, випадки використання, доступні завантаження.
72
+ - Інструмент `download_model` — завантажує з Hugging Face через вбудований `https` Node.js, атомарне перейменування (виправлення стану гонки звільнення файлового дескриптора Windows).
73
+ - Інструмент `switch_model` — перевіряє розширення `.bin`, обмеження теки, перевірку блокування процесу.
74
+ - `recommendedModel()` оновлено для рекомендації `large-v3-turbo` при VRAM 6 ГБ+.
75
+
76
+ ### ✅ v2.2.0 — Розширення якості, параметрів і апаратного забезпечення (поточна)
77
+ - Інтерфейс `WhisperOptions` замінює позиційні аргументи в `buildArgs`.
78
+ - Нові параметри у `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
+ - Нові параметри у `generate_subtitles`: `temperature`, `prompt`, `beam_size`, `best_of`, `diarize`, `vad_model`.
80
+ - Рефакторинг `spawnDetached` — усі прапорці якості тепер застосовуються у фоновому/пакетному режимі.
81
+ - `runSrtPass` оновлено для прийняття `extraOpts`.
82
+ - Виправлення виводу пакету — `readBatchProgress` тепер переміщає тимчасовий вивід до кінцевого призначення перед перевіркою (це була корінна причина всіх результатів "помилка" у пакеті).
83
+
84
+ **Примітка щодо сумісності прапорців:** `gpu_device` / `-g` додано у whisper.cpp v1.8.4. Готовий Vulkan-бінарник у релізах є покоління v1.8.3 — цей параметр приймається інструментом, але не матиме ефекту, доки користувачі не оновляться до бінарника v1.8.4+.
85
+
86
+ **Підтверджені дійсні прапорці у поточному бінарнику (покоління v1.8.3):**
87
+ `--max-context`, `--no-speech-thold`, `--processors`, `--offset-t`, `--duration`, `--best-of`, `--beam-size`, `--diarize`, `--tinydiarize`, `--temperature`, `--prompt`, VAD-прапорці.
88
+
89
+ **Відсутні у поточному бінарнику:** `--no-context` (використовуйте `--max-context 0`), `--condition-on-previous-text` (лише назва Python API), `--gpu-device` / `-g` (v1.8.4+).
90
+
91
+ ---
92
+
93
+ ## Критична помилка — Автоматичне просування пакету (підтверджено, очікує виправлення)
94
+
95
+ ### Пакет не просувається без активного опитування
96
+
97
+ `start_batch` не просуває чергу автономно між файлами. Пакет просувається лише при виклику `check_batch_progress`. Без опитування пакет зависає на невизначений час після кожного файлу — whisper-cli.exe завершується, новий процес не запускається, черга не просувається.
98
+
99
+ Це підриває мету дизайну автономної нічної пакетної обробки і безпосередньо порушує принцип мінімізації викликів Claude API. Пакет з 95 коротких кліпів вимагав близько 200 викликів опитування протягом 100 хвилин для завершення.
100
+
101
+ **Корінна причина:** `readBatchProgress` містить всю логіку просування черги. Він виконується лише при явному виклику `check_batch_progress`. Немає фонового таймера, спостерігача файлів або автономного циклу.
102
+
103
+ **Заплановане виправлення — Варіант Б (зворотній виклик виходу, наполегливо рекомендовано):** Прикріпити обробник `on('exit')` до породженого дочірнього процесу whisper-cli. Коли процес завершується, негайно викликати логіку просування для перевірки виводу і запуску наступного завдання. Подієво-орієнтований, спрацьовує рівно один раз при завершенні кожного файлу, нульові витрати на опитування, нуль спожитих викликів API.
104
+
105
+ **Варіант А (лише резервний):** Фоновий `setInterval` з інтервалом опитування на основі тривалості, виведеним з даних тривалості FFprobe, вже наявних у JSON стану пакету. Розмір файлу не є надійним замінником тривалості.
106
+
107
+ **Додаткове обмеження:** Виправлення не повинно породжувати другий whisper-cli.exe, поки один вже виконується — блокування процесу має дотримуватися в шляху автопросування.
108
+
109
+ **Обхідне рішення (поточне):** Повторно викликайте `check_batch_progress` до завершення пакету. Приблизно один виклик опитування на файл.
110
+
111
+ ---
112
+
113
+ ## Заплановано — Архітектура конфіденційності (до міграції на Bun)
114
+
115
+ Ці зміни мають бути випущені до міграції на Bun і до будь-яких змін ліцензії, що сприяють комерційному або корпоративному прийняттю. Випуск інструментів корпоративного рівня без вирішених засобів захисту відповідності створює відповідальність для користувачів у регульованих галузях.
116
+
117
+ ### Змінна середовища `WHISPER_PRIVACY_MODE`
118
+ Інструмент наразі гарантує, що жодне **аудіо** не покидає комп'ютер. Ця гарантія не поширюється на **текст транскрипції** — коли вміст транскрипції повертається в рядку у відповіді інструменту, цей текст опрацьовується API Claude і покидає локальне середовище.
119
+
120
+ Цей розрив невидимий для користувачів, які розумно тлумачать "дані не покидають ваш комп'ютер" як таке, що охоплює весь контент, отриманий з їхнього аудіо.
121
+
122
+ Додати `WHISPER_PRIVACY_MODE` як змінну середовища у `claude_desktop_config.json`. При увімкненні:
123
+ - Усі відповіді інструментів повертають лише метадані: ім'я файлу, тривалість, кількість слів, статус завершення
124
+ - Жоден текст транскрипції не включається до жодної відповіді інструменту
125
+ - Claude не може читати, аналізувати або передавати вміст транскрипції в жодній формі
126
+ - Транскрипція існує лише як локальний `.txt`-файл
127
+
128
+ Це правильне рішення для медичних, юридичних, фінансових і корпоративних розгортань. Нуль викликів API, нуль передачі даних, нуль ризику відповідності.
129
+
130
+ ### Ворота згоди для вмісту транскрипції
131
+ Коли `WHISPER_PRIVACY_MODE` не увімкнено (типово), будь-яка відповідь інструменту, що містить текст транскрипції, має передуватися повідомленням про розкриття інформації при першому використанні за сеанс. Це повідомлення має чітко передати, що текст транскрипції передається до API Anthropic, що це виходить за межі гарантії "дані не покидають ваш комп'ютер", і що користувачі, які працюють з регульованим контентом, мають перевірити зобов'язання відповідності перед продовженням.
132
+
133
+ Реалізація: змінна середовища `WHISPER_CONSENT_ACKNOWLEDGED` за замовчуванням `false`. При першому поверненні транскрипції за сеанс, якщо не підтверджено, Claude представляє повідомлення про розкриття і просить явного підтвердження. Після підтвердження для сеансу наступні транскрипції повертаються без повторного запиту.
134
+
135
+ ### Документація `PRIVACY.md`
136
+ Створити `PRIVACY.md` у кореневій теці репозиторію:
137
+ - Які дані завжди залишаються локально: аудіо, відео, файли моделей
138
+ - Які дані можуть покидати локальне середовище (за замовчуванням): текст транскрипції у відповідях інструментів
139
+ - Які дані ніколи не покидають локальне середовище (з режимом конфіденційності): все
140
+ - Настанови щодо відповідності за галуззю (HIPAA, GDPR, адвокатська таємниця, FERPA, SOX, PCI-DSS, NDA/комерційна таємниця)
141
+ - Як налаштувати режим конфіденційності
142
+ - Відмова від відповідальності: автори інструменту не є юридичними радниками
143
+
144
+ ### Попередження конфіденційності у схемі інструментів
145
+ Оновити описи інструментів `ListToolsRequestSchema`, включивши примітку про конфіденційність для будь-якого інструменту, що повертає текст транскрипції. Це відображається в описах інструментів Claude Desktop і підвищує обізнаність у точці використання.
146
+
147
+ ### Автоматичне очищення тимчасової теки
148
+ `%TEMP%\whisper-mcp-jobs\` накопичує файли стану завдань і журнали з часом. Додати автоматичне очищення завершених файлів завдань після налаштованого вікна збереження (типово: 7 днів). Наразі вимагає ручного `Remove-Item` від користувача.
149
+
150
+ ---
151
+
152
+ ## Заплановано — Міграція на Bun
153
+
154
+ Перенести середовище виконання з Node.js на [Bun](https://bun.sh) після завершення архітектури конфіденційності і до додавання функцій v2.3.0.
155
+
156
+ Оскільки Claude Desktop запускає MCP-сервер заново при кожному запуску сеансу, час запуску знаходиться на критичному шляху. Bun виконує TypeScript нативно без кроку компіляції, запускається значно швидше за Node і має швидший введення-виведення.
157
+
158
+ **Що змінюється:**
159
+ - Усунення кроку збірки `tsc` і теки `dist/`
160
+ - Користувачі запускають вихідний код TypeScript безпосередньо
161
+ - `tsconfig.json` стає необов'язковим
162
+ - Оновлення скриптів `package.json`
163
+ - Оновлення робочого процесу публікації npm
164
+
165
+ **Що не змінюється:**
166
+ - Вихідний код `src/index.ts` — Bun сумісний з існуючим TypeScript і вбудованими API Node.js
167
+ - Уся поведінка інструментів і формати виводу
168
+ - Конфігурація Claude Desktop для кінцевих користувачів
169
+
170
+ **Чому після конфіденційності, до v2.3.0:** Кодова база найлегше піддається міграції зараз. Міграція після додавання більшої кількості інструментів лише збільшує поверхню без вигоди. Архітектура конфіденційності має бути реалізована першою, як зазначено вище.
171
+
172
+ ---
173
+
174
+ ## Ліцензування
175
+
176
+ whisper-windows-mcp використовує подвійну ліцензію.
177
+
178
+ **Некомерційне використання:** MIT — безкоштовно для особистого, освітнього та некомерційного використання. Дивіться [LICENSE](LICENSE).
179
+
180
+ **Комерційне використання:** Необхідна окрема комерційна ліцензійна угода. Дивіться [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).
181
+
182
+ `WHISPER_PRIVACY_MODE` для регульованих галузей розробляється і планується у майбутньому релізі. Дивіться [PRIVACY.md](PRIVACY.md) для поточних рекомендацій.
183
+
184
+ ## Заплановано — v2.3.0: Розширення форматів виводу
185
+
186
+ ### Формат субтитрів VTT
187
+ Вивід WebVTT (`.vtt`) разом з SRT. VTT — веб-стандарт, що використовується YouTube, HTML5 `<video>` і більшістю сучасних програвачів. whisper-cli підтримує його нативно. Додати `vtt` як дійсний формат виводу у `transcribe_audio`, `generate_subtitles` і `spawnDetached`. Оновити `buildArgs` і всі відповідні схеми інструментів, README і багатомовну документацію.
188
+
189
+ ### Формат LRC
190
+ Вивід у форматі LRC (`.lrc`) текстів пісень/караоке через `-olrc`. Використовується медіапрогравачами для синхронізованого відображення текстів. Нульові витрати на реалізацію — рідний прапорець CLI.
191
+
192
+ ### Формат CSV
193
+ Вивід CSV (`.csv`) через `-ocsv`. Структуровані табличні дані з часовою розміткою сегментів — корисні для аналізу нижнього рівня, робочих процесів вирівнювання кліпів та імпорту в табличні інструменти. Нульові витрати на реалізацію — рідний прапорець CLI.
194
+
195
+ ---
196
+
197
+ ## Заплановано — Майбутні релізи
198
+
199
+ ### TinyDiarize
200
+ Підтримка прапорця `--tinydiarize` з варіантами моделей, що підтримують `tdrz` (наприклад `large-v2-tdrz`). На відміну від стерео-прапорця `--diarize`, TinyDiarize працює з моно записами. Потребує завантаження спеціального варіанту моделі. Нижча точність, ніж дiaризація на основі pyannote, але нульові додаткові залежності за межами файлу моделі.
201
+
202
+ **Статус:** Заплановано. Залежить від підтримки варіантів моделей tdrz у `download_model`.
203
+
204
+ ### Транскрипція URL YouTube
205
+ Пряма транскрипція з URL YouTube через yt-dlp. Завантаження аудіо і транскрипція в один крок. Потребує встановленого yt-dlp і наявності в PATH.
206
+
207
+ **Обмеження проєктування:** yt-dlp є необов'язковим. Інструмент має коректно деградувати з чіткими інструкціями щодо встановлення, якщо його не знайдено. Жодних змін в основній функціональності для користувачів, яким це не потрібно.
208
+
209
+ ### Інструменти робочого процесу відеопроєкту
210
+ Для користувачів, що керують великими проєктами відеомонтажу з теками вихідних і відредагованих кліпів:
211
+
212
+ 1. Сканування вихідної теки і підтеки кліпів
213
+ 2. Нечітке зіставлення транскрипцій відредагованих кліпів з вихідними транскрипціями для визначення точок походження
214
+ 3. Відображення описових імен файлів, запропонованих Claude на основі вмісту транскрипцій, з вимогою явного підтвердження від користувача перед виконанням будь-якого перейменування
215
+ 4. Пошук транскрипцій у теці проєкту з результатами за часовим кодом
216
+
217
+ **Обмеження проєктування:**
218
+ - Вихідні файли **ніколи не перейменовуються і не змінюються**
219
+ - Усі перейменування вимагають **явного підтвердження користувача**
220
+ - Пошук — це окремий інструмент, що може використовуватися незалежно
221
+ - Аналіз і зіставлення відбуваються локально — Claude викликається лише коли користувач переглядає результати, мінімізуючи виклики API
222
+
223
+ **Статус:** Фаза проєктування.
224
+
225
+ ### Розрізнення доповідачів (pyannote-audio)
226
+ Повне розрізнення доповідачів у моно з мітками ID доповідача — позначає переходи між доповідачами по всьому запису незалежно від конфігурації каналів. Відрізняється від вбудованого стерео-прапорця `--diarize` (v2.2.0) і TinyDiarize.
227
+
228
+ **Реалізація:** Потребує [pyannote-audio](https://github.com/pyannote/pyannote-audio) — бібліотеки на основі Python з вимогою токена доступу до моделей Hugging Face. Повністю окремий стек залежностей від конвеєра whisper.cpp.
229
+
230
+ **Статус:** Необов'язкова розширена функція з власною документацією з налаштування. Не входить до основного пакету.
231
+
232
+ ### Переклад на не-англійські мови
233
+ Прапорець `--translate` Whisper орієнтований лише на англійську. Підтримка довільних цільових мов потребує зовнішнього API перекладу або локальної моделі перекладу.
234
+
235
+ **Варіанти, що розглядаються:** LibreTranslate (можна розгорнути самостійно, локальний пріоритет), локальний LLM-переклад або явна документація поза межами охоплення.
236
+
237
+ **Статус:** Відкладено, очікує дизайнерського рішення щодо локального пріоритету проти залежності від API.
238
+
239
+ ### Очищення і форматування транскрипції
240
+ Конвеєр постобробки:
241
+ - Видалення слів-заповнювачів і невдалих початків (необов'язково, під контролем користувача)
242
+ - Розриви абзаців на природних межах тем
243
+ - Форматування з урахуванням доповідачів у поєднанні з виводом розрізнення
244
+ - Експорт у PDF або DOCX
245
+
246
+ **Статус:** Заплановано. Варіант з урахуванням доповідачів залежить від розрізнення.
247
+
248
+ ---
249
+
250
+ ## Поширення
251
+
252
+ Доступно на [npm](https://www.npmjs.com/package/whisper-windows-mcp), [mcpservers.org](https://mcpservers.org) і [Glama](https://glama.ai).
253
+
254
+ ---
255
+
256
+ ## Багатомовна документація
257
+
258
+ Документація японською, корейською, в'єтнамською, індонезійською та українською мовами підтримується паралельно з англійською. Після кожного релізу необхідно оновлювати такі файли відповідно до англійської документації:
259
+
260
+ **Японська (`*.ja.md`)**
261
+ - `README.ja.md` / `TROUBLESHOOTING.ja.md` / `ROADMAP.ja.md` / `PRIVACY.ja.md` / `SECURITY.ja.md`
262
+
263
+ **Корейська (`*.ko.md`)**
264
+ - `README.ko.md` / `TROUBLESHOOTING.ko.md` / `ROADMAP.ko.md` / `PRIVACY.ko.md` / `SECURITY.ko.md`
265
+
266
+ **В'єтнамська (`*.vi.md`)**
267
+ - `README.vi.md` / `TROUBLESHOOTING.vi.md` / `ROADMAP.vi.md` / `PRIVACY.vi.md` / `SECURITY.vi.md`
268
+
269
+ **Індонезійська (`*.id.md`)**
270
+ - `README.id.md` / `TROUBLESHOOTING.id.md` / `ROADMAP.id.md` / `PRIVACY.id.md` / `SECURITY.id.md`
271
+
272
+ **Українська (`*.uk.md`)** — `README.uk.md` / `TROUBLESHOOTING.uk.md` / `ROADMAP.uk.md` / `PRIVACY.uk.md` / `SECURITY.uk.md`
273
+
274
+ **Бразильська португальська (`*.pt-BR.md`)** — `README.pt-BR.md` / `TROUBLESHOOTING.pt-BR.md` / `ROADMAP.pt-BR.md` / `PRIVACY.pt-BR.md` / `SECURITY.pt-BR.md`
275
+
276
+ **Іспанська (`*.es.md`)** — `README.es.md` / `TROUBLESHOOTING.es.md` / `ROADMAP.es.md` / `PRIVACY.es.md` / `SECURITY.es.md`
277
+
278
+ **Polish (`*.pl.md`)** — `README.pl.md` / `TROUBLESHOOTING.pl.md` / `ROADMAP.pl.md` / `PRIVACY.pl.md` / `SECURITY.pl.md`
279
+
280
+ **Romanian (`*.ro.md`)** — `README.ro.md` / `TROUBLESHOOTING.ro.md` / `ROADMAP.ro.md` / `PRIVACY.ro.md` / `SECURITY.ro.md`
281
+
282
+ Внески спільноти для інших мов вітаються.
283
+
284
+ ---
285
+
286
+ ## Внески
287
+
288
+ Pull requests вітаються. Перевірте наявні issues перед початком роботи.
289
+
290
+ Якщо ви тестували прискорення GPU на обладнанні, не вказаному вище, будь ласка, відкрийте issue з результатами — модель GPU, обсяг VRAM, розмір моделі та спостережувана пропускна здатність. Це допомагає створити точний орієнтир продуктивності для інших користувачів.