Jump to content

Recommended Posts

Posted

I have been looking for a dedicated music app for Emby for a long time. As an avid music lover with over 150,000 + tracks, I wanted something like Plexamp / Spotify but without the plex or subscription part. I have tried out a few of the subsonic apps with my own media, but didn't feel them all that much. So I've started building my own. 

Its still being developed, and a ways away from release, public testing, but here is some info
Its called EMU (Emby Music Player)
- Built on Embys systems and API & metadata (can only work with an emby server)
- Multi-user session and token-based auth
- Smart features like Plexamp - uses algorithms to create content from the user's own music library (Essentia is the tech, and it's very very cool)
- Smart Recommendations, Music and artist radio, mood radio and playlists, etc 
- Integrates local content with internet-based content (lists) for recommendations. (Last Fm)  
- Lidarr Integration. (Found an album you like, click here and add the artist)
- Built for large 200,000 + track libraries 

I'm interested in what features you want in a dedicated music app. 
The current plan 

image.thumb.png.68e9f3eebbca71cec90e6186fb68f3a8.png
image.thumb.png.fc672a4534ac387d7931d406df0dcb94.png
image.thumb.png.0646bded4754592f230679bc2283e782.png
image.thumb.png.5e82d60da7e8581b37c131e4bcb3099c.png
image.thumb.png.115ae5f3ebb95843b22522fd9aa49644.png
image.thumb.png.257ff6ba50ecc3483c10ae0179df70b9.png
image.thumb.png.52664713f450166626b78efdf24dc38c.png
image.thumb.png.394f272aafc60300d39b04b4f8687582.png
image.thumb.png.9e7d13b97df5b0ecd834e5a1f536f5c6.png
image.thumb.png.73f93b8f6f07a523180099119f8809b8.png

image.thumb.png.45bfaad8e607589758c6ab2e1bdc37eb.png

image.png

image.png

image.png

  • Like 6
Rhondagalloway
Posted

it would be great to have this app, looking forward to it.

Posted

Thank you for your interest. It's going to take a little while, but I'm making progress. With a full-time job, wife and 3 kids, it's hard to knuckle down, but yesterday's changelog looks like this

## [2025-07-04] - Artist Page UI Improvements
 
### Visual Enhancements
- **Spacing Consistency**: Standardized spacing between sections (32px/mb-12)
- **Typography Hierarchy**: Increased artist name size in hero (text-5xl → text-7xl)
- **Section Headers**: Simplified headers, removed heavy text shadows for cleaner look
 
### Spotify Design Alignment
- **Hover Effects**: Simplified to match Spotify's subtle approach (removed rotate/translate)
- **Grid Layout**: Adjusted responsive breakpoints (2-7 columns vs 3-12)
- **Card Styling**: Changed to use surface-card background with minimal borders
- **Removed Animations**: Eliminated waveform animations on track hover
 
### Accessibility Improvements
- **Focus States**: Added focus rings to all interactive elements
- **ARIA Labels**: Added descriptive labels to play buttons
- **Color Contrast**: Improved muted text color in Spotify theme (#6a6a6a → #8b8b8b)
- **Keyboard Navigation**: Enhanced focus indicators for breadcrumb navigation
 
### Performance
- **Transition Optimization**: Reduced animation durations (300ms → 200ms)
- **Simplified Effects**: Removed complex transforms for better performance
 
## [2025-07-04] - Album Page UI Improvements
 
### Track Table Enhancements
- **Reduced Padding**: Changed from px-6 py-4 to px-4 py-2 for more compact display
- **Hover States**: Simplified background colors (hover:bg-white/5)
- **Kept Technical Info**: Maintained Format and Bitrate columns for self-hosted users
- **Action Buttons**: Increased size from w-4 h-4 to w-5 h-5 for better usability
 
### Hero Section Refinements
- **Typography**: Increased album title size (text-5xl → text-7xl) matching artist page
- **Background Blur**: Reduced from 8px to 20px for subtler effect
- **Button Consolidation**: Moved "Add to Playlist" to overflow menu
- **Clean Layout**: Reduced hero height from 400px to 350px
 
### Consistency & Accessibility
- **Section Headers**: Matched artist page styling (text-2xl font-bold mb-4)
- **Consistent Spacing**: Standardized mb-12 between sections
- **Focus States**: Added focus rings to all buttons with proper keyboard navigation
- **ARIA Labels**: Added descriptive labels to all interactive elements
- **Mobile Responsive**: Album art scales (w-48 on mobile to w-64 on desktop)
- **Button Text**: Hidden on mobile for space efficiency
 
### Visual Polish
- **Dropdown Menu**: Updated hover states to use white/10 instead of gray/700
- **Border Consistency**: Changed borders to white/10 for cohesive look
- **Action Organization**: Cleaner button row with 3 primary actions + overflow menu
 
### Track Table Actions Update (Spotify Style)
- **Removed Actions Header**: Empty "Actions" column header removed for cleaner look
- **Single Three-Dot Menu**: Replaced 4 action buttons with one always-visible menu
- **Always Visible**: Three-dot button visible at 50% opacity, 100% on hover
- **Dropdown Menu**: Click reveals Play, Play Next, Add to Queue, Add to Playlist
- **No Empty Space**: Eliminates awkward empty column when not hovering
 
## [2025-07-04] - Library Loading Persistence & Token Recovery
 
### Added
- **Secure Token Persistence** (`/backend/src/services/secureTokenStorage.ts`)
- Encrypted token storage for Emby access tokens
- Tokens survive server restarts for long-running operations
- AES-256-GCM encryption with configurable key
- 365-day token expiration support
- Automatic token restoration on server startup
 
- **Library Loading State Persistence**
- Enhanced queue state to include `libraryLoadingState`
- Preserves `lastLoadedIndex`, `totalTracks`, and `hasMoreTracks`
- Automatic resume from last position after restart
- No duplicate processing of already-loaded tracks
 
- **Enhanced Library Loader Recovery**
- Improved `checkAndRestoreLibraryLoader()` logic
- Checks both database and queue state for incomplete loads
- Handles "idle" status with pending work correctly
- Better coordination between multiple state sources
 
- **Documentation**
- Library Loading & Token Persistence guide (`/docs/LIBRARY_LOADING_PERSISTENCE.md`)
- API Endpoints reference (`/docs/API_ENDPOINTS.md`)
- Docker Security configuration (`/DOCKER_SECURITY.md`)
- Updated README with security setup instructions
 
### Fixed
- **Library Loading Freeze After Restart**
- Fixed missing authentication after server restart
- Library loader now restores access token from encrypted storage
- Progress continues from exact position before restart
 
- **State Persistence Issues**
- Fixed library loading state not saved to `queue_state.json`
- Fixed library loader not resuming when database shows "idle"
- Fixed token loss causing 401 errors after restart
 
### Changed
- **Queue State Structure**
- Updated `QueueState` interface to include `libraryLoadingState`
- Enhanced `saveState()` to persist library loading progress
- Modified `loadState()` to restore library position
 
- **Authentication Flow**
- Auth endpoint now saves tokens for restart recovery
- Token restoration integrated into service initialization
- Added token validation on startup
 
- **Docker Configuration**
- Added `TOKEN_ENCRYPTION_KEY` to docker-compose.yml
- Created `.env.example` with all required variables
- Enhanced security documentation for production
 
### Security
- Implemented encrypted token storage with configurable encryption key
- Added security best practices documentation
- Created production deployment guidelines
- Added `.emby-token.enc` to gitignore patterns
 
## [2025-07-04] - Authentication, User Management & Track Analysis Documentation
 
### Added
- **Authentication System Documentation** (`/docs/authentication.md`)
- Token cache service implementation details
- Auth middleware enhancements and GUID formatting
- Long-running operations support with auth-exempt endpoints
- Development mode authentication bypass
- Multi-user support integration
 
- **Audio Analysis System Documentation** (`/docs/audio-analysis.md`)
- Worker pool architecture for parallel processing
- Streaming analysis for large files
- Persistent state management for resumable analysis
- Feature extraction details using Essentia.js
- Memory management and error handling
 
- **User Management System Documentation** (`/docs/user-management.md`)
- Comprehensive multi-user database schema
- User preferences and settings structure
- View state persistence across sessions
- Playback history tracking
- Storage quotas and permission system
 
- **API Reference Update** (`/docs/api-reference.md`)
- Complete endpoint documentation
- Authentication requirements for each endpoint
- Auth-exempt endpoints for long-running operations
- Request/response formats and error codes
- Rate limiting and webhook support
 
### Enhanced
- **Authentication System**
- Token cache service reduces Emby API calls
- Dual header support (X-Emby-Token and X-Emby-Authorization)
- Better error handling with specific error codes
- Auth-exempt endpoints for analysis status checks
 
- **Track Analysis System**
- Worker thread implementation for CPU-intensive tasks
- Real audio feature extraction (no mock data)
- Graceful handling of token expiration during analysis
- Database-backed state persistence
 
### Fixed
- **Auth Failure During Audio Analysis** (Commit 032b5626)
- Made smart features status endpoints auth-exempt
- Allows analysis to continue when user token expires
- Queue control endpoints accessible during analysis
 
## [2025-07-04] - Login Remember Feature Enhancement
 
### Enhanced
- **Remember Server URL Feature**
- Now properly saves username along with server URL and port when checkbox is checked
- Username is automatically cleared when "Remember server URL" is unchecked
- Logout behavior updated to preserve remembered login details (server URL, port, username)
- Only session-specific data (access token, user ID) is removed on logout
- Improved user experience for reconnecting to the same server
 
### Fixed
- **Login State Persistence**
- Fixed issue where username was saved regardless of "Remember server URL" checkbox state
- Removed duplicate username saving that occurred after successful login
- Ensured consistent localStorage behavior between login and logout
Posted

This looks great and I can't wait to try it out, but... why is it called EMU and not EMP?

Emby Music Player

Posted

Technically, it's not a player; it's a backend server written in Node.js with a React front-end server running on nginx, so its name was simply EMU, as in Emby music. The player part was an afterthought, and while the system is just called EMU  I added the player part as it resonates better with people as it kinda describes its function, well, the front end anyway..  

I hear you, though. EMP sounds pretty cool as well. The name may change, it's not set in stone. just in thousands of lines of code :-( 

  • Like 1
Posted

If this works on android and android auto that would be a good idea as I do use another application for playback in my car, so maybe the same for ios and carplay ?

  • Like 1
Posted

Will this be targeting audiophiles? i.e exclusive mode

Posted

I would love this app and I am wondering if it will play a cue file like Foobar?  Most of my content is in images when lossless.  But then I don't think emby would show the content available in a cue sheet, which it should.  This is one of the many reasons I use Foobar2000 to play music even though it is not as convenient as emby.  It is like emby does everything just good enough to not be of much use to a serious user yet the only real people using emby I would consider a serious user...you have to be to spend as much time with the content as it takes to make emby actually work.

Posted

Yeah, Windows users took a big hit with the new app. We lost what made is really good and landed on mediocrity. I used to get creative with my music playback. Now we just have dull audio. I'm done with that for music. This app looks like it has promise. 

What backend player are you using?

Rhondagalloway
Posted
On 7/6/2025 at 3:09 PM, grimevil said:

so maybe the same for ios and carplay ?

I am interested in this, it would be great if it could play through carplay. If you are a music lover, you may need spotify mod apk seruapk app with millions of songs.

Posted
1 minute ago, Rhondagalloway said:

I am interested in this, it would be great if it could play through carplay. If you are a music lover, you may need spotify mod apk seruapk app with millions of songs.

This is a Windows app

Posted
On 7/6/2025 at 9:09 AM, grimevil said:

If this works on android and android auto that would be a good idea as I do use another application for playback in my car, so maybe the same for ios and carplay ?

I may look at android in the future. Not writing anything off right now.  My main focus right now is the backend server and specifically the analysis system which is causing me huge headaches

  • Like 2
Posted
4 hours ago, Jdiesel said:

This is a Windows app

The backend server runs on docker or built from source. There is only one front end right now which is a Web app so technically you can run on Windows mac or Linux. That can also be built from source or deployed via docker. 

Posted
4 hours ago, Rhondagalloway said:

I am interested in this, it would be great if it could play through carplay. If you are a music lover, you may need spotify mod apk seruapk app with millions of songs.

Once all of the backend issues are sorted out well then turn my attention to the web front end and focus on finishing that to a high-level. 
 

My next priorities is iOS. My family and I are all iOS users. and a simple fact is I started building this for me. I want to use it on iOS I want to use CarPlay. I would like to AirPlay from the phone to the Apple Apple TV. I may even look at building an Apple TV version because we use those extensively in our home as well.

but iOS is a a future project. Between the backend and the front end server there’s 80,000 lines of code. This is not a small projec. It’s massive. i’m making huge progress but I’m also experiencing massive setbacks mainly related to the analysis system, memory related issues and Storage corruption. 

Posted
5 hours ago, generiq said:

Yeah, Windows users took a big hit with the new app. We lost what made is really good and landed on mediocrity. I used to get creative with my music playback. Now we just have dull audio. I'm done with that for music. This app looks like it has promise. 

What backend player are you using?

Think of the backend server as a companion app to Emby. The server is its own entity, it’s own service that needs to be deployed alongside Emby. it talks to Emby for everything for meta data for tracks for albums ,artist information.

where it starts to get complicated is with the introduction of smart features . So for example, playlists are supported by Emby and they can be managed either in Emby or in my app. But artist and track radio or not stored in Emby, they’re not currently supported by Emby in any way.. So what I do is I build services to collect the information required from the analysis system and from Emby and build the stations in my app storing that data locally in the database.

 

Posted
8 hours ago, Ronstang said:

I would love this app and I am wondering if it will play a cue file like Foobar?  Most of my content is in images when lossless.  But then I don't think emby would show the content available in a cue sheet, which it should.  This is one of the many reasons I use Foobar2000 to play music even though it is not as convenient as emby.  It is like emby does everything just good enough to not be of much use to a serious user yet the only real people using emby I would consider a serious user...you have to be to spend as much time with the content as it takes to make emby actually work.

The current system relies heavily on Emby and its API. If the data is not in the API, then it can’t be used in my app.

Posted
5 hours ago, dpslabber said:

Think of the backend server as a companion app to Emby. The server is its own entity, it’s own service that needs to be deployed alongside Emby. it talks to Emby for everything for meta data for tracks for albums ,artist information.

where it starts to get complicated is with the introduction of smart features . So for example, playlists are supported by Emby and they can be managed either in Emby or in my app. But artist and track radio or not stored in Emby, they’re not currently supported by Emby in any way.. So what I do is I build services to collect the information required from the analysis system and from Emby and build the stations in my app storing that data locally in the database.

 

That wasn't my question, but it sounds like you haven't developed the output yet.

Posted
27 minutes ago, generiq said:

That wasn't my question, but it sounds like you haven't developed the output yet.

  It's not using any third-party player libraries - it's a custom implementation that gives full
  control over the playback experience.

Player Architecture

  Core Components

  1. Audio Engine: Uses the native HTML5 <audio> element for playback
    - Located in OptimizedPlaybackControls.tsx
    - Handles streaming from Emby server
    - Supports various audio formats (FLAC, MP3, etc.)
  2. UI Framework: Custom React components inspired by premium music players
    - Design: Spotify-like interface with Plexamp-inspired features
    - Player Bar: Fixed bottom player with album art, track info, and controls
    - Expanded View: Can expand to show larger album art (256x256)
    - Minimize/Restore: Can minimize to just a progress bar
  3. Key Features:
    - Dynamic Color Extraction: Extracts colors from album art for themed UI
    - Gapless Playback: Planned feature for seamless track transitions
    - Crossfade: Settings available in options menu
    - Volume Control: Inline slider (not popup)
    - Shuffle & Repeat: Full state management
    - Queue Management: Play queue with drag-and-drop reordering

  Technical Stack

  - Frontend: React + TypeScript
  - Styling: Tailwind CSS with custom animations
  - State Management: React hooks and context
  - Streaming: Direct from Emby Media Server via authenticated API
  - Audio Processing: Essentia.js for audio analysis (tempo, key, energy, etc.)

  Player Controls

  - Play/Pause
  - Previous/Next track
  - Seek bar with waveform visualization
  - Volume slider
  - Shuffle toggle
  - Repeat modes (off/all/one)
  - Like/Favorite button
  - Lyrics indicator
  - Device selector
  - EQ access
  - Options menu (crossfade, gapless, etc.)

  Streaming Details

  The player streams audio directly from your Emby Media Server:
  src="/api/emby/stream/{trackId}?token={token}&serverUrl={serverUrl}"


 

Posted

I think the question was about the renderer/output being used. Your comment above answered it though, since it is a web app the output will be whatever your browser uses.

I'm not aware of any browsers that support exclusive mode for audio.

Posted

The html audio element also does not have any api to accommodate gapless playback or crossfade. I’ve seen some examples of tricks pulled off with webaudio but that is not really viable for production.

Posted

As a player it's very basic, then. Sadly, this is of no use to me.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...