This is a fork of armynante/TP-7-VoiceSync. It swaps transcription to Parakeet via FluidAudio (Apple Neural Engine), adds a Notion output (a database page per recording, sorted by date), and talks to the TP-7 directly over MTP — no FieldKit required. Original README below.
A macOS menu bar app that automatically syncs, transcribes, and organizes your Teenage Engineering TP-7 voice recordings. Defaults to fully local transcription via Parakeet (FluidAudio, Apple Neural Engine), with optional on-device speaker diarization and a People manager that learns who's who. Outputs to Notion, Apple Notes, or local Markdown, and talks to the TP-7 directly over MTP.
- Automatic Device Detection — Detects when your TP-7 connects over MTP (no FieldKit required)
- Local Transcription via Parakeet — On-device Parakeet TDT via FluidAudio, running on the Apple Neural Engine, with no API key or internet required (after the model auto-downloads)
- Also Supports WhisperKit & ElevenLabs — WhisperKit as an alternative local engine, or ElevenLabs for cloud transcription
- Speaker Diarization — Optionally split transcripts into per-speaker turns entirely on-device (Parakeet only)
- People Manager — Enroll voices, reassign speaker turns to named people, and let the app auto-label known speakers in future recordings
- Notion Output — One database page per recording, sorted by date; the app provisions any missing properties for you
- Cloud Backup to S3 (Optional) — Upload recordings to AWS S3 with SHA256 deduplication
- Local Storage (Optional) — Copy recordings to a folder on your Mac when skipping S3
- Smart Titles & Summaries — Generates meaningful titles using an LLM via OpenRouter (optional)
- Apple Notes / Markdown Output — Creates notes with transcriptions, metadata, and playable audio links, or writes local Markdown files
- Menu Bar Interface — Quick access to recent recordings and sync status
- Soft Delete — Prevents re-syncing of recordings you've deleted
- Startup Recovery — Rebuilds the local library from S3, your local audio folder, and Notion if local state is lost (reinstall, container reset)
This app is 1000% vibe-coded using Claude Code while I was waiting for builds to pass on another project. It is definitely not reviewed seriously for security concerns or major bugs that could crash your computer. Install with caution.
Both local engines transcribe without sending audio to any cloud service and without an API key. Models auto-download from Hugging Face on first use and are cached locally, so no network is required afterward.
Parakeet is the recommended engine. It runs Parakeet TDT on the Apple Neural Engine via FluidAudio, so it's fast and battery-friendly.
- Choose Parakeet (Local, ANE) in the Setup Wizard or Settings > Transcription
- Pick a model variant:
- v2 — English-only, highest recall (default)
- v3 — multilingual (25 European languages plus Japanese and Chinese)
- Download the model — click "Download Model" and it fetches automatically, caching under
~/.cache/fluidaudio - Speaker diarization (optional) — enable it to split transcripts into per-speaker turns entirely on-device. This downloads a separate, small diarization model. See Speakers & People.
Parakeet Unified is a separate FluidAudio model that adds punctuation and capitalization natively, so transcripts come out already formatted and you can turn off the AI cleanup pass. It also runs on the Apple Neural Engine.
- Choose Parakeet Unified (Local, English) in the Setup Wizard or Settings > Transcription, then click "Download Model"
- English only — for other languages, use Parakeet TDT v3
- Trade-offs: no speaker diarization, no per-speaker splitting of multi-track TP-7
/recordings, no overdub notes for multi-track/memofiles, and no vocabulary boosting (dictionary trigger→replacement still applies). Single-track memos — the common TP-7 case — are unaffected. - AI cleanup becomes optional — since punctuation is native, you can disable transcript cleanup under Settings > Transcription. The LLM is still useful for false-start removal, paragraphing, bullet points, and titles/summaries.
WhisperKit by Argmax is also supported if you prefer Whisper models.
- Choose WhisperKit (Local) in the Setup Wizard or Settings > Transcription
- Select a model (Base or Distil Large v3 recommended)
- Download the model — it fetches from argmaxinc/whisperkit-coreml and runs on-device via CoreML
Each model is cached independently, so you can switch models and download the new one the same way.
When speaker diarization is enabled (Parakeet only), each transcript is broken into "Speaker N" turns. The People manager lets you turn those anonymous labels into named people — and teaches the app to recognize them automatically next time.
- Add people in the People screen. Mark yourself with "This is me" if you like.
- Reassign a turn in a recording's detail view: tap a speaker label and pick a person (or create one on the spot). The audio for that turn is enrolled as a voice sample and folded into that person's voice embedding.
- Auto-labeling — as you correct turns, the roster of known voices grows. Future recordings match segments against enrolled people and label them automatically, so the corrections you make compound over time.
All voice embeddings and samples live locally in the app's database; nothing is uploaded.
AI-generated titles and summaries currently require OpenRouter (a cloud LLM API). Local LLM inference — so titles and summaries can also run fully offline on Apple Silicon — is a possible future addition. Suggestions and contributions are welcome via an issue.
The Teenage Engineering TP-7 is a premium portable audio recorder designed to capture sound, music, interviews, and ideas with zero friction. Key features include:
-
128GB internal storage — enough to record 5 minutes a day for 20 years
-
24-bit/96kHz audio quality — professional-grade recording
-
Motorized tape reel — a beautiful, functional interface element for scrubbing and navigation
-
Built-in microphone and speaker — record and playback anywhere
-
7-hour battery life — all-day recording capability
-
Instant memo mode — press the memo button when the device is off to start recording immediately
-
Teenage Engineering — Official website
-
TP-7 Product Page — Full specs and details
-
TP-7 Guide — Official user guide
- macOS 26.0 (Tahoe) or later on Apple Silicon (the app is arm64-only; Intel Macs are not supported)
- Transcription (pick one):
- Parakeet (local, free, ANE) — download a model once, then transcribe offline (recommended)
- WhisperKit (local, free) — download a model once, then transcribe offline
- ElevenLabs API key (cloud) — pay-per-use cloud transcription
- Storage (pick one):
- AWS S3 bucket with access credentials (optional, enables playback links in notes)
- Local folder on your Mac (required if you skip S3)
- Output (optional, any combination): Notion, Apple Notes, or local Markdown files
- OpenRouter API key (optional) for AI-generated titles and summaries
- Download the latest release from GitHub Releases
- Open the DMG file
- Drag the app to your Applications folder
- Launch TP-7 VoiceSync from Applications
On first launch, TP-7 VoiceSync opens a Setup Wizard to walk you through configuration. You can also re-run it anytime via Settings > General > Run Setup Wizard Again.
The wizard guides you through:
- Transcription (required): Parakeet (local, ANE) — or WhisperKit (local) or ElevenLabs (cloud)
- Storage (choose one): S3 (optional) or a local folder on your Mac
- AI Titles (optional): OpenRouter
- Notes (optional): Apple Notes, or local Markdown files if you skip Notes
- Notion (optional): point it at a database and it provisions any missing properties for you
After setup, watching/syncing TP-7 recordings is enabled by default (you can toggle it in Settings > General). If you run into weird syncing behavior right after initial setup or a permissions prompt, try quitting the app and launching it again.
- Connect your TP-7 via USB
- On the TP-7, enter MTP mode (hold STOP while turning the device on)
- The app detects the device automatically over MTP
Option A: Parakeet (Local, ANE — Recommended)
- In the Setup Wizard or Settings > Transcription, select "Parakeet (Local, ANE)"
- Choose a model variant (v2 for English, v3 for multilingual)
- Click "Download Model" and wait for the download to complete
- (Optional) Enable Speaker diarization to split transcripts by speaker — see Speakers & People
- Enable "Enable automatic transcription"
Option B: WhisperKit (Local)
- In the Setup Wizard or Settings > Transcription, select "WhisperKit (Local)"
- Choose a model (Base or Distil Large v3 recommended)
- Click "Download Model" and wait for the download to complete
- Enable "Enable automatic transcription"
Option C: ElevenLabs (Cloud)
- Sign up at elevenlabs.io
- Go to your profile and copy your API key
- In TP-7 VoiceSync, go to Settings > Transcription
- Enter your ElevenLabs API key and click "Verify"
You can skip this step — recordings will be stored in a local folder. If you want cloud backup with playback links in notes:
- Create an S3 bucket in the AWS Console
- Create an IAM user with S3 access (recommended policy:
AmazonS3FullAccessor a custom policy for your bucket) - Generate an Access Key ID and Secret Access Key for the IAM user
- In TP-7 VoiceSync, go to Settings > Storage and enter your bucket name, region, and prefix
- In the same section, enter your AWS Access Key ID and Secret Access Key
- Click "Test Connection" to verify
OpenRouter provides LLM access for generating intelligent titles and summaries.
- Sign up at openrouter.ai
- Get your API key from the dashboard
- In TP-7 VoiceSync, go to Settings > Enhancement
- Enter your OpenRouter API key
- Go to Settings > Transcription and select your preferred model
- In TP-7 VoiceSync, go to Settings > Transcription
- Enable "Send to Apple Notes"
- Set your preferred folder name (default: "TP-7 Transcripts")
- Choose the link expiry duration for audio playback links
The app provisions the database for you — point it at any database (even a blank one) and it adds whatever properties are missing.
- Create an internal integration at notion.so/my-integrations and copy its "Internal Integration Secret" (starts with
ntn_orsecret_) - Share your target database with that integration: open the database, click ••• > Connections, and add the integration
- Copy the database ID from its URL — the 32-character hex string right before
?v= - In the Setup Wizard (or Settings > Transcription), enter the Integration Secret and Database ID, then click "Provision & Connect"
The app adds any of these properties that don't already exist — it never modifies or deletes existing columns or data:
| Property | Type | Used for |
|---|---|---|
| (title) | Title | Page title — reuses whatever your title column is called |
Date |
Date | Recording date, so views can sort by date |
Filename |
Rich text | TP-7 device filename |
Duration |
Rich text | Recording length (mm:ss) |
Language |
Rich text | Detected language |
Size |
Rich text | Audio file size |
Audio |
URL | Playback/download link (only set if S3 is enabled) |
File |
Rich text | Download URL or local file path |
Summary |
Rich text | LLM-generated summary (only set if OpenRouter is enabled) |
Only the transcript and overdubbed notes are written into the page body. Summary and recording details are stored in properties. If a property name already exists with an incompatible type (e.g. you already have a Duration number column), the app creates an alternate TP7 Duration column instead and shows a warning.
The local recording database lives in a SwiftData store on your Mac. If that store is lost — you reinstall the app, reset the container, or move to a new machine — the app rebuilds it on launch by scanning whatever sources you have configured, in this order:
- S3 — lists every
.wavunder your configured bucket/prefix and re-creates any recording that isn't already tracked (restoring size, S3 key, and recorded date). - Local audio folder — scans for
.wav/.mp3/.m4afiles not already tracked and re-parses WAV metadata (duration, sample rate). - Notion — reads back every page in your database, restores recordings that only exist there (title, summary, language, and the transcript from the page body), and enriches recordings recovered from S3/local that are still missing a transcription.
Recovery is idempotent — recordings are matched by filename, so re-running it never creates duplicates. It runs automatically at startup before device watching begins; no action is required. Sources you haven't configured are skipped.
TP-7 VoiceSync runs locally by default, and only uses network services if you enable them (S3, ElevenLabs, OpenRouter). Credentials are stored in your Mac's Keychain.
When you first use the app, you may see the following permission prompts:
To watch for new recordings, the app talks to the TP-7 directly over MTP via USB. On Apple silicon Mac laptops, macOS may ask, “Do you want to connect the USB accessory to this Mac?” Choose Allow so the Mac can exchange data with the TP-7.
API keys and cloud credentials are stored securely in the macOS Keychain (not in plaintext files).
- Parakeet / WhisperKit (Local): transcription, and speaker diarization/voice enrollment, run on-device after you download a model. No audio is sent anywhere.
- ElevenLabs / OpenRouter / S3 / Notion: audio and/or text is sent to those services when enabled.
The app uses AppleScript to create notes in Apple Notes. macOS will ask for permission to allow the app to control Notes. Click "OK" to grant this permission.
The app can notify you when your TP-7 connects and when recordings are synced. You can enable or disable these in Settings > General.
The app needs network access to upload to S3, sync to Notion, and communicate with the ElevenLabs and OpenRouter APIs. This is handled automatically by macOS. If you use Parakeet (or WhisperKit) with local storage and local Markdown output, no network access is required after the initial model download.
- Connect your TP-7 via USB and enter MTP mode (hold STOP while turning the device on)
- New recordings automatically sync — the app detects new WAV files and processes them (watching is enabled by default)
- View recent recordings in the menu bar popover
- Access all recordings via "Open Recordings" in the menu
- Find transcriptions in whichever outputs you enabled — Notion, Apple Notes, and/or local Markdown
- Correct speakers in a recording's detail view when diarization is on — reassigning turns to people trains auto-labeling for future recordings
Each transcript includes:
- Full transcription text (split into per-speaker turns when diarization is enabled)
- AI-generated title and summary (if enabled)
- Recording metadata (date, filename, duration, file size, language)
- Play and download links for the audio (when S3 is enabled)
- Check that your TP-7 is in MTP mode (hold STOP while turning the device on)
- Try disconnecting and reconnecting the USB cable
- Check Settings > General to ensure device watching is enabled (it's on by default)
- If you just installed the app or just granted a permission prompt, try quitting the app and launching it again
- Verify your S3 bucket settings and AWS credentials in Settings > Storage
- Check that your IAM user has permission to write to the bucket
- Ensure you have internet connectivity
- Try the "Test Connection" button in Storage settings
- Parakeet / WhisperKit: Make sure the model is downloaded (check Settings > Transcription for status)
- ElevenLabs: Verify your API key in Settings > Transcription and check your accoun
0 comments
log in to comment.