The bridge to everything else.
SET LIST chip in the bottom strip whenever the current track's Comment carries a time-coded setlist. Click it to jump to the standalone Now Playing page with the Tracklist tab already focused.index · time · title rows with a per-entry seek button. As playback crosses entry boundaries the active row highlights and a muted sub-line under the title shows what's currently playing within the recording..cue sidecar next to the audio file (UTF-8 with BOM, atomic write via tmp → File.Replace → .bak). The album then expands into virtual tracks across browse, search, queue, and the wavescrubber.MM:SS Title / HH:MM:SS Title (time-first, optional - / en-dash / em-dash before title), NN - Title - MM:SS, and NN. Title MM:SS. Threshold: ≥3 monotonically increasing entries whose timestamps land inside the file's duration.play.html. Renders only when MusicBee plays the underlying file as a single item (the wave canvas covers the full file duration so ticks scale correctly). When a CUE file is present, MusicBee uses it to play virtual tracks with their real per-song timing; the wave it returns is per-virtual, so the ticks (which mark file-absolute positions) fall outside that canvas — expected for that mode.nowplaying.html..mp4 / .mkv / .webm / .mov / .m4v / .avi) render as a list with play arrow + size (click opens the browser's native player)..mp4 / .mkv / .webm / .mov / .m4v / .avi.; / , / & / feat / ft / featuring / with / and / vs / presents) — appear under every contributor's drill-down. The filter consults the full role union: Artist, Performer, Guest, Remixer, Composer, Conductor.?album=&people= query shapes that previously deduped to one row. CUE virtual rows also emit albumArtist so multi-artist covers compilations keep every CUE row under the artist's drill-down./library/files?roles=true returns every per-track role bucket MB tracks separately (artistsRole, performers, guests, remixers, composers, conductors, artistsUnion). Default off; only paid for when requested.?include=<TagName> on /library/files drives it, accepts any tag from the 48-tag customSorts allowlist.NowPlaying_GetSoundGraphEx (served as /nowplaying/sound-graph-ex). Painter lives in a shared transport-wave.js component.progressBarHeight, progressBarFillOpacity, and progressBarFillColor overrides on top of the preset. Set any one to dial the bar independently of the S/M/L/XL preset; defaults leave preset behavior unchanged.+0.1 87% vibe-score and confidence stats are now gated behind diagnostics.showMoodDebugStats (off by default). Tuning users flip it on; everyone else gets the cleaner badge.progressBarHeight overrides now lift .np-info, time, and mood/format with the actual bar height, not just the preset class.-webkit-backdrop-filter rules so the chrome blur renders on Safari and iOS./library/albums/by-artist all report the same album count (via ArtistPeople); featured-on entries surface from every path./library/search no longer caps the album fan-out; broad substrings now surface every CUE compilation, not the first 50.Auto-Cal is a MusicBee playlist you maintain by hand. It holds anchor tracks — songs you've picked as corner / archetype examples for the valence and arousal axes ("this is what I mean by maximum energy," "this is what I mean by deepest sad"). Everything below either feeds into that playlist, reads from it, or measures how well the model still agrees with it.
vamAnchorPlaylist setting (default "Auto-Cal") names the playlist that holds your anchors. Resolved by name on every request, so renaming in MusicBee takes effect without a restart./pages/tune.html and the anchor labels from the annotate page now feed the same calibrator. One loop: judge, anchor, measure, retrain.useTrainedModel setting (default on). When off, AutoQ uses the legacy weighted-sum formula and every slider, intercept, genre bias, and the Calibrate / Suggest buttons in the Estimation Mixer are live. The console shows the active path (model vs formula vs missing) and auto-hides the fallback sliders when they don't apply.mood-model.json into %AppData%\MBXHub and it wins over the copy embedded in the DLL. POST /vam/model/reload picks it up without a restart. Closes the no-rebuild iteration loop on the retraining side.POST /dashboard/rate/{n} honors ?url=; play.html passes the current Listen Here track. Album view also normalizes 0–100 / POPM star scales from non-MB taggers.mbxhub.json, admin-only.nowplaying.html swaps the static “Lyrics” label for a [Lyrics | Comment] segmented control. Click to flip the body between the two. Comment-only tracks keep their “from comment” chip. Gated by LyricsFallback; ApiDisableLyricsFallback suppresses the new field too.ImmersiveAlwaysShowProgress keeps the seek bar at full height in Immersive mode instead of fading with the rest of the chrome. Off by default; flip it on under Settings → Dashboard.vamAnchorPlaylist (default "Auto-Cal") replaces the hard-coded playlist name in GET /vam/gates/report. Resolved by name on every request, so renaming the playlist in MusicBee takes effect without a restart./pages/history.html add a 1y option after 30d, lifting the previous 30-day ceiling for browsing recent plays./pages/ picks up a History tile between Play and Explore./library/files, so the album-row expand looked dead and Play / Next / Last silently no-op'd. Inline expand and the per-album action buttons now share the same firstTrackUrl fallback the breadcrumb drilldown already had — clicks produce a real track and the buttons play it.v0.5.3.x-<branch> off master / main; tag builds stay clean.min(85vw, 480px)), filter input above the list, basename in the tooltip.Relentless 💀 and Edge 🤘 channels, default channel positions and combo threshold tweaked. Existing user configs auto-migrate the new bands on first load./library/artist/{name}/pictures and /nowplaying/*-pictures on disk-only./pages/tune.html shows two tracks A/B with their current AutoQ classification; pick which is more intense or more positive per axis (1/2/3/0 keys, A/B to listen). Judgements accumulate to mbxtune-pairs.json and /autoq/tune/scores returns the Bradley-Terry ranking — raw material for fitting V/A weights against actual user judgement instead of theory./pages/history.html — recently played tracks with day-range chips and per-row P / L queue buttons. New dashboard footer link, disabled by default; enable via the Dashboard footer-links settings UI./pages/hubs.html — picker of every MBXHub instance this browser has seen on the network, plus a manual host:port box. Fed by GET /system/hub-neighbors (Shell SSDP scan) and local browser memory. New dashboard footer link, disabled by default./stream/<file>). Play/pause, prev/next, volume, mute, scrubber, and auto-advance all route to the active side. Flipping to browser pauses MB; flipping back resumes. Small 🎧 chip in the transport bar shows the current target. Persisted per-client in localStorage.+ / − and mute on play.html now route through the mixer iframe via postMessage — the same charmCmd protocol the dashboard mixer charm uses. The active default fader (player / device / endpoint) is honored end-to-end. WS VolumeChanged no longer stomps the slider in device / endpoint mode — the iframe is the single source of truth, reporting back via charmVolume / charmMute. Prior bugs the rework displaces: rocker piggy-backed on a /mixer/volume PUT that only handled player + device (not endpoint); mute always hit the player regardless of fader./mixer/volume wires endpoint fader — GET + PUT now resolve the active endpoint (first entry of endpoints[]) and call GetVolumeAsync / SetVolumeAsync directly. Soft-fall-back to Player_GetVolume / Player_SetVolume if no endpoint is configured or the Devialet call fails — the actual fader hit is surfaced in the response so the client knows where the request landed. This completes the slider-drag path for endpoint mode (rocker + mute were already routed via the iframe).GET /search?q=&buckets=&limit=&cursor= runs typed buckets in parallel (tracks / albums / artists / playlists / saved / etc.) with cursor pagination on the tracks bucket, facet counts, and a top-hit response. Backs the Cmd+K palette and any client wanting a single call instead of fanning out. ?dsl=true opt-in routes the query through the new DSL parser.artist:, album:, genre:, year:, rating:, fmt:, range / boolean / grouping operators) on top of the existing strict / substring modes. Opt-in per call via ?dsl=true on /library/search and /search; cheat sheet at GET /library/search/syntax. Default off so existing free-text callers are unaffected.GET|POST /search/saved, GET|PUT|DELETE /search/saved/{id}, GET /search/saved/{id}/results, POST /search/saved/{id}/run. Backed by mbxhub-search.json next to mbxhub.json. Background SavedSearchScheduler ticks per-saved-search interval, evaluates, diffs against last-match URLs, and broadcasts a new SearchMatched WebSocket event when matches change. Enabled by default; toggle via library.search.savedSearch.enabled. Write/mutation routes honor ApiReadOnlyMode.GET /search/history?limit=N, POST /search/history (append; empty body clears), DELETE /search/history. Server-side recents log shared by Cmd+K and any other search bar; falls through to client localStorage if the endpoint is missing or 404s. Mutations gated on ApiReadOnlyMode.GET /system/search-index reports the live engine (currently mb) and its index state. FTS5 substrate dropped during the post-decouple harvest; the seam is preserved so a future engine can plug in without touching the call sites.play.html too. Shared cmdk-bootstrap.js loader, same actions (Play/Pause/Skip/Volume, Open Charms / Settings / Mixer / Player / Browse / Explore / ARiA, Start AutoQ radio), same federated search, same recents. Press Ctrl+K from anywhere on play.html./nowplaying/lyrics has nothing real to return, MBXHub now surfaces the track’s Comment tag in the lyrics panel with a small “from comment” chip above it. Concert setlists, venue notes, and album liner notes show up where lyrics would on nowplaying.html (and therefore on play.html, which embeds it). Configurable via the LyricsFallback settings section (Enabled, MaxDisplayChars, Label); hard-killable via ApiDisableLyricsFallback./manifest.webmanifest) at root scope so every host page (dashboard, play.html, explore, browse, …) is installable to the home screen / desktop. PWA icon set at /icons/{name} — icon-192.png, icon-512.png, maskable variants, plus the 180px Apple touch icon — generated as MBXHub. Manifest name picks up the host’s display name dynamically (__HOST_NAME__ substitution); start_url is / so launching the icon opens straight to the dashboard./autoq/react), “+ Add To Playlist” dropdown beside love and stars (last-used playlist bubbles to the top with a star marker), ARiA presets dropdown in the overflow flyout (auto-hides if ARiA isn't enabled), influence thumbs (artist + genre) on the right-column now-playing card, global media-key shortcuts (Space = play/pause, ← = prev, → = next), and a 30s position-poll safety net behind the WebSocket. Player.html's add-to-playlist + reactions + ARiA + influences are now fully mirrored on play.html.console.warn/error sites through POST /system/client-log on a 2-second flush (and sendBeacon on pagehide). Same model dashboard already uses; users running Release builds with no devtools open finally see browser-side errors in the file log./pages/play.html as a webapp surface, mirroring the existing Player / Explore / Browse charm convention.updateTrack now uses the soft inline-refresh path instead of a full location.reload(). The reload was raising the dashboard tab to foreground on Firefox (and some Chrome configs) every time MusicBee changed tracks, even when the user was reading in another window. Soft path covers the same content delta — rating, love, duration, progress, influence buttons, artwork — without the focus side-effect./system/qr and /diag on that specific host.tray.disableTrayIcon: true in mbxhub-shell.json runs the Shell with no tray icon. SMTC bridge still publishes; just no UI.aspect-ratio. Pick a ratio, get that ratio.ColumnMaxWidth, ColumnGutter, and ImmersiveMaxHeight in mbxhub.json. ImmersiveMaxHeight default bumped 400 → 600.contain (default; whole album art with blurred-background letterbox) or cover (cropped to fill panel edge-to-edge, no bars).mbxmoods.json populated offline by truedat./meta/* endpoints removed from the REST surface.GET/PUT /system/endpoint-type.-cli attached). Tray: Open MusicBee, Status, Reconnect, Settings, Start with Windows, Quit. Click from Start menu launches MusicBee.ImmersiveMaxHeight now honored across zoom variants and the desktop ≥1024 px @media block (was previously stomped by hardcoded ceilings)./diag page with live charts of CPU, memory, threads, and GC for spotting performance issues. Detailed log lines at the most-important decision moments make future spikes easy to trace.ScannerPool in scan.mode = "auto" builds a round-robin pool from local + every SSDP-discovered peer that advertises the scanner capability (i.e. has truedat.exe installed). Plugin's ScanEnqueue WebSocket events get dispatched across the pool: local scans run in-process, remote dispatches POST /meta/scan with the file's UNC share path so the worker can read it over the network. Failed nodes are marked unhealthy after 3 consecutive failures and probed every 60 s.SyncLibraryPath (e.g. D:\Music) and SyncSharePath (e.g. \\masterpc\music), let the master compute UNC paths for files when dispatching scans to remote workers. Workers receive the share form, pass it to truedat as the file path, and read the audio over SMB. Without these set, remote dispatch falls back to the local path (only useful if all nodes share a drive letter)./meta/scan on Shell — New endpoint accepts {file, share, priority} and enqueues into the local ScanWorker. Responds 200 {status: "queued", file} immediately; truedat runs and ingests asynchronously. 503 SCANNER_UNAVAILABLE when the node has no truedat installed.MetaService.IngestAsync used to be first-write-wins: any existing row with non-zero base fields caused the entire incoming observation to be dropped. That meant a peer rescanning with a richer feature set couldn't fill in missing fields. New three-tier strategy: new row → full write; all-zero garbage → full overwrite (recovery); existing with data → merge (base scalars stay first-write-wins to avoid stomping good data, nullable extended fields fill from null, DR upgrades when incoming source rank is strictly higher: essentia-lra > derived-peak-rms > fallback-genre > fallback-none). Federation now actually converges across heterogeneous peer versions.!DynamicRange.HasValue; tracks from old truedat builds (no LRA) automatically fall through to a fresh Essentia pass on next run, picking up all 39 new fields in the same analysis. Cache copy preserves the full feature set across reruns once captured./system/fleet aggregator — Single endpoint on master plugin fans out to local Shell + every knownPeers entry in /meta/sync/status, fetches each node's /meta/health and /meta/stats in parallel (3 s per-node timeout), returns aggregated queue depth, scan status, sync state, DB size. Per-node status field flags up | down | timeout so partial outages don't fail the whole call./system/fleet every 5 s while the page is visible. Per-row: name, status dot, tracks, queue depth (highlighted in accent when >0), scan status, last-sync rel-time, last-sync result, DB size. Headline meta line shows N/M nodes up · X tracks · Y queued · updated Zs ago. Pauses on tab hide; manual refresh button.charmBar.sizeOverrides dictionary (charm ID → S/M/L/XL/XXL) lets individual charms break from the bar-level size. A single charm class-name override wins via CSS specificity, so you can keep the bar compact while boosting one specific charm.charmBar.breakBefore list of charm IDs forces a row break before any named charm. Combined with Per-Charm Size Overrides, the volume mixer can sit on its own row with XL buttons while the rest of the charms stay at M — one-handed tablet use gets easier without blowing up every button.dashboardLayout.immersiveTextSize setting (S / M / L / XL) now governs metadata text size for every now-playing style, not just immersive. Classes renamed internally from immersive-text-* to np-text-*; the setting name is unchanged for backward compatibility.aria.json). New display: "action-menu" charm mode: single trigger + popover of preset actions. Keyboard-navigable (Arrow nav, Enter activates, Tab/Esc closes), auto-orients above or below the trigger based on viewport position. Presets continue to come from AriaPresets in mbxhub.json; the charm's expand is populated at load time. Respects all charm-bar settings (order, hidden, size, sizeOverrides, breakBefore).library.disableCrossFieldMatching — Toggles the new adjacency rule. Defaults to true (adjacency required, the new default). Set to false to restore the previous cross-field behavior where tokens could match anywhere across any of the four fields. Ignored when substring search is enabled. Exposed as a checkbox in Settings (Configuration → Library) and picked up by the dashboard settings page; browse.html honors it live from /system/settings.+, rendered as a hover overlay..meta column on FHD 3-col layouts. Controls are now lifted out to span the full .player width, and they stay visible when the NP card is collapsed..np-style-split rows now include min-width: 0 so square art no longer letterboxes inside a tall column when the metadata panel shrinks./pages/settings.html added to the default dashboardFooterLinks list (disabled by default). Tick it in the plugin Settings dialog to surface it in the dashboard footer.library.disableSubstringSearch — Controls library search matching globally. Defaults to true (strict word-boundary, the new behavior). Set to false to restore loose substring matching library-wide. Exposed as a checkbox in the plugin Settings dialog (Configuration → Library) and picked up automatically by the dashboard settings page.GET /library/search accepts a new ?substring=true|false query parameter that overrides the setting for a single call. The response now includes a mode field ("strict" or "substring") echoing which path was taken so clients can verify./library/evaluate), placeholder artwork (/library/no-artwork), and peak/RMS metering (/nowplaying/peak). Returns 501 on older MusicBee builds.dashboardLayout.disableVolumeGesture setting. Vertical swipe on artwork for volume control is now off by default to avoid conflicts with page scroll. Track skip gestures (horizontal swipe) unaffected.theme.disablePinchZoomLock unlocks native pinch-to-zoom on mobile. Also available as a toggle in the theme drawer.MB_Evaluate, Library_GetNoArtworkUrl, and NowPlaying_GetPeak. Gracefully absent on older builds./library/search with debounced server queries and AbortController cancellation. Full track UI with play, queue next/last, listen-here, and playlist buttons.mbxh_split_ratio localStorage key.mbxh_immersive_fade).charmBar.buttonSize setting: S (32px), M (40px, default), L (52px).dashboardLayout.progressBarSize: S (4px), M (6px, default), L (10px).search section — full library search from the dashboard. Fuzzy album matching (client-side, instant) + server-side track search with AbortController. Filter tabs (All/Albums/Tracks), inline action card (play, queue next, queue last, explore), keyboard navigation (/ to activate, arrows, Enter=play, Shift+Enter=queue), search history in localStorage. Configurable bar size via searchBarSize./media/* — browse and serve images and videos from configured folders. Rotation, categories, seeking. Disable via disableMedia./pages/media. Image crossfade, video transport controls, folder browser, configurable timer. Hidden by default./pages/explore.html — art-first album browser. Full-bleed artwork fills the viewport. Progressive reveal chrome fades in on interaction, fades out after 5 seconds. Gallery mode with crossfade transitions, fan art integration, and artist photo gallery. Edge gestures: top touch opens search, swipe up opens tracklist, tap enters gallery, double-tap plays. Transport controls (play/pause, skip, volume wheel). Source filters (All, 1mo, 3mo, 12mo, Unheard), diacritic-normalized search, enhanced album filter, PDF booklet viewing. Hidden by default in charm bar.GET /library/albums/unheard (albums where all tracks have playCount=0), GET /library/albums/with-pdf (albums containing PDF booklets). Both support ?offset=&limit=.GET /library/file/{url}/artwork-count probes embedded artwork images (up to 20, cached). GET /library/file/{url}/pdf serves PDF booklets from album folders. GET /library/file/{url}/has-pdf checks existence.GET /library/file/{url}/fan-art lists all images in an album's folder (Discogs scans, booklet pages, promo photos). GET /library/fan-art/{path} serves them. Excludes thumbnail artifacts and WMP cache files. Results cached per-session.GET /playlists was truncated. All playlists now returned correctly.scan.remoteUrl in mbxhub-shell.json to forward scan requests to a dedicated scanner via POST /meta/scan. Host disables local scanning (scan.enabled: false), remote does the work. Results flow back via PeerSync.GET/PUT /meta/config endpoints.mbxmoods.json flat file. Import existing data via POST /meta/import, query features via GET /meta/features, ingest new scan results via POST /meta/ingest. Runs on port metaPort (default: REST port + 1).truedat --meta-server <url> for batch scanning.ScanEnqueue WebSocket events. The Shell's ScanWorker picks up work and posts results to MetaServer.mbxmoods.json when MetaServer is unavailable. Background cache fill, periodic health re-check.GET /meta/export?since=), zero-config via SSDP discovery. Trigger manually with POST /meta/sync, check status with GET /meta/sync/status.ScanEnqueue WebSocket events. Remote Shell instances (scanners) open files via UNC share, run Essentia analysis, and deliver features back via PeerSync. Scanner requires zero path configuration — host owns the mapping. Configure syncLibraryPath and syncSharePath in mbxhub.json./mixer/volume Endpoint — GET/PUT routes to the active default fader (player or device). All gesture volume controls use this single endpoint./library/artists (was album-artists). /library/albums supports ?albumArtist= filter.GET /scan/status reports mood cache stats (total, Essentia, fallback counts).mbxhub.json. One theme config drives dashboard, player, browse, now playing, and mixer. GET/PUT /system/theme REST endpoints with partial update support. ThemeChanged WebSocket event for live sync across all pages.GET /autoq/track-mood now includes file URL and album fields for scan integration.POST /scan/track enqueues a single track or full album for Essentia analysis. AutoQ tuning console shows Scan Track and Scan Album buttons when the current track uses fallback estimation. No autoScan setting required.GET /devices/audio/outputs endpoint lists all active Windows audio render devices via Core Audio (name, id, isDefault).MBXHub.exe --install on the remote machine, then edit mbxhub-shell.json to point at the MusicBee host. Media keys, play/pause, skip, and artwork all work across the network.GET /autoq/taste-explorer discovers tracks adjacent to the current taste profile, grouped by genre/artist/mood. GET /autoq/similar finds tracks similar to a seed track. TasteChanged WebSocket event broadcasts profile updates./pages/mixer.html.GET /library/album-artists, GET /library/albums/by-artist. New ?albumArtist= filter and year-asc sort on /library/files./library/albums/detailed now returns year and dateAdded per album.var()/clamp() fallbacks, :focus-visible fallback, emoji detection with text substitution, ES5-compatible JS, form-based volume controls for no-JS modesettings.html) — Firefox about:config-style editor for dashboard, AutoQ, and shuffle settings with search, category filters, and inline editingbrowse.html) — standalone browse-and-queue webapp
POST /queue/add accepts urls array for multi-track queuingPOST /playlists accepts files array to create and populate in one step?sort=track for disc/track order (CUE-aware)GET /autoq/moods/browse returns tracks scored by mood similarityautoQ.genreProfiles in mbxhub.json — override or extend built-in profilesuseGenreAdjustment (on by default), controllable from Tuning Consoleconfidence = sourceBase × channelProximityconfidenceMinForTag (0.3)confidence, confidenceLabel, genreProfile in GET /autoq/track-moodmoodLabel and moodMatches array in API responsesmoodComboMaxResults (3) and moodComboMinScore (0.85)GET /stream/{path} — serve any library file over HTTP with full seek support
206 Partial Content) — seek anywhere instantlydisableStreaming setting, off by default<audio> element/system/features — 🎧 buttons hidden when streaming disabled server-sideGET /radio/stations endpoint — returns station name and URL/pages/phantom.html
GET /podcasts — list subscriptions with title, genre, description, download countsGET /podcasts/{id}/episodes — episode list with dates, duration, play/download statusGET /podcasts/{id}/artwork — subscription artworkPOST /api/proxy — generic HTTP proxy for controlling LAN devices from the browser
DnsServiceRegister API (Win10 1809+, graceful fallback on older)MBXHub (Name)._http._tcp.local with TXT recordsdns-sd -B _http._tcp or Bonjour BrowserdiscoveryName setting replaces cryptic hash identifiers
MBXHub (Name) across SSDP, WS-Discovery, and mDNSPUT /system/settingsGET /system/version now returns host field; player status bar shows “Connected to {host}” instead of generic “Connected to MBXHub”GET /remoteapp/status — check edition, RDP enabled, configured stateGET /remoteapp/rdp — download .rdp file with audio-optimized defaults and query param overridesMBXHub.exe remoteapp setup|remove|status|rdp with auto-elevationremoteAppEnabled, remoteAppApiDisabled (General and API Access tabs)hideFileInfo setting.dashboardFooterLinks setting: array of {label, url, enabled} objectsfooter) — hide/show via dashboardLayoutHALRAD.MBXHub) for proper Windows notification identityMBXHub.exe firewall add|remove|check|status|open (replaces standalone firebug.exe)moodChannels now included in GET/PUT /autoq/settingsPOST /wsd provides "Device webpage" link to dashboarddiscoveryEnabled setting controls both SSDP and WS-Discovery/autoq/status, /autoq/start, /autoq/stop, /autoq/vibe-listGET/PUT /autoq/settings - Read/write all tunable parameters at runtime/pages/autoq.html) - Mixer-style UI with vertical faders for estimation weights, horizontal sliders for scoring/behavior, live statsPOST /autoq/react - Submit reaction with nickname attributionGET /autoq/reactions - Reaction history with optional track filterprefers-reduced-motion for accessibilityGET /autoq/stats for custom UIs/pages/partymode/leaderboard.htmlGET /autoq/moods and POST /autoq/mood for mood-based track selection
autoQ.moodChannels in mbxhub.jsonautoQ.estimation in mbxhub.json. See AutoQ Configuration for details.autoQ.moodTagField (e.g. "Custom1")POST /autoq/retag-moods - Bulk retag all analyzed tracks"😌 Chill" (emoji + channel name)GET /system/qr - General-purpose QR code endpoint (accepts ?url= override)disableGuestQr / disableHostQr in Party Mode settings[CUE] logger category?sort= parameter
alpha (default), artist, album, title, date, name/library/files, /library/artists, /library/albums, /library/genres, /library/search/pages/partymode/guest.html) - Browse library and request songs
/pages/partymode/dj.html) - Full queue control
/pages/partymode/display.html) - TV-friendly display
/pages/partymode/index.html) - PIN entry with nicknameGET /partymode/status - Check if party is activePOST /partymode/start - Start party with PINPOST /partymode/stop - End party sessionGET /partymode/validate - Validate PIN and register joinPOST /partymode/verify-dj - Verify DJ PIN for DJ page accessPOST /partymode/vote - Submit vote with attribution (persisted in feed)POST /partymode/request - Submit song request with attributionGET /partymode/requests - Get recent requestsGET /partymode/feed - Get feed (joins, requests, votes, reactions)GET /partymode/qr - Generate QR code imageGET /partymode/role - Get caller's role (host/dj/guest)READ_ONLY error when blocked/llms.txt
/pages/, /pages/{filename}pagesPath in settings (default: %APPDATA%\MusicBee\MBXHub\pages\)/pages/player.html
/pages/index.html--) hard exclude matching tracks from shuffleGET/POST /influences, DELETE /influences/{target}/{value}, POST /influences/clear/device.xmlMBXHub.exe firewall)POST /app/exit gracefully closes MusicBee, POST /app/restart schedules a restart via Task Scheduler (enable in settings)/aria/status - Check if ARiA is enabled/aria/wake - Quick wake: move mouse + send Shift key/aria/send-keys - Send keyboard input (SendKeys format)/aria/mouse/move - Move mouse (absolute or relative)/aria/mouse/click - Mouse click (left, right, middle)/test/websocket with editable URL/shuffle/status, /shuffle/reset, /shuffle/played, /shuffle/remaining/banlist, POST /banlist, DELETE /banlist/{url}/docs now cover 120+ endpointsPOST /rpc/{method})