openjutsu
One-click character swap for videos: an open-source, local Higgsfield Genjutsu alternative built on ComfyUI and MiniMax H3, with FLUX.3 Klein relighting.
A music player that looks like nothing else. Your files, your server, YouTube Music, independent radio. Free for Android, Mac, Windows and Linux.
MediaKotlin · PythonGitHub @inkappdevOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
A music player that looks like nothing else. Free and open source for Android, Mac, Windows and Linux: your files, Navidrome, YouTube Music and independent radio, the album art the only color. No ads, no accounts, no paywall, ever.
Taken from the repository README
Loading the full README.
Read the full README ↗Every version's changes are in the releases. Want something? Ask for it, or come say hi at r/inkmusic.
Tap the format over any cover and ink music shows the sound's whole way to your ears: the file, the decoder, even volume and the equalizer, what Android does to it, and where it plays. Casting, it asks the receiver itself: a Denon in Direct says so, and the page says exact: yes. On the computer, the same path as mpv plays it (Core Audio, WASAPI, PipeWire), exclusive if you like.
| The phone's files | Or your computer's music folder, filed by record and artist. |
| Your own server | Navidrome or any Subsonic server, streamed or kept on the phone. Loves are its stars, playlists its playlists. |
| YouTube Music | Search and play without an account, through NewPipe Extractor. Signed in: your library both ways, uploads, and Premium's 256 kbps. full build only. |
| Spotify playlists | Brought in from a file (Exportify), each song found in your music or on YouTube Music. |
| ink radio | Sixty-two independent, listener-powered stations chosen by hand (KEXP, NTS, dublab, WFMU, Radio alHara...), each saying what it's playing. Thousands more from radio-browser.info. |
| Podcasts | Any show from Apple's podcast directory, or any feed you paste. |
Pick a few artists you love and listen fills with their mixes and records, what indie radio played most this week, and every Friday ink weekly, picked by real people. INK gathers what critics and DJs are picking.
Everything is on the GitHub releases, signed, with SHA-256 sums.
Android 12 or later. Obtainium keeps it up to date, and the
full build updates itself. F-Droid is next. The full apks from releases have Last.fm; a build from
source needs its own key.
| Build | Sources | Where |
|---|---|---|
ink-music-<version>.apk (full) | Files, your server, YouTube Music, radio | GitHub releases, Obtainium |
ink-music-<version>-play.apk (play) | Files, your server, radio. No NewPipe code at all | The only build that may go to Google Play |
The release certificate's SHA-256:
92eb2c4ea8d70b897db7cf000356f72cc2f3e698c39bb31f4b62ba717747e663
(check with apksigner verify --print-certs).
Mac (Apple silicon): the .dmg. It isn't signed by Apple yet, so the first time, macOS stops it:
System Settings, Privacy & Security, Open Anyway.
Windows: the .msi, installed just for you, no administrator needed. Windows SmartScreen
doesn't know it yet: More info, then Run anyway. To pair your phone, Windows' firewall has to let
it in: ink music asks, in settings under your phone.
Linux: the .deb (Debian, Ubuntu) or .rpm (Fedora). It plays through your system's libmpv
(libmpv2 on Debian and Ubuntu, mpv-libs on Fedora).
No ads, no accounts, no analytics, no tracking. What you've played stays on your own devices. Nothing leaves them except to your own server, your other devices on your own wifi, and the services that answer what you ask for.
| Service | What it receives | Why |
|---|---|---|
| Your Navidrome / Subsonic server | Sign-in (a salted token, never the password), plays, stars | Your library |
| lrclib.net | A song's artist and title | Lyrics |
| Better Lyrics' server | A song's artist, title and length | Lyrics timed word by word |
| Apple's podcast directory | What you search for | Finding shows, the most listened to |
| The shows' own feeds and hosts | Nothing personal | Podcasts' episodes |
YouTube Music (full build) | Your searches, the artists you pick; signed in, your sign-in and the songs you play (your history there, off in settings) | Search, mixes, radio, your library |
| ListenBrainz / Last.fm, if you connect them | What you play | Scrobbling |
| AutoEq on GitHub | Nothing personal, when you look up your headphones | Their tuning |
| radio-browser.info | Nothing personal | The station list |
| The stations' own playlists | Nothing personal | The indie chart, what's on air |
| Your paired phone or computer, on your wifi | What you've heard, loves, sign-ins (Spotify's an hour's pass), what's playing, sealed with a key only the two of them have | Keeping them in step |
| Apple Music's catalog | A record's artist and title | Moving covers |
Spotify, if you sign in (full build) | Your sign-in, a song's artist and title; your playlists when you import one | The Canvas behind a song, importing playlists |
| Publications' and stations' own feeds (Pitchfork, Bandcamp Daily, NPR and others) |
ink music comes from ink, a typographic home screen for Android phones and TVs in the same look: your apps as big words, five seconds before instagram opens, your games as a console, your house as words. In a free test on Google Play now: join the test.
Built by Bronson with Claude (Anthropic's AI) as a coding partner: the design, the decisions and the testing are mine. Every feature is tried on a real phone and computer before it ships, and ink weekly is picked by hand.
Issues and pull requests are welcome. For anything visible, open an issue first: ink music has a strong look (black, two typefaces, no icons where a word works), and we'll talk it through.
JDK 21. The phone also needs the Android SDK (API 37); the computer's app needs a libmpv to play.
./gradlew :app:assembleFullDebug # the phone: a debug build
./gradlew :app:assembleFullRelease # the phone: a release build (R8)
tools/release.sh # both phone builds, signed, with SHA256SUMS, in build/release/
./gradlew :desktop:run -PdesktopOnly # the computer's app, without the Android SDK
The computer's installers are each made on their own system (.github/workflows/): the Mac's .dmg
on macOS, the .msi on Windows (:desktop:packageInkMsi, ink's own installer pages), the .deb and
.rpm on Linux.
Release builds are signed with the key named in keystore.properties beside settings.gradle.kts
(storeFile, storePassword, keyAlias, keyPassword; never committed). Without it they're
signed with the debug key. Each release raises versionCode and versionName in
app/build.gradle.kts and adds fastlane/metadata/android/en-US/changelogs/<versionCode>.txt.
The icon and store graphics are drawn from the bundled fonts: python3 tools/make-icon.py
(fontTools, Pillow).
Built with Kotlin and Jetpack Compose, Media3 (ExoPlayer and a
MediaLibrarySession in its own process) and Haze on the phone;
Compose Multiplatform and mpv on
the computer, with what the two share in core/.
ink music is not affiliated with, funded, authorized or endorsed by YouTube, Google LLC, Spotify, Apple, Microsoft, Navidrome, any publication or any radio station. Trademarks belong to their owners.
GPL-3.0. Free, always: no paywall, ever.
| Nothing personal |
| INK's picks |
| iTunes, Deezer and YouTube Music | A record's artist and title | Covers where your files have none |
| Last.fm's tags | Nothing personal | INK's moods |
| GitHub | Nothing personal, every six hours (full build and computers) | Whether there's a new version |