PHPackages                             martin3r/platforms-whisper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. martin3r/platforms-whisper

ActiveLibrary

martin3r/platforms-whisper
==========================

Whisper Module for Platform - Browser audio recording with AssemblyAI transcription + speaker diarization + LLM summary

022↑36.4%PHP

Since Apr 9Pushed 1mo agoCompare

[ Source](https://github.com/martin3r-me/platforms-whisper)[ Packagist](https://packagist.org/packages/martin3r/platforms-whisper)[ RSS](/packages/martin3r-platforms-whisper/feed)WikiDiscussions main Synced 4w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Platform Whisper Module
=======================

[](#platform-whisper-module)

Audio-Aufnahme im Browser → **AssemblyAI** Transkription mit Speaker Diarization → LLM-Zusammenfassung. Audio-Datei wird **nicht** dauerhaft gespeichert, nur Transkript + Segmente + Summary bleiben persistent.

Features
--------

[](#features)

- Browser-Recorder via MediaRecorder API (Opus, mono)
- **Speaker Diarization**: AssemblyAI markiert Sprecher (A, B, C, …) pro Äußerung
- **LLM-Summary**: automatischer Titel + Bullet-Point-Zusammenfassung via OpenAI
- **Queue-basiert**: Upload kehrt sofort zurück, Job verarbeitet im Hintergrund
- **Organization-Linking**: `HasOrganizationContexts` (morph\_alias `whisper_recording`), nutzbar über die Core-LLM-Tools

Voraussetzungen (Host-App)
--------------------------

[](#voraussetzungen-host-app)

### 1. Composer

[](#1-composer)

```
"require": {
    "martin3r/platforms-whisper": "dev-main"
},
"repositories": [
    {
        "type": "vcs",
        "url": "git@github.com:martin3r-me/platforms-whisper.git"
    }
]
```

```
composer update martin3r/platforms-whisper
php artisan migrate
```

### 2. API Keys

[](#2-api-keys)

```
# Transkription + Diarization
ASSEMBLYAI_API_KEY=...

# LLM-Summary (wiederverwendet OpenAiService der Platform)
OPENAI_API_KEY=sk-...
```

### 3. Queue Worker

[](#3-queue-worker)

```
php artisan queue:work --timeout=1800 --tries=1
```

Das Polling gegen AssemblyAI läuft während `handle()`. `--timeout=1800` deckt auch stundenlange Meetings ab.

### 4. PHP Limits

[](#4-php-limits)

In `php.ini` (oder `.user.ini`):

```
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 300
memory_limit = 256M
```

Datenmodell
-----------

[](#datenmodell)

Tabelle `whisper_recordings` (Kern-Felder):

FeldTypBemerkungid / uuidPKUuidV7team\_id / created\_by\_user\_idFKTeam-ScopetitlestringLLM-generiert (Fallback: erster Satz)transcriptlongTextFließtext-TranskriptsummarylongTextLLM-Bullet-Pointssegmentsjson`[{speaker, start, end, text}, …]`speakers\_countintAnzahl erkannter SprecherlanguagestringISO-Code, AssemblyAI-detectedduration\_secondsintmodelstringz. B. `assemblyai:universal`provider\_idstringAssemblyAI transcript idstatusenumpending / processing / completed / failederror\_messagetextbei failedWorkflow
--------

[](#workflow)

1. User klickt **Aufnehmen** auf `/whisper`
2. Browser nimmt Mic auf (Opus, mono)
3. Stop → Blob wird per `fetch()` an `/whisper/upload` POSTet
4. Controller speichert Blob in `storage/app/whisper-tmp/{uuid}.webm`, legt Recording mit `status=pending` an, dispatched `TranscribeRecordingJob`, redirected User zur Show-Page
5. Job (Worker):
    - Status → `processing`
    - `AssemblyAiTranscriptionService::transcribe()`: Upload → Submit (mit `speaker_labels=true`) → Polling bis `completed`
    - `WhisperSummaryService::summarize()`: LLM erzeugt Titel + Summary
    - Recording bekommt `transcript`, `segments`, `speakers_count`, `summary`, `title`, Status → `completed`
    - Tmp-Datei wird gelöscht (`finally`-Block)
6. Show-Page pollt alle 3 s während `pending`/`processing`, zeigt danach Sprecher-Blöcke + Summary + Fließtext

Fehler-Handling
---------------

[](#fehler-handling)

- Kein `ASSEMBLYAI_API_KEY` → Job wirft Exception → Status `failed`
- AssemblyAI-Fehler (Upload/Submit/Poll) → Status `failed`, `error_message` mit API-Response
- Polling-Timeout (`WHISPER_AAI_MAX_WAIT`) → Status `failed`
- Bei `failed`: Tmp-Datei wird trotzdem aufgeräumt

LLM-Tools
---------

[](#llm-tools)

- `whisper.overview.GET` — Modul-Übersicht
- `whisper.recordings.GET` — Liste aller Aufnahmen
- `whisper.recording.GET` — Einzel-Aufnahme (inkl. Segmente)
- `whisper.recordings.PUT` — Metadaten updaten
- `whisper.recordings.DELETE` — Aufnahme löschen
- `whisper.recordings.search.GET` — Volltextsuche
- `whisper.recording.transcript.GET` — Nur Transkript + Summary + Segments (LLM-freundlich)

Config Overrides
----------------

[](#config-overrides)

```
WHISPER_AAI_REQUEST_TIMEOUT=120     # HTTP-Timeout pro AssemblyAI-Call
WHISPER_AAI_POLL_INTERVAL=3         # Polling-Intervall in Sekunden
WHISPER_AAI_MAX_WAIT=1500           # Maximale Polling-Dauer
WHISPER_AAI_SPEAKER_LABELS=true     # Diarization an/aus
WHISPER_AAI_SPEAKERS_EXPECTED=0     # 0 = automatisch, sonst erwartete Anzahl
```

Out-of-Scope
------------

[](#out-of-scope)

- Editierbares Transkript
- Echtzeit-Streaming
- Speaker-Identifikation (Zuordnung zu Personen/Namen) — liefert nur `A`, `B`, `C` …

###  Health Score

22

—

LowBetter than 22% of packages

Maintenance61

Regular maintenance activity

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/624263472b888cbddf2459047c1ab71dafd2a5875da576e3675b9c3584dad922?d=identicon)[martin3r](/maintainers/martin3r)

---

Top Contributors

[![martin3r-me](https://avatars.githubusercontent.com/u/187852765?v=4)](https://github.com/martin3r-me "martin3r-me (11 commits)")

### Embed Badge

![Health badge](/badges/martin3r-platforms-whisper/health.svg)

```
[![Health](https://phpackages.com/badges/martin3r-platforms-whisper/health.svg)](https://phpackages.com/packages/martin3r-platforms-whisper)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
