The player, rebuilt around your thumb — and search that reads the words. Still fully on-device: no account, no catalogue, no network — nothing about your listening leaves the phone.
New
- 🎛️ A player built for touch — tap the cover to turn it over to the track's facts (genre, year and first release, language, format, file, play count); hold it for the actions sheet; swipe sideways to change track with the next cover peeking in; pull it down to close. A thin live seek bar: touch to place the handle, drag to scrub, slide the finger below the bar to slow down to half and then a quarter speed, and a bubble shows the time — and the lyric line sung there.
- ▶️ Transport that talks back — the play button changes shape while it plays, held skip buttons scan through the track faster and faster, and the mode button cycles order / shuffle / SMART on a tap and opens the full choice (SMART queue length included) on a hold. Soft ticks under the finger while scrubbing and on the A–Z rail; pause and resume fade instead of cutting.
- 🎨 A cloud of the cover's colours drifts behind the artwork — and costs nothing while paused.
- 🔊 Where the sound is going — the top bar names the speaker, the wired headphones or the Bluetooth device; on Android a tap opens an output sheet.
- ⏭️ Next up in one line under the transport, the queue peeking at the bottom, and Playing from … opens the playlist, album, artist, genre or folder the queue came from. Artist and album under the title are links; a track credited to several artists lets you choose which one to open.
- 📝 Timed lyrics follow the song — with LRC timing the lyrics sheet lights up the line being sung, keeps it in view, and a tap on a line seeks there.
- 🔎 Search by the words — the search box now also finds tracks by the lyrics embedded in their files, with the matching excerpt highlighted under the result. Phrases match across line breaks and punctuation in any script; the index is built once, in the background, and kept.
- 🗂️ A duplicate finder that decides — every copy shows its format, bitrate and size; each group names the copy to keep (lossless first, then codec-aware bitrate, then size, then what you already love), says how much space the rest would free, and remembers your verdicts.
- 🗺️ Map, more navigable — a region menu with track counts, tappable labels that never overlap, pinch anchored under the fingers, Show tracks opens a region as a collection, Play unheard in the never-played lens, and regions named by the evidence of the whole region.
- 🧠 SMART reads the year and the language — the text behind the recommender now carries a track's first-release year and its language, from the tag or from the script, so a Romanian song is no longer treated as an English one.
- 📜 Long names scroll instead of being cut off.
Fixed
- The pause button no longer flickers to Play while a seek buffers
- Volume changed from the system's device panel reaches the player
- The colour cloud is visible on the dark theme, the layout fits a phone screen, and the cover keeps its size
- Album and artist pages run edge to edge; the queue sheet stays below the status bar
- Previous restarts the song past three seconds and steps back before that; a swipe never shows the wrong cover
- Map layouts use half the memory at the 3000-track cap, and returning to Map or For You reuses the work already done
- The tag-fact cache survives a failed save
Install (Android)
Download LatentJam-v0.4.0-arm64.apk (98 MB — right for virtually every phone from the last decade; if unsure, pick this one). LatentJam-v0.4.0-armv7.apk exists for old 32-bit devices. Open it on your phone — it upgrades any earlier release in place. You'll need to allow installing unknown apps, and tap through Play Protect's sideload warning. Requires Android 7.0+.
Install (iOS)
LatentJam-v0.4.0-unsigned.ipa is an unsigned build: sideload it with AltStore, Sideloadly or similar (they re-sign it with your Apple ID). Built for iOS 15+, arm64.
⚠️ Still an early experimental build for sideloading — not a store release. SMART becomes good once a chunk of your library has been analysed in the background.