Scriberr on Ubuntu 24.04 on Azure User Guide
Overview
Scriberr is an open source, self hosted AI audio transcription application. You upload an audio recording and it returns an accurate, searchable transcript through a clean web interface, powered by OpenAI Whisper models via WhisperX. It runs entirely on your own VM so your recordings never leave your infrastructure, with optional speaker diarization and optional LLM summarisation and chat over your transcripts.
The cloudimg image ships Scriberr v1.2.0 as a single Docker Compose service under /opt/scriberr, bound to loopback 127.0.0.1:8080 and fronted by nginx on port 80. The WhisperX Python environment and a compact small Whisper model, together with the silero voice activity model and the English alignment model, are baked into the image, so a transcription works immediately and fully offline the first time you log in, with no multi gigabyte model download.
Secure by default, no default login: the image ships with zero user accounts. On first boot a scriberr-firstboot.service oneshot generates a unique administrator password for your instance, registers that single administrator, and self registration is then automatically closed, so no one else can create an account. The password is written to a root only file on the VM. Public access on port 80 is only opened after that first boot registration completes.
Per instance secrets: the JWT session signing secret is generated uniquely on first boot into /opt/scriberr/.env (readable only by root), so no two instances share a signing key and nothing secret ships inside the image.
CPU only, no GPU required: the default transcription profile is tuned for a modest CPU VM (the small model with int8 compute and silero voice activity detection). Select a larger model and a larger VM for higher accuracy. The advanced NVIDIA GPU models (Parakeet, Canary, Sortformer) are disabled on this CPU image; run Scriberr on a GPU VM if you need them.
What is included:
- Scriberr v1.2.0 as
ghcr.io/rishikanthc/scriberr:v1.2.0 - WhisperX transcription environment + a baked
smallWhisper model (offline ready) - PyAnnote speaker diarization support (bring your own HuggingFace token)
- Docker Engine with the Compose plugin from the official Docker repository
scriberr.servicemanaging the container, the app bound to127.0.0.1:8080- nginx reverse proxy on port 80, streamed progress + large upload aware, ready for TLS
scriberr-firstboot.servicefor first boot admin creation, per instance secret and default profile- Ubuntu 24.04 LTS base, fully patched, unattended security upgrades enabled
- 24/7 cloudimg support, 24h response SLA
Prerequisites
An active Azure subscription, an SSH key pair, and a VNet with a subnet. Recommended VM size: Standard_B2s (2 vCPU, 4 GB RAM), which comfortably runs the default small model on CPU. For faster or more accurate transcription with larger models, choose a VM with more vCPUs and RAM. No GPU is required.
Step 1: Deploy from the Azure Portal
Launch the image from the Azure Marketplace into your resource group, choosing your VNet/subnet and SSH key. Open port 80 (HTTP) to the networks that should reach the web interface, and port 22 (SSH) to your admin network. The first boot prepares the service and creates your administrator; give it a minute or two after the VM reports running.
Step 2: Retrieve your administrator password
There is no default password. A unique administrator credential is generated for your instance on first boot and written to a root only file. SSH in and read it:
sudo cat /root/scriberr-credentials.txt
You will see the generated username and password and your instance URL:
# Scriberr on Ubuntu 24.04 — Per-VM Credentials (root only)
SCRIBERR_ADMIN_USERNAME=admin
SCRIBERR_ADMIN_PASSWORD=<ADMIN_PASSWORD>
SCRIBERR_URL=http://<your-vm-ip>/
The file is mode 0600, readable only by root, and self registration is already closed, so this administrator is the only account:
sudo ls -l /root/scriberr-credentials.txt
curl -s http://127.0.0.1/api/v1/auth/registration-status
The registration status returns {"registration_enabled":false} — no one can register a second account.


Step 3: Log in
Browse to http://<your-vm-ip>/. You are greeted by the Sign In screen. Enter the username and password from the credentials file.

You can confirm the credential works and that the default admin/admin is rejected from the command line:
# the per-VM admin authenticates and returns a JWT
curl -s -o /dev/null -w 'admin login: HTTP %{http_code}\n' -X POST http://127.0.0.1/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"<ADMIN_USERNAME>","password":"<ADMIN_PASSWORD>"}'
# a guessed default credential is refused
curl -s -o /dev/null -w 'default admin/admin: HTTP %{http_code}\n' -X POST http://127.0.0.1/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin"}'
The per-VM login returns 200; the default admin/admin returns 401.

Step 4: Transcribe an audio file
After signing in you land on your recordings dashboard. Click the + button to upload an audio file, keep the default CPU (Standard_B2s) profile (which uses the baked small model, int8 compute and silero voice activity detection), and start the transcription. Progress streams live; when it completes the recording appears in the list with a green tick.

Open the recording to read the transcript. Scriberr shows an audio player and the transcript text, with word level timings available underneath.

The whole flow works offline against the baked model. You can also drive it from the API — here a short clip is transcribed end to end and the transcript printed:
# log in and capture a JWT
TOKEN=$(curl -s -X POST http://127.0.0.1/api/v1/auth/login -H 'Content-Type: application/json' \
-d '{"username":"<ADMIN_USERNAME>","password":"<ADMIN_PASSWORD>"}' | python3 -c 'import sys,json;print(json.load(sys.stdin)["token"])')
# submit the bundled sample clip for a quick transcription
JOB=$(curl -s -X POST http://127.0.0.1/api/v1/transcription/quick -H "Authorization: Bearer $TOKEN" \
-F 'audio=@/opt/scriberr/sample/sample-english.wav;type=audio/wav' \
-F 'parameters={"model":"small","compute_type":"int8","device":"cpu","vad_method":"silero","diarize":false,"batch_size":4}' \
| python3 -c 'import sys,json;print(json.load(sys.stdin)["id"])')
# poll until it finishes and print the transcript
for i in $(seq 1 40); do
S=$(curl -s http://127.0.0.1/api/v1/transcription/quick/$JOB -H "Authorization: Bearer $TOKEN")
echo "$S" | grep -q '"status":"completed"' && { echo "$S" | python3 -c 'import sys,json;print(json.load(sys.stdin)["transcript"].strip())'; break; }
sleep 3
done

Step 5: Larger models, speaker diarization and summaries
- Higher accuracy: in the transcription profile, choose a larger Whisper model (
mediumorlarge-v3). Larger models need more RAM and CPU, so pair them with a larger VM size. - Speaker diarization: PyAnnote diarization requires a free HuggingFace access token and acceptance of the pyannote model licence. Add your token to a profile and enable diarization to label speakers.
- Summaries and chat: to summarise or chat over a transcript, add an OpenAI compatible API key in the settings, or point Scriberr at a local model endpoint.
Enable HTTPS for production
The image serves plain HTTP on port 80 so login works out of the box. For production, put a certificate in front. Point a DNS name at the VM and use certbot with nginx:
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.example.com
After enabling HTTPS you may re-enable secure cookies by setting SECURE_COOKIES=true in /opt/scriberr/.env and restarting scriberr.service. Change the administrator password after your first login from the account menu.
Managing the service
# service status
systemctl status scriberr.service nginx.service --no-pager
# the container
sudo docker ps
# application logs
sudo docker logs --tail 50 scriberr
# restart the stack
sudo systemctl restart scriberr.service
Data (the SQLite database, uploaded audio, transcripts and the model cache) lives under /opt/scriberr/data on the OS disk and is captured with the VM. The transcription environment is under /opt/scriberr/whisperx-env.
Support
Every cloudimg image includes 24/7 support with a 24 hour response SLA. Contact support@cloudimg.co.uk for help deploying or operating Scriberr on Azure.
Scriberr is a trademark of its respective owner. This image repackages open source software; cloudimg charges for support services.