MBXRemote | MusicBee Remote Desktop Client | HALRAD Research

Technical Appendix & Errata

This appendix provides detailed technical documentation for developers and power users interested in the inner workings of MBXRemote and the ARiA protocol.

ARiA Protocol Architecture

The ARiA (Arbitrary Remote Initiated Actions) system is a command-agnostic transport protocol. The protocol itself doesn't interpret commands - it simply transports action scripts from client to server for execution.

[MBXRemote Client] ──TCP/JSON──> [MusicBee Plugin] ──Execute──> [Windows/MusicBee]
        |                              |                           |
   Action Script                 Command-Agnostic            SendKeys/Commands
   "sndKeys(CTRL ALT Q)"            Transport                  Execution

Protocol Message Format

{
  "context": "playerinitiatoraction",
  "data": "sndKeys(CTRL ALT Q)"
}\r\n

The data field contains an action script string passed unchanged to the plugin's execution engine. The protocol layer never parses or validates this content.

SendKeys Notation Reference

ARiA uses .NET System.Windows.Forms.SendKeys notation for keyboard automation.

Modifier Keys

Modifier SendKeys Symbol ARiA Notation
Control^CTRL or CONTROL
Alt%ALT
Shift+SHIFT
Windows# (unofficial)WIN or WINDOWS

Special Keys

Key Syntax
Enter{ENTER} or ~
Tab{TAB}
Escape{ESC}
Backspace{BACKSPACE} or {BS}
Delete{DELETE} or {DEL}
Arrow Keys{UP} {DOWN} {LEFT} {RIGHT}
Page Up/Down{PGUP} {PGDN}
Home/End{HOME} {END}
Function Keys{F1} through {F24}
Space{SPACE} or literal space
Insert{INSERT}
Print Screen{PRTSC}
Caps Lock{CAPSLOCK}
Num Lock{NUMLOCK}
Scroll Lock{SCROLLLOCK}
Break{BREAK}
Application/Menu{APPS}

Key Repeat Syntax

{TAB 3}      // Tab 3 times
{RIGHT 5}    // Right arrow 5 times
+{RIGHT 5}   // Shift+Right 5 times (select 5 characters)

DuckyScript Notation

As an alternative to SendKeys symbols, ARiA also accepts DuckyScript-style notation for key combinations - a more readable, space-separated format.

DuckyScript vs SendKeys

Action SendKeys Notation DuckyScript Notation
Ctrl+Alt+QsndKeys(^%q)sndKeys(CTRL ALT Q)
Ctrl+Shift+DeletesndKeys(^+{DELETE})sndKeys(CTRL SHIFT DELETE)
Alt+F4sndKeys(%{F4})sndKeys(ALT F4)
Ctrl+AsndKeys(^a)sndKeys(CTRL A)
Windows+RsndKeys(#{r})sndKeys(GUI R) or sndKeys(WIN R)

DuckyScript Modifiers

Modifier DuckyScript SendKeys Equivalent
ControlCTRL or CONTROL^
AltALT%
ShiftSHIFT+
WindowsGUI or WIN or WINDOWS#

DuckyScript Examples

sndKeys(CTRL ALT A)           // MusicBee Goto Tab 1
sndKeys(CTRL ALT S)           // MusicBee Goto Tab 2
sndKeys(CTRL ALT L)           // MusicBee Goto Tab 9
sndKeys(CTRL SHIFT DELETE)    // Ctrl+Shift+Delete
sndKeys(ALT F4)               // Close window
sndKeys(GUI R)                // Windows Run dialog
sndKeys(CTRL A);delay(100);sndKeys(CTRL C)  // Select all, copy

Both notations can be used interchangeably. Use whichever is more readable for your use case.

Complete Key Mapping Reference

Key/Action SendKeys DuckyScript
Ctrl+A^aCTRL A
Alt+F4%{F4}ALT F4
Shift+Tab+{TAB}SHIFT TAB
Ctrl+Alt+A^%aCTRL ALT A
Ctrl+Shift+Esc^+{ESC}CTRL SHIFT ESCAPE
Win+D#{d}GUI D or WIN D
Win+R#{r}GUI R or WIN R
Enter{ENTER} or ~ENTER
Tab{TAB}TAB
Escape{ESC}ESCAPE or ESC
Space{SPACE}SPACE
Backspace{BACKSPACE}BACKSPACE
Delete{DELETE}DELETE
Up Arrow{UP}UP
Down Arrow{DOWN}DOWN
Left Arrow{LEFT}LEFT
Right Arrow{RIGHT}RIGHT
F1-F12{F1} - {F12}F1 - F12
Home{HOME}HOME
End{END}END
Page Up{PGUP}PAGEUP
Page Down{PGDN}PAGEDOWN
Insert{INSERT}INSERT
Print Screen{PRTSC}PRINTSCREEN

Focus Control Prefixes

Control whether MusicBee receives focus before sending keys:

Prefix Behavior Use Case
(none)Focus MusicBee first (default)Tab navigation, MusicBee commands
!mb!Explicitly focus MusicBeeSame as default, explicit
!nofocus!Send to current focused windowAlt+Tab, system commands

Examples

sndKeys(CTRL ALT Q)           // Focus MusicBee, send Ctrl+Alt+Q (RIA1)
sndKeys(!mb!CTRL S)           // Explicitly focus MusicBee, save
sndKeys(!nofocus!ALT TAB)     // Alt+Tab without changing focus
sndKeys(!nofocus!WIN D)       // Show desktop (current window)

Windows Key Limitation

Known Limitation: The official .NET SendKeys class does NOT have native support for the Windows key. The # symbol is unofficially supported in some implementations but is not part of the standard.

For Windows key combinations, the plugin uses Windows API (P/Invoke) when WIN or # is detected:

MusicBee API Status

Working APIs

Category Status Examples
Player ControlWorkingPlay, Pause, Stop, Next, Previous, Volume, Mute
Now PlayingWorkingTrack info, metadata, artwork, lyrics
Now Playing ListWorkingQueue management, reorder, clear
LibraryWorkingBrowse, search, tag reading/writing
PlaylistsWorkingCreate, delete, modify playlists
SettingsWorkingStorage paths, skin info

Non-Working APIs

Navigation API

MB_InvokeCommand(Command.NavigateTo) does not work for tab switching. This is why ARiA uses SendKeys as a workaround.

Visualizer API EXPERIMENTAL

playervisualizer and playervisualizerlist commands require "Enable Experimental Features" to be checked in the plugin settings. These commands are implemented but may not work with all MusicBee configurations - MusicBee's API may return empty data.

ARiA Security Model

Plugin Version Requirement

ARiA requires plugin version 1.5+. The plugin version determines ARiA support:

Plugin Version ARiA Support
< 1.5Not supported (no response to ARiA commands)
>= 1.5Supported (responds with status)

ARiA Command Responses (v1.5+)

When ARiA commands are sent to plugin 1.5+, the plugin responds with one of three values:

Response Meaning
OkARiA is enabled and command executed successfully
Not EnabledARiA is disabled by user in plugin settings
Error: [message]Command failed with error details

Enable/Disable Control

ARiA is controlled via a checkbox in the MusicBee Remote plugin settings:

What Works When ARiA is Disabled

Security Considerations

Warning: When enabled, ARiA can send ANY keystroke to the Windows machine running MusicBee. This includes:

Mitigations:

Protocol Version History

Version Features Plugin Version
v4.0Standard playback, library, playlists, now playingStandard plugin v1.4.1
v4.5ARiA, Initiator Actions, tab navigation, focus control, enhanced metadata (year/rating/bitrate/format), album navigation, podcastsv1.5.x

Protocol Negotiation

Plugin v1.5+ performs protocol negotiation based on client request:

This ensures backwards compatibility: legacy clients (Android/iOS v4.0) continue to work while modern clients (MBXRemote) get extended features.

Additive Fields (Always Sent)

These fields are always included regardless of protocol version:

Extended Metadata (v4.5 Only)

These fields are only included when v4.5 is negotiated:

Library Metadata Sync

MBXRemote syncs library metadata from MusicBee to a local SQLite cache. This section documents the sync direction for each field.

Field Sync Direction

Field Direction Status Notes
playcountOne-Way (MB → MBX)✅ ImplementedRead-only: Auto-incremented by MusicBee during playback
skipcountOne-Way (MB → MBX)✅ ImplementedRead-only: Auto-incremented by MusicBee when skipped
lastplayedOne-Way (MB → MBX)✅ ImplementedRead-only: Auto-updated by MusicBee during playback
dateaddedOne-Way (MB → MBX)✅ ImplementedRead-only: Set when file added to library, cannot be changed
ratingTwo-Way✅ ImplementedUser-editable: Right-click → Set Rating (0-5 stars) syncs to MusicBee
lovedTwo-Way✅ ImplementedUser-editable: Right-click → Love Status syncs to MusicBee
Read-only fields: playcount, skipcount, lastplayed, and dateadded are managed automatically by MusicBee and cannot be modified by external applications. These are always one-way sync (MusicBee → MBXRemote).

Sync Direction Legend

Direction Description
One-Way (MB → MBX)Data flows from MusicBee to MBXRemote only. Changes in MBXRemote are not pushed back to MusicBee.
Two-WayData can be modified in MBXRemote and pushed back to MusicBee. Requires EnableTwoWaySync setting enabled.

Remote Library Editing Settings

Remote library editing is controlled via Settings > Database > Remote Library Editing:

Setting Default Description
EnableTwoWaySyncfalseMaster toggle for all two-way sync
EnableTwoWayRatingtrueEnable rating sync to MusicBee
EnableTwoWayLovetrueEnable love/ban sync to MusicBee
EnableRealTimeSynctrueSubscribe to real-time library events
Remote Library Editing: Fully implemented! Rate tracks (0-5 stars) and toggle love/ban status directly from MBXRemote. Changes write to MusicBee immediately.
Real-Time Sync: Fully implemented! Enable to receive live library change events. Your SQL cache updates automatically when tracks are added, removed, or modified in MusicBee. Status bar shows "🔴 LIVE" with event count and timestamp.

Protocol Testing

MBXRemote includes a hidden Protocol Compatibility Tester for developers and advanced users to verify plugin compatibility.

Access the Protocol Tester

Press Ctrl+Shift+Alt+T in MBXRemote to open the Protocol Tester dialog.

Tests Performed

XML/DB Comparison

The Protocol Tester also includes an XML/DB Comparison tool to validate cache integrity:

The tester generates detailed reports that can be saved to text files for analysis.

Troubleshooting Reference

Keys Not Working

Wrong Window Receives Keys

Debug Logging

Plugin logs are stored at:

%APPDATA%\MusicBee\mb_remote\

Key log entries to check:

"Executing action script: [script]"
"Sending keys: [keys]"
"Focused MusicBee window"
"ARiA functionality is disabled"

Local Database Architecture

MBXRemote uses a local SQLite database for caching library data, enabling fast browsing and searching without constant network requests to MusicBee.

Technology Stack

Component Technology Purpose
Database EngineSQLite 3Lightweight, zero-config, file-based database
ORMEntity Framework Core 8Object-relational mapping, LINQ queries
Connection PoolingDbContextPool (128 connections)Performance optimization for concurrent access
Settings StorageJSON fileUser preferences separate from cache data

Database Location

%APPDATA%\MBXRemote\musicbee.db

Cached Entities

Entity Table Key Fields Indexes
TracksCachedTracksTitle, Artist, Album, AlbumArtist, Genre, Year, Duration, TrackNo, DiscNo, Bitrate, RatingTitle, Artist, Album, AlbumArtist, Genre, Year
AlbumsCachedAlbumsName, Artist, Year, TrackCount, CoverArtHashName, Artist, Year
ArtistsCachedArtistsName, AlbumCount, TrackCountName (unique)
GenresCachedGenresName, ArtistCountName (unique)
PlaylistsCachedPlaylistsName, TrackCount, DurationName
ConnectionsConnectionsHost, Port, Name, IsDefault, LastUsedHost, IsDefault, LastUsed
Sync MetadataSyncMetadataDataType, LastSyncTime, TotalCount, CollectionHashDataType (unique)

Synchronization Strategy

Library data is synchronized from MusicBee on-demand:

Virtual List Mode

For large libraries (200,000+ tracks), MBXRemote uses virtual list mode to avoid loading all data into memory:

Database Schema (EF Core)

// Entity Framework Core model configuration
public class MusicBeeContext : DbContext
{
    public DbSet<CachedTrack> CachedTracks { get; set; }
    public DbSet<CachedAlbum> CachedAlbums { get; set; }
    public DbSet<CachedArtist> CachedArtists { get; set; }
    public DbSet<CachedGenre> CachedGenres { get; set; }
    public DbSet<CachedPlaylist> CachedPlaylists { get; set; }
    public DbSet<Connection> Connections { get; set; }
    public DbSet<SyncMetadata> SyncMetadata { get; set; }
}

SQLite Connection String

Data Source=%APPDATA%\MBXRemote\musicbee.db;
Mode=ReadWriteCreate;
Cache=Shared;
Pooling=True

Database Management

MBXRemote provides a Database Manager dialog (Settings tab) for:

Performance Note: The database is automatically created on first run. If the database becomes corrupted, delete musicbee.db and restart MBXRemote - it will rebuild the cache from MusicBee.

ETL Use Case: Library Data Export

MBXRemote's caching system functions as an ETL (Extract, Transform, Load) pipeline for MusicBee library data. The SQLite database can be used independently for:

ETL Pipeline

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  MusicBee   │────>│  MBXRemote  │────>│   SQLite    │
│  Library    │     │  Protocol   │     │   Database  │
└─────────────┘     └─────────────┘     └─────────────┘
    EXTRACT           TRANSFORM            LOAD

  - browsetracks      - Normalize         - CachedTracks
  - browsealbums      - Index             - CachedAlbums
  - browseartists     - Deduplicate       - CachedArtists
  - browsegenres      - Type casting      - CachedGenres

Example SQL Queries

-- Top 10 artists by track count
SELECT Name, TrackCount, AlbumCount
FROM CachedArtists
ORDER BY TrackCount DESC
LIMIT 10;

-- Genre distribution
SELECT Name,
       (SELECT COUNT(*) FROM CachedTracks WHERE Genre = CachedGenres.Name) as Tracks
FROM CachedGenres
ORDER BY Tracks DESC;

-- Albums from a specific year
SELECT Name, Artist, TrackCount
FROM CachedAlbums
WHERE Year = '2024';

-- Tracks with high bitrate
SELECT Title, Artist, Album, Bitrate
FROM CachedTracks
WHERE Bitrate >= 320
ORDER BY Bitrate DESC;

Access Methods

Tool Command/Usage
SQLite CLIsqlite3 "%APPDATA%\MBXRemote\musicbee.db"
DB Browser for SQLiteOpen musicbee.db directly
Pythonsqlite3.connect(path)
PowerShellInvoke-SqliteQuery (PSSQLite module)
DBeaver / DataGripAdd SQLite connection
Tip: Run a full sync in MBXRemote before using the database for ETL to ensure all data is current. The SyncMetadata table shows when each entity type was last synchronized.

Diagnostics and Performance Monitoring

MBXRemote includes comprehensive diagnostic logging for troubleshooting and performance analysis.

DiagnosticsService

A singleton service that tracks performance metrics throughout application lifecycle:

Metric Description Log Level
Memory SnapshotsWorking set, private bytes, GC heap, handles, threadsInfo/Debug
Command TimingRTT for network commands with min/max/avg/P95Debug
Slow CommandsCommands exceeding 1000ms thresholdWarn
Bytes Sent/ReceivedNetwork I/O totalsDebug
Performance SummaryAggregate stats logged at shutdownInfo

Log Markers for Analysis

Use these markers to filter logs for specific analysis:

Marker Purpose Example
MEMORYMemory/handle snapshotsMEMORY [sync-start]: WorkingSet=150.2MB...
TIMINGCommand timingTIMING: browsetracks completed in 234ms
SEND_TIMINGNetwork send timingSEND_TIMING: browsetracks sent in 2ms (156 bytes)
SYNC_STAGELibrary sync stagesSYNC_STAGE: Tracks completed in 12345ms
SLOW_COMMANDCommands >1000msSLOW_COMMAND: browsetracks took 2500ms
PERFORMANCE SUMMARYShutdown statsPer-command aggregates

Memory Snapshot Format

MEMORY [context]: WorkingSet=150.2MB, Private=180.5MB, GCHeap=45.3MB, Handles=512, Threads=24, GC(Gen0/1/2)=15/3/1
Field Description
WorkingSetPhysical memory in use by the process
PrivatePrivate bytes (committed virtual memory)
GCHeapManaged heap size
HandlesOperating system handle count
ThreadsActive thread count
GC(Gen0/1/2)Garbage collection counts per generation

Performance Summary (Shutdown)

=== PERFORMANCE SUMMARY ===
Uptime: 01:23:45
Total Commands Sent: 1,234, Received: 1,230
Total Bytes Sent: 45,678, Received: 12,345,678
CMD [browsetracks]: Count=5, Avg=234.5ms, P95=450ms, Min=120ms, Max=890ms, Errors=0
CMD [browsealbums]: Count=3, Avg=156.2ms, P95=200ms, Min=120ms, Max=210ms, Errors=0
=== END PERFORMANCE SUMMARY ===

Library Sync Timing

=== LIBRARY SYNC STARTING (Full) ===
MEMORY [sync-start]: WorkingSet=95.3MB, Private=120.5MB, GCHeap=35.1MB, Handles=412, Threads=18, GC(Gen0/1/2)=8/2/0
SYNC_STAGE: Genres completed in 234ms
SYNC_STAGE: Albums completed in 567ms
SYNC_STAGE: Artists completed in 890ms
SYNC_STAGE: Tracks completed in 12345ms
SYNC_STAGE: Playlists completed in 123ms
=== LIBRARY SYNC COMPLETED in 14159ms ===
MEMORY [sync-complete]: WorkingSet=180.2MB, Private=210.5MB, GCHeap=85.3MB, Handles=425, Threads=20, GC(Gen0/1/2)=15/3/1

Enabling Verbose Diagnostics

Enable detailed logging in Settings > General > Enable Logging for:

Log File Location

%PROGRAMFILES%\MBXRemote\logs\tntctl.log

(tntctl = tntctl remote viewer technologies)

Logs are rotated daily with 7-day retention.

Design Philosophy

The "Sandworm" Protocol

The ARiA protocol acts as a transport tunnel that carries action scripts without understanding or interpreting them. Like the sandworms of Arrakis that transport spice harvesters without knowledge of their cargo, the protocol simply moves action scripts from client to server.

This separation allows:

Why SendKeys Instead of API?

MusicBee's MB_InvokeCommand(Command.NavigateTo) didn't work for tab switching. The Command enum only has one value (NavigateTo = 1) with no documentation on parameters. Testing showed no consistent behavior.

SendKeys provides a universal solution that:

The "Jellybee" Codename

MBXRemote v1.0.26.3 is codenamed "Jellybee" - a portmanteau combining:

The jellyfish represents tntctl (tntctl remote viewer technologies) - the underlying engine that powers MBXRemote's library sync, offline browsing, and local caching. The name "tntctl" rhymes with "tentacle," fitting the aquatic theme.

PartyMode REST API

PartyMode exposes a REST API for guest access to the MusicBee library. All endpoints except /api/session/validate require a valid session token.

Authentication

Endpoint Method Description
/api/session/validatePOSTValidate PIN and receive session token
// Request
POST /api/session/validate
Content-Type: application/json

{ "pin": "1234" }

// Response (200 OK)
{ "token": "abc123...", "expires_in": 1800 }

// Response (401 Unauthorized)
{ "error": "Invalid PIN" }

// Response (429 Too Many Requests)
{ "error": "Too many attempts. Try again in X seconds" }

Library Endpoints

Endpoint Method Description
/api/library/albumsGETBrowse albums (paginated)
/api/album/{id}/tracksGETGet tracks for an album
/api/searchGETSearch tracks by title, artist, album
/api/statusGETGet now playing and queue status

Queue Endpoints

Endpoint Method Description
/api/queue/addPOSTAdd track to queue (rate limited)
// Request
POST /api/queue/add
Authorization: Bearer {token}
Content-Type: application/json

{ "trackId": 123, "requester": "Guest" }

// Response (200 OK)
{ "success": true, "position": 5 }

// Response (429 Rate Limited)
{ "error": "Rate limit exceeded", "retry_after": 30 }

// Response (403 Queue Full)
{ "error": "Max pending requests reached" }

Authorization Header

All authenticated endpoints require the Authorization header:

Authorization: Bearer {token}

Rate Limiting

PartyMode implements per-session rate limiting to prevent abuse:

PIN Protection & Lockout

PartyMode protects against brute-force PIN guessing with automatic rate limiting and lockout:

Protection Threshold Duration
Rate limit5 failed attempts per minuteResets after 1 minute
Lockout10 failed attempts total15 minute ban

How it works:

Note: The lockout is per-IP and in-memory only. Restarting MBXRemote clears all lockouts. For persistent bans, use your router's firewall or Windows Firewall rules.

QR Code for PartyMode

MBXRemote can generate a printable QR code that guests scan to join PartyMode instantly - no need to type a URL or PIN.

Using the Built-in QR Code Generator

  1. Go to Settings > Firewall > PartyMode
  2. Make sure you have generated a PIN (click "New PIN" if needed)
  3. Click "Show QR Code"
  4. Enter your PIN when prompted
  5. A dialog shows the QR code with options to Print or Copy URL

How It Works

Tips

Manual QR Code Generation

If you prefer to generate QR codes yourself, use any free QR code generator with this URL format:

http://YOUR_IP:8080?pin=YOUR_PIN

Services like qr-code-generator.com or qrcode-monkey.com work well.

Developer Test Mode

MBXRemote includes hidden developer tools for testing, debugging, and documentation. These are accessed via keyboard shortcuts and are intended for developers, testers, and power users.

Developer Test Mode Cheat Sheet

Hotkey Tool What It Tests Output Location
Ctrl+Shift+Alt+T Protocol Tester API endpoints, protocol negotiation, library sync, ARiA logs/protocol-test-*.txt
Ctrl+Shift+Alt+P PartyMode Tester Web endpoints, PIN auth, browse pages, queue, admin logs/partymode-test-*.txt
Ctrl+Shift+Alt+U UI Gallery Screenshot capture, UI navigation, visual testing assets/screenshots/*.png

All test output is automatically persisted to disk. Reports use timestamp-based filenames for history tracking.

Protocol Tester (Ctrl+Shift+Alt+T)

A comprehensive protocol compatibility tester that validates plugin functionality and protocol negotiation.

Access

Press Ctrl+Shift+Alt+T anywhere in MBXRemote to open the Protocol Tester.

Test Categories

Category Tests
Protocol Negotiationv4.0/v4.5 handshake, extended metadata fields
Playback ControlPlay, pause, stop, next, previous, volume, mute, shuffle, repeat
Now PlayingTrack info, cover art, lyrics, position, rating, love status
Queue OperationsList queue, add track, remove track, move, clear
Library EditingSet rating (0-5), set love/ban status
Library SubscriptionsSubscribe/unsubscribe to real-time library events
SearchSearch artists, albums, tracks, playlists
Library NavigationBrowse genres, artists, albums, tracks (paginated)
Playlists & PodcastsList playlists, get tracks, podcast feeds
ARiAInitiator action execution test
KeepalivePing/pong connectivity test

Output

UI Gallery (Ctrl+Shift+Alt+U)

A UI testing and screenshot capture tool for documentation and visual regression testing.

Access

Press Ctrl+Shift+Alt+U anywhere in MBXRemote to open the UI Gallery.

Capabilities

Feature Description
Tab NavigationSwitch between all main tabs (Now Playing, Library, Playlists, Queue, Settings)
Settings Sub-tabsNavigate all Settings sub-tabs (General, Hotkeys, Appearance, Firewall, Database)
Dialog PreviewOpen and preview all dialogs (QR Code, Protocol Tester, Favorites, About)
Capture AllAutomated screenshot capture of all UI elements
Test ResultsGenerates ui-gallery-results.txt with pass/fail report

Output (Auto-Saved)

Screenshots and results are automatically saved to:

{MBXRemote.exe location}\assets\screenshots\

Files are named systematically for documentation use:

Test Results File

Each capture run generates a results file:

===========================================
MBXRemote UI Gallery Capture Results
Captured: 2025-12-26 14:30:00
Version: 1.0.26.3
===========================================

SUMMARY: 13 passed, 0 failed, 13 total

--- RESULTS ---
[PASS] Tab-NowPlaying
[PASS] Tab-Library
[PASS] Tab-Playlists
...

--- FILES CAPTURED ---
  Tab-NowPlaying.png
  Tab-Library.png
  ...

===========================================
End of report

PartyMode Tester (Ctrl+Shift+Alt+P)

A comprehensive HTTP endpoint tester for validating PartyMode web server functionality.

Access

Press Ctrl+Shift+Alt+P anywhere in MBXRemote to open the PartyMode Tester.

Test Categories

Category Tests
Health Check/health endpoint availability
Login FlowHome page (/), login page (/login), PIN authentication
Browse PagesAlbums (/browse), Artists (/artists), Genres (/genres), Tracks (/tracks)
Search/search with query parameter
Queue/queue pending requests display
Admin/admin login and analytics dashboard
SessionCookie-based session management
PaginationPage navigation on browse pages
NowPlayingNow playing display on all pages

Output (Auto-Saved)

Developer Hotkey Summary

Hotkey Tool Purpose Output
Ctrl+Shift+Alt+TProtocol TesterAPI compatibility and protocol testinglogs/protocol-test-*.txt
Ctrl+Shift+Alt+PPartyMode TesterWeb server endpoint testinglogs/partymode-test-*.txt
Ctrl+Shift+Alt+UUI GalleryScreenshot capture and UI reviewassets/screenshots/

MusicBee ARiA Hotkeys

MBXRemote can automatically configure MusicBee with ARiA-style global hotkeys for tab navigation and visualizer control. These hotkeys work system-wide, even when MusicBee is not focused.

ARiA Hotkey Mappings

The ARiA system uses Ctrl+Alt combined with home row keys (QWERTY left hand: A-L) for tab navigation:

Hotkey Key Code MusicBee Command Description
Ctrl+Alt+A393281GeneralGotoTab1Navigate to Tab 1
Ctrl+Alt+S393299GeneralGotoTab2Navigate to Tab 2
Ctrl+Alt+D393284GeneralGotoTab3Navigate to Tab 3
Ctrl+Alt+F393286GeneralGotoTab4Navigate to Tab 4
Ctrl+Alt+G393287GeneralGotoTab5Navigate to Tab 5
Ctrl+Alt+H393288GeneralGotoTab6Navigate to Tab 6
Ctrl+Alt+J393290GeneralGotoTab7Navigate to Tab 7
Ctrl+Alt+K393291GeneralGotoTab8Navigate to Tab 8
Ctrl+Alt+L393292GeneralGotoTab9Navigate to Tab 9
Ctrl+Alt+;393402GeneralGotoTab10Navigate to Tab 10

Visualizer Hotkeys

Control MusicBee's visualizer remotely using these global hotkeys:

Hotkey Key Code MusicBee Command Description
Ctrl+Alt+V393302ViewToggleVisualiserToggle visualizer panel
Ctrl+Alt+Z393306ViewVisualiserToggleFullScreenToggle visualizer fullscreen
Remote Visualizer Control: Using ARiA initiator actions with these hotkeys, you can toggle the MusicBee visualizer from MBXRemote. Configure an initiator action with sndKeys(CTRL ALT V) to toggle the visualizer, or sndKeys(CTRL ALT Z) for fullscreen mode.

Automatic Configuration

MBXRemote can automatically add these hotkeys to your MusicBee settings file:

  1. Go to Settings > Hotkeys
  2. Click "MusicBee ARiA Keys"
  3. MBXRemote will scan for your MusicBee settings file
  4. Review the current status (which hotkeys are already configured)
  5. Click Yes to add missing hotkeys
  6. Restart MusicBee for changes to take effect
Backup: MBXRemote automatically creates a backup of your settings file before making changes. The backup is saved as MusicBee3Settings.ini.backup_YYYYMMDD_HHMMSS.

Key Code Calculation

MusicBee key codes are calculated as: Modifiers + VirtualKeyCode

Modifier Value (Hex) Value (Decimal)
Control0x20000131072
Alt0x40000262144
Shift0x1000065536
Ctrl+Alt0x60000393216

Example: Ctrl+Alt+A = 393216 (Ctrl+Alt) + 65 (A) = 393281

Settings File Location

MusicBee stores hotkey settings in its main configuration file. Common locations:

Installation Type Path
Standard%APPDATA%\MusicBee\MusicBee3Settings.ini
Portable<MusicBee Folder>\AppData\MusicBee3Settings.ini

XML Format

Hotkeys are stored in the <HotKeys> section as <KeyCommandPair> elements:

<HotKeys>
  <KeyCommandPair>
    <Key>393281</Key>
    <Command>GeneralGotoTab1</Command>
    <IsGlobal>true</IsGlobal>
  </KeyCommandPair>
  <KeyCommandPair>
    <Key>393302</Key>
    <Command>ViewToggleVisualiser</Command>
    <IsGlobal>true</IsGlobal>
  </KeyCommandPair>
  ...
</HotKeys>