Releases: fvhde/origin-ghost-player
Release list
Origin Ghost Player v0.3.4
Hotfix release.
Fixes #2: pressing play with Tidal as the mirrored source could flicker rapidly between
play/pause instead of starting cleanly, eventually exhausting the system's AudioTrack pool
(No More Track Available). Root cause: MediaProbeListener.playSilentBlip() unconditionally
re-issued transportControls.play() on the real controller after each keep-alive blip, "just in
case" the blip had interrupted playback. It never actually did on this device, but Tidal's
onPlay() isn't idempotent — calling it while already playing hard-restarts its player, and each
restart looked like a fresh play transition, queuing more blips faster than they could drain.
- Removed the redundant post-blip resume call.
- Added a 2.5s floor between silent-blip bursts as defense in depth.
Fixed and verified on-device by @serrj-sv in #3 — thank you!
Same signing key as origin-isle and prior releases (fingerprint unchanged). Two identities as
before — install whichever matches what you had:
origin-ghost-player-kugou-0.3.4.apk(com.kugou.android.lite)origin-ghost-player-luna-0.3.4.apk(com.luna.music)
Origin Ghost Player v0.3.3
Fixes #1: OriginPlayer's now-playing chip could get stuck animating "playing" forever
after the source app was killed or swiped away in the background — the last
PlaybackState it had ever seen from us was STATE_PLAYING, so isActive=false alone
gave it nothing to react to. This release explicitly pushes a STOPPED state and drops
the stale metadata before deactivating the session, so there's a real "this stopped"
signal.
Same signing key as origin-isle and prior releases (fingerprint unchanged). Two identities
as before — install whichever matches what you had:
origin-ghost-player-kugou-0.3.3.apk(com.kugou.android.lite)origin-ghost-player-luna-0.3.3.apk(com.luna.music)
v0.3.2
Hotfix for two bridge bugs found on-device:
- Firefox never stopped: sources that report no
PlaybackStateat all (Firefox does this)
used to be mirrored as "playing" forever, with no way to ever notice a real stop — even after
the tab finished or Firefox was closed. Fixed with a staleness timeout: if such a source's
metadata sits unchanged for 3+ minutes, it's now treated as finished and cleared. - Stuck until manual reselect: OriginPlayer could let go of us during a paused/idle stretch,
and resuming an already-tracked session never re-triggered the silent-audio signal that gets
its attention back — only a brand-new session did. It now fires on any resume, not just a new
session.
Same signing key as origin-isle and prior releases (fingerprint unchanged). Two identities as
before — install whichever matches what you had:
origin-ghost-player-kugou-0.3.2.apk(com.kugou.android.lite)origin-ghost-player-luna-0.3.2.apk(com.luna.music)
Origin Ghost Player v0.3.1
Hotfix: fixes the click-through redirect being unreliable — it previously fired unconditionally on
any launch based purely on "is something playing," with no way to distinguish OriginPlayer's
tap-through from opening the app icon yourself, and only checked on a cold start (which the far
more common "already running" launch never re-triggers). Result: sometimes it didn't redirect from
OriginPlayer, sometimes it redirected when you just wanted to open the app.
Fixed using Activity.getReferrer(), confirmed empirically on-device:
- Direct launcher tap → referrer is the launcher itself.
- OriginPlayer's Control Panel tap →
com.vivo.musicwidgetmix. - A second system-UI tap surface →
com.vivo.systemuiplugin.
Only those two vivo system referrers trigger the redirect now. Every other launch (including
opening the app icon directly) shows our own screen — which now also displays what's currently
playing (title, artist, source app, tap to open) instead of just permission status.
Origin Ghost Player v0.3.0
Two builds now, same code, different spoofed identity — pick whichever native widget you prefer:
origin-ghost-player-kugou-0.3.0.apk— the original, most-tested identity.origin-ghost-player-luna-0.3.0.apk— Luna Music's identity gets a noticeably bigger
lockscreen widget (more room for album art and text) and surfaces karaoke support in
OriginPlayer that Kugou's doesn't.
Both are signed with the same key (fingerprint matches origin-isle's and each other) and can be
installed side by side, since they're different package identities.
Other changes
- More informative first-run screen — explains why notification access is needed, and adds a
button to request unrestricted background running (so OriginOS is less likely to kill the
bridge while your screen is off). Also fixes content drawing behind the status bar under
edge-to-edge (targetSdk 36). - Less flickering between album art when switching source apps — source tracking is now
sticky instead of re-evaluating "which session is playing" from scratch every second. - More resilient to long background stretches — if another app holds real audio output for an
extended period (observed: ~10 minutes), the bridge process could get killed under memory
pressure without ever being swiped away, so the existing swipe-away recovery never engaged. A
periodic health-check alarm now catches this case too.
See docs/DEV.md for details.
Origin Ghost Player v0.2.1
Hotfix: fixes a bug where a track you'd deliberately paused could resume playing on its own after
a while (e.g. once the listener reconnected after being idle and re-picked-up that same paused
session). The v0.2.0 auto-focus fix's safety-net resume call was unconditional; it's now gated on
the track actually still being in a playing state, so a real pause is never overridden.
Origin Ghost Player v0.2.0
Adds auto-focus: OriginPlayer now picks up whatever's playing through the bridge automatically,
instead of needing a manual reselect in OriginOS's own widget picker every time playback starts
fresh or a native app (Spotify, etc.) takes the widget over.
Turns out OriginPlayer's takeover trigger is keyed on real audio output, not the MediaSession or a
posted notification. On picking up a new source, the app now briefly plays a genuinely silent
AudioTrack — deliberately without ever requesting audio focus, so there's no
focus-arbitration event and nothing audible happens to the real app — purely to register as active
audio output. Verified with no audible glitch.
See docs/DEV.md for the full
writeup of how this was tracked down.
Origin Ghost Player v0.1.1
Hotfix: adds a proper launcher icon. The app previously shipped with the generic Android
placeholder icon.
- Adaptive icon: Google Material Symbols' "music_note" (rounded, Apache 2.0), white on a purple
background.
No functional changes otherwise.
Origin Ghost Player v0.1.0
First release. Bridges any real app's media session onto a whitelisted identity (Kugou Music
Lite, com.kugou.android.lite) so OriginOS's native OriginPlayer widget renders for it —
regardless of which app is actually playing. Confirmed working with Metrolist and Firefox as
sources.
- No notification, no persistent UI — the app is invisible; OriginOS's own OriginPlayer chrome is
the only thing you see. - Real playback controls, wired back to the actual source app.
- Survives being swiped away (same keep-alive recipe as origin-isle).
Companion project to origin-isle — same maintainer, same
signing key (fingerprint below matches origin-isle's exactly).
See docs/DEV.md for how the
identity bridge actually works.