# Afrikaans Transcription Service
A self-hosted Afrikaans audio transcription service built with faster-whisper, FastAPI, Celery, and Docker Compose.
## Architecture
| Service | Role |
|---------|------|
| **FastAPI** | REST API + Web UI |
| **Celery** | Task queue (transcription worker) |
| **faster-whisper** | ASR inference engine (Systran/faster-whisper) |
| **Redis** | Celery message broker |
| **PostgreSQL** | Jobs database |
| **MinIO** | S3-compatible file storage |
| **Caddy** | Reverse proxy with automatic HTTPS (production) |
## Prerequisites
- Docker Engine 20.10+ and Docker Compose v2
- ~6 GB disk space for the faster-whisper model
- (Optional) NVIDIA GPU + NVIDIA Container Toolkit for GPU acceleration
## Quick Start
### 1. Clone and configure
```bash
git clone
github.com
cd Afrikaans-Transcriber
cp .env.example .env
# Edit .env with your passwords and settings
```
### 2. Download the whisper model
```bash
pip install huggingface-hub
huggingface-cli download Systran/faster-whisper-large-v3 \
--local-dir /opt/models/faster-whisper-large-v3
```
Make sure `HOST_MODEL_PATH` in `.env` points to this directory.
### 3. Bring the stack up (development mode)
```bash
docker compose up -d --build
```
This starts all services except Caddy (dev mode). The `minio-init` service automatically creates the required buckets (`audio-inbox` and `transcripts-out`).
### 4. Verify services are running
```bash
# Check all containers
docker compose ps
# Health check
curl
localhost
# Open the Web UI
# Navigate to
localhost in your browser
```
### 5. Create MinIO buckets manually (if needed)
The `minio-init` service handles this automatically. To do it manually:
```bash
# Using docker
docker compose run --rm minio-init
# Or using mc locally
mc alias set local
localhost minioadmin CHANGE_ME_minio_secret
mc mb --ignore-existing local/audio-inbox
mc mb --ignore-existing local/t …