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
2026-08-12 13:59:33 +02:00

AndyTranscribe

Upload pocket-recorder MP3s, extract ID3 metadata, and transcribe them 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 MP3s (up to 100 MB) and store them on the local disk
  • Automatic ID3 metadata extraction (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 (e.g. Docker on this machine)
    • Ollama host — user-supplied host URL exposing /v1/audio/transcriptions
  • 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: a running faster-whisper-server
  • 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

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://localhost:8000/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
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

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 an MP3 from Recordings → Upload (optional title override).
  2. Open the recording and choose a transcription engine.
  3. Wait for the queue job to finish, then refresh to view or copy the transcript.
  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 faster-whisper-server at LOCAL_WHISPER_URL
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%