TotalRec is a macOS app for recording system audio and microphone input, transcribing the result locally or through a configured service, and generating reusable transcript-derived artifacts. It streamlines capture → transcript → insights while keeping sessions recoverable between launches.
- Record mixed audio (system + microphone) to a single M4A file
- Import existing audio from disk or by URL
- Transcribe with:
- Apple Speech (on-device or cloud)
- OpenAI diarized transcription (with optional Known Speakers)
- TScript servers with model discovery, timestamps, translation, and optional diarization
- Review transcript segments, correct wording, find and replace text, and play timed clips
- Reassign, merge, and label speakers; request name suggestions from OpenAI or SambaNova
- Generate meeting notes, action lists, decision logs, customer-call summaries, podcast summaries, or custom artifacts
- Export audio, transcripts (
.txt,.json,.vtt,.srt), and insights (.txt,.json) - Resume, inspect, switch, and delete persisted recording sessions
- Start and stop recording from the menu bar
The app is organized in three tabs:
- Capture
- Start/stop recording system audio + mic
- Import audio from file or URL
- Save mixed audio
- Quick preview of the latest transcript (if available)
- Transcript
- Run transcription with Apple, OpenAI, or TScript
- Correct transcript text and apply literal replacements
- Play individual timed segments or surrounding context
- Manage speaker aliases and assignments, merge speakers, and consolidate consecutive turns
- Preview/copy the final document and export Plain Text, JSON, WebVTT, or SubRip
- Insights
- Choose a built-in workflow or supply a custom prompt
- Stream generation through OpenAI Responses or SambaNova-compatible chat completions
- Stop an in-progress generation without replacing the last saved artifact
- Export or copy the generated artifact
- Xcode 26.1+ (tested with Xcode 26.6)
- macOS 14+
- An OpenAI API key for OpenAI transcription, OpenAI insights, or OpenAI name suggestions
- A SambaNova API key for SambaNova insights or name suggestions
- A reachable TScript server for TScript transcription
- Open the project in Xcode.
- Select the shared
TotalRecscheme and run. - On first record, macOS will request Screen Recording permission. Grant it in:
- System Settings → Privacy & Security → Screen Recording → enable for this app
- Configure the providers you want to use in Settings.
Run the complete unit-test suite from the command line with:
xcodebuild test \
-project TotalRec.xcodeproj \
-scheme TotalRec \
-configuration Debug \
-destination 'platform=macOS' \
CODE_SIGNING_ALLOWED=NOGitHub Actions runs the same build and test flow on the macos-26 runner.
The command above deliberately disables signing for CI-style tests. Do not launch that
unsigned app bundle for interactive QA when it uses your normal TotalRec configuration:
macOS may treat each rebuild as a different requester for the existing Keychain items.
For interactive testing, run the normally signed TotalRec scheme from Xcode.
To ship TotalRec to other Macs, build a universal Release app signed with a Developer ID Application certificate and distribute it in an Apple-notarized disk image. The repository includes a workflow that archives, exports, packages, notarizes, staples, and validates the release:
scripts/release.sh --preflight
scripts/release.shThis requires Apple Developer Program access, a Developer ID Application
certificate, and a notarytool Keychain profile. See
docs/distribution.md for setup and clean-Mac acceptance
testing. API keys, permissions, saved sessions, and provider settings remain
per-machine and are not included in the disk image.
Choose between:
- Apple (On-Device)
- Apple (Cloud)
- OpenAI (Diarized)
- TScript
The current provider is shown with a readiness summary. OpenAI requires a Keychain-backed API key. TScript requires a server URL and discovers the available models and capabilities from that server.
- OpenAI uses the Responses API for insight generation.
- SambaNova uses an OpenAI-compatible chat-completions transport.
- Provider model lists can be refreshed in Settings and are cached locally.
- API keys are stored in Keychain; non-secret provider settings are stored in Application Support.
- Enter your OpenAI API key in the app’s Settings window. It’s stored in Keychain.
- Upload chunking for long audio:
Auto(default): Splits long audio into multiple uploadsSingle Upload: Uploads the entire file at once and may fail for very large recordings
Provide up to 4 known speakers to improve diarization with OpenAI. Each entry requires both:
- Name
- Reference (either a
data:audio/...URL or a local file path)
If any row is partially filled, transcription with OpenAI will be disabled until the row is completed or cleared.
This is useful if transcribing known speakers repeatedly but in general the Suggest Names functionality works well enough for this purpose if names are mentioned in the transcript (i.e. when people introduce themselves)
Controls where speaker name suggestions come from and can be disabled. Name suggestions are enabled in the standard Debug and Release builds.
Configure the server URL in Settings, then refresh its model registry. Per-model options include language, translation, timestamps, diarization, speaker-count hints, and supported advanced decoding controls. HTTPS is required by default; insecure HTTP and invalid-certificate overrides are explicit opt-ins for trusted development servers.
Adjust system and mic gain before mixing down the recorded MOV into M4A.
- Start Recording: begins system + mic capture, writing a temporary MOV file that is mixed down to M4A
- Import Audio…: choose a local audio file or download from a URL
- Save Audio…: export the mixed (system output and mic) M4A
- Save Transcript…: choose a format to export the current transcript
- Transcribe Audio: runs the selected provider
- Apple: streams partial text to the UI
- OpenAI: optionally splits long recordings into multiple uploads and supports known speakers
- TScript: uploads to the selected server model and consumes structured timed/diarized output when available
- Request Suggestions: asks the configured provider for speaker name ideas
- Consolidate Consecutive Speakers: merges back-to-back turns by the same speaker
- Transcript editor: correct individual segments or raw text and apply literal replacements
- Playback: play timed clips and configurable surrounding context
- Export: save as .txt, .json, .vtt, or .srt
- Select meeting notes, action items, decisions, customer call, podcast summary, or a custom workflow
- Custom Prompt: keep
{{TRANSCRIPT}}where the formatted transcript should appear; if omitted, TotalRec appends the transcript - Stream, stop, copy, and export insight artifacts as
.txtor.json
- Screen Recording: required for capturing system audio
- Microphone: required for mic capture
If recording fails to start, check System Settings → Privacy & Security → Screen Recording and Microphone.
TotalRecAppowns the main window, Settings scene, and menu-bar extra.AppModelis the main-actor workflow coordinator and exposes the active/recent session state.SessionStorepersists session manifests, summaries, audio, transcripts, and insight artifacts under Application Support.- Recording runs through
SystemAudioRecorder→ temporary MOV →Mixdown.toM4Awith adjustable gains. - Transcription
- Apple:
FileTranscriber.transcribeFile(onDevicePreferred:)with streaming partials - OpenAI:
OpenAITranscriber.transcribeDiarizedwith optional chunking and known speakers - TScript:
TScriptTranscriberwith server model discovery and capability-aware requests
- Apple:
TranscriptStateis the canonical editable transcript model; transcript feature views handle editing, speakers, document output, and playback.InsightGenerationServicerenders workflow prompts and selects the OpenAI Responses or conversation transport.AIConfigManagerpersists provider settings and Keychain credentials;DiagnosticsLoggerwrites insight diagnostics under Application Support.- The UI uses native glass effects on macOS 26 and static surface fallbacks on macOS 14–15.
- “Screen capture permission required”: Grant Screen Recording permission and retry.
- Repeated Keychain authorization prompts during development: Quit any unsigned TotalRec build and run the normally signed
TotalRecscheme from Xcode. The app caches each credential lookup for its lifetime, so a single process should not request the same item repeatedly. - OpenAI transcription disabled: Ensure API key is set and no partially filled Known Speakers rows remain.
- Long audio: Try
Autochunking with OpenAI. - TScript models unavailable: Verify the server URL, refresh models, and confirm the selected model is runtime-available.
- Insight generation disabled: Verify the selected provider has an API key and a compatible model.
- Additional analytics and structured insight outputs
- More transcription and LLM providers
- Broader integration and UI automation coverage
MIT License
Copyright (c) 2025 Matthew Povey
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.