MiyooPod Player

MiyooPod.

MP3 player for the Miyoo Mini.

What is MiyooPod?

MiyooPod is an MP3 player for the Miyoo Mini handheld console running OnionOS. Inspired by the classic iPod interface.

Key Features:

  • iPod-inspired user interface with multiple themes
  • Browse by Artists, Albums, and Songs
  • Album art display
  • Automatic album artwork fetching from MusicBrainz
  • Shuffle and repeat modes
  • Native 640×480 resolution optimized for Miyoo Mini
  • 11 customizable themes (Classic iPod, Dark Blue, Nord, Cyberpunk, and more)

Screenshots

Main Menu

Main Menu

Now Playing

Now Playing

Albums List

Albums List

Artists

Artists

Getting Started

First Release - Expect Bugs

This is the first release of MiyooPod. While functional, it may contain bugs and rough edges. Your feedback is crucial to improving the app.

📦 Installation

Install MiyooPod on your Miyoo Mini Plus running OnionOS:

  1. Download MiyooPod.zip
  2. Extract the MiyooPod.zip file
  3. Connect your Miyoo Mini Plus SD card to your computer
  4. Copy the MiyooPod folder to /App on your SD card
  5. Safely eject the SD card and insert it back into your Miyoo Mini Plus
  6. MiyooPod will appear in your Apps menu

📁 Adding Songs

MiyooPod reads music files from your SD card's Music folder:

/mnt/SDCARD/Media/Music/
  1. Connect your Miyoo Mini SD card to your computer
  2. Navigate to /Media/Music/ folder
  3. Copy your MP3 files and folders into this directory
  4. Organize your music by artist/album folders for better library organization
  5. Launch MiyooPod - it will automatically scan and index your music library

🎵 Recommended Format

Officially Supported Format: MP3 @ 256kbps

For the best balance of audio quality and file size on your Miyoo Mini, we recommend encoding your music as:

  • Format: MP3 (MPEG-1 Audio Layer 3)
  • Bitrate: 256kbps CBR (Constant Bitrate) or VBR V0
  • Sample Rate: 44.1kHz
  • Channels: Stereo

💡 The Miyoo Mini Plus audio output is not high quality enough to justify higher bitrate files. Playback might be choppy with higher bitrate files.

🎨 Album Artwork

MiyooPod supports album artwork in two ways:

1. Embedded Artwork

MiyooPod automatically extracts album art embedded in your MP3 files' ID3 tags. Most music files downloaded from iTunes, Amazon, or properly tagged using tools like MusicBrainz Picard will already have embedded artwork.

2. Automatic Download from MusicBrainz

For albums without embedded artwork, MiyooPod can automatically fetch album covers from MusicBrainz:

  1. Navigate to Settings from the main menu
  2. Select "Fetch Album Art"
  3. MiyooPod will scan your library and download missing album artwork
  4. Progress is shown on-screen with album details
  5. Downloaded artwork is cached locally for fast loading

Note: This requires an internet connection via WiFi. Artwork is stored in /mnt/SDCARD/Media/Music/.miyoopod_artwork/

⚙️ Settings

Themes

Choose from 11 visual themes. Each theme customizes colors for backgrounds, selections, headers, progress bars, and all UI elements.

Available themes: Classic iPod, Dark, Dark Blue, Light, Nord, Solarized Dark, Matrix Green, Retro Amber, Purple Haze, Cyberpunk, and Coffee.

Lock Key

Customize which button locks/unlocks the screen. Choose from Y, X, or SELECT buttons. The Miyoo Mini Plus does not support suspend mode natively by pressing the power button, so the lock key allows you to lock the screen and prevent accidental presses during playback.

Fetch Album Art

Automatically download missing album artwork from MusicBrainz. The app will scan your library and fetch high-quality cover art for albums without embedded images.

Toggle Logs

Enable or disable debug logging. Useful for troubleshooting issues or when reporting bugs. Logs are written to the Music folder for easy access.

Rescan Library

Force a complete rescan of your music library. Use this after adding new songs or when the library becomes out of sync.

About

View app version, author information, and access support resources. Includes version checking to notify you of available updates.

Settings Storage

Your preferences are automatically saved to:

/mnt/SDCARD/Media/Music/.miyoopod_settings.json

🔧 Technical Details

Architecture Overview

MiyooPod is built using Go (Golang) 1.22.2 with native C bindings (CGO) for low-level graphics and audio operations. The application is cross-compiled for ARM architecture and optimized for embedded Linux systems.

Platform Target

  • Device: Miyoo Mini Plus
  • OS: OnionOS (Linux-based)
  • CPU: ARM Cortex-A7 (dual-core)
  • Display: 640×480 native resolution

Build Configuration

  • Compiler: arm-linux-gnueabihf-gcc
  • Go Version: 1.22.2
  • CGO: Enabled
  • GOARCH: arm

Performance Optimizations

  • Dual-Core Utilization: Main UI thread pinned to one core while audio decoding runs on the second core via runtime.GOMAXPROCS(2)
  • Thread Stability: Main goroutine locked to OS thread with runtime.LockOSThread() for stable CGO/SDL calls
  • Fast Rendering: Pre-rendered digit sprites for time display bypass the 2D graphics context in the hot path
  • Caching: Text measurement cache and album art cache reduce redundant operations
  • Library Persistence: Music library metadata cached as JSON for fast startup

Libraries & Dependencies

SDL2 (Simple DirectMedia Layer)

Core graphics, input handling, and window management. Provides low-level access to the Miyoo Mini's display and controls.

Bundled libraries: libSDL2.so, libSDL2_EGL.so, libSDL2_GLESv2.so, libSDL2_json-c.so, libSDL2_z.so

SDL2_mixer

Audio playback with MP3 decoding support via libmpg123. Handles music streaming, volume control, and playback state management.

Bundled libraries: libSDL2_mixer.so, libmpg123.so.0

fogleman/gg

2D graphics context for Go. Used for rendering text, shapes, and UI elements with anti-aliasing and smooth compositing at native 640×480 resolution.

dhowden/tag

ID3 tag parsing for MP3 files. Extracts metadata including title, artist, album, track numbers, disc numbers, year, genre, and embedded album artwork from ID3v2/ID3v1 tags.

golang.org/x/image

Extended image processing and font rendering. Handles PNG/JPEG decoding and TrueType font rasterization for the UI.

skip2/go-qrcode

QR code generation for sharing repository and donation links directly from the About screen.

Build System

Cross-compilation is handled via a Makefile that uses the ARM GNU toolchain. The build process compiles Go source files with CGO enabled and packages all required shared libraries.

# Cross-compile for ARM with CGO CC=arm-linux-gnueabihf-gcc \ CGO_ENABLED=1 \ GOARCH=arm \ GOOS=linux \ go build -o App/MiyooPod/MiyooPod src/*.go

The build system automatically bundles required shared libraries into the App/MiyooPod/libs directory:

  • • SDL2 core and extensions (EGL, GLESv2, json-c, zlib)
  • • SDL2_mixer for audio playback
  • • libmpg123 for MP3 decoding

Data Storage

Library Cache

Music library metadata is serialized to JSON and stored at:

/mnt/SDCARD/Media/Music/.miyoopod_library.json

Settings

User preferences (theme, lock key, log settings) are stored at:

/mnt/SDCARD/Media/Music/.miyoopod_settings.json

Album Artwork

Downloaded album art is cached in:

/mnt/SDCARD/Media/Music/.miyoopod_artwork/

💜 Support the Project

MiyooPod is open-source and free to use. Here's how you can help make it even better:

🐛

Report Issues

Found a bug? Let us know on GitHub Issues so we can fix it.

Report Issue

Request Features

Have an idea for a new feature? Share it with the community!

Suggest Feature

Star on GitHub

Show your appreciation by starring the repository on GitHub.

Star Project

Contribute Code

MiyooPod is open-source! Developers are welcome to contribute improvements, bug fixes, and new features via pull requests.