Record video calls, audio sessions, and media streams to your own storage. Shared between the ɳChat and ɳTV bundles — one plugin handles both call recording and live stream capture.
nself-recording is shared across ɳChat and ɳTV. Installing either bundle includes this plugin. Recordings are stored via MinIO (nself-storage) or any S3-compatible endpoint.
nself license set nself_pro_...
nself plugin install recording
nself build
nself startnself-recording hooks into LiveKit egress (via nself-livekit) and FFmpeg to capture sessions as MP4 or WebM files. For ɳTV, it captures live stream segments from the nself-streaming plugin. Recordings are uploaded directly to your object storage bucket — either the built-in MinIO or an external S3-compatible service.
After upload, the plugin generates a signed playback URL and stores the recording metadata (duration, size, participants) in Postgres. You can integrate nself-media-processing to auto-transcode recordings into multiple quality levels for adaptive playback.
Retention is configurable per recording type: call recordings might be kept for 30 days while live stream captures are kept permanently. Expired recordings are deleted from storage and Postgres automatically.
| Variable | Required | Description |
|---|---|---|
DATABASE_URL | Yes | Postgres connection string (auto-set by nself) |
RECORDING_STORAGE_BUCKET | Yes | Object storage bucket name for recordings |
RECORDING_STORAGE_ENDPOINT | No | S3 endpoint URL. Defaults to built-in MinIO |
RECORDING_FORMAT | No | Output format: mp4 or webm. Default: mp4 |
RECORDING_CALL_RETENTION_DAYS | No | Auto-delete call recordings after N days. Default: 30 |
RECORDING_STREAM_RETENTION_DAYS | No | Auto-delete stream recordings after N days. Default: 0 (forever) |
| Endpoint | Method | Description |
|---|---|---|
/recording/start | POST | Start recording a LiveKit room or stream |
/recording/stop | POST | Stop recording and trigger upload |
/recording/list | GET | List recordings with optional filters (type, date range) |
/recording/:id | GET / DELETE | Get recording metadata and signed URL, or delete |
/health | GET | Plugin health and storage connectivity check |
| Table | Purpose |
|---|---|
np_recordings | Recording metadata: type, source ID, duration, size, storage path, expiry |
np_recording_segments | HLS segments for stream recordings (used by nself-streaming) |
| Event | Payload |
|---|---|
recording.started | Recording ID, source type (call/stream), source ID |
recording.completed | Recording ID, duration, file size, signed URL |
recording.deleted | Recording ID, deletion reason (manual/retention/expired) |
In the ɳChat bundle, nself-recording automatically captures LiveKit rooms when RECORDING_AUTO_START=true is set. Recordings appear in the chat channel that initiated the call. In the ɳTV bundle, it captures live stream segments for VOD playback via nself-streaming. Both use the same storage bucket and retention policy configuration.
| Feature | nself-recording | Loom | Mux |
|---|---|---|---|
| Storage | Your MinIO / S3 | Loom servers | Mux servers |
| Cost | Included in bundle | $12.50/user/mo | Per-minute storage + delivery |
| Retention control | Full — your policy | Plan-dependent | Configurable |
Recording not starting for LiveKit calls: Confirm nself-livekit is installed and the LiveKit server has egress enabled. LiveKit Cloud plans include egress; self-hosted requires LiveKit Egress service.
Upload failing: Check RECORDING_STORAGE_BUCKET exists and the MinIO/S3 credentials have write access. Run nself plugin status recording to see the last storage connectivity test result.
Port: 3515 | Bundle: ɳChat or ɳTV ($0.99/mo each) or ɳSelf+ ($3.99/mo) | Last Updated: May 2026 | Plugin Version 1.0.13