Transcripts with speakers, on‑device.
ScribeKit turns audio files into transcripts that know who said what. NVIDIA Parakeet v3 and speaker diarization run on the Apple Neural Engine: no server, no API key, no Python.
Package.swift
dependencies: [ .package( url: "https://github.com/pieralukasz/ScribeKit.git", from: "0.1.0" ),]Swift 6. The models (about 460 MB for speech, 20 MB for speakers) download from Hugging Face on first use and are cached on disk.
Transcribe a meeting
import ScribeKitlet transcript = try await Scribe.shared.transcribe( meetingURL, options: .init(language: "en"))for segment in transcript.segments { let name = transcript.speaker(for: segment.speakerID)?.name ?? "" print("\(name): \(segment.text)")}let srt = try TranscriptRenderer.render(transcript, as: .srt)What you get
Speech to text with the hard parts done
Parakeet v3 on the Neural Engine
NVIDIA’s TDT 0.6B v3 through FluidAudio’s Core ML port. 25 European languages, fully offline once the model is downloaded.
Speakers, not just words
Offline diarization labels who spoke when. Speakers are numbered in the order they first talk, ready to rename.
Call mode for two tracks
Give it the microphone and the system audio. Everything on the mic is you; only the other side is diarized.
Echo removal
Words your microphone picked up from the speakers are matched against the system track and dropped.
Markdown, SRT, WebVTT, JSON
Front matter for note apps, subtitle cues split at clause boundaries, and a Codable transcript model.
Bring your own recognizer
The segment builder and renderers are plain Swift with no models, so they work with any speech recognizer.
A few lines to a transcript
Add the package, call transcribe, render the result. The guides cover call recordings, output formats and model handling.