From 820753778a135db8a0970441959fda2ea8b4efe8 Mon Sep 17 00:00:00 2001
From: John Doe <johndoe@example.com>
Date: Thu, 4 Jun 2026 22:30:20 +0200
Subject: [PATCH 4/6] add download-local.sh for automated dependency setup

---
 download-local.sh | 186 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 186 insertions(+)
 create mode 100755 download-local.sh

diff --git a/download-local.sh b/download-local.sh
new file mode 100755
index 0000000..8f48a2e
--- /dev/null
+++ b/download-local.sh
@@ -0,0 +1,186 @@
+#!/bin/sh
+
+set -e
+
+BASE="$(cd "$(dirname "$0")" && pwd)"
+DOWNLOAD=${1:-all}
+HAS_WGET=0
+HAS_CURL=0
+
+if command -v wget >/dev/null 2>&1; then
+    HAS_WGET=1
+elif command -v curl >/dev/null 2>&1; then
+    HAS_CURL=1
+else
+    echo "neither wget nor curl found -- install one of them"
+    exit 1
+fi
+
+fetch() {
+    local url="$1" dest="$2"
+    if [ -s "$dest" ]; then
+        echo "  already present: $dest"
+        return 0
+    fi
+    rm -f "$dest"
+    mkdir -p "$(dirname "$dest")"
+    echo "  downloading: $url"
+    if [ "$HAS_WGET" = 1 ]; then
+        wget -q --show-progress -O "$dest" "$url"
+    else
+        curl -sSfL -o "$dest" "$url"
+    fi
+    echo "  -> $dest"
+}
+
+echo "PVA Dependency Downloader"
+echo "========================"
+echo "base: $BASE"
+echo
+
+# ---------------------------------------------------------------------------
+# 1. Java JAR dependencies  (lib/)
+# ---------------------------------------------------------------------------
+download_jars() {
+    echo "[1/5] Java JAR dependencies"
+
+    fetch \
+        "https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.18.1/jna-5.18.1.jar" \
+        "$BASE/lib/jna-5.18.1.jar"
+
+    fetch \
+        "https://repo1.maven.org/maven2/com/sun/mail/javax.mail/1.6.2/javax.mail-1.6.2.jar" \
+        "$BASE/lib/javax.mail-1.6.2.jar"
+
+    fetch \
+        "https://repo1.maven.org/maven2/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar" \
+        "$BASE/lib/javax.activation-1.2.0.jar"
+
+    fetch \
+        "https://github.com/xerial/sqlite-jdbc/releases/download/3.49.1.0/sqlite-jdbc-3.49.1.0.jar" \
+        "$BASE/lib/sqlite-jdbc-3.49.1.0.jar"
+
+    echo
+}
+
+# ---------------------------------------------------------------------------
+# 2. Vosk native library  (local/native/)
+# ---------------------------------------------------------------------------
+download_vosk_native() {
+    echo "[2/5] Vosk native library (Linux x86_64)"
+
+    local vosk_ver="0.3.45"
+    local vosk_zip="/tmp/vosk-linux-x86_64-${vosk_ver}.zip"
+    local vosk_url="https://github.com/alphacep/vosk-api/releases/download/v${vosk_ver}/vosk-linux-x86_64-${vosk_ver}.zip"
+
+    if [ -f "$BASE/local/native/libvosk.so" ]; then
+        echo "  already present: local/native/libvosk.so"
+    else
+        rm -f "/tmp/vosk-linux-x86_64-0.3.50.zip"
+        if [ ! -f "$vosk_zip" ]; then
+            fetch "$vosk_url" "$vosk_zip"
+        fi
+        mkdir -p "$BASE/local/native"
+        unzip -jo "$vosk_zip" "*/libvosk.so" -d "$BASE/local/native/" >/dev/null 2>&1
+        echo "  extracted: local/native/libvosk.so"
+    fi
+    echo
+}
+
+# ---------------------------------------------------------------------------
+# 3. Vosk language model  (local/)
+# ---------------------------------------------------------------------------
+download_vosk_model() {
+    echo "[3/5] Vosk language model (German)"
+
+    local model="vosk-model-de-0.21"
+    local model_zip="/tmp/${model}.zip"
+    local model_url="https://alphacephei.com/vosk/models/${model}.zip"
+
+    if [ -d "$BASE/local/${model}" ]; then
+        echo "  already present: local/${model}/"
+    else
+        if [ ! -f "$model_zip" ]; then
+            fetch "$model_url" "$model_zip"
+        fi
+        unzip -q "$model_zip" -d "$BASE/local/" >/dev/null 2>&1
+        echo "  extracted: local/${model}/"
+    fi
+    echo
+}
+
+download_vosk_model_en() {
+    echo "[3b/5] Vosk language model (English)"
+
+    local model="vosk-model-small-en-us-0.15"
+    local model_zip="/tmp/${model}.zip"
+    local model_url="https://alphacephei.com/vosk/models/${model}.zip"
+
+    if [ -d "$BASE/local/${model}" ]; then
+        echo "  already present: local/${model}/"
+    else
+        if [ ! -f "$model_zip" ]; then
+            fetch "$model_url" "$model_zip"
+        fi
+        unzip -q "$model_zip" -d "$BASE/local/" >/dev/null 2>&1
+        echo "  extracted: local/${model}/"
+    fi
+    echo
+}
+
+# ---------------------------------------------------------------------------
+# 4. Piper TTS voice  (local/piper-voices/)
+# ---------------------------------------------------------------------------
+download_piper_voice() {
+    echo "[4/5] Piper TTS voice (de_DE-kerstin-low)"
+
+    local voice_url="https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx"
+    local voice_json_url="https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/de/de_DE/kerstin/low/de_DE-kerstin-low.onnx.json"
+
+    fetch "$voice_url" "$BASE/local/piper-voices/de_DE-kerstin-low.onnx"
+    fetch "$voice_json_url" "$BASE/local/piper-voices/de_DE-kerstin-low.onnx.json"
+
+    echo
+}
+
+# ---------------------------------------------------------------------------
+# 5. Python venv with Piper TTS
+# ---------------------------------------------------------------------------
+setup_venv() {
+    echo "[5/5] Python virtualenv with Piper TTS"
+
+    if [ -f "$BASE/venv/bin/piper" ]; then
+        echo "  already present: venv/bin/piper"
+    else
+        python3 -m venv "$BASE/venv"
+        "$BASE/venv/bin/pip" install --upgrade pip setuptools wheel >/dev/null 2>&1
+        "$BASE/venv/bin/pip" install piper-tts >/dev/null 2>&1
+        echo "  installed piper-tts in venv/"
+    fi
+    echo
+}
+
+# ---------------------------------------------------------------------------
+# Dispatch
+# ---------------------------------------------------------------------------
+case "$DOWNLOAD" in
+    jars)        download_jars ;;
+    vosk-native) download_vosk_native ;;
+    vosk-model)  download_vosk_model ;;
+    vosk-model-en) download_vosk_model_en ;;
+    piper-voice) download_piper_voice ;;
+    venv)        setup_venv ;;
+    all)
+        download_jars
+        download_vosk_native
+        download_vosk_model
+        download_vosk_model_en
+        download_piper_voice
+        setup_venv
+        echo "All dependencies downloaded."
+        ;;
+    *)
+        echo "Usage: $0 [jars|vosk-native|vosk-model|vosk-model-en|piper-voice|venv|all]"
+        exit 1
+        ;;
+esac
-- 
2.47.3

