Skip to content

Mac Apps

audible-viewer-mac

Native macOS audiobook player with synchronized word-level captions. Logs into Audible, pulls the library, plays AAXC audio, and renders pre-baked WhisperX transcripts as scrolling text with the current word highlighted. ADHD-friendly listen-and-read on the desktop.

  • When you want a real Mac player with native titlebar, AppKit-grade text rendering, AVPlayer audio sync, and dock/menu integration.
  • When you want pre-baked transcripts with word-level timing accuracy that on-device live transcription cannot match.
  • When the iPhone counterpart (audible-viewer-ios) is too small a screen for sustained reading.

The Mac app is the front. The Python sidecar in ~/apps/audible-viewer/ is the backend:

  1. Run the sidecar locally: cd ~/apps/audible-viewer && python3 server.py 8080
  2. Launch AudibleViewer.app. It hits http://127.0.0.1:8080 for the library list, transcripts, audio, and cover art.
  3. Pick a book. Audio streams via AVPlayer. Transcript renders in SwiftUI with the current word highlighted.

Eventually the sidecar will be bundled inside the .app bundle and spawned on launch — currently it is run by hand.

  • Repo: ~/apps/audible-viewer-mac/
  • Backend repo: ~/apps/audible-viewer/ (Python sidecar — keeps doing the heavy lifting with WhisperX)
  • Project file generated by xcodegen from project.yml — never edit AudibleViewer.xcodeproj directly.
  • Tech: Swift 5.9, macOS 14+, SwiftUI, AVFoundation, Combine.
Terminal window
cd ~/apps/audible-viewer-mac
xcodegen generate
xcodebuild -project AudibleViewer.xcodeproj -scheme AudibleViewer -configuration Debug build
open ~/Library/Developer/Xcode/DerivedData/AudibleViewer-*/Build/Products/Debug/AudibleViewer.app

Or open the xcodeproj in Xcode and hit Run.

Picked Swift on 2026-05-03 specifically for the Mac polish — real titlebar, real toolbar, AppKit-grade text rendering for captions, native AVPlayer for sub-frame audio sync, dock icon, menu bar, real shortcuts. The web player in ~/apps/audible-viewer/ keeps living, but as the backend / server. The Mac app is the front.

  1. Scaffold (current) — talks to localhost:8080, plays audio, renders transcript with word-level highlight.
  2. Audible login — Python sidecar grows audible-cli integration, app surfaces a Connect Audible flow.
  3. Bundled sidecar — Python server ships inside the .app bundle, spawned on launch.
  4. Polish — dock badges for in-flight imports, library art grid, theme parity with the web version.
  • Today the sidecar must already be running on localhost:8080 before the app launches. Bundling is on the roadmap, not done yet.
  • Captions UI is rewritten in SwiftUI and does not match the web index.html rendering pixel-for-pixel — intentional, the goal is to feel native.
  • The Mac app does not re-implement WhisperX; the Python side keeps doing the heavy lifting.