179 lines
6.1 KiB
Bash
Executable File
179 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# File: .claude/hooks/piper-installer.sh
|
|
#
|
|
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
# Website: https://agentvibes.org
|
|
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
#
|
|
# Co-created by Paul Preibisch with Claude AI
|
|
# Copyright (c) 2025 Paul Preibisch
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
# express or implied, including but not limited to the warranties of
|
|
# merchantability, fitness for a particular purpose and noninfringement.
|
|
# In no event shall the authors or copyright holders be liable for any claim,
|
|
# damages or other liability, whether in an action of contract, tort or
|
|
# otherwise, arising from, out of or in connection with the software or the
|
|
# use or other dealings in the software.
|
|
#
|
|
# ---
|
|
#
|
|
# @fileoverview Piper TTS Installer - Installs Piper TTS via pipx and downloads initial voice models
|
|
# @context Automated installation script for free offline Piper TTS on WSL/Linux systems
|
|
# @architecture Helper script for AgentVibes installer, invoked manually or from provider switcher
|
|
# @dependencies pipx (Python package installer), apt-get/brew/dnf/pacman (for pipx installation)
|
|
# @entrypoints Called by src/installer.js or manually by users during setup
|
|
# @patterns Platform detection (WSL/Linux only), package manager abstraction, guided voice download
|
|
# @related piper-download-voices.sh, provider-manager.sh, src/installer.js
|
|
#
|
|
|
|
set -e # Exit on error
|
|
|
|
echo "🎤 Piper TTS Installer"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
|
|
# Check if running on WSL or Linux
|
|
if ! grep -qi microsoft /proc/version 2>/dev/null && [[ "$(uname -s)" != "Linux" ]]; then
|
|
echo "❌ Piper TTS is only supported on WSL and Linux"
|
|
echo " Your platform: $(uname -s)"
|
|
echo ""
|
|
echo " For macOS/Windows, use ElevenLabs instead:"
|
|
echo " /agent-vibes:provider switch elevenlabs"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if Piper is already installed
|
|
if command -v piper &> /dev/null; then
|
|
# Piper doesn't have a --version flag, just check if it exists
|
|
echo "✅ Piper TTS is already installed!"
|
|
echo " Location: $(which piper)"
|
|
echo ""
|
|
echo " Download voices with: .claude/hooks/piper-download-voices.sh"
|
|
exit 0
|
|
fi
|
|
|
|
echo "📦 Installing Piper TTS..."
|
|
echo ""
|
|
|
|
# Check if pipx is installed
|
|
if ! command -v pipx &> /dev/null; then
|
|
echo "⚠️ pipx not found. Installing pipx first..."
|
|
echo ""
|
|
|
|
# Try to install pipx
|
|
if command -v apt-get &> /dev/null; then
|
|
# Debian/Ubuntu
|
|
sudo apt-get update
|
|
sudo apt-get install -y pipx
|
|
elif command -v brew &> /dev/null; then
|
|
# macOS (though Piper doesn't run on macOS)
|
|
brew install pipx
|
|
elif command -v dnf &> /dev/null; then
|
|
# Fedora
|
|
sudo dnf install -y pipx
|
|
elif command -v pacman &> /dev/null; then
|
|
# Arch Linux
|
|
sudo pacman -S python-pipx
|
|
else
|
|
echo "❌ Unable to install pipx automatically."
|
|
echo ""
|
|
echo " Please install pipx manually:"
|
|
echo " https://pipx.pypa.io/stable/installation/"
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure pipx is in PATH
|
|
pipx ensurepath
|
|
echo ""
|
|
fi
|
|
|
|
# Install Piper TTS
|
|
echo "📥 Installing Piper TTS via pipx..."
|
|
pipx install piper-tts
|
|
|
|
if ! command -v piper &> /dev/null; then
|
|
echo ""
|
|
echo "❌ Installation completed but piper command not found in PATH"
|
|
echo ""
|
|
echo " Try running: pipx ensurepath"
|
|
echo " Then restart your terminal"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ Piper TTS installed successfully!"
|
|
echo ""
|
|
|
|
PIPER_VERSION=$(piper --version 2>&1 || echo "unknown")
|
|
echo " Version: $PIPER_VERSION"
|
|
echo ""
|
|
|
|
# Determine voices directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
CLAUDE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# Check for configured voices directory
|
|
VOICES_DIR=""
|
|
if [[ -f "$CLAUDE_DIR/piper-voices-dir.txt" ]]; then
|
|
VOICES_DIR=$(cat "$CLAUDE_DIR/piper-voices-dir.txt")
|
|
elif [[ -f "$HOME/.claude/piper-voices-dir.txt" ]]; then
|
|
VOICES_DIR=$(cat "$HOME/.claude/piper-voices-dir.txt")
|
|
else
|
|
VOICES_DIR="$HOME/.claude/piper-voices"
|
|
fi
|
|
|
|
echo "📁 Voice storage location: $VOICES_DIR"
|
|
echo ""
|
|
|
|
# Ask if user wants to download voices now
|
|
read -p "Would you like to download voice models now? [Y/n] " -n 1 -r
|
|
echo ""
|
|
|
|
if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
|
|
echo ""
|
|
echo "📥 Downloading recommended voices..."
|
|
echo ""
|
|
|
|
# Use the piper-download-voices.sh script if available
|
|
if [[ -f "$SCRIPT_DIR/piper-download-voices.sh" ]]; then
|
|
"$SCRIPT_DIR/piper-download-voices.sh"
|
|
else
|
|
# Manual download of a basic voice
|
|
mkdir -p "$VOICES_DIR"
|
|
|
|
echo "Downloading en_US-lessac-medium (recommended)..."
|
|
curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx" \
|
|
-o "$VOICES_DIR/en_US-lessac-medium.onnx"
|
|
curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.json" \
|
|
-o "$VOICES_DIR/en_US-lessac-medium.onnx.json"
|
|
|
|
echo "✅ Voice downloaded!"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🎉 Piper TTS Setup Complete!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Download more voices: .claude/hooks/piper-download-voices.sh"
|
|
echo " 2. List available voices: /agent-vibes:list"
|
|
echo " 3. Test it out: /agent-vibes:preview"
|
|
echo ""
|
|
echo "Enjoy your free, offline TTS! 🎤"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|