Use local faster-whisper only for transcription.

Drop cloud and Ollama engine choices so audio stays on-machine via Docker Whisper, and tighten orphan detection plus UI around a single local flow.
This commit is contained in:
ben
2026-08-12 15:34:16 +02:00
parent bc6cb5efa4
commit 21b17c7657
10 changed files with 117 additions and 295 deletions
+10 -31
View File
@@ -1,6 +1,6 @@
# AndyTranscribe
Upload pocket-recorder audio (MP3, WAV, OGG, and more), extract embedded metadata, and transcribe with OpenAI Whisper, a local faster-whisper server, or a remote OpenAI-compatible endpoint.
Upload pocket-recorder audio (MP3, WAV, OGG, and more), extract embedded metadata, and transcribe locally with [faster-whisper-server](https://github.com/fedirz/faster-whisper-server) via Docker. Audio never leaves your machine.
Built with Laravel 13, Blade, Tailwind CSS 4, and [Laravel AI](https://github.com/laravel/ai).
@@ -9,11 +9,9 @@ Built with Laravel 13, Blade, Tailwind CSS 4, and [Laravel AI](https://github.co
- Upload common audio formats (MP3, WAV, OGG, FLAC, M4A, AAC, WebM, WMA, AIFF — up to 100 MB)
- Automatic metadata extraction when tags are present (title, artist, album, duration, recorded date)
- Search recordings by title, artist, or transcript
- Queued transcription with three engines:
- **Cloud** — OpenAI Whisper (`whisper-1`)
- **Local** — confidential; OpenAI-compatible [faster-whisper-server](https://github.com/fedirz/faster-whisper-server) via Docker
- **Ollama host** — user-supplied host URL exposing `/v1/audio/transcriptions`
- Queued local transcription (faster-whisper in Docker)
- Live transcription progress (stage, %, elapsed time)
- Stop or restart a run anytime
- Copy finished transcripts from the recording detail page
## Requirements
@@ -22,9 +20,7 @@ Built with Laravel 13, Blade, Tailwind CSS 4, and [Laravel AI](https://github.co
- Composer
- Node.js & npm
- SQLite (default) or another supported database
- For **cloud** transcription: an OpenAI API key
- For **local** transcription: [Docker](https://docs.docker.com/get-docker/) (runs Whisper in a container)
- For **remote** transcription: a host with an OpenAI-compatible transcription API
- [Docker](https://docs.docker.com/get-docker/) for the Whisper container
## Setup
@@ -48,7 +44,7 @@ npm run build
## Local Whisper (Docker)
The **Local** engine does not run Whisper inside PHP. It calls an OpenAI-compatible HTTP API. This project ships Compose for that:
Transcription calls an OpenAI-compatible HTTP API. This project ships Compose for that:
```bash
# CPU (works everywhere; slower on long files)
@@ -74,20 +70,15 @@ Stop:
docker compose down
```
Without this container, **Cloud** and **Ollama host** still work; only **Local** needs Docker.
## Configuration
Copy values from `.env.example`. The transcription-related settings are:
| Variable | Purpose |
| --- | --- |
| `OPENAI_API_KEY` | Required for cloud Whisper |
| `OPENAI_URL` | OpenAI API base URL (default `https://api.openai.com/v1`) |
| `LOCAL_WHISPER_URL` | Local faster-whisper base URL (default `http://127.0.0.1:8090/v1`) |
| `LOCAL_WHISPER_API_KEY` | API key for local server (often unused) |
| `LOCAL_WHISPER_MODEL` | Model name for local transcription |
| `REMOTE_WHISPER_MODEL` | Model name for Ollama-host transcription |
| `WHISPER_HOST_PORT` | Host port published by Compose (default `8090`) |
| `TRANSCRIPTION_TIMEOUT` | Job/HTTP timeout in seconds (default `600`) |
| `DB_QUEUE_RETRY_AFTER` | Database queue retry window; must exceed `TRANSCRIPTION_TIMEOUT` (default `660`) |
@@ -99,21 +90,17 @@ Ensure `APP_URL` matches how you access the app (default `http://localhost:8000`
## Running locally
Start the app, queue worker, and Vite together:
```bash
composer run dev
```
For confidential local transcription, also start Whisper:
Start Whisper, then the app stack:
```bash
docker compose up -d whisper
composer run dev
```
Or separately:
```bash
docker compose up -d whisper
php artisan serve
php artisan queue:work
npm run dev
@@ -126,18 +113,10 @@ Transcription jobs are queued — keep a queue worker running or jobs will stay
## Usage
1. **Upload** audio from Recordings → Upload (optional title override).
2. Open the recording and choose a transcription engine.
3. Watch live progress on the recording page until the transcript appears.
2. Open the recording and start transcription.
3. Watch live progress until the transcript appears (or stop and restart).
4. Search the list by title, artist, or transcript text.
## Transcription engines
| Driver | When to use | Needs |
| --- | --- | --- |
| `cloud` | Fastest path; audio leaves your machine | `OPENAI_API_KEY` |
| `local` | Confidential; audio stays on this machine | `docker compose up -d whisper` |
| `ollama` | Another machine on your network | Host URL + OpenAI-compatible `/v1/audio/transcriptions` |
## Tests
```bash