Skip to content

← Firmware Downloads

Firmware README · Y1

About Inniclassic

A classic-style Y1 Software.

Also known as: README.md · FabianZettl/inniclassic · inniclassic · Inniclassic · fabianzettl-inniclassic

Y1
Downloads from Firmware Archive2,078

InniClassic

Platform Device Status Version Buy Me a Coffee

InniClassic is a launcher for the Innioasis Y1 built directly on top of and based on ismileblue/y1_launcher (JJ Launcher / MO-ON Launcher) — all credit for the original launcher, media engine, and theme system goes to that project. The goal of InniClassic is to turn JJ Launcher into as close to the original iPod Classic experience as possible, while going beyond it where it makes sense (FM Radio, Podcasts, Video, a from-scratch Music Quiz).

This is not a GitHub "Fork" in the technical sense (it's a separate repository), but it is built directly on top of JJ Launcher's source and stays close to upstream so future JJ Launcher releases can keep being merged in.

[!WARNING] Currently only tested and available for the Innioasis Y1. The Method 1 ROM ships Y1 Firmware 3.1.2; the standalone APK (Method 2) has also been verified on device System Software version 2.1.9 — check your own firmware version before installing anything below.


Screenshots

Main MenuNow PlayingMusic
Main MenuNow PlayingMusic Menu
ArtistsAlbum ViewCover Flow
ArtistsAlbum ViewCover Flow

Features

The iPod Classic experience

Music library

Beyond music

Installable two ways

Under the hood

Known limitations

Installation

There are two ways to get InniClassic onto your Innioasis Y1. Method 1 is recommended for most people — it's a single flash and there's nothing else to install or uninstall afterward.

The ROM package installs the latest Y1 Firmware 3.1.2 with InniClassic already baked in as the system launcher — no ADB, no manual uninstall step, nothing else to do afterward.

  1. Download rom.zip from this repo's Releases page — the Innioasis Updater expects this exact filename, so keep it as-is after downloading.
  2. Open the Innioasis Updater, select that zip as a local firmware file, and follow the on-screen instructions.
  3. Once it finishes and the device reboots, InniClassic is the active launcher — nothing further to install.

[!WARNING] Flashing firmware always carries some risk. Make sure the device stays connected and powered throughout the flash, and don't interrupt it.

Method 2: Install just the APK over an existing JJ Launcher setup

Use this if you already have JJ Launcher running (via the stock firmware or Method 1's ROM from an earlier version) and just want to update the app itself.

  1. Uninstall the existing launcher app first — this step is required, not optional (see why below):

    `bash adb uninstall com.themoon.y1 ` If that fails because it's baked into your firmware image as a system app, use this instead: `bash adb shell pm uninstall --user 0 com.themoon.y1 `

  2. Connect the device to your PC and download the latest InniClassic-<version>.apk from this repo's Releases page.
  3. Install it:

    `bash adb install InniClassic-.apk `

  4. (Optional, only if Bluetooth pairing ever asks for a permission you can't grant from the UI):

    `bash adb shell pm grant com.themoon.y1 android.permission.WRITE_SECURE_SETTINGS `

The local .scrobbler.log works automatically with no setup. To also sync scrobbles to a real Last.fm account, turn on Settings → Sync Scrobbles to Last.fm and log in via Settings → Last.fm Account through the browser-based flow (the device shows a URL/QR you open on your phone or PC). To use a custom theme other than the bundled iPod Classic one, see JJ Launcher's original theme documentation.

Replacing the stock JJ Launcher app

(This only applies to Method 2 — Method 1's ROM already ships with InniClassic pre-installed, so there's nothing to replace.)

Both InniClassic and the stock JJ Launcher use the same package name (com.themoon.y1), but InniClassic's release APKs are currently debug-signed (see Building it yourself — there's no shared release keystore yet). Android refuses to install an APK over an existing app if the signing certificate doesn't match, so skipping the uninstall step above and just running adb install -r will fail with:

Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: ... signatures do not match]

or on older Android versions:

INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

That's why the uninstall step above always comes before installing — there's no way around it as long as InniClassic ships debug-signed builds.

What you keep, what you lose: uninstalling only clears the app's private settings (app-internal preferences like toggles and any saved Last.fm session — you'll need to log in again). Your music library, themes (/storage/sdcard0/Y1_Themes), and the .scrobbler.log all live on the SD card, outside the app's private storage, so they're untouched and picked up again automatically on first launch.

Speeding up large library scans

InniClassic caches your scanned library to a plain JSON file at the SD card's root (.y1_library_cache.json); any file already listed there is skipped during the next scan instead of being re-tagged. If you have a large library (thousands of tracks) and add music on your PC, tools/build_library_cache.py pre-builds that same cache file on your PC — much faster than the device's CPU — so the next on-device scan is just a quick existence check instead of tagging everything from scratch.

Requires the card to be accessible as a normal drive (card reader or USB mass storage, not MTP) and pip install mutagen:

python3 tools/build_library_cache.py /path/to/sdcard

Run it any time after copying new music over, before putting the card back in the device.

Building it yourself

Last.fm requires every client to use its own API credentials, so none are shipped in this repository. To build from source:

  1. Register a free API account at last.fm/api/account/create.
  2. Add these two lines to your own local.properties (already gitignored, never committed):

    `properties lastfm.api.key=YOUR_KEY lastfm.api.secret=YOUR_SECRET `

  3. Build as usual (./gradlew assembleDebug). Without a key, the app still runs fine — scrobbling simply won't authenticate.

What's different from upstream JJ Launcher

For anyone tracking this project against ismileblue/y1_launcher: everything in Features above was added or substantially changed on top of JJ Launcher. Anything not mentioned there (media scanner internals, EQ, Bluetooth pairing, Wi-Fi keyboard, the custom theme engine, etc.) still works as in the original project — see upstream's documentation for that.

Credits & License

If InniClassic's useful to you, you can buy me a coffee — totally optional, never required.

See CHANGELOG.md for the full version history.