Initial commit: HotKeet + parakeet-cli

HotKeet: Push-to-Talk Diktier-App mit Parakeet-Transkription
- Konfiguration per Datei-/Ordner-Dialog
- Mikrofon-Auswahl persistent
- Tray, Einstellungen, Signaltöne

parakeet-cli: Transkriptions-CLI für HotKeet
- ONNX-basierte Spracherkennung
- WAV-Input, JSON-Output

Made-with: Cursor
This commit is contained in:
2026-03-06 19:40:32 +01:00
commit e7cc3fbb50
28 changed files with 8356 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
# Linker-Pfad für msvcrt.lib (Visual Studio 2022)
[target.x86_64-pc-windows-msvc]
rustflags = [
"-C",
"link-arg=/LIBPATH:C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\SDK\\ScopeCppSDK\\vc15\\VC\\lib",
]

1280
parakeet-cli/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

9
parakeet-cli/Cargo.toml Normal file
View File

@@ -0,0 +1,9 @@
[package]
name = "parakeet-cli"
version = "0.1.0"
edition = "2021"
description = "CLI for Parakeet v3 speech-to-text via transcribe-rs"
[dependencies]
transcribe-rs = { version = "0.2.3", features = ["parakeet"] }
serde_json = "1.0"

18
parakeet-cli/README.md Normal file
View File

@@ -0,0 +1,18 @@
# parakeet-cli
CLI für Parakeet v3 Speech-to-Text (transcribe-rs). Wird von mediSchnack als natives Offline-Modell genutzt.
## Build
```bash
cd mediSchnack/parakeet-cli
cargo build --release
```
**Hinweis:** Bei Rust < 1.88 muss `ort` auf eine kompatible Version gepinnt werden:
```bash
cargo update -p ort -p ort-sys --precise 2.0.0-rc.10
```
Die `parakeet-cli.exe` wird beim mediSchnack-Build automatisch nach `bin/` kopiert, sofern sie unter `parakeet-cli/target/release/` existiert.

9
parakeet-cli/build.cmd Normal file
View File

@@ -0,0 +1,9 @@
@echo off
REM Build-Skript: Setzt LIB-Pfad für msvcrt.lib (Visual Studio 2022)
set "LIB_PATH=C:\Program Files\Microsoft Visual Studio\2022\Community\SDK\ScopeCppSDK\vc15\VC\lib"
if defined LIB (
set "LIB=%LIB_PATH%;%LIB%"
) else (
set "LIB=%LIB_PATH%"
)
cargo build %*

8
parakeet-cli/build.ps1 Normal file
View File

@@ -0,0 +1,8 @@
# Build-Skript: Setzt LIB-Pfad für msvcrt.lib (Visual Studio 2022)
$libPath = "C:\Program Files\Microsoft Visual Studio\2022\Community\SDK\ScopeCppSDK\vc15\VC\lib"
if ($env:LIB) {
$env:LIB = "$libPath;$env:LIB"
} else {
$env:LIB = $libPath
}
cargo build @args

43
parakeet-cli/src/main.rs Normal file
View File

@@ -0,0 +1,43 @@
//! Parakeet CLI - Transcribes WAV audio using Parakeet v3 (transcribe-rs).
//! Usage: parakeet-cli <model_dir> <audio.wav>
//! Output: JSON {"text": "..."} on stdout, errors on stderr.
use std::path::PathBuf;
use transcribe_rs::{engines::parakeet::{ParakeetEngine, ParakeetModelParams}, TranscriptionEngine};
fn main() {
let args: Vec<String> = std::env::args().collect();
if args.len() < 3 {
eprintln!("Usage: parakeet-cli <model_dir> <audio.wav>");
std::process::exit(1);
}
let model_path = PathBuf::from(&args[1]);
let audio_path = PathBuf::from(&args[2]);
if !model_path.is_dir() {
eprintln!("Model directory does not exist: {:?}", model_path);
std::process::exit(1);
}
if !audio_path.is_file() {
eprintln!("Audio file does not exist: {:?}", audio_path);
std::process::exit(1);
}
let mut engine = ParakeetEngine::new();
if let Err(e) = engine.load_model_with_params(&model_path, ParakeetModelParams::int8()) {
eprintln!("Failed to load model: {}", e);
std::process::exit(1);
}
let result = match engine.transcribe_file(&audio_path, None) {
Ok(r) => r,
Err(e) => {
eprintln!("Transcription failed: {}", e);
std::process::exit(1);
}
};
let json = serde_json::json!({ "text": result.text });
println!("{}", json);
}