ben e0400aadef Add live transcription progress and Docker Whisper.
Surface stage, percent, and elapsed time while jobs run, and ship Compose so local confidential transcription can use faster-whisper on port 8090.
2026-08-12 14:32:56 +02:00
2026-08-12 13:59:33 +02:00
2026-08-12 13:59:33 +02:00
2026-08-12 13:59:33 +02:00
2026-08-12 13:59:33 +02:00

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.

Built with Laravel 13, Blade, Tailwind CSS 4, and Laravel AI.

Features

  • 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 via Docker
    • Ollama host — user-supplied host URL exposing /v1/audio/transcriptions
  • Live transcription progress (stage, %, elapsed time)
  • Copy finished transcripts from the recording detail page

Requirements

  • PHP 8.3+ (8.5 recommended)
  • Composer
  • Node.js & npm
  • SQLite (default) or another supported database
  • For cloud transcription: an OpenAI API key
  • For local transcription: Docker (runs Whisper in a container)
  • For remote transcription: a host with an OpenAI-compatible transcription API

Setup

composer setup

That installs PHP and JS dependencies, copies .env if needed, generates the app key, runs migrations, and builds frontend assets.

Or step by step:

composer install
cp .env.example .env
php artisan key:generate
touch database/database.sqlite   # if using SQLite
php artisan migrate
npm install
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:

# CPU (works everywhere; slower on long files)
docker compose up -d whisper

# Optional: NVIDIA GPU
docker compose --profile gpu up -d whisper-gpu

First start downloads the model into a Docker volume (can take a few minutes).

Check it:

curl -s http://127.0.0.1:8090/health

Laravel talks to it at LOCAL_WHISPER_URL (default http://127.0.0.1:8090/v1). Port 8090 is used so it does not conflict with php artisan serve on 8000.

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)
QUEUE_CONNECTION Use database (default) so transcription runs in the background

Ensure APP_URL matches how you access the app (default http://localhost:8000).

Running locally

Start the app, queue worker, and Vite together:

composer run dev

For confidential local transcription, also start Whisper:

docker compose up -d whisper

Or separately:

php artisan serve
php artisan queue:work
npm run dev

Open http://localhost:8000/recordings.

Transcription jobs are queued — keep a queue worker running or jobs will stay pending.

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.
  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

composer test
# or
php artisan test

License

MIT

S
Description
Upload pocket-recorder MP3s and transcribe them
Readme
511 KiB
Languages
PHP 59.3%
Blade 34.9%
JavaScript 2.5%
Shell 2.3%
Dockerfile 0.9%
Other 0.1%