← Back to docs

Whisper-transkribering

Language: SV | EN | SV

Whisper-transkribering

Tools har nu en behörighetsstyrd Whisper-kö för transkribering.

Åtkomstmodell

  • Användargränssnitt: /whisper (kräver permission:whisper.use)
  • Admingränssnitt: /admin/whisper (kräver permission:whisper.manage)
  • API: /api/whisper/* (kräver autentiserad användare + whisper.use)
  • Admin-trigger i API: POST /api/whisper/run-now (kräver whisper.manage)

Adminanvändare tillåts via admin-bypass.

Hur flödet fungerar

  1. Användaren skickar in en media-URL.
  2. En köpost skapas i whisper_transcriptions med status queued.
  3. Schemalagt kommando whisper:process plockar och kör jobb.
  4. Progress uppdateras i steg (downloading, transcribing, finalizing, completed eller failed).
  5. Ägare och admin kan följa status och läsa färdig text.

Nödvändiga beroenden på hosten

Typisk Debian/Ubuntu-installation:

sudo apt-get update
sudo apt-get install -y ffmpeg python3 python3-venv python3-pip
python3 -m venv ~/.venvs/whisper
~/.venvs/whisper/bin/pip install --upgrade pip
~/.venvs/whisper/bin/pip install openai-whisper

Sätt sedan WHISPER_BIN till korrekt sökväg om whisper inte ligger i PATH.

Miljövariabler

WHISPER_ENABLED=true
WHISPER_BIN=whisper
WHISPER_DEFAULT_MODEL=small
WHISPER_VERIFY_SSL=true
WHISPER_DOWNLOAD_TIMEOUT=180
WHISPER_PROCESS_TIMEOUT=3600
WHISPER_MAX_ATTEMPTS=3
WHISPER_RETRY_DELAY_SECONDS=120

Schemaläggning

Kön processas via Laravel scheduler varje minut:

  • php artisan whisper:process --limit=1

Manuell körning:

php artisan whisper:process --limit=5

API-endpoints

Alla endpoints är autentiserade (webbsession eller JWT från /api/account/login) och behörighetsstyrda.

GET /api/whisper/status

Returnerar kö-räknare och klientkapabiliteter.

GET /api/whisper/jobs?limit=100

Returnerar synliga jobb för aktuell användare.

  • Vanliga användare ser endast sina egna jobb.
  • limit begränsas server-side.

POST /api/whisper/jobs

Lägger ett nytt transkriberingsjobb i kö.

Exempelbody:

{
  "source_url": "https://example.com/audio.mp3",
  "model": "small",
  "language": "sv"
}

GET /api/whisper/jobs/{jobId}

Returnerar ett synligt jobb.

POST /api/whisper/run-now

Admin/manager-endpoint för omedelbar kökörning.

Exempelbody (valfri):

{
  "limit": 1
}

Jobbfält

Varje jobb inkluderar:

  • status: queued|downloading|transcribing|finalizing|completed|failed
  • progress_percent: heltal i procent för live-UI
  • last_error: senaste feltext
  • transcript_text: sätts när jobbet är färdigt