Media Library

The Media Library page is the central hub for managing your local audio collection. It is a three-tab page backed entirely by MySQL: Library, Playlist, and Export. All scanning happens in a background thread — the UI stays responsive during large imports.

Overview of the Three Tabs

TabPurpose
LibraryView, search, and manage your scanned audio files. Add folders or individual files, edit metadata, look up MusicBrainz data, push to stream.
PlaylistTwo-panel: top panel lists saved playlists, bottom panel shows track entries. Create, edit, and save playlists with broadcast automation rules. Open in ComposerPro for broadcast log production.
ExportExport the current playlist to M3U, M3U8, PLS, XSPF, or TXT format for use in other media software.

Library Tab

Adding Music — Add Folder

  1. Click Add Folder. A standard folder browser opens.
  2. Select your music folder. TagStack opens the Scan Progress dialog and immediately begins scanning in a background worker thread.
  3. The worker recursively walks every subfolder, calls TagLib for each audio file, and inserts or updates records in MySQL. The progress dialog shows the current file and a running count.
  4. When the scan completes, the dialog closes and your tracks appear in the Library list. The list automatically refreshes.

Adding Music — Add Files

Click Add Files to open a multi-select file dialog. Select one or more audio files (any FFmpeg-supported format). The same background scan worker processes the explicit file list — TagLib reads each file, records are inserted into media_items, and the library updates when complete.

Formats supported: MP3 (ID3v2), FLAC, WAV, AAC (.m4a), OGG Vorbis, Opus, WMA, AIFF — any format TagLib can read tags from and FFmpeg can decode. TagStack reads whichever tags are present; missing fields are left blank.

Library Columns

ColumnSource
TitleID3/tag title field read by TagLib
ArtistID3/tag artist field
AlbumID3/tag album field
GenreID3/tag genre field
FormatFile extension (MP3, FLAC, WAV, etc.)
DurationTrack length in MM:SS from TagLib audio properties
BPMID3 BPM tag or 0 if not tagged
YearRelease year from tag
AddedTimestamp when the record was inserted into MySQL

Right-Click Menu

Right-click any track in the Library list to access the context menu:

MusicBrainz Enrichment

MusicBrainz lookup is the primary way to get structured identifiers and music intelligence data into your library:

FieldDescription
mbidMusicBrainz Recording ID (UUID) — globally unique track identifier
isrcInternational Standard Recording Code — 12-character standard ID used by labels and PROs
labelRecord label name from MusicBrainz release info
moodMood tag derived from MusicBrainz folksonomy data (e.g. "energetic", "melancholy")
mb_ratingMusicBrainz community rating (0-100)

Tip: MBID and ISRC are essential for professional broadcast stations that need to report to PROs (ASCAP, BMI, SOCAN). Run MusicBrainz lookup on your entire library after the initial scan.

Rotation Weight

Every track has a weight field (default 1.0). Higher weight values make a track more likely to appear when ComposerPro's rotation categories auto-populate a broadcast log. Edit the weight via the Metadata Editor. Useful for putting "power rotation" tracks at weight 3.0 and deep-cut filler tracks at 0.5.

Playlist Tab

Two-Panel Layout

The Playlist tab is split into two panels stacked vertically:

Creating a Playlist

  1. Enter a playlist name in the Name field.
  2. Click Add Files (opens a file browser) or drag tracks from the Library list into the bottom panel. You can also use Add Folder to add an entire folder.
  3. Use the Up and Down buttons to reorder tracks. Use Remove to remove the selected track. Use Clear to empty the playlist.
  4. Click Save. The playlist is written to MySQL and appears in the top saved-playlists panel.

Broadcast Automation Rules

Each saved playlist can carry a set of broadcast automation rules. ComposerPro reads these rules when auto-populating a log from a rotation category backed by this playlist.

RuleDescription
Artist Separation (seconds)Minimum elapsed seconds before the same artist can play again. 0 = no restriction. Example: 1800 = same artist no more than once per 30 minutes.
Title Separation (seconds)Minimum elapsed seconds before the same track title repeats. Prevents back-to-back or quick-repeat plays of the same song.
Genre Mix (JSON)Target percentage mix by genre. Example: {"Pop":50,"Rock":30,"R&B":20}. ComposerPro uses this to select tracks proportionally when filling a clock slot from this playlist's category.
BPM Min / MaxOnly tracks with BPM in this range will be selected during auto-population. 0 = no limit. Example: 90-130 for a mid-tempo rotation.
Energy ModeFlat — no energy ordering. Ramp Up — tracks sorted low-BPM to high-BPM across the playlist. Ramp Down — high-BPM to low-BPM for a cool-down effect.

Opening a Playlist in ComposerPro

Double-click any saved playlist in the top panel (or select it and click Open in ComposerPro). TagStack launches Mcaster1PlaylistComposerPro.exe with --playlist-id pointing to the selected playlist. ComposerPro loads the tracks directly into its log grid, ready for editing, clock-template application, and export.

Export Tab

The Export tab lets you export the currently loaded playlist to several formats for use in external players and automation systems:

FormatExtensionUse With
M3U.m3uWindows Media Player, VLC, most media players
M3U Extended.m3u8VLC, Kodi, IPTV players; UTF-8 encoded with #EXTINF tags
PLS.plsWinamp, foobar2000, SAM Broadcaster
XSPF.xspfVLC, Amarok; XML-based playlist format
Text.txtSimple line-by-line file path list; readable by any text editor

Click Browse to choose the output file path, select a format from the dropdown, and click Export.

OLE Drag and Drop

TagStack supports OLE drag and drop in the Media Library. You can drag audio files from File Explorer and drop them directly onto the Library list or the Playlist track list. The drop is handled as an Add Files operation — the dropped files are processed through the background scanner and added to MySQL before appearing in the list.