Liner Notes

Everything you need to know about Stellar Grooves — from a quick scan to crossfade, playlists, and PWA install.

Getting Started

First-Time Setup

1
Create an account at the Sign Up page, then sign in.
2
Open the Scan Directory panel in the sidebar and enter the absolute path to your music folder (e.g. /home/user/Music or C:\Users\You\Music).
3
Click Start Scan. A live progress line shows files coming in. The scanner finds .mp3, .flac, and .m4a files and pulls title, artist, album, year, genre, and cover art from the embedded tags.
4
When the scan lands, your tracks fill the library. Click the play button on any row — the Wurlitzer warms up and you're in.

Navigating the Room

The main room has two panels. The left sidebar holds your Up Next queue, playlists, and the scan form. The right panel is your library with Artists, Albums, and Tracks views. Stat cards at the top jump you to filtered views — click Duplicates to review dupes, Albums for the grid.

Back to top
Playback

The Wurlitzer

When a track starts, the 1015 jukebox materializes at the top of the page with live cover art, a spinning platter, bubble tubes, and dual audio elements for crossfade. Controls include:

  • Play / Pause — click the play button or press Space
  • Seek — drag the progress bar, or use / (5-second jumps)
  • Volume — drag the slider, or use /
  • Shuffle — shuffle button on the control panel
  • Next Track — playback auto-advances

Crossfade

Click the sparkle button to enable crossfade. The last 3 seconds of each track fade smoothly into the next using two audio elements — no gap, no click.

Queue

Add tracks to Up Next with the + button on each row. Queued tracks play before the regular library order resumes. The queue syncs to the server so it persists across sessions and devices.

Lock Screen & Notifications

On supported devices, track metadata and album art appear on your lock screen and in system media notifications. Play, pause, skip, and seek without opening the app.

Back to top
Library Management

Search & Filter

The search box runs a full-text search across title, artist, and album. Combine it with the artist, album, and genre dropdowns — all filters stack with AND logic.

Browse Views

Switch between three views via breadcrumb navigation:

  • Artists — all artists with album + track counts. Click to drill down.
  • Albums — grid of sleeves with cover art (toggle between grid, list, or cover-art gallery). Click for tracks.
  • Tracks — sortable table: title, artist, album, genre, rating, decade.

Ratings

Rate any track 1–5 stars using the star widget. Click the same star again to clear it. Sort the track list by rating to surface your favorites.

Genre Editing

Tracks are auto-classified during scanning. If one shows as Other, click the genre label to reclassify. Your correction is remembered — future scans for that artist will use your chosen genre.

Bulk Operations

Use row checkboxes (or the select-all toggle) to pick multiple tracks. A bulk action bar appears with options to delete selected tracks or add them to a playlist.

Duplicates

Click the Duplicates stat card to review duplicate tracks (matched by title + artist). You can also detect exact file copies via hash-based duplicate detection. Compare side by side and delete the ones you don't want.

Trash

Deleted tracks go to a 30-day trash instead of being permanently removed. Restore from trash if you change your mind, or empty it to free up space.

Back to top
Playlists

Create & Manage

Create a playlist from the sidebar by typing a name and hitting the + button. Add tracks with the + on each row, or select multiple tracks and use the bulk Add to Playlist action.

Reorder

Open a playlist and drag-drop tracks to reorder. You can also sort by title, artist, album, genre, rating, or year using the column headers.

Share

Click the share button on any playlist to generate a read-only public link. Anyone with the link can view (but not modify) the playlist. Revoke the link at any time to make it private again.

Export

Export playlists as M3U (for use in other players) or JSON (for backup).

Back to top
Smart Playlists

What they are

A smart playlist is a saved query. You write a short expression describing the tracks you want — by genre, rating, year, tag, play history — and the results refresh every time you open it. Materialize a smart playlist to take a snapshot of the current results as a static playlist you can reorder or export.

Fields

Every predicate is field:value. Whitespace between predicates means AND; use OR between alternatives; prefix with - to negate; wrap in ( ) to group.

  • genre:heavy_metal — one of classic_rock, hard_rock, hair_metal, heavy_metal, thrash_metal, other.
  • artist:"Black Sabbath" — quotes are required when the value contains spaces.
  • album:"Master of Puppets", title:"War Pigs" — exact, case-insensitive match.
  • year:1986, year:1980..1989, year:>=1990 — integer, range, or comparator.
  • rating:4, rating:3..5, rating:>=4, rating:0 (unrated).
  • tag:favorites — any user-assigned tag.
  • playCount:0, playCount:>=10.
  • lastPlayed:>6mo, lastPlayed:<30d — durations: d, w, mo, y.

Sorting & limiting

Add sort: and limit: anywhere in the query.

  • sort:rating:desc — fields: rating, year, playCount, lastPlayed, artist, album, title. Directions: asc, desc.
  • sort:random limit:20random requires a limit:.
  • limit:100 — caps the result size. Without a limit, results are capped at the server's hard ceiling (default 5000); responses include a truncated flag when that cap clips them.

Cookbook

Worked examples — paste any of these into the query box.

  • Top-rated metal
    (genre:heavy_metal OR genre:thrash_metal) rating:>=4 sort:rating:desc limit:100
  • Rediscover forgotten gems
    rating:>=4 lastPlayed:>6mo sort:lastPlayed:asc limit:50
  • Unheard new arrivals
    playCount:0 year:>=2020 sort:random limit:30
  • A decade shuffle
    year:1980..1989 sort:random limit:40
  • Favorites I haven't played this month
    tag:favorites lastPlayed:>30d sort:rating:desc limit:50
  • Everything by two artists
    artist:"Iron Maiden" OR artist:"Judas Priest" sort:year:asc
  • Unrated deep cuts
    rating:0 playCount:<5 sort:random limit:25
  • Heavy, but not the overplayed stuff
    genre:heavy_metal -playCount:>=20 sort:rating:desc limit:50

Preview, save, materialize

Preview executes your query live and shows the matching tracks — useful while you're iterating. Save stores the query under a name so it shows up in your sidebar. Materialize takes a snapshot of the current results and writes them to a static playlist — handy when you want a frozen ordering you can reorder and share.

Back to top
Listening History

Recently Played

Open Listening History from the sidebar for a reverse-chronological feed of every play, with completion status and listened duration. Plays are recorded when a track hits 50% listened or plays to the end — seeks don't count.

Top Tracks & Top Artists

The Top Tracks tab ranks the tracks you've played most. Top Artists aggregates plays by artist; click an artist to drill into their albums.

Time Windows

Each tab supports a window: All Time, Last 7 Days, Last 30 Days, or Last Year. Pair with smart-playlist queries like lastPlayed:>6mo to surface rediscovery candidates, or playCount:0 to find unheard tracks.

Back to top
Scanning & Import

How it Works

The scanner walks your music directory recursively looking for .mp3, .flac, and .m4a. For each file it extracts metadata from the embedded tags and computes a SHA-256 hash for duplicate detection.

Files already imported (by path or by title + artist match) are skipped automatically. Cover art is extracted and stored separately, subject to a per-user storage quota.

Progress

During a scan, a live counter shows files imported, skipped, or errored. You can keep using the app while a scan runs.

Scheduled Scans

Set up automatic scanning on a schedule. In the Scan Directory panel, configure a cron expression and path. The system checks every 60 seconds and triggers scans when due — great for keeping your library in sync with a folder that gets new music regularly.

Rate Limiting

To keep the server happy there's a 60-second cooldown between scans. The timer is shown in the scan panel.

Back to top
Backup & Export

Library Export

Export your full library metadata as JSON or CSV from the library view. Includes all track metadata (title, artist, album, genre, rating, year) but not the audio files themselves.

Full Backup

Create a complete backup as a single JSON file: tracks, playlists, ratings, genre corrections, and file hashes. Restore it on any Stellar Grooves instance to bring your library metadata and playlists back.

Playlist Export

Individual playlists export as M3U (compatible with most players) or JSON.

Back to top
Install the App

Desktop (Chrome / Edge)

Look for the install icon in the browser address bar, or open the browser menu and select Install Stellar Grooves. The app opens in its own window — no browser chrome — with its own taskbar/dock icon.

Android

In Chrome, tap the three-dot menu and select Add to Home screen or Install app. Stellar Grooves appears as a standalone app on your home screen and in the app drawer.

iPhone / iPad

In Safari, tap the Share button, then Add to Home Screen. Launches full-screen.

What You Get

  • Standalone window — no address bar or browser tabs
  • Faster loading — static assets cached by service worker
  • Lock screen controls — play/pause/skip/seek from lock screen or notification shade
  • Offline page — a friendly fallback if the server is unreachable
Back to top
Keyboard Shortcuts

Shortcuts are active when the player is visible and no input field is focused.

Space Play / Pause
Right Arrow Seek forward 5 seconds
Left Arrow Seek backward 5 seconds
Up Arrow Volume up
Down Arrow Volume down
Back to top
Administration

Control Room

Users with the Admin role can open the Control Room from the navbar. It shows system-wide stats (total users, files, playlists) and a paginated user management table.

User Management

Admins see all registered users with their file counts. Deleting a user permanently removes their account and associated data (tracks, playlists, cover art, queue, genre corrections).

First Admin Setup

An initial admin can be created on first startup by setting the ADMIN_PASSWORD environment variable. See project documentation for details.

Back to top