Skip to content

Commit f70a02f

Browse files
Shai34clauderaivisdejus
authored
Support multiple custom Whisper.cpp models (#1614)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Raivis Dejus <raivisd@scandiweb.com>
1 parent 710870d commit f70a02f

26 files changed

Lines changed: 2729 additions & 1645 deletions

File tree

‎buzz/cli.py‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ def _add_command_options(parser: QCommandLineParser):
7373
'Hugging Face model ID. Use only when --model-type is huggingface. Example: "openai/whisper-tiny"',
7474
"id",
7575
)
76+
custom_model_id_option = QCommandLineOption(
77+
["custom-model-id"],
78+
"Id of a registered Whisper.cpp custom model. Use only when --model-type is "
79+
"whispercpp and --model-size is custom.",
80+
"id",
81+
)
7682
language_option = QCommandLineOption(
7783
["l", "language"],
7884
f'Language code. Allowed: {", ".join(sorted([k + " (" + LANGUAGES[k].title() + ")" for k in LANGUAGES]))}. Leave empty to detect language.',
@@ -107,6 +113,7 @@ def _add_command_options(parser: QCommandLineParser):
107113
model_type_option,
108114
model_size_option,
109115
hugging_face_model_id_option,
116+
custom_model_id_option,
110117
language_option,
111118
initial_prompt_option,
112119
word_timestamp_option,
@@ -125,6 +132,7 @@ def _add_command_options(parser: QCommandLineParser):
125132
"model_type": model_type_option,
126133
"model_size": model_size_option,
127134
"hugging_face_model_id": hugging_face_model_id_option,
135+
"custom_model_id": custom_model_id_option,
128136
"language": language_option,
129137
"initial_prompt": initial_prompt_option,
130138
"word_timestamps": word_timestamp_option,
@@ -142,13 +150,15 @@ def _resolve_model(
142150
model_type: CommandLineModelType,
143151
model_size: WhisperModelSize,
144152
hugging_face_model_id: str,
153+
custom_model_id: str = "",
145154
):
146155
if hugging_face_model_id == "" and model_type == CommandLineModelType.HUGGING_FACE:
147156
raise CommandLineError("--hfid is required when --model-type is huggingface")
148157
model = TranscriptionModel(
149158
model_type=ModelType[model_type.name],
150159
whisper_model_size=model_size,
151160
hugging_face_model_id=hugging_face_model_id,
161+
custom_model_id=custom_model_id or None,
152162
)
153163
model_path = model.get_local_model_path()
154164
if model_path is None:
@@ -217,7 +227,10 @@ def _handle_add_command(app: Application, parser: QCommandLineParser):
217227
model_size = parse_enum_option(opts["model_size"], parser, WhisperModelSize)
218228

219229
model_path, model = _resolve_model(
220-
model_type, model_size, parser.value(opts["hugging_face_model_id"])
230+
model_type,
231+
model_size,
232+
parser.value(opts["hugging_face_model_id"]),
233+
parser.value(opts["custom_model_id"]),
221234
)
222235

223236
language = parser.value(opts["language"])

‎buzz/locale/ca_ES/LC_MESSAGES/buzz.po‎

Lines changed: 52 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ msgid ""
77
msgstr ""
88
"Project-Id-Version: buzz\n"
99
"Report-Msgid-Bugs-To: \n"
10-
"POT-Creation-Date: 2026-08-22 14:09+0300\n"
11-
"PO-Revision-Date: 2025-10-17 07:59+0200\n"
10+
"POT-Creation-Date: 2026-09-11 18:56+0300\n"
11+
"PO-Revision-Date: 2026-09-11 18:58+0300\n"
1212
"Last-Translator: Éric Duarte <contacto@ericdq.com>\n"
1313
"Language-Team: Catalan <jmas@softcatala.org>\n"
1414
"Language: ca\n"
@@ -85,6 +85,11 @@ msgstr "Danès"
8585
msgid "Dutch"
8686
msgstr "Holandès"
8787

88+
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
89+
#: buzz/transcriber/transcriber.py
90+
msgid "French"
91+
msgstr "Francés"
92+
8893
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
8994
#: buzz/transcriber/transcriber.py
9095
msgid "German"
@@ -228,6 +233,11 @@ msgstr ""
228233
msgid "Disable GPU"
229234
msgstr "Desactiva la GPU"
230235

236+
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
237+
msgid "Prevent system sleep while transcriptions are queued"
238+
msgstr ""
239+
"Evita que el sistema entri en repòs mentre hi ha transcripcions a la cua"
240+
231241
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
232242
msgid "OpenAI API Key Test"
233243
msgstr "Prova de clau OpenAI API"
@@ -342,6 +352,18 @@ msgstr "Grup"
342352
msgid "Huggingface ID of a Faster whisper model"
343353
msgstr "ID de la cara oculta d'un model de whisper més ràpid"
344354

355+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
356+
msgid "Name for the custom model"
357+
msgstr "Nom del model personalitzat"
358+
359+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
360+
msgid "Add local model file"
361+
msgstr "Afegeix un fitxer de model local"
362+
363+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
364+
msgid "Add model from URL"
365+
msgstr "Afegeix un model des d’un URL"
366+
345367
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
346368
msgid "Download"
347369
msgstr "Descàrrega"
@@ -366,6 +388,24 @@ msgstr "Disponible per descarregar"
366388
msgid "Download link to Whisper.cpp ggml model file"
367389
msgstr "Enllaç de descàrrega a Whisper.cpp fitxer de model ggml"
368390

391+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
392+
#: buzz/widgets/transcriber/transcription_options_group_box.py
393+
#: buzz/widgets/recording_transcriber_widget.py
394+
msgid "Custom"
395+
msgstr "Personalitzat"
396+
397+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
398+
msgid "Select Whisper.cpp model file"
399+
msgstr "Seleccioneu el fitxer de model de Whisper.cpp"
400+
401+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
402+
msgid "Whisper.cpp model"
403+
msgstr "Model de Whisper.cpp"
404+
405+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
406+
msgid "All files"
407+
msgstr "Tots els fitxers"
408+
369409
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
370410
msgid "Delete Model"
371411
msgstr "Suprimeix el model"
@@ -721,10 +761,6 @@ msgstr "Clar"
721761
msgid "Dark"
722762
msgstr "Fosc"
723763

724-
#: buzz/widgets/recording_transcriber_widget.py
725-
msgid "Custom"
726-
msgstr "Personalitzat"
727-
728764
#: buzz/widgets/recording_transcriber_widget.py
729765
msgid "Text Color"
730766
msgstr "Color del text"
@@ -897,6 +933,14 @@ msgstr "Descàrrega completada!"
897933
msgid "Failed to run the installer: {}"
898934
msgstr "No s'ha pogut executar l'instal·lador: {}"
899935

936+
#: buzz/widgets/about_dialog.py buzz/widgets/menu_bar.py
937+
msgid "About"
938+
msgstr "Quant a"
939+
940+
#: buzz/widgets/about_dialog.py
941+
msgid "Version"
942+
msgstr "Versió"
943+
900944
#: buzz/widgets/about_dialog.py
901945
msgid "Check for updates"
902946
msgstr "Comprova si hi ha actualitzacions"
@@ -1335,10 +1379,6 @@ msgstr "Importa l'URL..."
13351379
msgid "Import Folder..."
13361380
msgstr "Importa carpeta..."
13371381

1338-
#: buzz/widgets/menu_bar.py
1339-
msgid "About"
1340-
msgstr "Quant a"
1341-
13421382
#: buzz/widgets/menu_bar.py
13431383
msgid "Preferences..."
13441384
msgstr "Preferències..."
@@ -1410,10 +1450,6 @@ msgstr "Xinès"
14101450
msgid "Korean"
14111451
msgstr "Coreà"
14121452

1413-
#: buzz/transcriber/transcriber.py
1414-
msgid "French"
1415-
msgstr "Francés"
1416-
14171453
#: buzz/transcriber/transcriber.py
14181454
msgid "Portuguese"
14191455
msgstr "Portuguès"
@@ -2007,15 +2043,10 @@ msgstr "Desa el resum en un fitxer"
20072043
msgid "Output folder (for file)"
20082044
msgstr "Carpeta de sortida (per al fitxer)"
20092045

2010-
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
2011-
msgid "Prevent system sleep while transcriptions are queued"
2012-
msgstr ""
2013-
"Evita que el sistema entri en repòs mentre hi ha transcripcions a la cua"
2014-
20152046
#: buzz/file_transcriber_queue_worker.py
20162047
msgid ""
2017-
"Speech extraction failed! Check your internet connection \\u2014 a model may "
2018-
"need to be downloaded."
2048+
"Speech extraction failed! Check your internet connection — a model may need "
2049+
"to be downloaded."
20192050
msgstr ""
20202051
"Ha fallat l'extracció de veu! Comproveu la vostra connexió a Internet — pot "
20212052
"ser que s'hagi de descarregar un model."

‎buzz/locale/da_DK/LC_MESSAGES/buzz.po‎

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ msgid ""
33
msgstr ""
44
"Project-Id-Version: \n"
55
"Report-Msgid-Bugs-To: \n"
6-
"POT-Creation-Date: 2026-08-22 14:09+0300\n"
7-
"PO-Revision-Date: \n"
6+
"POT-Creation-Date: 2026-09-11 18:56+0300\n"
7+
"PO-Revision-Date: 2026-09-11 18:58+0300\n"
88
"Last-Translator: Ole Guldberg2 <xalt7x.service@gmail.com>\n"
99
"Language-Team: \n"
1010
"Language: da_DK\n"
@@ -83,6 +83,11 @@ msgstr "Dansk"
8383
msgid "Dutch"
8484
msgstr "Nederlandsk"
8585

86+
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
87+
#: buzz/transcriber/transcriber.py
88+
msgid "French"
89+
msgstr "Fransk"
90+
8691
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
8792
#: buzz/transcriber/transcriber.py
8893
msgid "German"
@@ -225,6 +230,10 @@ msgstr ""
225230
msgid "Disable GPU"
226231
msgstr "Deaktiver GPU"
227232

233+
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
234+
msgid "Prevent system sleep while transcriptions are queued"
235+
msgstr "Forhindr systemet i at gå i dvale, når der er transkriptioner i køen"
236+
228237
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
229238
msgid "OpenAI API Key Test"
230239
msgstr "OpenAI API Nøgle test"
@@ -339,6 +348,18 @@ msgstr "Grupper"
339348
msgid "Huggingface ID of a Faster whisper model"
340349
msgstr "Huggingface ID af Faster Whisper model"
341350

351+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
352+
msgid "Name for the custom model"
353+
msgstr "Navn til den brugerdefinerede model"
354+
355+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
356+
msgid "Add local model file"
357+
msgstr "Tilføj lokal modelfil"
358+
359+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
360+
msgid "Add model from URL"
361+
msgstr "Tilføj model fra URL"
362+
342363
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
343364
msgid "Download"
344365
msgstr "Download"
@@ -363,6 +384,24 @@ msgstr "Tilgængelige til download"
363384
msgid "Download link to Whisper.cpp ggml model file"
364385
msgstr "Download link til Whisper.cpp ggml model-fil"
365386

387+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
388+
#: buzz/widgets/transcriber/transcription_options_group_box.py
389+
#: buzz/widgets/recording_transcriber_widget.py
390+
msgid "Custom"
391+
msgstr "Brugerdefineret"
392+
393+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
394+
msgid "Select Whisper.cpp model file"
395+
msgstr "Vælg Whisper.cpp-modelfil"
396+
397+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
398+
msgid "Whisper.cpp model"
399+
msgstr "Whisper.cpp-model"
400+
401+
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
402+
msgid "All files"
403+
msgstr "Alle filer"
404+
366405
#: buzz/widgets/preferences_dialog/models_preferences_widget.py
367406
msgid "Delete Model"
368407
msgstr "Slet model"
@@ -677,8 +716,9 @@ msgstr ""
677716
#: buzz/widgets/transcription_tasks_table_widget.py
678717
msgid "Could not restart transcription: transcriber worker not found."
679718
msgstr ""
680-
"Kunne ikke genstarte transskription: transskriptionsarbejder ikke fundet."
681-
"Kunne ikke genstarte transkription: transkriptionsprocessen blev ikke fundet."
719+
"Kunne ikke genstarte transskription: transskriptionsarbejder ikke "
720+
"fundet.Kunne ikke genstarte transkription: transkriptionsprocessen blev ikke "
721+
"fundet."
682722

683723
#: buzz/widgets/recording_transcriber_widget.py
684724
msgid "Live Recording"
@@ -716,10 +756,6 @@ msgstr "Lys"
716756
msgid "Dark"
717757
msgstr "Mørk"
718758

719-
#: buzz/widgets/recording_transcriber_widget.py
720-
msgid "Custom"
721-
msgstr "Brugerdefineret"
722-
723759
#: buzz/widgets/recording_transcriber_widget.py
724760
msgid "Text Color"
725761
msgstr "Tekstfarve"
@@ -892,6 +928,14 @@ msgstr "Download fuldført!"
892928
msgid "Failed to run the installer: {}"
893929
msgstr "Kunne ikke køre installationsprogrammet: {}"
894930

931+
#: buzz/widgets/about_dialog.py buzz/widgets/menu_bar.py
932+
msgid "About"
933+
msgstr "Om"
934+
935+
#: buzz/widgets/about_dialog.py
936+
msgid "Version"
937+
msgstr "Version"
938+
895939
#: buzz/widgets/about_dialog.py
896940
msgid "Check for updates"
897941
msgstr "Tjek for opdateringer"
@@ -1327,10 +1371,6 @@ msgstr "Importer URL..."
13271371
msgid "Import Folder..."
13281372
msgstr "Importer Mappe..."
13291373

1330-
#: buzz/widgets/menu_bar.py
1331-
msgid "About"
1332-
msgstr "Om"
1333-
13341374
#: buzz/widgets/menu_bar.py
13351375
msgid "Preferences..."
13361376
msgstr "Indstillinger..."
@@ -1399,10 +1439,6 @@ msgstr "Kinesisk"
13991439
msgid "Korean"
14001440
msgstr "Koreansk"
14011441

1402-
#: buzz/transcriber/transcriber.py
1403-
msgid "French"
1404-
msgstr "Fransk"
1405-
14061442
#: buzz/transcriber/transcriber.py
14071443
msgid "Portuguese"
14081444
msgstr "Portugisisk"
@@ -1944,8 +1980,8 @@ msgid ""
19441980
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
19451981
"to it"
19461982
msgstr ""
1947-
"Spring over, hvis der ved siden af lydfilen ligger en .txt-, .srt- eller ."
1948-
"vtt-fil med samme navn"
1983+
"Spring over, hvis der ved siden af lydfilen ligger en .txt-, .srt- "
1984+
"eller .vtt-fil med samme navn"
19491985

19501986
#: buzz/plugins/skip_already_transcribed/plugin.py
19511987
msgid "Check in transcription database"
@@ -1995,15 +2031,10 @@ msgstr "Gem resumé i en fil"
19952031
msgid "Output folder (for file)"
19962032
msgstr "Outputmappe (til fil)"
19972033

1998-
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
1999-
msgid "Prevent system sleep while transcriptions are queued"
2000-
msgstr ""
2001-
"Forhindr systemet i at gå i dvale, når der er transkriptioner i køen"
2002-
20032034
#: buzz/file_transcriber_queue_worker.py
20042035
msgid ""
2005-
"Speech extraction failed! Check your internet connection \\u2014 a model may "
2006-
"need to be downloaded."
2036+
"Speech extraction failed! Check your internet connection — a model may need "
2037+
"to be downloaded."
20072038
msgstr ""
20082039
"Taleoprydning mislykkedes! Kontroller din internetforbindelse — en model "
20092040
"skal muligvis hentes ned."

0 commit comments

Comments
 (0)