ben 352b564f3a Add DiskSpaceService and DiskSpaceBar component for monitoring disk usage
Implement DiskSpaceService to provide snapshots of disk space usage, including total, free, and used bytes, as well as human-readable formats. Create DiskSpaceBar component to display disk usage information in the UI, including a progress bar that visually represents used space. Update app layout to include the DiskSpaceBar and add tests to ensure functionality of the disk space service and its integration in the layout.
2026-08-12 16:33:57 +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 locally with faster-whisper-server via Docker. Audio never leaves your machine.

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

  • PHP 8.3+ (8.5 recommended)
  • Composer
  • Node.js & npm
  • SQLite (default) or another supported database
  • Docker for the Whisper container

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)

Transcription 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

Configuration

Copy values from .env.example. The transcription-related settings are:

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

Finished transcripts are stored on the recording (transcript column) and are included in the recordings search box (title, artist, album, filename, and transcript).

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

Running locally

Start Whisper, then the app stack:

docker compose up -d whisper
composer run dev

Or separately:

docker compose up -d whisper
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 (single file or batch dropzone).
  2. Transcription queues automatically — keep php artisan queue:work running.
  3. Watch live progress on the recording page (or stop and restart).
  4. Search the list by title, artist, or transcript text.
  5. If older uploads still show Queued with no progress, use Queue pending transcriptions on the recordings list.

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%