A whole meeting
in one file.

A Cassini portable meeting file is an ordinary Ogg .opus audio file at 48 kHz.

What makes it special is everything packed in alongside the audio: the transcript, the speakers, a summary if you asked for one, and a record of what produced them, all written into the file's own tags, right next to TITLE and DATE. No sidecar to lose.

v1 · org.cassini.portable-meeting/1 · last change 2026-09-07

An example file

Listen & follow along.opus

Final Moments in Cassini Mission Control

4 speakers · 1:04 · Click a word to seek

Reading Final Moments in Cassini Mission Control…

File detailsReading…
read the audio file
walk the Ogg pages, find OpusTags
reassemble CASSINI_PAYLOAD_000..N
gunzip, parse, check SHA-256
resolve the default transcript
Audio + transcript, from the same file Download 0.73 MB

Courtesy NASA/JPL-Caltech · September 15, 2017. Original video. Transcript reconciled from multiple models and JPL captions; uncertain speech is marked. Sources & transcription notes

meeting.opus
├── OpusHead
├── OpusTags
└── audio
Same extension. Same audio. More to work with.

The manifest and each transcript are UTF-8 JSON, gzipped, base64url-encoded and split across numbered comments. These values come from the downloadable example.

cassini-final-moments.opus 38 comments
ARTIST=NASA/JPL-Caltech
CASSINI_AUDIO_CHANNELS=2
CASSINI_AUDIO_DURATION_MS=64783
CASSINI_AUDIO_MATCH_POLICY=exact-opus-audio-v1
CASSINI_AUDIO_OPUS_SHA256=8ce6c6690402af088220183ded389bf6f34662b490869a28c3fcadf5a01f58d8
CASSINI_AUDIO_SAMPLE_COUNT=3109617
CASSINI_AUDIO_SAMPLE_RATE=48000
CASSINI_CREATED_AT=2026-09-11T18:41:23Z

Payload values are shortened for display.

Decoded manifest
{
  "kind": "cassini-portable-meeting",
  "version": 1,
  "profile": "ogg-opus",
  "meeting": {
    "id": "mtg_8ce6c6690402af088220183ded389bf6f34662b490869a28c3fcadf5a01f58d8",
    "title": "Final Moments in Cassini Mission Control",
    "createdAtUtc": "2026-09-11T18:41:23Z",
    "durationMs": 64783
  },
  "audio": {
    "container": "ogg",
    "codec": "opus",
    "sampleRate": 48000,
    "channels": 2,
    "sampleCount": 3109617,
    "durationMs": 64783
  },
  "integrity": {
    "matchPolicy": "exact-opus-audio-v1",
    "opusAudioSha256": "8ce6c6690402af088220183ded389bf6f34662b490869a28c3fcadf5a01f58d8",
    "sampleRate": 48000,
    "channels": 2,
    "sampleCount": 3109617,
    "durationMs": 64783
  },
  "speakers": [
    {
      "id": "acs",
      "label": "ACS 1"
    },
    {
      "id": "signal",
      "label": "Mission control"
    },
    {
      "id": "webster",
      "label": "Julie Webster"
    },
    {
      "id": "maize",
      "label": "Earl Maize"
    }
  ],
  "transcripts": [
    {
      "id": "words",
      "default": true,
      "format": "cassini.words.v1",
      "wordCount": 120,
      "payloadRef": {
        "prefix": "CASSINI_TX_WORDS_PAYLOAD_",
        "chunkCount": 1,
        "sha256": "8ff466b7afd6b0c055b7e11163c4c5b39ebbf155654d7416855f2faf4a3b3b9c",
        "rawBytes": 7806,
        "gzipBytes": 1446,
        "mime": "application/vnd.cassini.transcript-words+json",
        "encoding": "base64url+gzip+utf8json"
      }
    }
  ],
  "provenance": {
    "demoProduction": {
      "createdAtUtc": "2026-09-11T18:41:23Z",
      "source": {
        "title": "Final Moments in Cassini Mission Control",
        "page": "https://www.jpl.nasa.gov/videos/final-moments-in-cassini-mission-control/",
        "download": "https://d2pn8kiwq2w21t.cloudfront.net/media/videoscassini20170915JPL-20170915-CASSINf-0001-720cc.m4v",
        "publishedDate": "2017-09-15",
        "sha256": "fc28a4e3b600355fa0a71c782e387d50d63bf7a65d909371fbfecf82599f25f7",
        "credit": "Courtesy NASA/JPL-Caltech",
        "usePolicy": "https://www.jpl.nasa.gov/jpl-image-use-policy/"
      },
      "transcription": {
        "method": "Editorial reconciliation of independent audio transcriptions, JPL webpage transcript and embedded EIA-608 captions",
        "models": [
          "google/gemini-3.5-flash",
          "google/gemini-3.8-flash",
          "openai/gpt-audio",
          "ElevenLabs scribe_v2"
        ],
        "modelAccess": "Gemini and GPT Audio through OpenRouter; Scribe and forced alignment through ElevenLabs",
        "evidence": "cassini-final-moments.evidence.json",
        "timing": "Scribe v2 acoustic word timestamps; general audio models’ segment timestamps rejected as inaccurate. ElevenLabs forced alignment was attempted but denied due to missing forced_alignment permission; no independent alignment result was available.",
        "speakerAttribution": "Julie Webster and Earl Maize named by JPL captions and webpage. Their short exchange is assigned by diarization and conversational continuity. ACS 1 and the signal operator have no verified personal names.",
        "decisions": [
          "Opening: ACS one, we just had transition to high rate mode (captions and Scribe; webpage has condition).",
          "11.179–12.500 seconds: [unintelligible]; candidates include X-band/X-ray band and S-band/Sierra band/C-band. No consensus; JPL also marks this unintelligible.",
          "Retain Okay, the individually spoken digits one one five five four six, and audible uh fillers from Scribe.",
          "Retain Project manager on FSO coord, Maybe a trickle, within the next, and gonna from acoustic recognition instead of the edited webpage wording.",
          "After but, Scribe and GPT Audio hear just heard; Gemini and the webpage disagree on additional pronouns. Retain just heard and document the uncertainty.",
          "Preserve full audio including final applause; do not assign group applause to Earl Maize or turn unspoken closing-credit captions into speech."
        ],
        "limitations": "AI-reconciled transcript, not a human-certified or official NASA transcript. Word boundaries and short-turn speaker assignments remain estimates."
      },
      "audio": {
        "processing": "Full original stereo audio, no cuts or denoising in listening copy; AAC decoded and encoded as 48 kHz stereo Opus at 96 kb/s. Filtered radio crop used only for transcription comparison."
      },
      "producer": "site/scripts/produce-cassini-final.py using tools/cassini-pack.py"
    }
  }
}
Learn how to extract and verify the payload →

In this example, the compressed manifest and transcript total 3.3 KB in a 0.73 MB file. These sizes exclude base64 encoding and tag overhead.

Specification

Current version · Published 2 September 2026

Cassini v1

The file structure, metadata, producer requirements and reader behavior.

Tools

All the tools, with language and licence →

Implementations