This guide explains the full Cassini workflow — from joining a room to opening a replay in the browser — and what happens at each stage.
The pipeline
Cassini’s record command is a three-stage pipeline. Each stage produces an artifact that the next stage consumes.
cassini record
└── Stage 1: Capture → .run bundle
└── Stage 2: Build → .meeting artifact
└── Stage 3: Publish → .opus file
You can run each stage manually if you need more control. See Advanced usage below.
Stage 1 — Capture
Cassini joins the Nextcloud Talk room as a silent participant and records the audio stream. It writes everything into a .run bundle: raw audio, participant events, and timing metadata.
The capture stage ends when the call ends or when you interrupt Cassini with Ctrl+C.
Stage 2 — Build
The build stage processes the .run bundle. It runs the audio through:
- Transcription — a local speech-to-text model produces a time-aligned transcript
- Diarisation — the transcript is annotated with speaker turns where possible
- Packaging — the transcript and audio are combined into a
.meetingartifact
This stage is the most time-consuming. On a modern machine, expect roughly 0.5× real-time — a one-hour meeting takes around 30 minutes to process.
Stage 3 — Publish
Publish takes a .meeting artifact and writes the final .opus file. This step is fast — it is mostly a repackaging operation with no additional processing.
Resumability
Cassini stores intermediate state in a .cassini-work/ directory next to your --out file:
My Meetings/
2026-07-01 Team Sync.opus ← final output
.cassini-work/
2026-07-01 Team Sync.run ← stage 1 output (kept)
2026-07-01 Team Sync.meeting ← stage 2 output (kept)
If the command fails at stage 2, rerunning it skips stage 1 (capture already done) and retries from stage 2. This means you never lose a recording to a transcription failure.
The viewer
The Cassini viewer is a static web app bundled separately. Use cassini serve to start a local server pointed at a directory of .opus files:
./bin/cassini serve "./My Meetings"
The viewer gives you:
- Timeline scrubbing — click any point in the waveform to jump to it
- Transcript navigation — click any line in the transcript to seek to that moment
- Full-text search — search across the transcript to find when something was said
- Speaker filtering — filter the transcript by participant
Advanced usage
You can run each pipeline stage explicitly if you need to inspect intermediate artifacts or retry a specific step:
# Stage 1: capture only
./bin/cassini record --call "$CALL_URL" --out ./runs/meeting.run
# Stage 2: build from a .run bundle
./bin/cassini build ./runs/meeting.run --out ./meetings/meeting.meeting
# Stage 3: publish to .opus
./bin/cassini publish ./meetings --out ./site
# Inspect any artifact
./bin/cassini inspect ./runs/meeting.run
./bin/cassini inspect ./meetings/meeting.meeting
Nextcloud app install
Cassini can also run as a Nextcloud ExApp — registered via AppAPI, it records meetings server-side without requiring a separate machine. See the ExApp install guide for the full setup.