Custom Enhanced Audiobookshelf Distribution for Windows with Full Whisper Integration
This project is a custom and enhanced distribution of Audiobookshelf that includes:
- ✅ Native Windows application with system tray
- ✅ Complete server with all dependencies
- ✅ Full Whisper integration with GPU detection and pre-installed models
- ✅ Android mobile app with complete subtitle functionality
- ✅ Single Windows installer with no external dependencies
- ✅ Portable Node.js included
- ✅ Auto-updates disabled by default
This project is built upon and integrates multiple open-source projects:
Main audiobook and podcast server functionality
Cross-platform mobile application (iOS/Android)
License: MIT License
Whisper by OpenAI
AI-powered speech recognition and transcription
Nuxt.js 2 - Vue.js framework
License: MIT License
Capacitor by Ionic
Native mobile app development
Inno Setup - Windows installer
Distribución Personalizada y Mejorada de Audiobookshelf para Windows con Integración Completa de Whisper
Este proyecto es una distribución personalizada y mejorada de Audiobookshelf que incluye:
- ✅ Aplicación Windows nativa con sistema tray
- ✅ Servidor completo con todas las dependencias
- ✅ Integración completa de Whisper con detección GPU y modelos preinstalados
- ✅ Aplicación móvil Android con funcionalidad de subtítulos completa
- ✅ Instalador único de Windows sin dependencias externas
- ✅ Node.js portable incluido
- ✅ Auto-actualizaciones deshabilitadas por defecto
This project is composed of 3 main repositories:
audiobookshelf-app/ - Mobile Application (Nuxt 2 + Capacitor)audiobookshelf-app/
├── components/
│ └── app/
│ └── AudioPlayer.vue # ✅ Subtitle system with nativeHttp
├── android/ # ✅ Configured Android build
├── ios/ # iOS support
└── ...
Implemented improvements:
- Complete subtitle system using Capacitor nativeHttp
- Enhanced interface for subtitle selection
- Robust error handling for network connections
audiobookshelf-server/ - Main Server (Node.js)audiobookshelf-server/
├── server/
│ └── managers/
│ └── TranscriptionManager.js # ✅ Enhanced Whisper integration
├── client/
│ ├── components/
│ │ ├── modals/
│ │ │ └── SubtitlesModal.vue # ✅ Improved response parsing
│ │ └── player/
│ │ └── PlayerUi.vue # ✅ Fixed CC positioning
│ └── dist/ # ✅ Regenerated client
└── ...
Implemented improvements:
- Automatic detection of installed Whisper models
- Automatic GPU/CPU optimization
- Installer integration for local models
- Regenerated web client with subtitle fixes
├── AppTray.cs # ✅ Main tray logic
├── AudiobookshelfTray.csproj # C# .NET Framework 4.6.1 project
├── SettingsDialog.cs # Server configuration
├── ServerLogs.cs # Log visualization
└── Setup/
└── Installer.iss # ✅ Complete Inno Setup script
Implemented improvements:
- Auto-updates disabled by default
- Portable Node.js integration
- Enhanced server management
- Complete installer with all dependencies
Este proyecto está compuesto por 3 repositorios principales:
audiobookshelf-app/ - Aplicación Móvil (Nuxt 2 + Capacitor)audiobookshelf-app/
├── components/
│ └── app/
│ └── AudioPlayer.vue # ✅ Sistema de subtítulos con nativeHttp
├── android/ # ✅ Build Android configurado
├── ios/ # iOS support
└── ...
Mejoras implementadas:
- Sistema de subtítulos completo usando Capacitor nativeHttp
- Interfaz mejorada para selección de subtítulos
- Manejo de errores robusto para conexiones de red
audiobookshelf-server/ - Servidor Principal (Node.js)audiobookshelf-server/
├── server/
│ └── managers/
│ └── TranscriptionManager.js # ✅ Integración Whisper mejorada
├── client/
│ ├── components/
│ │ ├── modals/
│ │ │ └── SubtitlesModal.vue # ✅ Parseo de respuestas mejorado
│ │ └── player/
│ │ └── PlayerUi.vue # ✅ Posicionamiento CC corregido
│ └── dist/ # ✅ Cliente regenerado
└── ...
Mejoras implementadas:
- Detección automática de modelos Whisper instalados
- Optimización GPU/CPU automática
- Integración con instalador para modelos locales
- Cliente web regenerado con correcciones de subtítulos
├── AppTray.cs # ✅ Lógica principal del tray
├── AudiobookshelfTray.csproj # Proyecto C# .NET Framework 4.6.1
├── SettingsDialog.cs # Configuración del servidor
├── ServerLogs.cs # Visualización de logs
└── Setup/
└── Installer.iss # ✅ Script Inno Setup completo
Mejoras implementadas:
- Auto-actualizaciones deshabilitadas por defecto
- Integración con Node.js portable
- Gestión mejorada del servidor
- Instalador completo con todas las dependencias
Modified files:
- audiobookshelf-app/components/app/AudioPlayer.vue
Changes:
// Before: Failed with "Network Error"
this.$axios.get(url)
// After: Works with nativeHttp
import { CapacitorHttp } from '@capacitor/core'
const response = await CapacitorHttp.get({
url: fullUrl,
headers: { 'Authorization': `Bearer ${this.$store.state.user.token}` }
})
Modified files:
- audiobookshelf-server/client/components/modals/SubtitlesModal.vue
- audiobookshelf-server/client/components/player/PlayerUi.vue
Changes:
- Correct parsing of subtitle responses
- Fixed positioning of CC menu
- Improved visibility of controls
Modified files:
- audiobookshelf-server/server/managers/TranscriptionManager.js
Changes:
// New: Installer model detection
detectInstalledModelsPath() {
const installerModelsPath = path.join(__dirname, '..', '..', '..', 'whisper', 'models')
if (fs.existsSync(installerModelsPath)) {
return installerModelsPath
}
return this.ModelPath
}
// New: Local model preference
async getModel(modelKey) {
const installerPath = this.detectInstalledModelsPath()
const modelFileName = `${modelKey}.pt`
const installerModelPath = path.join(installerPath, modelFileName)
if (fs.existsSync(installerModelPath)) {
return installerModelPath // Use pre-installed model
}
return this.downloadModel(modelKey) // Download if doesn't exist
}
Modified files:
- AppTray.cs
- Setup/Installer.iss
Changes:
// Before: Depended on system Node.js
ProcessStartInfo psi = new ProcessStartInfo("node", serverPath);
// After: Uses included portable Node.js
string serverBinPath = Path.Combine(appPath, "nodejs", "node.exe");
ProcessStartInfo psi = new ProcessStartInfo(serverBinPath, serverPath);
Archivos modificados:
- audiobookshelf-app/components/app/AudioPlayer.vue
Cambios:
// Antes: Fallaba con "Network Error"
this.$axios.get(url)
// Después: Funciona con nativeHttp
import { CapacitorHttp } from '@capacitor/core'
const response = await CapacitorHttp.get({
url: fullUrl,
headers: { 'Authorization': `Bearer ${this.$store.state.user.token}` }
})
Archivos modificados:
- audiobookshelf-server/client/components/modals/SubtitlesModal.vue
- audiobookshelf-server/client/components/player/PlayerUi.vue
Cambios:
- Parseo correcto de respuestas de subtítulos
- Posicionamiento fijo del menú CC
- Visibilidad mejorada de controles
Archivos modificados:
- audiobookshelf-server/server/managers/TranscriptionManager.js
Cambios:
// Nuevo: Detección de modelos del instalador
detectInstalledModelsPath() {
const installerModelsPath = path.join(__dirname, '..', '..', '..', 'whisper', 'models')
if (fs.existsSync(installerModelsPath)) {
return installerModelsPath
}
return this.ModelPath
}
// Nuevo: Preferencia por modelos locales
async getModel(modelKey) {
const installerPath = this.detectInstalledModelsPath()
const modelFileName = `${modelKey}.pt`
const installerModelPath = path.join(installerPath, modelFileName)
if (fs.existsSync(installerModelPath)) {
return installerModelPath // Usar modelo preinstalado
}
return this.downloadModel(modelKey) // Descargar si no existe
}
Archivos modificados:
- AppTray.cs
- Setup/Installer.iss
Cambios:
// Antes: Dependía de Node.js del sistema
ProcessStartInfo psi = new ProcessStartInfo("node", serverPath);
// Después: Usa Node.js portable incluido
string serverBinPath = Path.Combine(appPath, "nodejs", "node.exe");
ProcessStartInfo psi = new ProcessStartInfo(serverBinPath, serverPath);
cd audiobookshelf-app
npm install
npm run generate
npx cap sync android
npx cap open android
# Build from Android Studio
cd audiobookshelf-server
npm ci
cd client
npm ci
npm run generate
cd ..
# Build C# application
dotnet build -c Release
# Build installer (requires Inno Setup)
cd Setup
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" Installer.iss
cd audiobookshelf-app
npm install
npm run generate
npx cap sync android
npx cap open android
# Compilar desde Android Studio
cd audiobookshelf-server
npm ci
cd client
npm ci
npm run generate
cd ..
# Compilar aplicación C#
dotnet build -c Release
# Compilar instalador (requiere Inno Setup)
cd Setup
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" Installer.iss
The AudiobookshelfInstaller-WithWhisper.exe installer includes:
Final Installation/
├── AudiobookshelfTray.exe # Windows application
├── nodejs/ # Portable Node.js v18.20.4
│ ├── node.exe
│ └── ... (complete runtime)
├── server/ # Complete audiobookshelf server
│ ├── index.js
│ ├── node_modules/ # All dependencies
│ ├── client/dist/ # Compiled web client
│ └── ... (complete code)
└── whisper/
└── models/ # Pre-installed models
├── tiny.pt # 37MB - Fastest
├── small.pt # 240MB - Balanced
└── medium.pt # 754MB - Better quality
# large-v3.pt downloads on-demand (~1.5GB)
Total size: ~87MB compressed, ~1.2GB installed
El instalador AudiobookshelfInstaller-WithWhisper.exe incluye:
Instalación Final/
├── AudiobookshelfTray.exe # Aplicación Windows
├── nodejs/ # Node.js portable v18.20.4
│ ├── node.exe
│ └── ... (runtime completo)
├── server/ # Audiobookshelf server completo
│ ├── index.js
│ ├── node_modules/ # Todas las dependencias
│ ├── client/dist/ # Cliente web compilado
│ └── ... (código completo)
└── whisper/
└── models/ # Modelos preinstalados
├── tiny.pt # 37MB - Más rápido
├── small.pt # 240MB - Balanceado
└── medium.pt # 754MB - Mejor calidad
# large-v3.pt se descarga bajo demanda (~1.5GB)
Tamaño total: ~87MB comprimido, ~1.2GB instalado
The following files/folders are NOT uploaded to the repository:
audiobookshelf-app/android/app/build/audiobookshelf-app/dist/audiobookshelf-server/client/dist/bin/, obj/Setup/Output/node_modules/nodejs-portable/.zip filesWhisperDist/Models/audiobookshelf-server/temp/*.pt files (Whisper models)*.tmp, *.temp*.log.DS_StoreLos siguientes archivos/carpetas NO se suben al repositorio:
audiobookshelf-app/android/app/build/audiobookshelf-app/dist/audiobookshelf-server/client/dist/bin/, obj/Setup/Output/node_modules/nodejs-portable/.zip de Node.jsWhisperDist/Models/audiobookshelf-server/temp/*.pt (modelos Whisper)*.tmp, *.temp*.log.DS_StoreThis project combines multiple upstream repositories:
- audiobookshelf - Main server
- audiobookshelf-app - Mobile app
- audiobookshelf-windows - Windows app
Custom improvements implemented for complete subtitle and Whisper functionality.
Este proyecto combina múltiples repositorios upstream:
- audiobookshelf - Servidor principal
- audiobookshelf-app - App móvil
- audiobookshelf-windows - App Windows
Mejoras personalizadas implementadas para funcionalidad completa de subtítulos y Whisper.
All modifications and enhancements in this distribution maintain compatibility with the original licenses.
AudiobookshelfInstaller-WithWhisper.exehttp://localhost:13378Everything included. Zero configuration. Works immediately.
AudiobookshelfInstaller-WithWhisper.exehttp://localhost:13378Todo incluido. Cero configuración. Funciona inmediatamente.