VITREOUS
YOUR MUSIC DESERVES BETTER THAN A BASIC EMBED
Want to know more about Vitreous or learn about its use, use these 2 below to navigate to the areas you need:
About vitreous
Find out about Vitreous Music Player and its Library, Track and Artist management functions. Learn why this could be beneficial.
Knowledgebase
Get help in regards to the use of all functions of this plugin; its backend, its addition to pages and frontend use.
Find out how development of Vitreous is going:
| 2026 BUILD COUNTS | |
| JANUARY | Template builds from v0.1.0 to v2.4.6 |
| FEBRUARY | WordPress plugin build from v3.0.0 to v4.0.12 |
| MARCH | 64 builds from v4.0.13 to v4.3.10 |
| APRIL | 46 builds from v4.4.0 to v6.5.3 |
| MAY | 109 builds from v6.5.4 to v11.2.12 |
| JUNE | 31 builds from v11.2.13 to v13.0.18 |
30th of June 2026
13.0.14 to 13.0.18 - Patch
- Fixed: Iconify icons not displaying - CDN dependency removed: Both the Iconify web component (
iconify-icon.min.js) and the icon data (vitreous-icons.js) are now served entirely fromassets/. No external CDN calls are made at any point.iconify-icon.min.js(v2.3.0) added toassets/.vitreous-icons.jsadded toassets/- callsIconify.addCollection()with SVG body data for all eightline-mdicons used across the Track List, Artist Card, Artist List, and Single Track Player widgets, pre-loading them so the web component never needs to fetch fromapi.iconify.design. Both scripts registered viawp_register_scriptoninitin a newregister_scripts()method, enqueued viawp_enqueue_scriptinenqueue_fontawesome().vitreous-iconsdeclaresiconify-iconas a dependency so load order is guaranteed. All elements and JS icon state handling remain exactly as v13.0.13. - Added:
assets/iconify-icon.min.js- Iconify web component v2.3.0, served locally. - Added:
assets/vitreous-icons.js- local icon data bundle for all eight line-md icons. - Added:
assets/line-md--*.svg- source SVG files for all eight icons.
10th of June 2026
13.0.12 to 13.0.13 - Patch
- Changelog: per-major version files:
CHANGELOG.mdsplit into individual files per major version in achangelog/directory (CHANGELOG-13.md,CHANGELOG-12.md, etc). The admin page now reads only the selected major version file: dramatically faster load on shared hosting. Major version tabs added to the top of the changelog page for navigation. Search and pagination work within the selected major version. Active tab highlighted in gold. Future builds prepend new entries tochangelog/CHANGELOG-{major}.md.
10th of June 2026
v13.0.11 - Patch
- Fixed: Changelog bullet points not showing: WordPress admin globally resets
ulandlistyles. The.vt-cl-md ul/liCSS rules lacked sufficient specificity to override them. Scoped under.vitreous-changelog-wrapand addeddisplay: list-itemto force correct list rendering.
10th of June 2026
v13.0.10 - Minor
- Changelog system rebuilt: The
changelog-page.phpadmin page previously contained 5,000+ lines of raw HTML markup in violation of the admin markup rules. All 287 version entries have been migrated toCHANGELOG.mdin the plugin root using standard Markdown format. The admin page now reads and renders this file via Parsedown (MIT licensed, single-file PHP Markdown parser). The page is paginated at 10 entries per page and includes a search field. Future changelog entries are added toCHANGELOG.mdas Markdown during the build process.
- Added:
admin/Parsedown.php: Parsedown v1.x, MIT licence.
- Added:
CHANGELOG.md: full version history from v3.0.0 to v13.0.9.
9th of June 2026
v13.0.9 - Patch
- Fixed: Artist Card and Artist List minified players:
artist-tracklist-helper.phpstill hadandelements. Replaced withmatching the Track List Accordion standard. - Fixed: Single Track Player button size override:
vitreous-track-player.csshad a36pxwidth/height override on.vt-list-play-btnwhich diverged from the shared34pxstandard. Removed: button size now inherits fromvitreous-list.css. Only accent colour overrides remain per widget.
9th of June 2026
v13.0.8 - Patch
- Fixed: Mute icon incorrect name:
line-md:volume-offdoes not exist in theline-mdicon set. Replaced withline-md:volume-remove: speaker with an X, clearly communicating zero output.
9th of June 2026
v13.0.7 - Patch
- Fixed: Volume mute icon not responding:
vtListInitfires onDOMContentLoadedbut the Iconify script loads in the footer: afterDOMContentLoaded. StoringvolIconat bind time always capturednullbecausequerySelector('iconify-icon')finds nothing before Iconify registers the custom element. The stored reference was always null sovtListUpdateVolIconreturned early on every mute press. Removed the stored reference: the function now queries fresh on every call, by which time Iconify is fully loaded.
9th of June 2026
v13.0.6 - Patch
- Fixed: Volume mute icon not responding: Vol icon reference was queried at event time via
querySelectorwhich may miss the custom element if Iconify has not fully registered it. Now stored once asvolIconat player bind time and passed directly tovtListUpdateVolIcon(). - Fixed: Play icon vertical position: Added
display: blockto prevent inline baseline spacing affecting height. Changedbottom: 8pxtobottom: 6pxto move the icon down by 2px: theline-md:playtriangle has optical weight in the upper portion of its viewBox so needed shifting down.
9th of June 2026
v13.0.5 - Patch
- Fixed: Mute icon not responding: Added fallback selector in
vtListUpdateVolIconto find eithericonify-iconorielements. AddedsetAttributecheck before calling it to handle both element types gracefully. - Fixed: Play icon alignment: Removed
transform: translateapproach which made misalignment worse. Switched toposition: absolute; bottom: 8px; right: 8pxon the icon withposition: relativeon the button: anchoring the SVG to the bottom-right of the circle to compensate for the play triangle's viewBox offset.
9th of June 2026
v13.0.4 - Patch
- Fixed: Volume icon states not updating:
vtListUpdateVolIconwas readingaudio._vtListGainbut gain is stored onitem._vtListGain: not on the audio element.gainValalways fell back toaudio.volume(fixed at 1.0), so the icon was permanently stuck onvolume-high. Function signature updated to acceptitemas a third parameter. Both call sites updated. - Play icon centring:
line-md:playtriangle sits in the upper-left of its SVG viewBox. Addedtransform: translate(2px, 1px)to.vt-list-play-btn iconify-iconto nudge toward optical centre. May require further adjustment after testing.
9th of June 2026
v13.0.3 - Patch
- Fixed: Chevron icon size:
.vt-list-chevronhadfont-size: 0.75remwhich has no effect oniconify-iconSVG elements. Replaced withwidth: 16px; height: 16px.
9th of June 2026
v13.0.2 - Patch
- Fixed: Icons too small:
iconify-iconis an SVG web component: it does not scale fromfont-size. Replacedfont-size: 0.75remwith explicitwidth: 18px; height: 18pxon play and volume icons: correct ratio for a 34px circular button. - Fixed: Single Track Player not updated:
track-player-shortcode.phphas its own copy of the player HTML: play and volumeelements replaced withmatching the list shortcode.
9th of June 2026
v13.0.1 - Patch
- Iconify: Minified player icons migrated from FontAwesome to Iconify
line-mdin the Track List widget. Play/pause now uses animated transition icons:line-md:play-to-pause-transitionon play andline-md:pause-to-play-transitionon pause/stop/end/error. Volume button now shows four states:line-md:volume-off,line-md:volume-low,line-md:volume-medium,line-md:volume-high: with thresholds calibrated for the logarithmic gain scale. Accordion chevron usesline-md:chevron-downwith CSS rotation on open. - Iconify web component (
iconify-icon.min.jsv2.3.0) registered and enqueued on all frontend pages alongside FontAwesome. FontAwesome retained: main player still uses it. - Frontend icon migration. Minified player widgets only: Tracklist Accordion, Artist Card, Artist List, Single Track Player all share
vitreous-list.jsand benefit from this change.
9th of June 2026
v13.0.0 - Major
- Audio Normalisation Architecture: complete. Per-track gain normalisation is now fully implemented across the main player. Tracks are analysed on first play via full-file RMS analysis using the Web Audio API, a compensating gain value is calculated and stored in
normalisation_gainonvitreous_tracks, cached inlocalStorage, and applied on all subsequent plays instantly from the stored value. No runtime analysis overhead after the first play. - DynamicsCompressor removed from all players: was functioning as a loudness maximiser, not a normaliser. Signal chain is now
sourceNode → EQ → gainNode → destination. - Volume wired through
gainNode:audio.volumeis fixed at1.0. All volume control, normalisation gain, fade in/out, and default volume route through a singleapplyNormalization()function. - Crossfade permanently removed. Fade In and Fade Out are available in Settings → Audio → Advanced Audio.
- DB:
normalisation_gain FLOAT DEFAULT NULLcolumn onvitreous_tracks. Newajax_save_normalisation_gain()andajax_clear_normalisation_gain()AJAX handlers. - Admin: Normalisation gain value shown in the Tracks page header alongside Track ID. Clear button resets to NULL for recalculation. Database Debug panel shows column status and calculated vs pending track counts.
- Database Debug | Full v12 rewrite: Page rebuilt to reflect the canonical track architecture throughout. Removed the legacy "All Tracks" panel that read
library_idandtrack_orderfromvitreous_tracksdirectly. Removed legacy library-scoped duplicate detection and orphan query. - Playlists Table: Track counts now sourced from
vitreous_library_tracksjunction table. - All Tracks: Lists all canonical tracks with playlist membership shown via junction join. Duplicate detection is now title-only across the global track table.
- Orphaned Track Maintenance: Orphan definition updated. A track is orphaned if it has no row in
vitreous_library_tracks(not if itslibrary_idcolumn references a missing library). Purge query updated to match. - Featured Artists Integrity: New panel checks
vitreous_featured_artistsfor stale rows where the referenced track or artist no longer exists. - Terminology: "Back to Libraries" updated to "Back to Playlists". "Libraries Table" renamed to "Playlists Table". Junction table panel renamed to "Playlist-Track Junction Table".
- Removed: Drag-to-reorder from the Playlist composer. Both panels now sort A-Z by title consistently. Frontend players use their own sort methods; manual sort order in the admin was unnecessary.
- Changed: Playlist left panel and right panel picker both order by
t.title ASC.ajax_get_playlist_tracks()updated to match.ajax_reorder_playlist()handler and AJAX registration removed. Drag handles, save order button, reorder notice, andenableDrag()all removed fromadmin.jsandlibrary-edit.php.vt-playlist-drag-handleCSS rule removed.
Share it, so others know...
- Share on Bluesky (Opens in new window) Bluesky
- Share on Mastodon (Opens in new window) Mastodon
- Email a link to a friend (Opens in new window) Email
- Print (Opens in new window) Print
- More
- Share on X (Opens in new window) X
- Share on WhatsApp (Opens in new window) WhatsApp
- Share on Reddit (Opens in new window) Reddit
- Share on Pinterest (Opens in new window) Pinterest
- Share on Threads (Opens in new window) Threads
- Share on Tumblr (Opens in new window) Tumblr
- Share on Facebook (Opens in new window) Facebook
- Share on Telegram (Opens in new window) Telegram
- Share on Nextdoor (Opens in new window) Nextdoor
- Share on LinkedIn (Opens in new window) LinkedIn
- Share on X (Opens in new window) X
