Castium Release 1.2.1
CASTIUM Release v1.2.1 Patch Notes
Release Date: September 27, 2026
Installer Package: CastiumSetup-v1.2.1.msi
What's New in v1.2.1
๐ High-Performance SQLite Library Engine
- Ultra-Fast Local SQLite Database (
~/.castium/library.db): Transitioned library persistence and querying to a dedicated SQLite engine (Microsoft.Data.Sqlite) optimized for broadcasting and massive audio libraries (100,000+ tracks). - Broadcast-Tuned SQLite PRAGMAs:
PRAGMA journal_mode = WAL;: Write-Ahead Logging enables non-blocking concurrent reads while background indexing writes occur.PRAGMA synchronous = NORMAL;: Maximum write throughput for batch operations without risk of corruption in WAL mode.PRAGMA cache_size = -64000;: 64 MB in-memory page cache for sub-millisecond table queries and search.PRAGMA mmap_size = 268435456;: 256 MB memory-mapped I/O for direct virtual memory disk access.PRAGMA temp_store = MEMORY;: In-memory temporary tables and sorting buffers.
- High-Performance Schema & Indexes: Unique index on
file_pathwith B-tree indexes ondirectory_path,artist,title, andformat.
๐ Subfolder Explorer & Dual View Mode
- "All Songs" vs. "Subfolder View" Switcher: Studio Library & Playlist Manager now provides a top segmented toggle between flat "All Songs" view and interactive "Subfolder View".
- Interactive Directory Tree: Expanding the
๐icon on any folder card renders an interactive subfolder hierarchy with live direct and cumulative track counters. - Subfolder Filtering & Breadcrumbs: Selecting a folder or subfolder immediately filters the track table to that directory, with an "Include Subfolders" recursive toggle.
- 1-Click "+ Enqueue Folder": Instantly queues all tracks from any subfolder or album directly into the active broadcast channel.
โก Non-Blocking Background Scanning & Differential Caching
- Detached Background Thread Execution: Scanning is elevated to a singleton background service (
ILibraryIndexService). DJs can close the library modal, control playback, talk on the microphone, adjust channel audio, and monitor live listeners while 100,000+ tracks index in the background. - O(1) Differential Cache Verification: Before reading files on disk, the scanner pre-fetches a lightweight in-memory timestamp/size lookup. Unchanged files are verified in \(\mathcal{O}(1)\) time with zero audio decoders or COM readers opened (re-indexing 20,000+ files completes in ~1โ2 seconds).
- Dual Progress Monitoring:
- Dashboard Header Pill: Compact
Indexing: X / Ystatus pill with an instant cancel buttonโ. - Studio Library Banner: Real-time progress bar, track counter, and current filename.
- Dashboard Header Pill: Compact
๐ Automatic Detection & Legacy Library Migration
- Zero-Setup Startup Detection: On launch, if the SQLite library is fresh/empty, Castium automatically detects and imports legacy files in the background:
- Saved Playlists (
~/.castium/playlists): Existing.jsonand.m3u/.m3u8playlists are parsed and bulk-inserted into SQLite in milliseconds without re-decoding audio. - Configured Music Folders (
~/.castium/music_folders.json): Previously configured music folders are automatically detected and scheduled for background indexing. - iTunes / Apple Music Library: Automatically checks
%USERPROFILE%\Music\iTunes\iTunes Music Library.xmland imports track metadata. - M3U / M3U8 Importer: Support for importing external
.m3uand.m3u8playlists with#EXTINFmetadata tags.
- Saved Playlists (
๐๏ธ Broadcast-Grade Local Player, Playlist Switcher & Request Management
- Instant Playlist Switcher Dropdown: The Console Player card now houses a top-level playlist switcher that queries all
.m3u,.m3u8, and.jsonplaylists from~/.castium/playlistson the fly. Switch entire station playlists or active queues with zero interruption. - Instant Song Request Switcher & Live Search:
- Integrated "Requests & Song Switcher" tab with sub-second title/artist search across the active playlist.
- 1-Click
[ โญ Play Next ](Queue Request): Instantly cues any listener request to play directly next in rotation (CurrentIndex + 1) and decorates it with a glowing amber[REQUEST]badge. - 1-Click
[ โก Fade Now ](Take Request Live): Immediately initiates an equal-power crossfade transition directly into the requested track.
- On-Air
[ โก FADE NEXT ]Auto-Transition:- Added a dedicated broadcast radio auto-fade button to the transport. Seamlessly triggers a constant-power sin/cos crossfade curve into the next song without waiting for the track to run out or abruptly cutting audio.
- Broadcast Countdown Clocks:
- Dual time displays show elapsed playback time alongside a broadcast countdown (
-MM:SS), allowing DJs to time voice-overs and intros with precision.
- Dual time displays show elapsed playback time alongside a broadcast countdown (
- Song Fading & Crossfade Engine:
- Integrated drawer with live configuration for crossfade duration (1.0sโ10.0s), fade-in duration (0.5sโ5.0s), and fade-out duration (0.5sโ5.0s).
๐ฅ๏ธ Dynamic Multi-Column Console & Ultra Widescreen Display Support
- Expandable Console Columns (2 to N Columns): Broadcasters on ultra widescreen monitors (21:9, 32:9, multi-monitor setups) can now add as many dashboard columns as desired, or scale down to 2 columns for compact displays.
- Dynamic Column Stepper & Header Controls:
- Quick column stepper (
โ Remove Column, active count indicator,+ Add Column) in the Console Columns settings panel. - Direct
โremove column button on each column header. - Card Safety & Migration: Removing a column automatically migrates any hosted cards into the adjacent surviving column so no cards are ever lost.
- Hard lower boundary of 2 columns enforced.
- Quick column stepper (
- Instant Ultrawide Presets:
- 2 Dual: Streamlined 2-column layout for standard laptops or vertical monitors.
- 3 Studio (2-1-1) / 3 Equal (1-1-1): Classic broadcast layout configurations.
- 4 Ultrawide: Tailored for 21:9 ultrawide screens (e.g., 3440ร1440).
- 5 Panoramic: Enhanced panoramic layout for wide multi-monitor or 3840ร1600 setups.
- 6 Super Ultrawide: Full spanning layout for 32:9 super ultrawides (e.g., 5120ร1440).
- Fluid Grid Sizing & Drag-and-Drop Synchronization:
- CSS Grid dynamically adjusts to
repeat(N, minmax(280px, 1fr))withmax-width: 100%when column count \(\ge 4\), unlocking full panoramic canvas real estate without clipping. - SortableJS is dynamically synchronized across all active column containers (
col-0throughcol-(N-1)), enabling smooth drag-and-drop card reorganization across any number of columns.
- CSS Grid dynamically adjusts to
- Custom Column Naming & Labels: Broadcasters can customize and rename any column (e.g., "Main Decks", "Mic & Audio Ingest", "Audience Chat & Requests", "Master Out") by clicking directly on the column header title or
โpencil icon inline, or typing in the Custom Column Names inputs in the console column settings drawer. Custom column names are automatically saved and restored inCastiumProfile.ColumnNames. - Profile Persistence: Dynamic column configurations, custom column titles, and multi-column card allocations are serialized directly to
~/.castium/profile.json(MultiColumnCards,ColumnCount, andColumnNames) with complete backward compatibility for existing 3-column profiles.
๐งช Automated Testing & Reliability
- Added comprehensive test coverage in
LibraryDatabaseServiceTests.csandAudioDuckingMixerTests.cs. - All 188 automated unit tests passing with 0 errors and 0 warnings.