491 add mms (#1313)

This commit is contained in:
Raivis Dejus 2025-12-18 20:49:39 +02:00 committed by GitHub
commit 4dbde2b948
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 2049 additions and 888 deletions

View file

@ -7,6 +7,10 @@ import sys
from pathlib import Path
from typing import TextIO
# Set up CUDA library paths before any torch imports
# This must happen before platformdirs or any other imports that might indirectly load torch
import buzz.cuda_setup # noqa: F401
from platformdirs import user_log_dir, user_cache_dir, user_data_dir
# Will download all Huggingface data to the app cache directory

133
buzz/cuda_setup.py Normal file
View file

@ -0,0 +1,133 @@
"""
CUDA library path setup for nvidia packages installed via pip.
This module must be imported BEFORE any torch or CUDA-dependent libraries are imported.
It handles locating and loading CUDA libraries (cuDNN, cuBLAS, etc.) from the nvidia
pip packages.
On Windows: Uses os.add_dll_directory() to add library paths
On Linux: Uses ctypes to preload libraries (LD_LIBRARY_PATH is read at process start)
On macOS: No action needed (CUDA not supported)
"""
import ctypes
import logging
import os
import platform
import sys
from pathlib import Path
logger = logging.getLogger(__name__)
def _get_nvidia_package_lib_dirs() -> list[Path]:
"""Find all nvidia package library directories in site-packages."""
lib_dirs = []
# Find site-packages directories
site_packages_dirs = []
for path in sys.path:
if "site-packages" in path:
site_packages_dirs.append(Path(path))
# Also check relative to the current module for frozen apps
if getattr(sys, "frozen", False):
# For frozen apps, check the _internal directory
frozen_lib_dir = Path(sys._MEIPASS) if hasattr(sys, "_MEIPASS") else Path(sys.executable).parent
nvidia_dir = frozen_lib_dir / "nvidia"
if nvidia_dir.exists():
for pkg_dir in nvidia_dir.iterdir():
if pkg_dir.is_dir():
lib_subdir = pkg_dir / "lib"
if lib_subdir.exists():
lib_dirs.append(lib_subdir)
# Some packages have bin directory on Windows
bin_subdir = pkg_dir / "bin"
if bin_subdir.exists():
lib_dirs.append(bin_subdir)
# Check each site-packages for nvidia packages
for sp_dir in site_packages_dirs:
nvidia_dir = sp_dir / "nvidia"
if nvidia_dir.exists():
for pkg_dir in nvidia_dir.iterdir():
if pkg_dir.is_dir():
lib_subdir = pkg_dir / "lib"
if lib_subdir.exists():
lib_dirs.append(lib_subdir)
# Some packages have bin directory on Windows
bin_subdir = pkg_dir / "bin"
if bin_subdir.exists():
lib_dirs.append(bin_subdir)
return lib_dirs
def _setup_windows_dll_directories():
"""Add nvidia library directories to Windows DLL search path."""
lib_dirs = _get_nvidia_package_lib_dirs()
for lib_dir in lib_dirs:
try:
os.add_dll_directory(str(lib_dir))
logger.debug(f"Added DLL directory: {lib_dir}")
except (OSError, AttributeError) as e:
logger.debug(f"Could not add DLL directory {lib_dir}: {e}")
def _preload_linux_libraries():
"""Preload CUDA libraries on Linux using ctypes.
On Linux, LD_LIBRARY_PATH is only read at process start, so we need to
manually load the libraries using ctypes before torch tries to load them.
"""
lib_dirs = _get_nvidia_package_lib_dirs()
# Libraries to skip - NVBLAS requires special configuration and causes issues
skip_patterns = ["libnvblas"]
loaded_libs = set()
for lib_dir in lib_dirs:
if not lib_dir.exists():
continue
# Find all .so files in the directory
for lib_file in sorted(lib_dir.glob("*.so*")):
if lib_file.name in loaded_libs:
continue
if lib_file.is_symlink() and not lib_file.exists():
continue
# Skip problematic libraries
if any(pattern in lib_file.name for pattern in skip_patterns):
logger.debug(f"Skipping library: {lib_file}")
continue
try:
# Use RTLD_GLOBAL so symbols are available to other libraries
ctypes.CDLL(str(lib_file), mode=ctypes.RTLD_GLOBAL)
loaded_libs.add(lib_file.name)
logger.debug(f"Preloaded library: {lib_file}")
except OSError as e:
# Some libraries may have missing dependencies, that's ok
logger.debug(f"Could not preload {lib_file}: {e}")
def setup_cuda_libraries():
"""Set up CUDA library paths for the current platform.
This function should be called as early as possible, before any torch
or CUDA-dependent libraries are imported.
"""
system = platform.system()
if system == "Windows":
_setup_windows_dll_directories()
elif system == "Linux":
_preload_linux_libraries()
# macOS doesn't have CUDA support, so nothing to do
# Auto-run setup when this module is imported
setup_cuda_libraries()

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2025-10-17 07:59+0200\n"
"Last-Translator: Éric Duarte <contacto@ericdq.com>\n"
"Language-Team: Catalan <jmas@softcatala.org>\n"
@ -176,25 +176,39 @@ msgid "Live recording mode"
msgstr "Mode d'enregistrament en directe"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr "Utilitza només la CPU i desactiveu l'acceleració de la GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
"Establiu això si els models més grans no s'ajusten a la memòria de la GPU i "
"Buzz es bloqueja"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr "Desactiva la GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "Prova de clau OpenAI API"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -202,11 +216,11 @@ msgstr ""
"La vostra clau API és vàlida. Buzz utilitzarà aquesta clau per realitzar "
"transcripcions de l'API de Whisper i traduccions de la IA."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "Clau API no vàlida"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -214,11 +228,11 @@ msgstr ""
"L'API només admet caràcters base64 (A-Za-z0-9+/).-). Altres caràcters de la "
"clau API poden causar errors."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Selecciona la carpeta d'exportació"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -316,8 +330,8 @@ msgstr "Descàrrega fallida"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Error"
@ -335,28 +349,40 @@ msgstr "Atura"
msgid "Detect Language"
msgstr "Detecta l'idioma"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Executa"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
"L'ús per primera vegada d'un model pot trigar diversos minuts a carregar-se."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "Clau API:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Tasca:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Idioma:"
@ -601,13 +627,13 @@ msgid "End"
msgstr "Finalitza"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Text"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -617,7 +643,7 @@ msgstr "Traducció"
msgid "View"
msgstr "Veure"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Marqua de temps"
@ -625,65 +651,65 @@ msgstr "Marqua de temps"
msgid "Export"
msgstr "Exporta"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Traduir"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Redimensionar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr "Cerca"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr "Mostra/amaga la barra de cerca (Ctrl+F)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr "Cerca:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr "Introduïu el text a cercar..."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr "Coincidència anterior (Maj+Retorn)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
#, fuzzy
msgid "Next match (Ctrl+Enter)"
msgstr "Coincidència següent (retorn)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr "Neteja"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr "Controls de reproducció:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr "Segment de bucle"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr "Activa/desactiva el bucle en fer clic als segments de transcripció"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr "Segueix l'àudio"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
@ -691,44 +717,44 @@ msgstr ""
"Activa/desactiva seguint la posició d'àudio actual a la transcripció. Quan "
"està activada, es desplaça automàticament al text actual."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr "Desplaça't fins a l'actual"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr "Desplaçar-se fins al text que es parla actualment"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr "1 de més de 100 coincidències"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr "1 de "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr " coincidències"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr "No s'ha trobat cap coincidència"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr " de més de 100 coincidències"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr " de "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "Clau API necessària"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Introduïu la clau API d'OpenAI a les preferències"
@ -888,14 +914,14 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "No s'ha pogut desar la clau OpenAI API a l'anell de claus"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
"El servidor Whisper no s'ha pogut iniciar. Consulteu els registres per "
"obtenir més informació."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1269,15 +1295,15 @@ msgstr "Sundanès"
msgid "Cantonese"
msgstr "Cantonès"
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "S'ha produït un error de connexió"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr "Començant Whisper.cpp..."
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Cancel·la la transcripció"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Ole Guldberg2 <xalt7x.service@gmail.com>\n"
"Language-Team: \n"
@ -176,23 +176,37 @@ msgid "Live recording mode"
msgstr "Live optagelsesmode"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "OpenAI API Nøgle test"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -200,12 +214,12 @@ msgstr ""
"Din API nøgle er gyldig. Buzz vil benytte nøglen til at anvende Whisper API "
"transkription og AI oversættelser."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
#, fuzzy
msgid "Invalid API key"
msgstr "Ugyldig API-nøgle"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -213,11 +227,11 @@ msgstr ""
"API supporterer kun base64 tegn (A-Za-z0-9+/=_-). Andre tegn i API-nøglen "
"kan guve fejl. "
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Vælg eksport-mappe"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -315,8 +329,8 @@ msgstr "Download mislykkedes"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Fejl"
@ -334,27 +348,39 @@ msgstr "Stop"
msgid "Detect Language"
msgstr "Detekter sprog"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Kør"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr "Først gang kan brug af en model tage flere minutter at indlæse."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "API-nøgle:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Opgave:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Sprog:"
@ -598,13 +624,13 @@ msgid "End"
msgstr "Slut"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Tekst"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -614,7 +640,7 @@ msgstr "Oversættelse"
msgid "View"
msgstr "Vis"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Tidsstempler"
@ -622,107 +648,107 @@ msgstr "Tidsstempler"
msgid "Export"
msgstr "Eksporter"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Oversæt"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Behandel størrelse"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "API-nøgle påkrævet"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Indtast venligst OpenAI API-nøgle i indstillinger"
@ -882,12 +908,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "Kan ikke gemme OpenAI API-nøgle i nøgleringen"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1259,15 +1285,15 @@ msgstr ""
msgid "Cantonese"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Der er opstået en forbindelsesfejl"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Afbryd transkription"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2025-03-05 14:41+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -176,23 +176,37 @@ msgid "Live recording mode"
msgstr "Live-Aufnahmemodus"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "OpenAI-API-Schlüssel Test"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -200,11 +214,11 @@ msgstr ""
"Ihr API-Schlüssel ist gültig. Buzz verwendet diesen Schlüssel, um Whisper-"
"API-Transkriptionen und KI-Übersetzungen durchzuführen."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "Ungültiger API-Schlüssel"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -212,11 +226,11 @@ msgstr ""
"Die API unterstützt nur Base64-Zeichen (A-Za-z0-9+/=_-). Andere Zeichen im "
"API-Schlüssel können Fehler verursachen."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Exportordner auswählen"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -315,8 +329,8 @@ msgstr "Der Download ist fehlgeschlagen"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Fehler"
@ -334,29 +348,41 @@ msgstr "Stoppen"
msgid "Detect Language"
msgstr "Sprache erkennen"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Ausführen"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Modell:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
"Bei der ersten Verwendung eines Modells kann das Laden mehrere Minuten "
"dauern."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "API-Schlüssel:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Aufgabe:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Sprache:"
@ -599,13 +625,13 @@ msgid "End"
msgstr "Ende"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Text"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -615,7 +641,7 @@ msgstr "Übersetzung"
msgid "View"
msgstr "Anzeigen"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Zeitstempel"
@ -623,107 +649,107 @@ msgstr "Zeitstempel"
msgid "Export"
msgstr "Export"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Übersetzen"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Größe ändern"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "API-Schlüssel erforderlich"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Bitte geben Sie den OpenAI-API-Schlüssel in den Einstellungen ein"
@ -884,12 +910,12 @@ msgstr ""
"Der OpenAI-API-Schlüssel kann nicht im Schlüsselbund gespeichert werden"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1261,15 +1287,15 @@ msgstr "Sundanesisch"
msgid "Cantonese"
msgstr "Kantonesisch"
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Ein Verbindungsfehler ist aufgetreten"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Transkription abbrechen"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -175,43 +175,57 @@ msgid "Live recording mode"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -306,8 +320,8 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr ""
@ -325,27 +339,39 @@ msgstr ""
msgid "Detect Language"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr ""
@ -582,13 +608,13 @@ msgid "End"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -598,7 +624,7 @@ msgstr ""
msgid "View"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr ""
@ -606,107 +632,107 @@ msgstr ""
msgid "Export"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr ""
@ -862,12 +888,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1238,15 +1264,15 @@ msgstr ""
msgid "Cantonese"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
msgid "Starting transcription..."
msgstr ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2025-09-08 12:43+0200\n"
"Last-Translator: Éric Duarte <contacto@ericdq.com>\n"
"Language-Team: \n"
@ -178,25 +178,39 @@ msgid "Live recording mode"
msgstr "Modo de grabación en directo"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr "Usa solo CPU y desactiva la aceleración de GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
"Configure esto si los modelos más grandes no se ajustan a la memoria de su "
"GPU y Buzz se bloquea"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr "Desactivar GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "Prueba de la clave API de OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -204,11 +218,11 @@ msgstr ""
"Tu clave API es válida. Buzz usará esta clave para realizar transcripciones "
"de la API de Whisper y traducciones de IA."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "Clave API no válida"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -216,11 +230,11 @@ msgstr ""
"La API solo admite caracteres base64 (A-Za-z0-9+/=_-). Otros caracteres de "
"la clave de API pueden causar errores."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Seleccione Exportar carpeta"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -322,8 +336,8 @@ msgstr "Descarga fallida"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Error"
@ -344,32 +358,44 @@ msgstr "Detener"
msgid "Detect Language"
msgstr "Detectar idioma"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
# automatic translation
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Ejecutar"
# automatic translation
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Modelo:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
"El uso por primera vez de un modelo puede tardar varios minutos en cargarse."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "Clave API:"
# automatic translation
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Tarea:"
# automatic translation
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Idioma:"
@ -638,14 +664,14 @@ msgid "End"
msgstr "Fin"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Texto"
# automatic translation
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -655,7 +681,7 @@ msgstr "Traducción"
msgid "View"
msgstr "Ver"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Marcas de tiempo"
@ -663,67 +689,67 @@ msgstr "Marcas de tiempo"
msgid "Export"
msgstr "Exportar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Traducir"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Cambiar el tamaño"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr "Buscar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr "Mostrar/Ocultar barra de búsqueda (Ctrl+F)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr "Encontrar:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr "Introducir texto para encontrar..."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr "Coincidencia anterior (Mayús+Intro)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
#, fuzzy
msgid "Next match (Ctrl+Enter)"
msgstr "Siguiente coincidencia (Enter)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr "Limpiar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr "Controles de reproducción:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr "Segmento de bucle"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
"Activar/desactivar la reproducción en bucle al hacer clic en segmentos de la "
"transcripción"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr "Seguir audio"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
@ -732,44 +758,44 @@ msgstr ""
"transcripción. Cuando está activado, se desplaza automáticamente al texto "
"actual."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr "Desplácese hasta Actual"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr "Desplazarse hasta el texto hablado actualmente"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr "1 de 100+ coincidencias"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr "1 de "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr " coincidencias"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr "No se encontraron coincidencias"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr " de 100+ coincidencias"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr " de "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "Clave de API requerida"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Ingrese la clave API de OpenAI en las preferencias"
@ -939,14 +965,14 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "No se puede guardar la clave de la API de OpenAI en el llavero"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
"El servidor Whisper no se pudo iniciar. Consulta los registros para obtener "
"más detalles."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1321,16 +1347,16 @@ msgstr "Sundanés"
msgid "Cantonese"
msgstr "Cantonés"
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Se ha producido un error de conexión"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr "Iniciando Whisper.cpp..."
# automatic translation
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Cancelar transcripción"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2025-11-09 20:22+0200\n"
"Language-Team: (Italiano) Albano Battistella <albanobattistella@gmail.com>\n"
"Language: it_IT\n"
@ -176,25 +176,39 @@ msgid "Live recording mode"
msgstr "Modalità di registrazione in diretta"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr "Utilizza solo la CPU e disattiva l'accelerazione GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
"Imposta questa opzione se i modelli più grandi non si adattano alla memoria "
"della tua GPU e Buzz si blocca"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr "Disabilita GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "Test della chiave API OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -202,11 +216,11 @@ msgstr ""
"La tua chiave API è valida. Buzz utilizzerà questa chiave per eseguire le "
"trascrizioni API Whisper e le traduzioni AI."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "Chiave API non valida"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -214,11 +228,11 @@ msgstr ""
"L'API supporta solo caratteri base64 (A-Za-z0-9+/=). Altri caratteri nella "
"chiave API potrebbero causare errori."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Seleziona la cartella di esportazione"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -316,8 +330,8 @@ msgstr "Download non riuscito"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Errore"
@ -335,29 +349,41 @@ msgstr "Arresta"
msgid "Detect Language"
msgstr "Rileva la lingua"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Avvia"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Modello:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
"Il caricamento di un modello al primo utilizzo potrebbe richiedere diversi "
"minuti."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "Chiave API:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Compito:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Lingua:"
@ -602,13 +628,13 @@ msgid "End"
msgstr "Fine"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Testo"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -618,7 +644,7 @@ msgstr "Traduzione"
msgid "View"
msgstr "Visualizza"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Timestamp"
@ -626,66 +652,66 @@ msgstr "Timestamp"
msgid "Export"
msgstr "Esporta"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Tradurre"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Ridimensionare"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr "Trova"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr "Mostra/Nascondi barra di ricerca (Ctrl+F)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr "Trova:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr "Inserisci il testo per trovare..."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr "Corrispondenza precedente (Maiusc+Invio)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
#, fuzzy
msgid "Next match (Ctrl+Enter)"
msgstr "Prossima corrispondenza (Invio)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr "Elimina"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr "Controlli di riproduzione:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr "Ciclo di segmento"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
"Abilita/disabilita il loop quando si fa clic sui segmenti della trascrizione"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr "Segui Audio"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
@ -694,44 +720,44 @@ msgstr ""
"trascrizione. Quando abilitato, scorre automaticamente fino al testo "
"corrente."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr "Scorri fino al Corrente"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr "Scorrere fino al testo attualmente pronunciato"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr "1 di 100+ corrispondenze"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr "1 di"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr "corrispondenze"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr "Nessuna corrispondenza trovata"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr " di oltre 100 corrispondenze"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr " di "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "Chiave API richiesta"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Inserisci la chiave API OpenAI nelle preferenze"
@ -891,13 +917,13 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "Impossibile salvare la chiave API OpenAI nel portachiavi"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
"Impossibile avviare il server Whisper. Controllare i log per i dettagli."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1271,15 +1297,15 @@ msgstr "Sundanese"
msgid "Cantonese"
msgstr "Cantonese"
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Si è verificato un errore di connessione"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr "Avvio di Whisper.cpp..."
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
msgid "Starting transcription..."
msgstr "Inizio trascrizione..."

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: nunawa <71294849+nunawa@users.noreply.github.com>\n"
"Language-Team: \n"
@ -174,23 +174,37 @@ msgid "Live recording mode"
msgstr "ライブ録音"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "OpenAI APIキー テスト"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -198,22 +212,22 @@ msgstr ""
"あなたのAPIキーは有効です。Buzzはこのキーを使ってWhisper APIの書き起こしとAI"
"翻訳を行います。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
#, fuzzy
msgid "Invalid API key"
msgstr "OpenAI APIキー"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "出力フォルダを選択"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -311,8 +325,8 @@ msgstr "ダウンロード失敗"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "エラー"
@ -330,27 +344,39 @@ msgstr "停止する"
msgid "Detect Language"
msgstr "自動検出"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "実行"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "モデル:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "APIキー:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "タスク:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "言語:"
@ -594,13 +620,13 @@ msgid "End"
msgstr "終了"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "テキスト"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -610,7 +636,7 @@ msgstr "翻訳"
msgid "View"
msgstr "表示"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "タイムスタンプ"
@ -618,107 +644,107 @@ msgstr "タイムスタンプ"
msgid "Export"
msgstr "出力"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "翻訳"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "リサイズ"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "APIキーが必要"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "設定画面でOpenAI APIキーを入力してください"
@ -877,12 +903,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "OpenAI API キーをkeyringに保存できません"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1254,15 +1280,15 @@ msgstr ""
msgid "Cantonese"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "接続エラーが発生しました"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "文字起こしをキャンセルする"

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"PO-Revision-Date: 2025-12-13 10:52+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2025-12-14 09:03+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: lv_LV\n"
@ -177,25 +177,41 @@ msgstr ""
"režīms"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr "Izmantot 8bitu kvantizāciju, lai samazinātu nepieciešamo atmiņu"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
"Izmantojams Huggingface un Faster whisper modeļiem, lai samazinātu "
"nepieciešamo atmiņas daudzumu, nedaudz zaudējot atpazīšanas kvalitāti."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr "Optimizēt GPU atmiņu"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr "Izmantot tikai CPU un deaktivēt GPU paātrināšanu"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
"Aktivizējiet šo, ja lielāki modeļi neietilpst jūsu video kartes atmiņā un "
"Buzz avarē"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr "Deaktivēt GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "OpenAI API atslēgas pārbaude"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -203,11 +219,11 @@ msgstr ""
"Jūsu API atslēga ir derīga. Buzz izmantos to runas atpazīšanai ar Whisper "
"API un tulkošanai."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "Nederīga API atslēga"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -215,11 +231,11 @@ msgstr ""
"API atbalsta tikai base64 simbolus (A-Za-z0-9+/=_-). Citi simboli API "
"atslēgā var radīt kļūdas."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Izvēlieties mapi kurā eksportēt"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -275,7 +291,7 @@ msgstr "Veids"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:83
msgid "Huggingface ID of a Faster whisper model"
msgstr "Faster Whisper modeļa Huggingface ID"
msgstr "Faster whisper modeļa Huggingface ID"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:95
msgid "Download"
@ -317,8 +333,8 @@ msgstr "Lejupielāde neizdevās"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Kļūda"
@ -336,27 +352,42 @@ msgstr "Apturēt"
msgid "Detect Language"
msgstr "Noteikt valodu"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr "piem. eng, fra, deu"
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
"Ievadiet valodas ISO 639-3 kodu (3 burti).\n"
"Piemēram: eng (Angļu), fra (Franču), deu (Vācu),\n"
"spa (Spāņu), lav (Latviešu)"
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Apstrādāt"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Modelis:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr "Pirmā modeļa ielādes reize var aizņemt pat vairākas minūtes."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "API atslēga:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Uzdevums:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Valoda:"
@ -600,13 +631,13 @@ msgid "End"
msgstr "Beigas"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Teksts"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -616,7 +647,7 @@ msgstr "Tulkojums"
msgid "View"
msgstr "Skats"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Laiks"
@ -624,64 +655,64 @@ msgstr "Laiks"
msgid "Export"
msgstr "Eksportēt"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Tulkot"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Mainīt garumu"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr "Noteikt runātājus"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr "Meklēt"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr "Rādīt/Slēpt meklēšanas joslu (Ctrl+F)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr "Meklēt:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr "Ievadiet meklējamo..."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr "Iepriekšējais rezultāts (Shift+Enter)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr "Nākamais rezultāts (Ctrl+Enter)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr "Notīrīt"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr "Atskaņošana:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr "Atkārtot segmentu"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr "Nosaka vai atkārtot izvēlēto segmentu"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr "Sekot audio"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
@ -689,44 +720,44 @@ msgstr ""
"Nosaka vai atskaņojot audio iezīmētajam segmentam vajadzētu automātiski "
"sekot tam kas tiek atskaņots."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr "Pāriet uz tekošo"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr "Pāriet uz šobrīd atskaņojamo tesktu"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr "1 no 100+ "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr "1 no "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr " "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr "Nekas nav atrasts"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr " no 100+"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr " no "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "API atslēgas kļūda"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Lūdzu ievadiet OpenAI API atslēgu iestatījumos"
@ -884,14 +915,14 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "Neizdevās saglabāt OpenAI API atslēgu atslēgu saišķī"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
"Whisper serverim neizdevās ieslēgties. Lūdzu pārbaudiet lietotnes žurnāla "
"ierakstus."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1265,15 +1296,15 @@ msgstr "Sundāņu"
msgid "Cantonese"
msgstr "Kantonas"
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Notika savienojuma kļūda"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr "Palaiž Whisper.cpp..."
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
msgid "Starting transcription..."
msgstr "Sāk atpazīšanu..."

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2025-03-20 18:30+0100\n"
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
"Language-Team: none\n"
@ -179,23 +179,37 @@ msgid "Live recording mode"
msgstr "Live-opnamemodus"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "OpenAI-api-sleuteltest"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -203,11 +217,11 @@ msgstr ""
"De api-sleutel is geldig. Buzz zal deze sleutel gebruiken om transcripties "
"en AI-vertalingen op te vragen bij Whisper."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "Ongeldige api-sleutel"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -215,11 +229,11 @@ msgstr ""
"De api ondersteunt alleen base64-tekens (AZaz09+/=_-). Andere tekens "
"kunnen problemen veroorzaken."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Kies een exportmap"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -317,8 +331,8 @@ msgstr "Het downloaden is mislukt"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Foutmelding"
@ -336,29 +350,41 @@ msgstr "Stoppen"
msgid "Detect Language"
msgstr "Taal herkennen"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Uitvoeren"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
"Let op: de eerste keer kan het enkele minuten duren voordat het model "
"geladen is."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "Api-sleutel:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Taak:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Taal:"
@ -599,13 +625,13 @@ msgid "End"
msgstr "Einde"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Tekst"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -615,7 +641,7 @@ msgstr "Vertaling"
msgid "View"
msgstr "Bekijken"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Tijdstippen"
@ -623,107 +649,107 @@ msgstr "Tijdstippen"
msgid "Export"
msgstr "Exporteren"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Vertalen"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Grootte"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "Api-sleutel vereist"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Voer de OpenAI-api-sleutel in in de instellingen"
@ -883,12 +909,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "De OpenAI-api-sleutel kan niet worden bewaard in de sleutelbos"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1260,15 +1286,15 @@ msgstr "Soedanees"
msgid "Cantonese"
msgstr "Kantonees"
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Er is een verbindingsfout opgetreden"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Transcriptie wissen"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2024-03-17 20:50+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -178,44 +178,58 @@ msgid "Live recording mode"
msgstr "Nagrywanie na żywo"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
#, fuzzy
msgid "Invalid API key"
msgstr "Nieprawidłowy URL"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -318,8 +332,8 @@ msgstr "Pobrany"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Błąd"
@ -337,27 +351,39 @@ msgstr "Zatrzymaj"
msgid "Detect Language"
msgstr "Wykryj język"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Rozpocznij"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Zadanie:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Język:"
@ -606,13 +632,13 @@ msgid "End"
msgstr "Zakończ"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Tekst"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
#, fuzzy
@ -623,7 +649,7 @@ msgstr "Nowa transkrypcja"
msgid "View"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr ""
@ -631,107 +657,107 @@ msgstr ""
msgid "Export"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr ""
@ -895,12 +921,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1273,15 +1299,15 @@ msgstr ""
msgid "Cantonese"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Anuluj transkrypcję"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2025-11-01 17:43-0300\n"
"Last-Translator: Paulo Schopf <pschopf@gmail.com>\n"
"Language-Team: none\n"
@ -176,24 +176,38 @@ msgid "Live recording mode"
msgstr "Modo de gravação ao vivo"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr "Usar somente a CPU e desabilitar aceleração por GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
"Marque isso se modelos maiores não couberem na memória da GPU e o Buzz travar"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr "Desabilitar GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "Teste da Chave API OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -201,11 +215,11 @@ msgstr ""
"Sua chave API é válida. O Buzz usará esta chave para realizar transcrições "
"API Whisper e traduções de IA."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "Chave API inválida"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
@ -213,11 +227,11 @@ msgstr ""
"A API suporta apenas caracteres base64 (A-Za-z0-9+/=_-). Outros caracteres "
"na chave API podem causar erros."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Selecionar Pasta de Exportação"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -315,8 +329,8 @@ msgstr "Falha ao baixar"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Erro"
@ -334,27 +348,39 @@ msgstr "Parar"
msgid "Detect Language"
msgstr "Detectar Idioma"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Executar"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Modelo:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr "O primeiro uso de um modelo pode levar vários minutos para carregar."
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "Chave API:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Tarefa:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Idioma:"
@ -599,13 +625,13 @@ msgid "End"
msgstr "Fim"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Texto"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -615,7 +641,7 @@ msgstr "Tradução"
msgid "View"
msgstr "Visualizar"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Marcações de tempo"
@ -623,65 +649,65 @@ msgstr "Marcações de tempo"
msgid "Export"
msgstr "Exportar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Traduzir"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "Redimensionar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr "Procurar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr "Mostrar/Ocultar a Barra de Pesquisa"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr "Procurar:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr "Digite o texto a procurar..."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr "Encontro prévio (Shift+Enter)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
#, fuzzy
msgid "Next match (Ctrl+Enter)"
msgstr "Póximo encontro (Enter)"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr "Limpar"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr "Controles de Reprodução:"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr "Segmento de Loop"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr "Habilitar/desabilitar loop ao clicar em segmentos de transcrição"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr "Siga o Áudio"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
@ -689,44 +715,44 @@ msgstr ""
"Ativar/desativar a opção de seguir a posição atual do áudio na transcrição. "
"Quando ativado, rola automaticamente para o texto atual."
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr "Rolar para o Atual"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr "Role até o texto falado no momento"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr "1 de 100+ encontros"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr "1 de "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr " encontros"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr "Nada encontrado"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr " de 100+ encontros"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr " de "
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "Chave API Necessária"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Insira a chave API OpenAI nas preferências"
@ -886,12 +912,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "Não foi possível salvar a chave da API OpenAI no cofre de chaves"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr "Falha ao iniciar o servidor Whisper. Verifique os logs."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1265,15 +1291,15 @@ msgstr "Sundanês"
msgid "Cantonese"
msgstr "Cantonês"
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Ocorreu um erro de conexão"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr "Iniciando Whisper.cpp..."
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Iniciando transcrição..."

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Yevhen Popok <xalt7x.service@gmail.com>\n"
"Language-Team: \n"
@ -176,23 +176,37 @@ msgid "Live recording mode"
msgstr "Живий запис"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "Тест API-ключа OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -200,22 +214,22 @@ msgstr ""
"Ваш API-ключ дійсний. Buzz використає цей ключ для транскрипції з Whisper "
"API та перекладу ШІ."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
#, fuzzy
msgid "Invalid API key"
msgstr "API-ключ OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "Виберіть теку для експорту"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -313,8 +327,8 @@ msgstr "Невдале завантаження"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "Помилка"
@ -332,27 +346,39 @@ msgstr "Зупинити"
msgid "Detect Language"
msgstr "Визначити мову"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "Запуск"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "Модель:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "API-ключ:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "Завдання:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "Мова:"
@ -596,13 +622,13 @@ msgid "End"
msgstr "Кінець"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "Текст"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
msgid "Translation"
@ -612,7 +638,7 @@ msgstr "Переклад"
msgid "View"
msgstr "Вигляд"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "Позначки часу"
@ -620,107 +646,107 @@ msgstr "Позначки часу"
msgid "Export"
msgstr "Експорт"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "Перекласти"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "Потрібен API-ключ"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "Будь ласка, введіть API-ключ OpenAI в налаштуваннях"
@ -879,12 +905,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "Не вдається додати до звʼязки ключів API-ключ OpenAI"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1256,15 +1282,15 @@ msgstr ""
msgid "Cantonese"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "Виникла помилка зʼєднання"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "Скасувати транскрипцію"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2023-05-01 15:45+0800\n"
"Last-Translator: \n"
"Language-Team: lamb \n"
@ -179,33 +179,47 @@ msgid "Live recording mode"
msgstr "现场录制模式"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr "测试OpenAI API Key"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
msgstr "您的API密钥有效。Buzz将使用此密钥执行 Whisper API 识别和 AI 翻译。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr "无效的API key"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
#, fuzzy
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
@ -213,11 +227,11 @@ msgid ""
msgstr ""
"API只支持 base64字符A-Za-z0-9+/=。其他字符在API密钥中可能导致错误。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr "选择输出文件夹"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -321,8 +335,8 @@ msgstr "下载模型失败"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr "错误"
@ -340,27 +354,39 @@ msgstr "停止"
msgid "Detect Language"
msgstr "检测语言"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "开始执行"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "模型:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr "首次使用模型可能需要几分钟的时间才能加载"
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr "Api Key:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "任务:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "语言:"
@ -607,13 +633,13 @@ msgid "End"
msgstr "结束"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr "文本"
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
#, fuzzy
@ -624,7 +650,7 @@ msgstr "翻译"
msgid "View"
msgstr "查看"
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr "时间戳"
@ -632,107 +658,107 @@ msgstr "时间戳"
msgid "Export"
msgstr "导出"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr "翻译"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr "调整大小"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr "需要API Key"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr "请在偏好设置中输入OpenAI API Key"
@ -895,12 +921,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr "无法将OpenAI API密钥保存到密钥串"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1273,15 +1299,15 @@ msgstr ""
msgid "Cantonese"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr "连接发生错误"
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "取消识别"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-16 08:58+0200\n"
"POT-Creation-Date: 2025-12-17 19:51+0200\n"
"PO-Revision-Date: 2023-05-01 15:45+0800\n"
"Last-Translator: \n"
"Language-Team: Lamb\n"
@ -178,43 +178,57 @@ msgid "Live recording mode"
msgstr "現場錄製"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:199
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:203
msgid "Reduce GPU RAM"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:209
msgid "Use only CPU and disable GPU acceleration"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:212
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214
msgid "Disable GPU"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:245
msgid "OpenAI API Key Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:240
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:256
msgid "Invalid API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:257
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:278
msgid "Select Export Folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:359
msgid ""
"OpenAI API returned invalid response. Please check the API url or your key. "
"Transcription and translation may still work if the API does not support key "
@ -316,8 +330,8 @@ msgstr "下載模型"
#: buzz/widgets/transcription_tasks_table_widget.py:704
#: buzz/widgets/transcription_tasks_table_widget.py:774
#: buzz/widgets/transcription_tasks_table_widget.py:805
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577
#: buzz/model_loader.py:591
#: buzz/widgets/main_window.py:283 buzz/model_loader.py:651
#: buzz/model_loader.py:665
msgid "Error"
msgstr ""
@ -335,27 +349,39 @@ msgstr "停止"
msgid "Detect Language"
msgstr "檢測語言"
#: buzz/widgets/transcriber/mms_language_line_edit.py:26
msgid "e.g., eng, fra, deu"
msgstr ""
#: buzz/widgets/transcriber/mms_language_line_edit.py:28
msgid ""
"Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)"
msgstr ""
#: buzz/widgets/transcriber/file_transcriber_widget.py:84
msgid "Run"
msgstr "開始執行"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:101
msgid "Model:"
msgstr "模型:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:105
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
#: buzz/widgets/transcriber/transcription_options_group_box.py:123
msgid "Api Key:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:116
#: buzz/widgets/transcriber/transcription_options_group_box.py:124
msgid "Task:"
msgstr "任務:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:117
#: buzz/widgets/transcriber/transcription_options_group_box.py:125
#: buzz/widgets/transcriber/transcription_options_group_box.py:126
msgid "Language:"
msgstr "語言:"
@ -602,13 +628,13 @@ msgid "End"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:278
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:43
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:44
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:32
msgid "Text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:279
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:49
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:50
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:33
#: buzz/widgets/transcription_viewer/export_transcription_menu.py:53
#, fuzzy
@ -619,7 +645,7 @@ msgstr "新錄製"
msgid "View"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:56
#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:57
msgid "Timestamps"
msgstr ""
@ -627,107 +653,107 @@ msgstr ""
msgid "Export"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:285
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286
msgid "Translate"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:175
msgid "Resize"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:308
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:309
msgid "Identify Speakers"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:320
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:321
msgid "Find"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:325
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:326
msgid "Show/Hide Search Bar (Ctrl+F)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:424
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:425
msgid "Find:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:430
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:431
msgid "Enter text to find..."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:443
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:444
msgid "Previous match (Shift+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:452
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:453
msgid "Next match (Ctrl+Enter)"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:461
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:462
msgid "Clear"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:489
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:490
msgid "Playback Controls:"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:494
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:495
msgid "Loop Segment"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:497
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:498
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:504
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:505
msgid "Follow Audio"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:507
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:508
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:556
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:557
msgid "Scroll to Current"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:559
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:560
msgid "Scroll to the currently spoken text"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:893
msgid "1 of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
msgid "1 of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:896
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:901
msgid "No matches found"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:974
msgid " of 100+ matches"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:977
msgid " of "
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1372
msgid "API Key Required"
msgstr ""
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1373
msgid "Please enter OpenAI API Key in preferences"
msgstr ""
@ -889,12 +915,12 @@ msgid "Unable to save OpenAI API key to keyring"
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:57
#: buzz/transcriber/recording_transcriber.py:397
#: buzz/transcriber/recording_transcriber.py:417
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py:60
#: buzz/transcriber/recording_transcriber.py:401
#: buzz/transcriber/recording_transcriber.py:421
msgid ""
"Whisper server failed to start due to insufficient memory. Please try again "
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
@ -1267,15 +1293,15 @@ msgstr ""
msgid "Cantonese"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610
#: buzz/transcriber/recording_transcriber.py:244 buzz/model_loader.py:684
msgid "A connection error occurred"
msgstr ""
#: buzz/transcriber/recording_transcriber.py:333
#: buzz/transcriber/recording_transcriber.py:353
msgid "Starting Whisper.cpp..."
msgstr ""
#: buzz/transcriber/recording_transcriber.py:388
#: buzz/transcriber/recording_transcriber.py:408
#, fuzzy
msgid "Starting transcription..."
msgstr "取消錄製"

View file

@ -131,6 +131,80 @@ HUGGING_FACE_MODEL_ALLOW_PATTERNS = [
"vocab.json",
]
# MMS models use different patterns - adapters are downloaded on-demand by transformers
MMS_MODEL_ALLOW_PATTERNS = [
"model.safetensors",
"pytorch_model.bin",
"config.json",
"preprocessor_config.json",
"tokenizer_config.json",
"vocab.json",
"special_tokens_map.json",
"added_tokens.json",
]
# ISO 639-1 to ISO 639-3 language code mapping for MMS models
ISO_639_1_TO_3 = {
"en": "eng", "fr": "fra", "de": "deu", "es": "spa", "it": "ita",
"pt": "por", "ru": "rus", "ja": "jpn", "ko": "kor", "zh": "cmn",
"ar": "ara", "hi": "hin", "nl": "nld", "pl": "pol", "sv": "swe",
"tr": "tur", "uk": "ukr", "vi": "vie", "cs": "ces", "da": "dan",
"fi": "fin", "el": "ell", "he": "heb", "hu": "hun", "id": "ind",
"ms": "zsm", "no": "nob", "ro": "ron", "sk": "slk", "th": "tha",
"bg": "bul", "ca": "cat", "hr": "hrv", "lt": "lit", "lv": "lav",
"sl": "slv", "et": "est", "sr": "srp", "tl": "tgl", "bn": "ben",
"ta": "tam", "te": "tel", "mr": "mar", "gu": "guj", "kn": "kan",
"ml": "mal", "pa": "pan", "ur": "urd", "fa": "pes", "sw": "swh",
"af": "afr", "az": "azj", "be": "bel", "bs": "bos", "cy": "cym",
"eo": "epo", "eu": "eus", "ga": "gle", "gl": "glg", "hy": "hye",
"is": "isl", "ka": "kat", "kk": "kaz", "km": "khm", "lo": "lao",
"mk": "mkd", "mn": "khk", "my": "mya", "ne": "npi", "si": "sin",
"sq": "sqi", "uz": "uzn", "zu": "zul", "am": "amh", "jw": "jav",
"la": "lat", "so": "som", "su": "sun", "tt": "tat", "yo": "yor",
}
def map_language_to_mms(language_code: str) -> str:
"""Convert ISO 639-1 code to ISO 639-3 code for MMS models.
If the code is already 3 letters, returns it as-is.
If the code is not found in the mapping, returns as-is.
"""
if not language_code:
return "eng" # Default to English for MMS
if len(language_code) == 3:
return language_code # Already ISO 639-3
return ISO_639_1_TO_3.get(language_code, language_code)
def is_mms_model(model_id: str) -> bool:
"""Detect if a HuggingFace model is an MMS (Massively Multilingual Speech) model.
Detection criteria:
1. Model ID contains "mms-" (e.g., facebook/mms-1b-all)
2. Model config has model_type == "wav2vec2" with adapter architecture
"""
if not model_id:
return False
# Fast check: model ID pattern
if "mms-" in model_id.lower():
return True
# For cached/downloaded models, check config.json
try:
import json
config_path = huggingface_hub.hf_hub_download(
model_id, "config.json", local_files_only=True, cache_dir=model_root_dir
)
with open(config_path) as f:
config = json.load(f)
# MMS models have model_type "wav2vec2" and use adapter architecture
return (config.get("model_type") == "wav2vec2"
and config.get("adapter_attn_dim") is not None)
except Exception:
return False
@dataclass()
class TranscriptionModel:

View file

@ -70,6 +70,7 @@ class Settings:
AUDIO_PLAYBACK_RATE = "audio/playback-rate"
FORCE_CPU = "force-cpu"
REDUCE_GPU_MEMORY = "reduce-gpu-memory"
def get_user_identifier(self) -> str:
user_id = self.value(self.Key.USER_IDENTIFIER, "")

View file

@ -82,9 +82,6 @@ def _get_portal_secret() -> bytes | None:
break
if secret_data:
logging.debug(
"Successfully retrieved portal secret (%d bytes)", len(secret_data)
)
return secret_data
return None

View file

@ -21,10 +21,10 @@ from PyQt6.QtCore import QObject, pyqtSignal
from buzz import whisper_audio
from buzz.locale import _
from buzz.assets import APP_BASE_DIR
from buzz.model_loader import ModelType
from buzz.model_loader import ModelType, map_language_to_mms
from buzz.settings.settings import Settings
from buzz.transcriber.transcriber import TranscriptionOptions, Task
from buzz.transformers_whisper import TransformersWhisper
from buzz.transformers_whisper import TransformersTranscriber
from buzz.settings.recording_transcriber_mode import RecordingTranscriberMode
import whisper
@ -105,10 +105,18 @@ class RecordingTranscriber(QObject):
if force_cpu != "false":
device = "cpu"
# Check if user wants reduced GPU memory usage (int8 quantization)
reduce_gpu_memory = os.getenv("BUZZ_REDUCE_GPU_MEMORY", "false") != "false"
compute_type = "default"
if reduce_gpu_memory:
compute_type = "int8" if device == "cpu" else "int8_float16"
logging.debug(f"Using {compute_type} compute type for reduced memory usage")
model = faster_whisper.WhisperModel(
model_size_or_path=model_path,
download_root=model_root_dir,
device=device,
compute_type=compute_type,
cpu_threads=(os.cpu_count() or 8)//2,
)
@ -132,7 +140,7 @@ class RecordingTranscriber(QObject):
logging.debug("Will use whisper API on %s, %s",
custom_openai_base_url, self.whisper_api_model)
else: # ModelType.HUGGING_FACE
model = TransformersWhisper(model_path)
model = TransformersTranscriber(model_path)
initial_prompt = self.transcription_options.initial_prompt
@ -211,13 +219,25 @@ class RecordingTranscriber(QObject):
self.transcription_options.model.model_type
== ModelType.HUGGING_FACE
):
assert isinstance(model, TransformersWhisper)
assert isinstance(model, TransformersTranscriber)
# Handle MMS-specific language and task
if model.is_mms_model:
language = map_language_to_mms(
self.transcription_options.language or "eng"
)
effective_task = Task.TRANSCRIBE.value
else:
language = (
self.transcription_options.language
if self.transcription_options.language is not None
else "en"
)
effective_task = self.transcription_options.task.value
result = model.transcribe(
audio=samples,
language=self.transcription_options.language
if self.transcription_options.language is not None
else "en",
task=self.transcription_options.task.value,
language=language,
task=effective_task,
)
else: # OPEN_AI_WHISPER_API, also used for WHISPER_CPP
if self.openai_client is None:

View file

@ -18,8 +18,8 @@ from PyQt6.QtCore import QObject
from buzz import whisper_audio
from buzz.conn import pipe_stderr
from buzz.model_loader import ModelType, WhisperModelSize
from buzz.transformers_whisper import TransformersWhisper
from buzz.model_loader import ModelType, WhisperModelSize, map_language_to_mms
from buzz.transformers_whisper import TransformersTranscriber
from buzz.transcriber.file_transcriber import FileTranscriber
from buzz.transcriber.transcriber import FileTranscriptionTask, Segment, Task
from buzz.transcriber.whisper_cpp import WhisperCpp
@ -123,6 +123,10 @@ class WhisperFileTranscriber(FileTranscriber):
def transcribe_whisper(
cls, stderr_conn: Connection, task: FileTranscriptionTask
) -> None:
# Preload CUDA libraries in the subprocess - must be done before importing torch
# This is needed because multiprocessing creates a fresh process without the main process's preloaded libraries
from buzz import cuda_setup # noqa: F401
# Patch subprocess on Windows to prevent console window flash
# This is needed because multiprocessing spawns a new process without the main process patches
if sys.platform == "win32":
@ -182,17 +186,29 @@ class WhisperFileTranscriber(FileTranscriber):
@classmethod
def transcribe_hugging_face(cls, task: FileTranscriptionTask) -> List[Segment]:
model = TransformersWhisper(task.model_path)
language = (
task.transcription_options.language
if task.transcription_options.language is not None
else "en"
)
model = TransformersTranscriber(task.model_path)
# Handle language - MMS uses ISO 639-3 codes, Whisper uses ISO 639-1
if model.is_mms_model:
language = map_language_to_mms(task.transcription_options.language or "eng")
# MMS only supports transcription, ignore translation task
effective_task = Task.TRANSCRIBE.value
# MMS doesn't support word-level timestamps
word_timestamps = False
else:
language = (
task.transcription_options.language
if task.transcription_options.language is not None
else "en"
)
effective_task = task.transcription_options.task.value
word_timestamps = task.transcription_options.word_level_timings
result = model.transcribe(
audio=task.file_path,
language=language,
task=task.transcription_options.task.value,
word_timestamps=task.transcription_options.word_level_timings,
task=effective_task,
word_timestamps=word_timestamps,
)
return [
Segment(
@ -228,10 +244,18 @@ class WhisperFileTranscriber(FileTranscriber):
if force_cpu != "false":
device = "cpu"
# Check if user wants reduced GPU memory usage (int8 quantization)
reduce_gpu_memory = os.getenv("BUZZ_REDUCE_GPU_MEMORY", "false") != "false"
compute_type = "default"
if reduce_gpu_memory:
compute_type = "int8" if device == "cpu" else "int8_float16"
logging.debug(f"Using {compute_type} compute type for reduced memory usage")
model = faster_whisper.WhisperModel(
model_size_or_path=model_size_or_path,
download_root=model_root_dir,
device=device,
compute_type=compute_type,
cpu_threads=(os.cpu_count() or 8)//2,
)

View file

@ -1,14 +1,28 @@
import os
import sys
import logging
import platform
import numpy as np
import torch
import requests
from typing import Optional, Union
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from typing import Union
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline, BitsAndBytesConfig
from transformers.pipelines import AutomaticSpeechRecognitionPipeline
from transformers.pipelines.audio_utils import ffmpeg_read
from transformers.pipelines.automatic_speech_recognition import is_torchaudio_available
from buzz.model_loader import is_mms_model, map_language_to_mms
def is_intel_mac() -> bool:
"""Check if running on Intel Mac (x86_64)."""
return sys.platform == 'darwin' and platform.machine() == 'x86_64'
def is_peft_model(model_id: str) -> bool:
"""Check if model is a PEFT model based on model ID containing '-peft'."""
return "-peft" in model_id.lower()
class PipelineWithProgress(AutomaticSpeechRecognitionPipeline): # pragma: no cover
# Copy of transformers `AutomaticSpeechRecognitionPipeline.chunk_iter` method with custom progress output
@ -162,11 +176,23 @@ class PipelineWithProgress(AutomaticSpeechRecognitionPipeline): # pragma: no co
yield {"is_last": True, **processed, **extra}
class TransformersWhisper:
def __init__(
self, model_id: str
):
class TransformersTranscriber:
"""Unified transcriber for HuggingFace models (Whisper and MMS)."""
def __init__(self, model_id: str):
self.model_id = model_id
self._is_mms = is_mms_model(model_id)
self._is_peft = is_peft_model(model_id)
@property
def is_mms_model(self) -> bool:
"""Returns True if this is an MMS model."""
return self._is_mms
@property
def is_peft_model(self) -> bool:
"""Returns True if this is a PEFT model."""
return self._is_peft
def transcribe(
self,
@ -175,39 +201,85 @@ class TransformersWhisper:
task: str,
word_timestamps: bool = False,
):
"""Transcribe audio using either Whisper or MMS model."""
if self._is_mms:
return self._transcribe_mms(audio, language)
else:
return self._transcribe_whisper(audio, language, task, word_timestamps)
def _transcribe_whisper(
self,
audio: Union[str, np.ndarray],
language: str,
task: str,
word_timestamps: bool = False,
):
"""Transcribe using Whisper model."""
force_cpu = os.getenv("BUZZ_FORCE_CPU", "false")
use_cuda = torch.cuda.is_available() and force_cpu == "false"
device = "cuda" if use_cuda else "cpu"
torch_dtype = torch.float16 if use_cuda else torch.float32
use_safetensors = True
if os.path.exists(self.model_id):
safetensors_files = [f for f in os.listdir(self.model_id) if f.endswith(".safetensors")]
use_safetensors = len(safetensors_files) > 0
# Check if this is a PEFT model
if is_peft_model(self.model_id):
model, processor, use_8bit = self._load_peft_model(device, torch_dtype)
else:
use_safetensors = True
if os.path.exists(self.model_id):
safetensors_files = [f for f in os.listdir(self.model_id) if f.endswith(".safetensors")]
use_safetensors = len(safetensors_files) > 0
model = AutoModelForSpeechSeq2Seq.from_pretrained(
self.model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=use_safetensors
)
# Check if user wants reduced GPU memory usage (8-bit quantization)
# Skip on Intel Macs as bitsandbytes is not available there
reduce_gpu_memory = os.getenv("BUZZ_REDUCE_GPU_MEMORY", "false") != "false"
use_8bit = False
if device == "cuda" and reduce_gpu_memory and not is_intel_mac():
try:
import bitsandbytes # noqa: F401
use_8bit = True
print("Using 8-bit quantization for reduced GPU memory usage")
except ImportError:
print("bitsandbytes not available, using standard precision")
model.generation_config.language = language
model.to(device)
if use_8bit:
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForSpeechSeq2Seq.from_pretrained(
self.model_id,
quantization_config=quantization_config,
device_map="auto",
use_safetensors=use_safetensors
)
else:
model = AutoModelForSpeechSeq2Seq.from_pretrained(
self.model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=use_safetensors
)
model.to(device)
processor = AutoProcessor.from_pretrained(self.model_id)
model.generation_config.language = language
pipe = pipeline(
"automatic-speech-recognition",
pipeline_class=PipelineWithProgress,
generate_kwargs={"language": language, "task": task},
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
processor = AutoProcessor.from_pretrained(self.model_id)
pipeline_kwargs = {
"task": "automatic-speech-recognition",
"pipeline_class": PipelineWithProgress,
"generate_kwargs": {
"language": language,
"task": task,
"no_repeat_ngram_size": 3,
"repetition_penalty": 1.2,
},
"model": model,
"tokenizer": processor.tokenizer,
"feature_extractor": processor.feature_extractor,
# pipeline has built in chunking, works faster, but we loose progress output
# needed for word level timestamps, otherwise there is huge RAM usage on longer audios
chunk_length_s=30 if word_timestamps else None,
torch_dtype=torch_dtype,
device=device,
ignore_warning=True # Ignore warning about chunk_length_s being experimental for seq2seq models
)
"chunk_length_s": 30 if word_timestamps else None,
"torch_dtype": torch_dtype,
"ignore_warning": True, # Ignore warning about chunk_length_s being experimental for seq2seq models
}
if not use_8bit:
pipeline_kwargs["device"] = device
pipe = pipeline(**pipeline_kwargs)
transcript = pipe(
audio,
@ -238,3 +310,207 @@ class TransformersWhisper:
"segments": segments,
}
def _load_peft_model(self, device: str, torch_dtype):
"""Load a PEFT (Parameter-Efficient Fine-Tuning) model.
PEFT models require loading the base model first, then applying the adapter.
The base model path is extracted from the PEFT config.
Returns:
Tuple of (model, processor, use_8bit)
"""
from peft import PeftModel, PeftConfig
from transformers import WhisperForConditionalGeneration, WhisperFeatureExtractor, WhisperTokenizer
print(f"Loading PEFT model: {self.model_id}")
# Get the PEFT model ID (handle both local paths and repo IDs)
peft_model_id = self._get_peft_repo_id()
# Load PEFT config to get base model path
peft_config = PeftConfig.from_pretrained(peft_model_id)
base_model_path = peft_config.base_model_name_or_path
print(f"PEFT base model: {base_model_path}")
# Load the base Whisper model
# Use 8-bit quantization on CUDA if user enabled "Reduce GPU RAM" and bitsandbytes is available
# Skip on Intel Macs as bitsandbytes is not available there
reduce_gpu_memory = os.getenv("BUZZ_REDUCE_GPU_MEMORY", "false") != "false"
use_8bit = False
if device == "cuda" and reduce_gpu_memory and not is_intel_mac():
try:
import bitsandbytes # noqa: F401
use_8bit = True
print("Using 8-bit quantization for reduced GPU memory usage")
except ImportError:
print("bitsandbytes not available, using standard precision for PEFT model")
if use_8bit:
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = WhisperForConditionalGeneration.from_pretrained(
base_model_path,
quantization_config=quantization_config,
device_map="auto"
)
else:
model = WhisperForConditionalGeneration.from_pretrained(
base_model_path,
torch_dtype=torch_dtype,
low_cpu_mem_usage=True
)
model.to(device)
# Apply the PEFT adapter
model = PeftModel.from_pretrained(model, peft_model_id)
model.config.use_cache = True
# Load feature extractor and tokenizer from base model
feature_extractor = WhisperFeatureExtractor.from_pretrained(base_model_path)
tokenizer = WhisperTokenizer.from_pretrained(base_model_path, task="transcribe")
# Create a simple processor-like object that the pipeline expects
class PeftProcessor:
def __init__(self, feature_extractor, tokenizer):
self.feature_extractor = feature_extractor
self.tokenizer = tokenizer
processor = PeftProcessor(feature_extractor, tokenizer)
return model, processor, use_8bit
def _get_peft_repo_id(self) -> str:
"""Extract HuggingFace repo ID from local cache path for PEFT models."""
model_id = self.model_id
# If it's already a repo ID (contains / but not a file path), return as-is
if "/" in model_id and not os.path.exists(model_id):
return model_id
# Extract repo ID from cache path
if "models--" in model_id:
parts = model_id.split("models--")
if len(parts) > 1:
repo_part = parts[1].split(os.sep + "snapshots")[0]
repo_id = repo_part.replace("--", "/", 1)
return repo_id
# Fallback: return as-is
return model_id
def _get_mms_repo_id(self) -> str:
"""Extract HuggingFace repo ID from local cache path or return as-is if already a repo ID."""
model_id = self.model_id
# If it's already a repo ID (contains / but not a file path), return as-is
if "/" in model_id and not os.path.exists(model_id):
return model_id
# Extract repo ID from cache path like:
# Linux: /home/user/.cache/Buzz/models/models--facebook--mms-1b-all/snapshots/xxx
# Windows: C:\Users\user\.cache\Buzz\models\models--facebook--mms-1b-all\snapshots\xxx
if "models--" in model_id:
# Extract the part after "models--" and before "/snapshots" or "\snapshots"
parts = model_id.split("models--")
if len(parts) > 1:
# Split on os.sep to handle both Windows and Unix paths
repo_part = parts[1].split(os.sep + "snapshots")[0]
# Convert facebook--mms-1b-all to facebook/mms-1b-all
repo_id = repo_part.replace("--", "/", 1)
return repo_id
# Fallback: return as-is
return model_id
def _transcribe_mms(
self,
audio: Union[str, np.ndarray],
language: str,
):
"""Transcribe using MMS (Massively Multilingual Speech) model."""
from transformers import Wav2Vec2ForCTC, AutoProcessor as MMSAutoProcessor
from transformers.pipelines.audio_utils import ffmpeg_read as mms_ffmpeg_read
force_cpu = os.getenv("BUZZ_FORCE_CPU", "false")
use_cuda = torch.cuda.is_available() and force_cpu == "false"
device = "cuda" if use_cuda else "cpu"
# Map language code to ISO 639-3 for MMS
mms_language = map_language_to_mms(language)
print(f"MMS transcription with language: {mms_language} (original: {language})")
sys.stderr.write("0%\n")
# Use repo ID for MMS to allow adapter downloads
# Local paths don't work for adapter downloads
repo_id = self._get_mms_repo_id()
print(f"MMS using repo ID: {repo_id} (from model_id: {self.model_id})")
# Load processor and model with target language
# This will download the language adapter if not cached
processor = MMSAutoProcessor.from_pretrained(
repo_id,
target_lang=mms_language
)
model = Wav2Vec2ForCTC.from_pretrained(
repo_id,
target_lang=mms_language,
ignore_mismatched_sizes=True
)
model.to(device)
sys.stderr.write("25%\n")
# Load and process audio
if isinstance(audio, str):
with open(audio, "rb") as f:
audio_data = f.read()
audio_array = mms_ffmpeg_read(audio_data, processor.feature_extractor.sampling_rate)
else:
audio_array = audio
# Ensure audio is the right sample rate
sampling_rate = processor.feature_extractor.sampling_rate
sys.stderr.write("50%\n")
# Process audio in chunks for progress reporting
inputs = processor(
audio_array,
sampling_rate=sampling_rate,
return_tensors="pt",
padding=True
)
inputs = {k: v.to(device) for k, v in inputs.items()}
sys.stderr.write("75%\n")
# Run inference
with torch.no_grad():
outputs = model(**inputs).logits
# Decode
ids = torch.argmax(outputs, dim=-1)[0]
transcription = processor.decode(ids)
sys.stderr.write("100%\n")
# Calculate approximate duration for segment
duration = len(audio_array) / sampling_rate if isinstance(audio_array, np.ndarray) else 0
# Return in same format as Whisper for consistency
# MMS doesn't provide word-level timestamps, so we return a single segment
return {
"text": transcription,
"segments": [{
"start": 0,
"end": duration,
"text": transcription.strip(),
"translation": ""
}] if transcription.strip() else []
}
# Alias for backward compatibility
TransformersWhisper = TransformersTranscriber

View file

@ -47,6 +47,13 @@ class Application(QApplication):
)
if force_cpu_enabled:
os.environ["BUZZ_FORCE_CPU"] = "true"
# Set BUZZ_REDUCE_GPU_MEMORY environment variable if Reduce GPU RAM setting is enabled
reduce_gpu_memory_enabled = self.settings.value(
key=Settings.Key.REDUCE_GPU_MEMORY, default_value=False
)
if reduce_gpu_memory_enabled:
os.environ["BUZZ_REDUCE_GPU_MEMORY"] = "true"
font_size = self.settings.value(
key=Settings.Key.FONT_SIZE, default_value=self.font().pointSize()

View file

@ -188,6 +188,20 @@ class GeneralPreferencesWidget(QWidget):
layout.addRow(_("Live recording mode"), self.recording_transcriber_mode)
self.reduce_gpu_memory_enabled = self.settings.value(
key=Settings.Key.REDUCE_GPU_MEMORY, default_value=False
)
self.reduce_gpu_memory_checkbox = QCheckBox(_("Use 8-bit quantization to reduce memory usage"))
self.reduce_gpu_memory_checkbox.setChecked(self.reduce_gpu_memory_enabled)
self.reduce_gpu_memory_checkbox.setObjectName("ReduceGPUMemoryCheckbox")
self.reduce_gpu_memory_checkbox.setToolTip(
_("Applies to Huggingface and Faster Whisper models. "
"Reduces GPU memory usage but may slightly decrease transcription quality.")
)
self.reduce_gpu_memory_checkbox.stateChanged.connect(self.on_reduce_gpu_memory_changed)
layout.addRow(_("Reduce GPU RAM"), self.reduce_gpu_memory_checkbox)
self.force_cpu_enabled = self.settings.value(
key=Settings.Key.FORCE_CPU, default_value=False
)
@ -295,12 +309,23 @@ class GeneralPreferencesWidget(QWidget):
import os
self.force_cpu_enabled = state == 2
self.settings.set_value(Settings.Key.FORCE_CPU, self.force_cpu_enabled)
if self.force_cpu_enabled:
os.environ["BUZZ_FORCE_CPU"] = "true"
else:
os.environ.pop("BUZZ_FORCE_CPU", None)
def on_reduce_gpu_memory_changed(self, state: int):
import os
self.reduce_gpu_memory_enabled = state == 2
self.settings.set_value(Settings.Key.REDUCE_GPU_MEMORY, self.reduce_gpu_memory_enabled)
if self.reduce_gpu_memory_enabled:
os.environ["BUZZ_REDUCE_GPU_MEMORY"] = "true"
else:
os.environ.pop("BUZZ_REDUCE_GPU_MEMORY", None)
class ValidateOpenAIApiKeyJob(QRunnable):
class Signals(QObject):
success = pyqtSignal()

View file

@ -64,7 +64,8 @@ class HuggingFaceSearchLineEdit(LineEdit):
def focusInEvent(self, event):
super().focusInEvent(event)
self.clear()
# Defer selectAll to run after mouse events are processed
QTimer.singleShot(0, self.selectAll)
def on_text_edited(self, text: str):
self.model_selected.emit(text)

View file

@ -0,0 +1,48 @@
from typing import Optional
from PyQt6.QtCore import pyqtSignal
from PyQt6.QtWidgets import QWidget, QSizePolicy
from buzz.locale import _
from buzz.widgets.line_edit import LineEdit
class MMSLanguageLineEdit(LineEdit):
"""Text input for MMS language codes (ISO 639-3).
MMS models support 1000+ languages using ISO 639-3 codes (3 letters).
Examples: eng (English), fra (French), deu (German), spa (Spanish)
"""
languageChanged = pyqtSignal(str)
def __init__(
self,
default_language: str = "eng",
parent: Optional[QWidget] = None
):
super().__init__(default_language, parent)
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
self.setPlaceholderText(_("e.g., eng, fra, deu"))
self.setToolTip(
_("Enter an ISO 639-3 language code (3 letters).\n"
"Examples: eng (English), fra (French), deu (German),\n"
"spa (Spanish), lav (Latvian)")
)
self.setMaxLength(10) # Allow some flexibility for edge cases
self.setMinimumWidth(100)
self.textChanged.connect(self._on_text_changed)
def _on_text_changed(self, text: str):
"""Emit language changed signal with cleaned text."""
cleaned = text.strip().lower()
self.languageChanged.emit(cleaned)
def language(self) -> str:
"""Get the current language code."""
return self.text().strip().lower()
def setLanguage(self, language: str):
"""Set the language code."""
self.setText(language.strip().lower() if language else "eng")

View file

@ -10,7 +10,7 @@ from PyQt6.QtWidgets import QGroupBox, QWidget, QFormLayout, QComboBox, QLabel,
from buzz.locale import _
from buzz.settings.settings import Settings
from buzz.widgets.icon import INFO_ICON_PATH
from buzz.model_loader import ModelType, WhisperModelSize, get_whisper_cpp_file_path
from buzz.model_loader import ModelType, WhisperModelSize, get_whisper_cpp_file_path, is_mms_model
from buzz.transcriber.transcriber import TranscriptionOptions, Task
from buzz.widgets.model_type_combo_box import ModelTypeComboBox
from buzz.widgets.openai_api_key_line_edit import OpenAIAPIKeyLineEdit
@ -20,6 +20,7 @@ from buzz.widgets.transcriber.hugging_face_search_line_edit import (
HuggingFaceSearchLineEdit,
)
from buzz.widgets.transcriber.languages_combo_box import LanguagesComboBox
from buzz.widgets.transcriber.mms_language_line_edit import MMSLanguageLineEdit
from buzz.widgets.transcriber.tasks_combo_box import TasksComboBox
@ -87,6 +88,13 @@ class TranscriptionOptionsGroupBox(QGroupBox):
)
self.languages_combo_box.languageChanged.connect(self.on_language_changed)
# MMS language input (text field for ISO 639-3 codes)
self.mms_language_line_edit = MMSLanguageLineEdit(
default_language="eng", parent=self
)
self.mms_language_line_edit.languageChanged.connect(self.on_mms_language_changed)
self.mms_language_line_edit.setVisible(False)
self.advanced_settings_button = AdvancedSettingsButton(self)
self.advanced_settings_button.clicked.connect(self.open_advanced_settings)
@ -115,6 +123,7 @@ class TranscriptionOptionsGroupBox(QGroupBox):
self.form_layout.addRow(_("Api Key:"), self.openai_access_token_edit)
self.form_layout.addRow(_("Task:"), self.tasks_combo_box)
self.form_layout.addRow(_("Language:"), self.languages_combo_box)
self.form_layout.addRow(_("Language:"), self.mms_language_line_edit)
self.reset_visible_rows()
@ -133,6 +142,14 @@ class TranscriptionOptionsGroupBox(QGroupBox):
self.transcription_options.language = language
self.transcription_options_changed.emit(self.transcription_options)
def on_mms_language_changed(self, language: str):
"""Handle MMS language code changes."""
if language == "":
language = "eng" # Default to English for MMS
self.transcription_options.language = language
self.transcription_options_changed.emit(self.transcription_options)
def on_task_changed(self, task: Task):
self.transcription_options.task = task
self.transcription_options_changed.emit(self.transcription_options)
@ -229,6 +246,9 @@ class TranscriptionOptionsGroupBox(QGroupBox):
self.transcription_options.model.model_type == ModelType.WHISPER_CPP
)
# Update language widget visibility (MMS vs Whisper)
self._update_language_widget_visibility()
def on_model_type_changed(self, model_type: ModelType):
self.transcription_options.model.model_type = model_type
if not model_type.supports_initial_prompt:
@ -254,3 +274,34 @@ class TranscriptionOptionsGroupBox(QGroupBox):
self.transcription_options_changed.emit(self.transcription_options)
self.settings.save_custom_model_id(self.transcription_options.model)
# Update language widget visibility based on whether this is an MMS model
self._update_language_widget_visibility()
def _update_language_widget_visibility(self):
"""Update language widget visibility based on whether the selected model is MMS."""
model_type = self.transcription_options.model.model_type
model_id = self.transcription_options.model.hugging_face_model_id
# Check if this is an MMS model
is_mms = (model_type == ModelType.HUGGING_FACE and is_mms_model(model_id))
# Show MMS language input for MMS models, show dropdown for others
self.form_layout.setRowVisible(self.mms_language_line_edit, is_mms)
self.form_layout.setRowVisible(self.languages_combo_box, not is_mms)
# Sync the language value when switching between MMS and non-MMS
if is_mms:
# When switching to MMS, use the MMS language input value
mms_lang = self.mms_language_line_edit.language()
if mms_lang:
self.transcription_options.language = mms_lang
self.transcription_options_changed.emit(self.transcription_options)
else:
# When switching from MMS to a regular model, use the dropdown's current value
# This prevents invalid MMS language codes (like "eng") being used with Whisper
current_index = self.languages_combo_box.currentIndex()
dropdown_lang = self.languages_combo_box.languages[current_index][0]
if self.transcription_options.language != dropdown_lang:
self.transcription_options.language = dropdown_lang if dropdown_lang else None
self.transcription_options_changed.emit(self.transcription_options)

View file

@ -34,6 +34,7 @@ class TranscriptionViewModeToolButton(QToolButton):
self.setIcon(VisibilityIcon(self))
self.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon)
self.setPopupMode(QToolButton.ToolButtonPopupMode.MenuButtonPopup)
self.setMinimumWidth(80)
translation.connect(self.on_translation_available)

View file

@ -267,6 +267,7 @@ class TranscriptionViewerWidget(QWidget):
export_tool_button.setToolButtonStyle(
Qt.ToolButtonStyle.ToolButtonTextBesideIcon
)
export_tool_button.setMinimumWidth(100)
export_transcription_menu = ExportTranscriptionMenu(
transcription,
@ -1124,6 +1125,7 @@ class TranscriptionViewerWidget(QWidget):
if self.view_mode == ViewMode.TIMESTAMPS:
self.text_display_box.hide()
self.table_widget.show()
self.media_splitter.show()
if self.current_media_player:
self.current_media_player.show()
# Show playback controls in timestamps mode
@ -1149,6 +1151,7 @@ class TranscriptionViewerWidget(QWidget):
self.text_display_box.setPlainText(combined_text.strip())
self.text_display_box.show()
self.table_widget.hide()
self.media_splitter.hide()
if self.current_media_player:
self.current_media_player.hide()
# Hide playback controls in text mode
@ -1164,6 +1167,7 @@ class TranscriptionViewerWidget(QWidget):
)
self.text_display_box.show()
self.table_widget.hide()
self.media_splitter.hide()
if self.current_media_player:
self.current_media_player.hide()
# Hide playback controls in translation mode
@ -1494,7 +1498,7 @@ class TranscriptionViewerWidget(QWidget):
if self.currently_selected_segment is None:
self.highlight_table_match(0)
if current_segment_index == 0 and segments[1]:
if current_segment_index == 0 and len(segments) > 1:
self.highlight_table_match(1)
self.highlight_table_match(current_segment_index)

View file

@ -37,6 +37,12 @@ Model size to use will depend on your hardware and use case. Smaller models will
When choosing among large models consider the following. "Large" is the first released older model, "Large-V2" is later updated model with better accuracy, for some languages considered the most robust and stable. "Large-V3" is the latest model with the best accuracy in many cases, but some times can hallucinate or invent words that were never in the audio. "Turbo" model tries to get a good balance between speed and accuracy. The only sure way to know what model best suits your needs is to test them all in your language.
In addition to choosing an appropriate model size you also can choose whisper type.
- **Whisper** is initial OpenAI implementation, it is accurate but slow and requires a lot of RAM.
- Faster **Whisper** is an optimized implementation, it is orders of magnitude faster than regular Whisper and requires less RAM. Use this option if you have an Nvidia GPU with at least 6GB of VRAM.
- **Whisper.cpp** is optimized C++ implementation, it quite fast and efficient and will use any brand of GPU. Whisper.cpp is capable of running real time transcription even on a modern laptop with integrated GPU. It can also run on CPU only. Use this option if you do not have Nvidia GPU.
- **HuggingFace** option is a `Transformers` implementation and is good in that it supports wide range of custom models that may be optimized for a particular language. This option also supports [MMS](https://ai.meta.com/blog/multilingual-model-speech-recognition/) family of models from Meta AI that support over 1000 of worlds languages as well as [PEFT](https://github.com/huggingface/peft) adjustments to Whisper models.
### 5. How to get GPU acceleration for faster transcription?
On Linux GPU acceleration is supported out of the box on Nvidia GPUs. If you still get any issues install [CUDA 12](https://developer.nvidia.com/cuda-downloads), [cuBLASS](https://developer.nvidia.com/cublas) and [cuDNN](https://developer.nvidia.com/cudnn).

View file

@ -4,26 +4,17 @@ sidebar_position: 2
---
To install Buzz, download the [latest version](https://github.com/chidiwilliams/buzz/releases/latest) for your operating
system. Buzz is available on **Mac** (Intel), **Windows**, and **Linux**. (For Apple Silicon, please see
the [App Store version](https://apps.apple.com/us/app/buzz-captions/id6446018936?mt=12&itsct=apps_box_badge&itscg=30200).)
system. Buzz is available on **Mac** (Intel), **Windows**, and **Linux**.
## macOS (Intel, macOS 11.7 and later)
### macOS
Install via [brew](https://brew.sh/):
Download the `.dmg` from the [SourceForge](https://sourceforge.net/projects/buzz-captions/files/).
```shell
brew install --cask buzz
```
### Windows
Alternatively, download and run the `Buzz-x.y.z.dmg` file.
Get the installation files from the [SourceForge](https://sourceforge.net/projects/buzz-captions/files/).
For Mac Silicon (and for a better experience on Mac Intel),
download [Buzz Captions](https://apps.apple.com/us/app/buzz-captions/id6446018936?mt=12&amp;itsct=apps_box_badge&amp;itscg=30200)
on the App Store.
## Windows (Windows 10 and later)
Download and run the `Buzz-x.y.z.exe` file.
App is not signed, you will get a warning when you install it. Select `More info` -> `Run anyway`.
## Linux
@ -49,8 +40,6 @@ Alternatively, on Ubuntu 20.04 and later, install the dependencies:
sudo apt-get install libportaudio2
```
Then, download and extract the `Buzz-x.y.z-unix.tar.gz` file
## PyPI
```shell

View file

@ -109,6 +109,8 @@ Defaults to [user_cache_dir](https://pypi.org/project/platformdirs/).
**BUZZ_FORCE_CPU** - Will force Buzz to use CPU and not GPU, useful for setups with older GPU if that is slower than GPU or GPU has issues. Example usage `BUZZ_FORCE_CPU=true`. Available since `1.2.1`
**BUZZ_REDUCE_GPU_MEMORY** - Will use 8bit quantization for Huggingface adn Faster Whisper transcriptions to reduce required GPU memory. Example usage `BUZZ_REDUCE_GPU_MEMORY=true`. Available since `1.4.0`
**BUZZ_MERGE_REGROUP_RULE** - Custom regroup merge rule to use when combining transcripts with word-level timings. More information on available options [in stable-ts repo](https://github.com/jianfch/stable-ts?tab=readme-ov-file#regrouping-methods). Available since `1.3.0`
**BUZZ_DISABLE_TELEMETRY** - Buzz collects basic OS name and architecture usage statistics to better focus development efforts. This variable lets disable collection of these statistics. Example usage `BUZZ_DISABLE_TELEMETRY=true`. Available since `1.3.0`

View file

@ -25,6 +25,10 @@ dependencies = [
"openai-whisper==20250625",
"transformers>=4.53,<5",
"accelerate>=1.12.0,<2",
"peft>=0.14.0,<1",
# Overriden in uv.tool section below to ensure CUDA 12.9 compatibility
# Skip on Intel Macs (x86_64), use 0.49.0 on ARM Macs, 0.45.0+ elsewhere
"bitsandbytes>=0.45.0; sys_platform != 'darwin' or platform_machine != 'x86_64'",
"polib>=1.2.0,<2",
"srt-equalizer>=0.1.10,<0.2",
# For Intel macOS (x86_64) - use older versions that support Intel
@ -79,6 +83,9 @@ dependencies = [
"demucs",
"certifi==2025.11.12",
"torchcodec>=0.9.0; sys_platform != 'darwin' or platform_machine != 'x86_64'",
"torch>=2.2.2",
"torchaudio>=2.2.2",
"datasets>=4.4.1",
]
repository = "https://github.com/chidiwilliams/buzz"
documentation = "https://chidiwilliams.github.io/buzz/docs"
@ -115,6 +122,14 @@ default-groups = [
"build",
]
# Should be removed after nemo-toolkit update to 2.6.0
# Forcing a CUDA 12.9 compatable bitsandbytes version
# ARM Macs use 0.49.0, others use 0.47.0 (Intel Macs skip entirely via marker)
override-dependencies = [
"bitsandbytes==0.49.0; sys_platform == 'darwin' and platform_machine == 'arm64'",
"bitsandbytes==0.47.0; sys_platform != 'darwin'",
]
[tool.uv.sources]
demucs = { path = "demucs_repo", editable = true }
torch = [

View file

@ -64,6 +64,25 @@
<content_rating type="oars-1.1"/>
<releases>
<release version="1.4.0" date="2025-12-20">
<url type="details">https://github.com/chidiwilliams/buzz/releases/tag/v1.4.0</url>
<description>
<p>Adding speaker identification on transcriptions and video support for transcription viewer, improvements to transcription table and support for over 1000 of worlds languages via MMS models.</p>
<p>Release details:</p>
<ul>
<li>Speaker identification on finished transcripts</li>
<li>Support for video in transcription viewer</li>
<li>Ability to add notes and restart transcriptions in main table</li>
<li>Adding support for more than 1000 languages via MMS model family when transcribing with Huggingface transcription type</li>
<li>Adding support for PEFT models when transcribing with Huggingface transcription type</li>
<li>Adding support for 8bit quantization for Huggingface and faster Whisper transcriptions</li>
<li>Updated libraries and dependencies to support latest GPUs</li>
<li>Support for secrets portal for snap packages on Linux</li>
<li>Ability to specify model to use when transcribing with OpenAI API</li>
<li>Ability to access application logs from About screen</li>
</ul>
</description>
</release>
<release version="1.3.3" date="2025-11-09">
<url type="details">https://github.com/chidiwilliams/buzz/releases/tag/v1.3.3</url>
<description>

View file

@ -1,10 +1,19 @@
import multiprocessing
import os
import platform
import random
import string
from pathlib import Path
import pytest
# Set multiprocessing to use 'spawn' instead of 'fork' on Linux
# This is required because Qt creates threads early, and forking a multi-threaded
# process can lead to deadlocks. The main application sets this in buzz/buzz.py.
if platform.system() != "Windows":
try:
multiprocessing.set_start_method("spawn", force=True)
except RuntimeError:
pass # Already set
from PyQt6.QtSql import QSqlDatabase
from _pytest.fixtures import SubRequest

View file

@ -0,0 +1,46 @@
import os
from unittest.mock import patch
import pytest
from buzz.transformers_whisper import TransformersTranscriber
class TestGetMmsRepoId:
"""Tests for TransformersTranscriber._get_mms_repo_id method."""
def test_repo_id_returned_as_is(self):
"""Test that a HuggingFace repo ID is returned unchanged."""
transcriber = TransformersTranscriber("facebook/mms-1b-all")
with patch("os.path.exists", return_value=False):
assert transcriber._get_mms_repo_id() == "facebook/mms-1b-all"
def test_linux_cache_path(self):
"""Test extraction from Linux-style cache path."""
linux_path = "/home/user/.cache/Buzz/models/models--facebook--mms-1b-all/snapshots/abc123"
transcriber = TransformersTranscriber(linux_path)
with patch("os.path.exists", return_value=True), \
patch("buzz.transformers_whisper.os.sep", "/"):
assert transcriber._get_mms_repo_id() == "facebook/mms-1b-all"
def test_windows_cache_path(self):
"""Test extraction from Windows-style cache path."""
windows_path = r"C:\Users\user\.cache\Buzz\models\models--facebook--mms-1b-all\snapshots\abc123"
transcriber = TransformersTranscriber(windows_path)
with patch("os.path.exists", return_value=True), \
patch("buzz.transformers_whisper.os.sep", "\\"):
assert transcriber._get_mms_repo_id() == "facebook/mms-1b-all"
def test_fallback_returns_model_id(self):
"""Test that model_id is returned as fallback when pattern not matched."""
transcriber = TransformersTranscriber("some-local-model")
with patch("os.path.exists", return_value=True):
assert transcriber._get_mms_repo_id() == "some-local-model"
def test_nested_org_name(self):
"""Test extraction with different org/model names."""
linux_path = "/home/user/.cache/Buzz/models/models--openai--whisper-large-v3/snapshots/xyz"
transcriber = TransformersTranscriber(linux_path)
with patch("os.path.exists", return_value=True), \
patch("buzz.transformers_whisper.os.sep", "/"):
assert transcriber._get_mms_repo_id() == "openai/whisper-large-v3"

View file

@ -3,7 +3,6 @@ import logging
import os
import platform
import shutil
import sys
import tempfile
import time
from typing import List

View file

@ -1,17 +1,17 @@
import platform
import pytest
from buzz.transformers_whisper import TransformersWhisper
from buzz.transformers_whisper import TransformersTranscriber
from tests.audio import test_audio_path
class TestTransformersWhisper:
class TestTransformersTranscriber:
@pytest.mark.skipif(
platform.system() == "Darwin",
reason="Not supported on Darwin",
)
def test_should_transcribe(self):
model = TransformersWhisper("openai/whisper-tiny")
model = TransformersTranscriber("openai/whisper-tiny")
result = model.transcribe(
audio=test_audio_path, language="fr", task="transcribe"
)

235
uv.lock generated
View file

@ -10,6 +10,12 @@ resolution-markers = [
"platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'",
]
[manifest]
overrides = [
{ name = "bitsandbytes", marker = "sys_platform != 'darwin'", specifier = "==0.47.0" },
{ name = "bitsandbytes", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==0.49.0" },
]
[[package]]
name = "absl-py"
version = "2.3.1"
@ -31,8 +37,8 @@ dependencies = [
{ name = "pyyaml" },
{ name = "safetensors" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4a/8e/ac2a9566747a93f8be36ee08532eb0160558b07630a081a6056a9f89bf1d/accelerate-1.12.0.tar.gz", hash = "sha256:70988c352feb481887077d2ab845125024b2a137a5090d6d7a32b57d03a45df6", size = 398399, upload-time = "2025-11-21T11:27:46.973Z" }
wheels = [
@ -53,13 +59,13 @@ name = "aiohttp"
version = "3.13.2"
source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "aiohappyeyeballs", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "aiosignal", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "attrs", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "frozenlist", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "multidict", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "propcache", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "yarl", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "aiohappyeyeballs" },
{ name = "aiosignal" },
{ name = "attrs" },
{ name = "frozenlist" },
{ name = "multidict" },
{ name = "propcache" },
{ name = "yarl" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1c/ce/3b83ebba6b3207a7135e5fcaba49706f8a4b6008153b4e30540c982fae26/aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", size = 7837994, upload-time = "2025-10-28T20:59:39.937Z" }
wheels = [
@ -87,8 +93,8 @@ name = "aiosignal"
version = "1.4.0"
source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "frozenlist", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "frozenlist" },
{ name = "typing-extensions" },
]
sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" }
wheels = [
@ -224,15 +230,37 @@ wheels = [
[[package]]
name = "bitsandbytes"
version = "0.46.0"
version = "0.47.0"
source = { registry = "https://pypi.org/simple/" }
resolution-markers = [
"(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')",
"sys_platform != 'darwin' and sys_platform != 'linux'",
"platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'",
]
dependencies = [
{ name = "numpy", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "numpy", marker = "sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/72/27/ec6ee3408e09e01ab05db07af5a97dc76db7bc18824cf5f5dbc98e1e08a4/bitsandbytes-0.46.0-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:ef38883cfd26f36a0dfff1715f620f87cee3813431f33e10e9658205160cb89b", size = 67047276, upload-time = "2025-05-27T21:25:31.299Z" },
{ url = "https://files.pythonhosted.org/packages/f3/06/2ef5f6b28d8fa442c670b5acc1eb09dd57d4edb00b435b35529c3f09936c/bitsandbytes-0.46.0-py3-none-win_amd64.whl", hash = "sha256:121820a6df80ae3b7e361f7ef193279c3204c361a7e21eb43b5ffa7293403979", size = 66452401, upload-time = "2025-05-27T21:25:35.552Z" },
{ url = "https://files.pythonhosted.org/packages/aa/eb/477d6b5602f469c7305fd43eec71d890c39909f615c1d7138f6e7d226eff/bitsandbytes-0.47.0-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:2f805b76891a596025e9e13318b675d08481b9ee650d65e5d2f9d844084c6521", size = 30004641, upload-time = "2025-08-11T18:51:20.524Z" },
{ url = "https://files.pythonhosted.org/packages/9c/40/91f1a5a694f434bc13cba160045fdc4e867032e627b001bf411048fefd9c/bitsandbytes-0.47.0-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:68f3fffd494a47ed1fd7593bfc5dd2ac69b68260599b71b4c4b3a32f90f3b184", size = 61284639, upload-time = "2025-08-11T18:51:23.581Z" },
{ url = "https://files.pythonhosted.org/packages/18/a9/e07a227f1cd6562844cea2f05ee576b0991a9a91f45965c06034178ba0f6/bitsandbytes-0.47.0-py3-none-win_amd64.whl", hash = "sha256:4880a6d42ca9628b5a571c8cc3093dc3f5f52511e5a9e47d52d569807975531a", size = 60725121, upload-time = "2025-08-11T18:51:27.543Z" },
]
[[package]]
name = "bitsandbytes"
version = "0.49.0"
source = { registry = "https://pypi.org/simple/" }
resolution-markers = [
"platform_machine == 'arm64' and sys_platform == 'darwin'",
]
dependencies = [
{ name = "numpy", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "packaging", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/8e/96/2b825cb874477a26478df0ce8ce3550abe81af1c7bcbc47871f0619b120c/bitsandbytes-0.49.0-py3-none-macosx_14_0_arm64.whl", hash = "sha256:17d5b57e6d51b78bcfc07da0e93db061181b25bffabfafe101dd9b75c2710872", size = 129838, upload-time = "2025-12-11T20:50:39.645Z" },
]
[[package]]
@ -250,6 +278,8 @@ version = "1.4.0"
source = { editable = "." }
dependencies = [
{ name = "accelerate" },
{ name = "bitsandbytes", version = "0.47.0", source = { registry = "https://pypi.org/simple/" }, marker = "sys_platform != 'darwin'" },
{ name = "bitsandbytes", version = "0.49.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "certifi" },
{ name = "cmake" },
{ name = "coverage" },
@ -257,6 +287,7 @@ dependencies = [
{ name = "ctranslate2", version = "4.6.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' or sys_platform != 'darwin'" },
{ name = "darkdetect" },
{ name = "dataclasses-json" },
{ name = "datasets" },
{ name = "demucs" },
{ name = "diffq" },
{ name = "dora-search" },
@ -285,6 +316,7 @@ dependencies = [
{ name = "openai" },
{ name = "openai-whisper" },
{ name = "openunmix" },
{ name = "peft" },
{ name = "platformdirs" },
{ name = "polib" },
{ name = "posthog" },
@ -299,11 +331,11 @@ dependencies = [
{ name = "stable-ts" },
{ name = "submitit" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "torchcodec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "tqdm" },
@ -340,6 +372,7 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "accelerate", specifier = ">=1.12.0,<2" },
{ name = "bitsandbytes", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = ">=0.45.0" },
{ name = "certifi", specifier = "==2025.11.12" },
{ name = "cmake", specifier = ">=4.2.0,<5" },
{ name = "coverage", specifier = "==7.12.0" },
@ -348,6 +381,7 @@ requires-dist = [
{ name = "ctranslate2", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==4.3.1" },
{ name = "darkdetect", specifier = ">=0.8.0,<0.9" },
{ name = "dataclasses-json", specifier = ">=0.6.4,<0.7" },
{ name = "datasets", specifier = ">=4.4.1" },
{ name = "demucs", editable = "demucs_repo" },
{ name = "diffq", specifier = ">=0.2.4,<0.3" },
{ name = "dora-search", specifier = ">=0.1.12,<0.2" },
@ -376,6 +410,7 @@ requires-dist = [
{ name = "openai", specifier = ">=1.14.2,<2" },
{ name = "openai-whisper", specifier = "==20250625" },
{ name = "openunmix", specifier = ">=1.3.0,<2" },
{ name = "peft", specifier = ">=0.14.0,<1" },
{ name = "platformdirs", specifier = ">=4.2.1,<5" },
{ name = "polib", specifier = ">=1.2.0,<2" },
{ name = "posthog", specifier = ">=3.23.0,<4" },
@ -390,9 +425,13 @@ requires-dist = [
{ name = "stable-ts", specifier = ">=2.19.1,<3" },
{ name = "submitit", specifier = ">=1.5.2,<2" },
{ name = "torch", marker = "sys_platform != 'darwin'", specifier = "==2.8.0", index = "https://download.pytorch.org/whl/cu129" },
{ name = "torch", marker = "sys_platform != 'darwin'", specifier = ">=2.2.2", index = "https://download.pytorch.org/whl/cu129" },
{ name = "torch", marker = "sys_platform == 'darwin'", specifier = ">=2.2.2", index = "https://pypi.org/simple/" },
{ name = "torch", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==2.8.0", index = "https://pypi.org/simple/" },
{ name = "torch", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2", index = "https://pypi.org/simple/" },
{ name = "torchaudio", marker = "sys_platform != 'darwin'", specifier = "==2.8.0", index = "https://download.pytorch.org/whl/cu129" },
{ name = "torchaudio", marker = "sys_platform != 'darwin'", specifier = ">=2.2.2", index = "https://download.pytorch.org/whl/cu129" },
{ name = "torchaudio", marker = "sys_platform == 'darwin'", specifier = ">=2.2.2", index = "https://pypi.org/simple/" },
{ name = "torchaudio", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'", specifier = "==2.8.0", index = "https://pypi.org/simple/" },
{ name = "torchaudio", marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'", specifier = "==2.2.2", index = "https://pypi.org/simple/" },
{ name = "torchcodec", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'", specifier = ">=0.9.0" },
@ -789,20 +828,20 @@ name = "datasets"
version = "4.4.1"
source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "dill", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "filelock", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "fsspec", extra = ["http"], marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "httpx", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "huggingface-hub", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "multiprocess", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "pandas", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "pyarrow", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "requests", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "xxhash", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "dill" },
{ name = "filelock" },
{ name = "fsspec", extra = ["http"] },
{ name = "httpx" },
{ name = "huggingface-hub" },
{ name = "multiprocess" },
{ name = "numpy" },
{ name = "packaging" },
{ name = "pandas" },
{ name = "pyarrow" },
{ name = "pyyaml" },
{ name = "requests" },
{ name = "tqdm" },
{ name = "xxhash" },
]
sdist = { url = "https://files.pythonhosted.org/packages/93/bf/0dae295d6d1ba0b1a200a9dd216838464b5bbd05da01407cb1330b377445/datasets-4.4.1.tar.gz", hash = "sha256:80322699aa8c0bbbdb7caa87906da689c3c2e29523cff698775c67f28fdab1fc", size = 585341, upload-time = "2025-11-05T16:00:38.162Z" }
wheels = [
@ -830,12 +869,12 @@ dependencies = [
{ name = "openunmix" },
{ name = "pyyaml" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "tqdm" },
]
@ -879,8 +918,8 @@ dependencies = [
{ name = "cython" },
{ name = "numpy" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5a/fd/4c58807bf855c5929ffa6da55f26dd6b9ae462a4193f5e09cc49fbbfd451/diffq-0.2.4.tar.gz", hash = "sha256:049064861e974ebf00d0badab8b324c775037371419eda3150985b9d477b5bd2", size = 157139, upload-time = "2023-05-05T12:39:43.089Z" }
@ -926,8 +965,8 @@ dependencies = [
{ name = "retrying" },
{ name = "submitit" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "treetable" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d5/9d/9a13947db237375486c0690f4741dd2b7e1eee20e0ffcb55dbd1b21cc600/dora_search-0.1.12.tar.gz", hash = "sha256:2956fd2c4c7e4b9a4830e83f0d4cf961be45cfba1a2f0570281e91d15ac516fb", size = 87111, upload-time = "2023-05-23T14:36:24.743Z" }
@ -1098,7 +1137,7 @@ wheels = [
[package.optional-dependencies]
http = [
{ name = "aiohttp", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "aiohttp" },
]
[[package]]
@ -1559,8 +1598,8 @@ version = "0.2.7"
source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a1/19/c9e1596b5572c786b93428d0904280e964c930fae7e6c9368ed9e1b63922/julius-0.2.7.tar.gz", hash = "sha256:3c0f5f5306d7d6016fcc95196b274cae6f07e2c9596eed314e4e7641554fbb08", size = 59640, upload-time = "2022-09-19T16:13:34.2Z" }
@ -1688,8 +1727,8 @@ dependencies = [
{ name = "soundfile" },
{ name = "tabulate" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "tqdm" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2e/fd/32baf46d238f029a22b2c1762fc717ebdb85515fb48bafa395d3de5da0f5/lhotse-1.32.1.tar.gz", hash = "sha256:8b0e946d1bd2c695b09df831ea612913f1a1f103b1aea36a4b43a8778be0a3d5", size = 674412, upload-time = "2025-11-24T16:42:25.511Z" }
@ -1769,8 +1808,8 @@ dependencies = [
{ name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "pytorch-lightning", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "torchmetrics", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
@ -2075,7 +2114,7 @@ name = "multiprocess"
version = "0.70.18"
source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "dill", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "dill" },
]
sdist = { url = "https://files.pythonhosted.org/packages/72/fd/2ae3826f5be24c6ed87266bc4e59c46ea5b059a103f3d7e7eb76a52aeecb/multiprocess-0.70.18.tar.gz", hash = "sha256:f9597128e6b3e67b23956da07cf3d2e5cba79e2f4e0fba8d7903636663ec6d0d", size = 1798503, upload-time = "2025-04-17T03:11:27.742Z" }
wheels = [
@ -2166,8 +2205,8 @@ dependencies = [
{ name = "setuptools", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "tensorboard", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "text-unidecode", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "wget", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "wrapt", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
@ -2179,7 +2218,8 @@ wheels = [
[package.optional-dependencies]
asr = [
{ name = "bitsandbytes", marker = "platform_machine == 'x86_64' and sys_platform != 'darwin'" },
{ name = "bitsandbytes", version = "0.47.0", source = { registry = "https://pypi.org/simple/" }, marker = "sys_platform != 'darwin'" },
{ name = "bitsandbytes", version = "0.49.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "braceexpand", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "cloudpickle", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "ctc-segmentation", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
@ -2563,8 +2603,8 @@ dependencies = [
{ name = "numpy" },
{ name = "tiktoken" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "tqdm" },
{ name = "triton", marker = "(platform_machine == 'x86_64' and sys_platform == 'linux') or sys_platform == 'linux2'" },
]
@ -2577,12 +2617,12 @@ source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "numpy" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "tqdm" },
]
sdist = { url = "https://files.pythonhosted.org/packages/42/ef/4ad54e3ecb1e89f7f7bdb4c7b751e43754e892d3c32a8550e5d0882565df/openunmix-1.3.0.tar.gz", hash = "sha256:cc9245ce728700f5d0b72c67f01be4162777e617cdc47f9b035963afac180fc8", size = 45889, upload-time = "2024-04-16T11:10:47.121Z" }
@ -2679,17 +2719,18 @@ name = "peft"
version = "0.18.0"
source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "accelerate", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "huggingface-hub", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "psutil", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "safetensors", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "transformers", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "accelerate" },
{ name = "huggingface-hub" },
{ name = "numpy" },
{ name = "packaging" },
{ name = "psutil" },
{ name = "pyyaml" },
{ name = "safetensors" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "tqdm" },
{ name = "transformers" },
]
sdist = { url = "https://files.pythonhosted.org/packages/4b/0c/f2938db546ac7fc961ab5917cd50fcf5d0d70b406de93e3faccaa504e152/peft-0.18.0.tar.gz", hash = "sha256:c81c80b2056ab40c23d58ef25f74daab417ac653970718589a11a8af28218588", size = 634141, upload-time = "2025-11-13T11:13:06.603Z" }
wheels = [
@ -3324,8 +3365,8 @@ dependencies = [
{ name = "lightning-utilities", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "pyyaml", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "torchmetrics", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "tqdm", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "typing-extensions", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
@ -3864,12 +3905,12 @@ dependencies = [
{ name = "numpy" },
{ name = "openai-whisper" },
{ name = "torch", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
{ name = "torchaudio", version = "2.2.2", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "torchaudio", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torchaudio", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "tqdm" },
]
sdist = { url = "https://files.pythonhosted.org/packages/94/d9/d326f9dbbb7da6806aa8cfc080342e5f78dc33552f4339bdc8a6251d11a3/stable_ts-2.19.1.tar.gz", hash = "sha256:0ecaf1ed93e029839569618d2da9a57b883ad04db21f0680146e0650caaf4f52", size = 189132, upload-time = "2025-08-16T16:53:48.811Z" }
@ -4112,15 +4153,16 @@ version = "2.8.0"
source = { registry = "https://pypi.org/simple/" }
resolution-markers = [
"platform_machine == 'arm64' and sys_platform == 'darwin'",
"platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'",
]
dependencies = [
{ name = "filelock", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "fsspec", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "jinja2", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "networkx", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "setuptools", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "sympy", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "typing-extensions", marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "filelock", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "fsspec", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "jinja2", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "networkx", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "setuptools", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "sympy", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "typing-extensions", marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/be/66/5c9a321b325aaecb92d4d1855421e3a055abd77903b7dab6575ca07796db/torch-2.8.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:619c2869db3ada2c0105487ba21b5008defcc472d23f8b80ed91ac4a380283b0", size = 73630478, upload-time = "2025-08-06T14:53:57.144Z" },
@ -4134,13 +4176,12 @@ resolution-markers = [
"(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')",
"sys_platform != 'darwin' and sys_platform != 'linux'",
"platform_machine == 'aarch64' and platform_python_implementation == 'CPython' and sys_platform == 'linux'",
"platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'",
]
dependencies = [
{ name = "filelock", marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "fsspec", marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "jinja2", marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "networkx", marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "filelock", marker = "sys_platform != 'darwin'" },
{ name = "fsspec", marker = "sys_platform != 'darwin'" },
{ name = "jinja2", marker = "sys_platform != 'darwin'" },
{ name = "networkx", marker = "sys_platform != 'darwin'" },
{ name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
@ -4155,10 +4196,10 @@ dependencies = [
{ name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" },
{ name = "setuptools", marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "sympy", marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "setuptools", marker = "sys_platform != 'darwin'" },
{ name = "sympy", marker = "sys_platform != 'darwin'" },
{ name = "triton", marker = "sys_platform == 'linux'" },
{ name = "typing-extensions", marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "typing-extensions", marker = "sys_platform != 'darwin'" },
]
wheels = [
{ url = "https://download.pytorch.org/whl/cu129/torch-2.8.0%2Bcu129-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:692fe6e513b667f789a543fa9b1baba58e77a46d5c8629764ca0c00a56823e1f" },
@ -4200,9 +4241,10 @@ version = "2.8.0"
source = { registry = "https://pypi.org/simple/" }
resolution-markers = [
"platform_machine == 'arm64' and sys_platform == 'darwin'",
"platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'",
]
dependencies = [
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/ac/cc/c2e2a3eb6ee956f73c68541e439916f8146170ea9cc61e72adea5c995312/torchaudio-2.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ddef94bf181e6447cbb05f38beaca8f6c5bb8d2b9ddced1aa3452025b9fc70d3", size = 1856736, upload-time = "2025-08-06T14:58:36.3Z" },
@ -4215,10 +4257,9 @@ source = { registry = "https://download.pytorch.org/whl/cu129" }
resolution-markers = [
"(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux')",
"sys_platform != 'darwin' and sys_platform != 'linux'",
"platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin'",
]
dependencies = [
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64' and sys_platform == 'darwin') or (platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (platform_python_implementation != 'CPython' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
]
wheels = [
{ url = "https://download.pytorch.org/whl/cu129/torchaudio-2.8.0%2Bcu129-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:40df9011972519120f284f56e5e7d131d4250ea69653499028d1d30b353f932e" },
@ -4243,8 +4284,8 @@ dependencies = [
{ name = "lightning-utilities", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "numpy", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "packaging", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine == 'arm64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "(platform_machine != 'arm64' and platform_machine != 'x86_64') or sys_platform != 'darwin'" },
{ name = "torch", version = "2.8.0", source = { registry = "https://pypi.org/simple/" }, marker = "platform_machine != 'x86_64' and sys_platform == 'darwin'" },
{ name = "torch", version = "2.8.0+cu129", source = { registry = "https://download.pytorch.org/whl/cu129" }, marker = "sys_platform != 'darwin'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/85/2e/48a887a59ecc4a10ce9e8b35b3e3c5cef29d902c4eac143378526e7485cb/torchmetrics-1.8.2.tar.gz", hash = "sha256:cf64a901036bf107f17a524009eea7781c9c5315d130713aeca5747a686fe7a5", size = 580679, upload-time = "2025-09-03T14:00:54.077Z" }
wheels = [
@ -4578,9 +4619,9 @@ name = "yarl"
version = "1.22.0"
source = { registry = "https://pypi.org/simple/" }
dependencies = [
{ name = "idna", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "multidict", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "propcache", marker = "platform_machine != 'x86_64' or sys_platform != 'darwin'" },
{ name = "idna" },
{ name = "multidict" },
{ name = "propcache" },
]
sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" }
wheels = [