Skip to content

Repository files navigation

Audio8 Transcriber

A native macOS menu-bar recorder and local speech-to-text app powered by Audio8-ASR-0.1B-iOS-ANE. Press ⌘⇧U from anywhere, speak for up to 30 seconds, and Audio8 transcribes on-device and pastes the result back into the app you were using.

  • Private by design: microphone audio and model inference stay on the Mac.
  • Fast on Apple silicon: Core ML runs the audio tower on the Apple Neural Engine; an int4 ONNX decoder runs on CPU.
  • Two workflows: global/menu-bar recording and local audio-file transcription.

Important

Audio8's bundled model and upstream package are licensed under CC BY-NC 4.0. Review License before redistributing or using this project commercially.

Screenshots

Record from the window, menu bar, or global shortcut

Audio8 Transcriber Record screen with a 30-second recording control

Transcribe a local audio file

Audio8 Transcriber showing a completed file transcription and inference timings

Features

Capture from anywhere

  • Global ⌘⇧U shortcut starts and stops recording without bringing the Dock window forward.
  • A native menu-bar status item remains available after the main window closes.
  • Left-click the menu-bar microphone to start or stop; Control-click/right-click opens its menu.
  • Visible menu-bar countdown and red recording state.
  • Automatic stop at exactly 30 seconds.
  • The window's Record tab mirrors elapsed time and agent state.
  • Recordings shorter than 0.25 seconds are rejected cleanly.

Transcribe and paste

  • Captures the previously frontmost application when recording starts.
  • Copies every successful recording transcript to the clipboard.
  • With Accessibility permission, reactivates the prior app and posts ⌘V automatically.
  • If auto-paste is unavailable, the transcript remains on the clipboard with a clear fallback message.
  • The Dock window receives the transcript and detailed stage timings over local Mach XPC.
  • Temporary microphone WAV files are deleted after success, failure, or cancellation.

Audio-file transcription

  • Native macOS file picker.
  • Supports WAV, MP3, M4A, FLAC, AIFF, and other formats readable by AVFoundation.
  • Strict 30.000-second maximum, checked before full decoding and again after conversion to 16 kHz samples.
  • File jobs display results in the app and intentionally do not auto-paste.
  • Selectable transcript with Copy and Clear controls.
  • Shows audio duration, total inference time, real-time speed, and Mel/ANE/Decode timing.

Setup and diagnostics

  • Live status for the menu-bar agent, model, microphone permission, Accessibility permission, hotkey, and Start at Login.
  • Select a preferred input device or follow the macOS system default.
  • 1.2-second microphone test with detected peak level and device name.
  • Direct permission requests and links to the relevant System Settings panes.
  • Per-user LaunchAgent keeps the menu-bar recorder available after login.
  • Model manifest, file sizes, and SHA-256 hashes are verified whenever the model loads.

Requirements

  • macOS 15.0 or later
  • Apple silicon Mac
  • Xcode with the macOS SDK and Swift 6 toolchain
  • Git LFS for the bundled model assets
  • At least 2 GB of free disk space for the checkout, Swift release artifacts, and final app (3 GB recommended while developing)

The final application is approximately 536 MB. Most of that is the bundled local model.

Build from source

git lfs install
git clone https://github.com/<owner>/Audio8-Transcriber.git
cd Audio8-Transcriber
git lfs pull
./build-app.sh

The build script:

  1. Builds the Swift package in release mode.
  2. Creates the Dock application and LSUIElement menu-bar helper.
  3. Embeds the model and ONNX Runtime only in the helper that performs inference.
  4. Signs nested code from the inside out with an ad-hoc local signature.
  5. Verifies both app bundles and helper entitlements.

The result is written to:

build/Audio8 Transcriber.app

Install locally

Quit any running Audio8 Transcriber and Audio8 Agent before replacing or moving the bundle. A running macOS process keeps its original bundle path cached.

ditto "build/Audio8 Transcriber.app" "/Applications/Audio8 Transcriber.app"
open "/Applications/Audio8 Transcriber.app"

This source build is ad-hoc signed and is not notarized for redistribution as a prebuilt download. Building locally avoids the usual downloaded-binary Gatekeeper path. A public binary release should use a Developer ID Application certificate, hardened runtime, notarization, and stapling.

First-run setup

  1. Move the app to its final location—normally /Applications—before opening it.
  2. Open Audio8 Transcriber and choose Setup.
  3. Request Microphone permission. macOS grants this to the bundled Audio8 Agent, because the agent owns capture.
  4. Optionally request Accessibility permission for automatic paste into other apps. Recording and clipboard copy still work without it.
  5. Select or test the microphone you want to use.
  6. Confirm that Agent, Model, Hotkey, and Start at Login show as ready.
  7. Press ⌘⇧U, speak, then press ⌘⇧U again—or wait for the 30-second automatic stop.

The first launch is slower because the app verifies model assets and warms Core ML/ONNX. Later transcriptions reuse the warm agent process.

Usage

Global recording

  1. Focus the text field where the transcript should appear.
  2. Press ⌘⇧U or click the menu-bar microphone.
  3. Speak for 0.25–30 seconds.
  4. Press the shortcut/click again to stop, or let it auto-stop.
  5. Audio8 transcribes locally, copies the text, and auto-pastes when Accessibility is allowed.

File transcription

  1. Open the Dock window.
  2. Choose Audio file.
  3. Select a supported clip no longer than 30 seconds.
  4. Read or copy the transcript and inspect the performance metrics.

Architecture

flowchart LR
    H[⌘⇧U / status item] --> A[Audio8 Agent]
    M[Microphone] --> A
    F[Audio file picker] --> UI[SwiftUI Dock app]
    UI <-->|authenticated Mach XPC| A
    A --> R[16 kHz mono resampling]
    R --> ANE[Core ML audio tower · ANE]
    ANE --> CPU[int4 ONNX decoder · CPU]
    CPU --> T[Transcript]
    T --> UI
    T --> C[Clipboard / optional auto-paste]
Loading

Dock application — Audio8Transcriber

  • SwiftUI Record, Audio File, and Setup tabs.
  • File picker and security-scoped bookmark creation.
  • XPC client and live result/state display.
  • LaunchAgent installation, reconnection, and diagnostics.

Menu-bar helper — Audio8Agent

  • LSUIElement process with no Dock icon.
  • Carbon global-hotkey registration.
  • NSStatusItem recording/countdown UI.
  • Microphone capture, device selection, ASR model ownership, and cleanup.
  • Clipboard/Accessibility paste pipeline.
  • Mach XPC server; incoming clients must match the exact signed main application's designated requirement.

Local IPC

The app uses a launchd-managed Mach service, not TCP, HTTP, or WebSockets. No local network port is opened. The helper accepts only the matching signed main application, preventing unrelated same-user processes from invoking microphone or transcription controls through the service.

See development.md for source layout, state flow, build internals, and contributor notes.

Technical specifications

Property Value
Model Audio8 ASR 0.1B iOS/ANE deployment package
Model input 16 kHz mono PCM
Clip duration 0.25–30.000 seconds
Audio encoder Core ML on Apple Neural Engine
Decoder Quantized int4 ONNX Runtime on CPU
UI SwiftUI + AppKit
Capture AVFoundation / AVAudioRecorder
Hotkey Carbon RegisterEventHotKey, ⌘⇧U
IPC Authenticated Mach XPC through launchd
Minimum OS macOS 15.0
Architecture arm64 / Apple silicon
Processing Local-only; no cloud endpoint

On the Apple M4 development machine used for the screenshots, the included 11-second English sample transcribed in approximately 173–176 ms after warm-up (about 62× real time). Performance varies by hardware, thermal state, and input.

Privacy and security

  • No cloud APIs, analytics SDKs, account system, API keys, or telemetry.
  • The app does not open network sockets for recording, transcription, or IPC.
  • Audio files selected by the user are read locally and are not modified.
  • Temporary microphone recordings are removed after processing.
  • Recording transcripts are placed on the system clipboard; clipboard managers may retain them according to their own settings.
  • Auto-paste requires Accessibility/PostEvent access and intentionally uses an unsandboxed local helper. The current source-build distribution is therefore not a Mac App Store sandbox design.
  • XPC callers are checked against the built main app's designated code-signing requirement.
  • Model assets are integrity-checked before use.

Testing

Run the package tests:

swift test -c release --package-path Audio8Package/SpeechKit

Build and verify the app bundle:

./build-app.sh
codesign --verify --deep --strict --verbose=2 \
  "build/Audio8 Transcriber.app"

The test suite covers model-bundle validation, corrupted/missing assets, mel bucket selection, token counts, and exact duration/sample boundaries.

Uninstall

Unregister the per-user agent before deleting the application:

open "/Applications/Audio8 Transcriber.app" --args --unregister-agent

Then remove Audio8 Transcriber.app. If necessary, the registration file is:

~/Library/LaunchAgents/audio8-agent.plist

Limitations

  • The included Audio8 model is optimized for English; this is not a multilingual replacement for Whisper.
  • Maximum input length is 30 seconds. There is no streaming recognition or partial transcript UI.
  • The global shortcut is currently fixed to ⌘⇧U and may conflict with another application's shortcut.
  • Auto-paste depends on Accessibility permission and the target app accepting a synthetic paste command.
  • The local build is ad-hoc signed, not hardened/notarized, and intended for source builds or development use.
  • The bundled model license is noncommercial.

License

This repository includes and adapts the Audio8 SpeechKit package and bundled model assets distributed under the Creative Commons Attribution-NonCommercial 4.0 International license. See LICENSE and the preserved upstream license at Audio8Package/LICENSE.

Commercial use requires separate permission from the relevant rights holder. Third-party ONNX Runtime components retain their own upstream license terms.

Acknowledgements

About

UI for Audio8 transcription model

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages