Skip to content

v1.0 — your collection deserves a real player

Choose a tag to compare

@LeoHChen LeoHChen released this 02 May 23:05
823de06

Music for your own collections, ported to your iPhone.

The 1.0 release. HarmonIQ is now a feature-complete iPhone music player for the people who never threw out their MP3 folders — the CD ripper with three external drives full of FLACs, the Napster-era curator with a meticulous "Best Of 2003" directory, the audio-archivist who treats a hard drive like a library and not a cache.

Built around three load-bearing claims:

  • You own your files. No streaming service, no cloud locker, no account. The MP3s and ripped CDs on your drive are yours; HarmonIQ plays them in place.
  • You own your playlist algorithm. Smart Play's rule-based modes are pure functions you can fork. The AI modes prefer Apple Intelligence's on-device foundation model — your library never leaves the phone.
  • You own your taste. No engagement metrics, no recommendation graph, no listening history shipped off for ad targeting.

Works on the plane. Works in the subway. Works in the woods.

What's new since 0.4

Audio

  • Functional 10-band EQ. AVAudioEngine + AVAudioUnitEQ replaces AVAudioPlayer; sliders move the actual signal. Built-in presets (Flat, Rock, Pop, Jazz, Classical, Bass Boost, Vocal Boost) plus persisted custom curves. (#28)
  • Live Activity for background playback. Lock-screen banner + Dynamic Island compact / expanded / minimal layouts; throttled to respect ActivityKit budgets. (#18)
  • Diagnostic logging. os.Logger instrumentation in the playback path (subsystem net.leochen.harmoniq, category playback) — track-finish success flags, decode errors, audio-session interruptions, route changes, scope releases. Filter in Console.app to triage mid-track aborts. (#38)

Smart Play

  • Three AI modes. Vibe Match (free-text vibe → curated queue), Storyteller (8–12 track narrative arc with a blurb), Sonic Contrast (alternates by style). (#25)
  • On-device AI by default. Prefers Apple Intelligence's foundation model on iOS 26 + iPhone 15 Pro+ — no API key, no network. Falls back to Anthropic when a key is configured.
  • Save AI queues as playlists. Tap the bookmark in the player → name → it lands as a regular drive-resident playlist with the prompt and mode stashed for later. (#58)
  • Two more rule-based modes. Genre Tunnel (stay inside the playing track's genre) and Era Walk (chronological tour) join the existing Mood Arc / Deep Cut / One Per Artist additions. 14 rule-based + 3 AI modes total.

Visualizers

  • Eight fancy oscilloscope variants. Neon Glow, Harmonic Layers, Mirror Wave, Filled Wave, Radial Wave, Waterfall, Lissajous, Beat Flash. SwiftUI total: 16 styles. (#27)
  • Skinned-player tap-cycle — single tap on the 76×16 visualizer rect cycles all 16 styles in the Winamp player too. (#36)
  • Radial Pulse fix — meter tap-format mismatch was suppressing levels; replaced with format: nil so the engine wires the live format correctly. (#41)

Library

  • Favorites. Heart toggle on both player skins; saves to a system "Favorites" playlist on the drive — favorites travel between devices via the on-drive playlists.json. (#33)
  • Incremental reindex. Skip work when the drive is unchanged (cheap fingerprint check); when it changed, only re-extract metadata for files whose mtime changed. New files added, missing files removed. (#55)
  • Drive auto-load + Reload button. App foreground re-reads any drive that was offline at launch. Manual Reload button per drive in Settings re-reads the cached index without a full filesystem walk. Reindex now passes a force flag so explicit taps never silently no-op.

App polish

  • Settings → About shows real Version, Build, Commit (short SHA), Release tag, Built-at — populated by a postBuildScript. "Copy build info" puts a multi-line block on the clipboard for bug reports. (#52)
  • Settings → Feedback — one-tap links to file feature requests, file bugs (label-prefilled), browse open issues, star the repo. (#59)
  • Landing site at https://www.leochen.net/HarmonIQ/ — sun-bleached gradient hero, all 9 bundled skins as native previews, 16-style visualizer grid, "Make it yours" contribution invitations. Plain HTML/CSS, no analytics. (#57)
  • Chrome bar consistency. Skinned-player top bar redesigned — five buttons (skin, save-AI, favorite, sleep, close), all 36×36 hierarchical-white SF Symbols. Search and Playlists tabs gain proper inline titles. Save-AI uses bookmark.fill for clear semantics.
  • Branded launch screen. Sun-Bleached Grooves splash matching the app icon (sunset gradient + black vinyl disc).

Requirements

  • iOS 16+
  • AI Smart Play with on-device backend: iOS 26 + iPhone 15 Pro or newer + Apple Intelligence enabled
  • Live Activity / Dynamic Island: iOS 16.1+ for activities; iPhone 14 Pro+ for the Dynamic Island layout

Where to put your music

Anywhere Files can see it: USB-C SSD, on-device storage, iCloud Drive, SMB share. Settings → Add Music Drive… picks any folder and indexes its contents. The index lives in a HarmonIQ/ folder on the drive itself, so the same drive works on any iPhone without re-scanning.

🤖 Generated with Claude Code