Script should be installed as package, using the package manager at the SMP/JSplitter Configuration window.
REQUIRES SMP OR JSPLITTER
Download below clicking at '[...]-package.zip'. Check installation instructions here.
See full changelog here.
2.0.0 - 2026-01-30
Added
- Presets: added rule-based settings presets which can be applied on specific conditions based on Sources, Source IDs (active playlist), Views and filters. This feature can be used for ex. to automatically set 'Library' source on 'Library Viewer Selection' playlist and 'Playlist(s)' source on any other playlist, i.e. allows behavior automation. Preset rules can be edited at the new 'Presets' tab (HTML options panel) and 'Sources|Views|Filters presets' (properties panel). Extensive help has been added at HTML options panel and new help menu entry (for Unix users). See here.
- Language: added support for transliteration from Chinese language (Pinyin) to Latin script. Works in quick-search, search (RegExp), sorting, etc.
- Language: added new setting at 'Advanced' tab (HTML options panel) or 'View By transliteration languages' (properties panel) for the processing order of languages and/or skip specific ones (for ex. to avoid mismatches between Japanese and Chinese romanization). See here.
- Language: added new setting at 'Search' tab (HTML options panel) or 'Quick-search transliteration' (properties panel) to tweak transliteration during Quick-search usage. Note the behavior has not changed (previously it was always enabled), only exposing the setting. Note is now possible to have different tansliteration settings for the view sorting and quick-search. See here.
- Syntax: added $randint{min,max}, $pseudorandint{min,max}, $randfloat{min,max}, $pseudorandfloat{min,max} extended TF functions to easily work with random numbers within queries and filters. See syntax help file for more info.
- Syntax: added support for $meta_branch_remap(name) and $meta_branch(name) functions for views TF patterns. See Wiki.
- Syntax: added new TF function $iterate{$iterate{'X',N,C}}, which returns value of X (TF expression), iterated over N steps (from 0) and joined with a connector C (OR, AND, ...). X TF expression must be enclosed on single quotes 'X' and contain the string $counter, to be replaced on every step. e.g. $iterate{'ARTIST IS $nowplaying{$meta(ARTIST,$counter)}',2,OR} -> (ARTIST IS $nowplaying{$meta(ARTIST,0)}) OR (ARTIST IS $nowplaying{$meta(ARTIST,1)}). See syntax help file for more info.
- Syntax: added new TF variables $sourcetype, $sourcename (playlist name), $sourcenameortype (playlist name or source name), $sourceid (playlist GUID), $viewname and $filtername, which return the source, filter and view names. They may be used at conditional expressions to control filters or views behavior according to the current filter/view used. On queries this is usually done with MISSING/PRESENT keywords, e.g. "$stricmp($filtername,lossless)" MISSING OR ARTIST IS ABBA. On TF you can use control flow functions, e.g. $if($stricmp($filtername,lossless),,%CODEC%|)%ARTIST%|%ALBUM%
- Contextual menu: presence of tree items contextual menu (associated to selected tracks) is now configurable. Can be hidden (disabled), shown at the main R. Click menu, as a submenu or only called on demand (to avoid the performance impact when selecting a huge number of tracks). By default is now set to be called on demand.
- Quick-search: added Shift/Ctrl modifiers to perform lookup at any position instead of only the start of strings. Display will show a '*' when feature is used. For ex. '*coltrane'. Note Ctrl + Key combinations are also used for some shortcuts, so these will be processed instead of quick-search.
- Quick-search: results can now be navigated using Up/Down keys, for single char or full words. See here.
- Quick-search: added new settings to control the jump delay while new chars are input at 'Search' tab (HTML options panel) and 'Quick-search jump initial char timer' and 'Quick-search jump next chars timer' (properties panel).
- Search: added support for query sorting expressions on search box (i.e. SORT BY [...]). The sorting expression will then be used on top of the current view, overriding any other sorting. Works with any source. See here.
- Shortcuts: new 'Ctrl + <' shortcut to Invert selection.
- Shortcuts: new 'Del' shortcut to remove tracks on 'Playback Queue' or 'Auto-DJ Queue' sources.
- Shortcuts: added rectangle selection action while using Album art mode which allows to select non-contiguous items (on non-flow mode). Feature can be switched at 'Album Art' tab (HTML options panel) or 'Image mouse rectangle selection on album art' (properties panel). See here.
- Sources: drag n' drop while using Playback queue source now sends selection to Playback queue if mouse is anywhere but the search box. At search box it performs the standard query search like any other source. Pressing 'Ctrl' will also send the tracks to the front of the playback queue (instead of adding them at the end).
- Sources: new Auto-DJ queue source, which shows all tracks currently on Auto-DJ cache. Note it only works with non-live view sources, since otherwise 'the source would be itself'. Drag n' drop is supported to add new tracks to the list, along contextual menu entries to add (from other sources) or remove tracks from it. While Auto-DJ is running, you can switch back and forth between any source and Auto-DJ queue without losing the cache. It also follows the playback queue settings to show the now playing track and sort by queue idx (only for playing and next track). The new source can be accessed through the usual source submenu or the Auto-DJ one. See here.
- Sources: new Playing playlist type source available for playlist sources, similar to Active playlist but tracking only the playing playlist. Note playing playlists are conditioned to foobar2000 "Playback follows cursor" playback setting and a playlist remains to be the playing one even when playback is stopped.
- Sources: while using Playback queue source and sorting by queue idx, items can be reordered by using drag n' drop, working similar to a playlist panel. Dropping into root node (if visible), playing item (if visible) or empty space at bottom will send tracks to front or back of the queue. In case sorting is applied from View TF pattern, only the later actions are available (see above).
- Sources: added experimental source caching when switching from/to queue sources (Auto-DJ and playback queues). While using it, switching from these queue sources should be pretty fast, since the previous one is not recalculated from scratch. e.g. switching from Library to Playback queue and back to Library should be almost instant, instead of freezing the UI for a few seconds when reloading the library source. This setting can be switched at the Advanced tab (HTML options panel) or 'Library Source: Use cache (experimental)' (properties panel). After some time of testing, if it works in a reliable way, feature may be expanded for fast switching between playlist and library sources (see here) or between different views for same source.
- Sources: new setting 'Sort by Playlist idx' at Views submenu to force playlist(s) sorting instead of using the one from View TF pattern. It works for Active and specific playlist(s) sources. Original Library Tree script only had this behavior hard-coded for the Active playlist source. The setting can also be found at 'Behaviour' tab (HTML options panel). See here and here for more info.
- External integration: added integration with Timeline-SMP. If Timeline-SMP panels are set to use panel as source, you can directly send tracks to them for statistics purposes. It works the same than panel source mode on Library-Tree-SMP, just by adding the library tree panel name as source.
- External integration: added documentation to settings menu. See here.
- Auto-DJ: new 'From live view ' option plays tracks from the entire tree available, being adjusted to any view, search or filter changes on every new track (so it can be tweaked with dynamic filters on real time). See here.
- Auto-DJ: new setting to set how the next track is chosen: randomly, by genre-mood, genre or mood tags matching. See here.
- UI: new quicksetup presets.
- UI: 'Move to front queue', 'Move to back queue' and 'Move in queue...' menu entries to move tracks within the playback queue while using the associated source.
- UI: added support for D2D draw mode if JS Host supports it (currently only JSplitter 3.7.8+ or 4.1.0+). It must be set per instance, at the properties panel ('Draw mode: GDI (0), D2D (1)'). If JS Host doesn't support it, it will fallback to GDI. Note D2D mode may produce UI artifacts under Wine or not be fully equivalent to GDI, use at your own consideration and only report problems to JS host component devs.
- UI: added new setting for custom Art track count/year color overlay and text. Found at 'Custom' tab (HTML options panel) or 'Custom Colour Art Track Count [...]' (properties panel). See here.
- UI: added new setting to control whether selection remember must be forced or not, even when no current selection is present, by loading the previously saved one. Disabled by default. Found at 'Behaviour' tab (HTML options panel) or 'Remember.Selection (forced)' (properties panel).
- UI: added new setting to allow clicking on any blank region within panel to reset the current selection. Enabled by default. Found at 'Behaviour' tab (HTML options panel) or 'Reset selection clicking on blank regions' (properties panel).
- UI: added multiple mouse cursor effects.
- Views: added new default view patterns.
- Views: panel custom prefixes to strip/swap can now be retrieved using '$prefix', so they can be used with native functions (for ex. $swapprefix(%ARTIST%,$prefix)). See here.
- Statistics: added tooltip text to customizable statistics slots. Set at statistics tab (HTML options panel) or 'Statistics Titleformat Custom tooltip' (properties panel). See here.
- Album art: added new art type 'File (by TF)' which allows to assign art to specific nodes by TF, independently of foobar2000 art preferences. It may be used to load art based on folders or node names, instead of being track-based. e.g. For a genre/style tree, to show custom art for every genre (instead of art from the first track for such node); or show a custom image for every folder while using folder view. See here.
- Album art: added menu entry to open the art cache folder (if used).
- Album art: added new setting to show/hide the image gray frame border, which was forced on original script, at 'Album Art' tab (HTML options panel) or 'Image Frame border' (properties panel).
- Album art: added new art styles: 'Star-Fill' (3), 'Star-Effect' (4), 'Star-Outline' (5) and 'Heart' (6).
- Album art: added new art flare hover effect. Setting can be found at 'Display' tab (HTML options panel) or 'Highlight Flare Image' (properties panel).
- Album art: completely reworked the thumbnail effects feature, now having independent settings per art style (this includes previously added border and shadow effects). As new effects, reflection has been added for root and nodes along mute, edge glow, bloom, blur, vignette and gray scale (D2D) for every art type. Settings can be found at 'Album Art' tab (HTML options panel) or 'Image Reflection [...]', 'Image Border [...]', 'Image Shadow [...]', 'Image Mute [...]', 'Image Edge Glow [...]', 'Image Bloom [...]', 'Image Blur [...]', 'Image Vignette [...]', 'Image Gray Scale [...]' (properties panel). Note D2D-only effects will not be available at JS hosts not supporting D2D (and setting must be manually enabled -see above-). See here.
- Statistics: added 3 new customizable statistics slots based on X-power mean. Slots and labels can be modified easily at the HTML options panel or at 'Statistics Titleformat Custom-X (p-mean5)' and 'Statistics Titleformat Custom-X (p-mean5)' and 'Statistics Titleformat Custom labels' (properties panel). By default the panel includes custom expressions as example and sets the exponent to 3.
- Readme: added help submenu, at settings menu, showing all available docs. See here.
- Readme: added Quick help entry, at help submenu, which will show a popup with the most basic functions of the panel. See here.
- External integration: new callbacks.
- 'Library-Tree-SMP: cycle show art type' -> { window: string[], forceShowArt: boolean }
- 'Library-Tree-SMP: show art (tf)' -> { window: string[], forceShowArt: boolean }
- 'Library-Tree-SMP: cycle art type' -> { window: string[], forceShowArt: boolean }
- Auto-update: added -optional- automatic checks for updates on script load; enabled by default. Compares version of current file against GitHub repository. Manual checking can also be found at the settings menu. Setting may also be globally switched at '[FOOBAR PROFILE FOLDER]\js_data\presets\global\globSettings.json', by changing 'bAutoUpdateCheck'. It will apply by default to any new installed script (previous scripts will still need to be manually configured to change them).
Changed
- Views: support for $selected{}, $nowplaying{} and $nowplayingorselected{} functions. Views are also updated on real time if such functions are used on playback or selection changes. Note support was only added for display purposes (like highlighting currently playing artist), don't try to use it for filtering purposes; use filters instead. Beware of possible performance impact using this feature. See here.
- Views: updated default view TF patterns with above changes related to $prefix.
- Views: updated default view TF patterns with better compatibility for albums with multiple artists.
- Sources: playback queue source now also shows the currently playing track by default. A new setting has been added to toggle this behavior (''Library Source: Playback Queue show now playing' at properties panel). See here.
- Sources: contextual menu while using Playback queue source has been changed to allow easy queue manipulation. Menu entries related to playlist sending have been removed.
- Sources: active playlist source no longer follows playlist sorting by default when using non-branching View TF patterns (those with %% or equivalent), but it's conditioned to the 'Sort by Playlist idx' setting found at HTML options panel and menus (see above). Note previously playlist sorting was ignored if branching expressions were used, thus behaving different according to the view used instead of an independent setting. See here and here for more info.
- Statistics: playback queue index statistics now show the currently playing track, if available. As '▶' or '0'. See here.
- Statistics: improved tooltip info over statistics. See here.
- Statistics: stats menu cleanup and reordering (using subfolders). See here.
- Auto-DJ: 'From panel selection' option plays tracks from the tree selection at the moment Auto-DJ started, ignoring any further selection or view changes. There are additional entries to append further tracks at any point. See here.
- Auto-DJ: 'From current view ' option plays tracks from the entire tree available at the moment Auto-DJ started, ignoring any future changes to the tree (view, search or filter changes at a latter point). There are additional entries to append further tracks at any point. See here.
- Auto-DJ: submenu entry is now checked while it's running. Menu entries are checked according to the source (selection or live view). Note in the case of using the current view, it's transformed internally into 'selection'. See here.
- Auto-DJ: improved track selection by trying to choose different artists than currently playing one if possible. Note this greatly depends on variability of available tracks and if a track from same artist is still the overall best choice, it will probably be chosen over the rest.
- Search: input search box double click now expands selection to current word (delimited by spaces), while triple click expands selection to all text. Changed from previous behavior where double click selected all text, now follows standard Windows behavior. See here.
- Search: search history entries are now trimmed and cut down to 80 chars to avoid menu entries overflow.
- Search: queries with sorting expressions are now allowed. Previously they returned an invalid search warning. They override any sorting on panel, including the one inherited by View TF or Filter query, specific source sorting settings, etc. See here.
- Filter: queries with sorting expressions are now allowed. Previously they returned a 'Nothing found' message. They override any sorting on panel (except from search box), including the one inherited by View TF, specific source sorting settings, etc. See here.
- Filter: Filter patterns are now checked before using and panel will warn when using an invalid expression instead of showing 'Nothing found'.
- Filters: updated some of the default filter patterns and added in some cases built-in sorting expressions.
- UI: filter button can now be used as a Filter | View (on Shift) | Source (on Ctrl) multi-button, showing respective menus.
- UI: performance improvements when clicking on settings button while a large selection is active. Previously it could take up to +1 second to show the menu in such cases (while not using 'smart' sorting).
- UI: performance improvements when R. clicking on current selection, for large selections. Previously it could take up to +1 second to show the menu in such cases (while not using 'smart' sorting).
- UI: cleanup of Quick setup menu.
- UI: cleanup of settings menu.
- UI: minor changes to default fonts used on panel.
- UI: minor improvements related to panel repainting.
- UI: improvements on art-based colors handling related to K-means++ with OKLAB color space when using JSplitter v3.7.10+ or v4.1.0+ as JS host. See here.
- UI: improvements on search selection background contrast while using blend theme mode. Color is now dynamically adjusted according to artwork colors, to ensure selection rectangle and text is visible. See here.
- Album art: usage of HQ Bicubic interpolation mode instead of HQ Bilinear, to get sharper images when resizing ('Refresh all images' will be needed if using caching). Also improved resampling logic to avoid artifacts. See here.
- Album art: code cleanup and refactoring of album art code.
- Sorting: up to 90% performance improvement to sorting logic while using transliteration to Latin setting (e.g. from ~2000 ms to ~190 ms).
- Sorting: view submenu will now show a warning when sorting by playlist idx, queue idx or TF is not available due to sorting being forced by Search box of Filter expressions.
- Sorting: changed behavior of smart sort (see also related fix below), to mimic the View pattern with clever substitutions for branches and other custom TF expressions, instead of using a hardcoded expression based on (%ALBUM ARTIST%|%ARTIST%) + '%ALBUM% [[%DISCNUMBER%.]%TRACKNUMBER%. ][%TRACK ARTIST% - ]%TITLE%'. See 'Behaviour' tab (HTML options panel) or 'Playlist: Smart Sort by view' (properties panel).
- Drag n' drop: drag n' drop to perform a search is now only allowed within the input box for all sources.
- Drag n' drop: expanded drag n' drop at search box feature, allowing tag remapping. e.g. using ALBUM ARTIST values to look for matches at COMPOSER, using '[{"from":["ALBUM ARTIST"], "to":["COMPOSER"]}]'. Previously it only allowed simple matching for every tag like '["ALBUM ARTIST", "COMPOSER"]'. See here.
- Shortcuts: changed 'Ctrl + A' shortcut so it works as a toggle. i.e. Selects All or Selects None.
- Shortcuts: while using 'Select' keystroke mode, arrow keys navigation no longer immediately sends selection to playlist, but only once with a configurable delay (by default 250 ms) after releasing the key. Setting can be ound at 'Behaviour' tab (HTML options panel) and 'Limit Up/Down Scroll Playlist Refresh: 0-1000' (properties panel). This change has been made for a more responsive scrolling if up/down arrows are kept pressed, so only the last node selected is sent to the playlist instead of unnecessarily updating on all intermediate nodes. See here.
- External integration: changed callbacks.
- 'Library-Tree-SMP: switch source' -> { window: string[], sourceName: string, sourceIdx: number, sourcePlaylistName: string, sourcePlaylistIdx: number[]|number, sourcePanel: string}
- sourceName allows alternate names. i.e. Playlist|Playlists|Playlist(s) and Panel|Panels|Panel(s)
- sourcePlaylistIdx can be a number or array of numbers
- sourcePanel and sourcePlaylistName allow multiple values, joined with '|'.
- performance improvements and code cleanup.
- 'Library-Tree-SMP: switch source' -> { window: string[], sourceName: string, sourceIdx: number, sourcePlaylistName: string, sourcePlaylistIdx: number[]|number, sourcePanel: string}
- Quick-search: changed the default timer for every next char to 300 ms (from 500 ms previously hard-coded). The initial char has now a 50 ms delay (from 500 ms previously hard-coded). Note CUI/DUI album list panels have an almost instant initial char (which also feels "faster" due to non-smooth scrolling usage). The new default values should offer a more responsive behavior.
- Quick-search: asymmetric search for non ascii values. e.g. E matches E and É, but É matches only É.
- Helpers: support for long paths (>260 chars) in multiple internal file handling functions.
- HTML: added inline links to navigate within tabs at multiple help related sections.
- HTML: syntax help now only shows the relevant functions according to the current tab (views|filters).
- HTML: added multiple settings related to queue sources and Auto-Dj from latest updates.
- HTML: minor improvements to Album Art help and updated Biography default settings (to match latest versions).
- HTML: minor improvements and cleanup at HTML options panel regarding layout, resizing, look and general behavior.
- HTML: disable thumbnail size dropdown using flow mode instead of hiding it.
- HTML: cleanup multiple UI elements and help sections, now using buttons (to improve accessibility using screen readers).
- HTML: multiple minor text fixes.
- HTML: Pressing shift on any dropdown button no longer opens a new window on IE. See here.
- Syntax: updated syntax docs with relevant changes and examples.
- Syntax: updated syntax docs favicon for html page.
- Debug: improvements to profiling logging for library loading.
- Code cleanup.
- Enabled properties debug code.
Removed
Fixed
- Syntax: bug on original script related to usage of $selected{}, $nowplaying{}, ... when the function was not properly closed.
- Statistics: bug on original script related to playback queue index statistics when a track was added multiple times to the queue. Queue index was duplicated in such cases. See here.
- Statistics: bug on original script, related to playcount statistics recognition on views TF patterns. It checked only for specific tags by foo_playcount in lowercase form, instead of any other variation. This led to library updates not being triggered in some cases when changing rating, etc.
- Drag n' drop: fixed handling for internal drag n' drop in some cases using Playback queue source. See here.
- Sources: 'Sources\Select playlist(s)' submenu being disabled when it shouldn't.
- Shortcuts: fixed bug on original script related to usage of 'Ctrl + A' (select All) shortcut crashing the panel while using Playlist sources if 'Behaviour\Mode\Keystroke' was set to 'Send to playlist'. When set to 'Select' it simply didn't work. Now the shortcut works as intended.
- Sorting: fixed bug on original script related to non-documented internal sorting being applied when sending any selection to a playlist, not matching the order seen at the tree. See here. Multiple code places have been tweaked to use the same sorting than the one used by the view and a new setting has been added to restore and use the hardcoded sorting based on view if desired (disabled by default). See 'Behaviour' tab (HTML options panel) or 'Playlist: Smart Sort by view' (properties panel). Note the 'smart sort' approach will still be used when selecting more items than a configurable threshold (by default 3000 nodes), since the processing time to simulate the entire tree with branching and children is so high it's unusable; See here.
- Sorting: fixed bug on original script related to selection while using 'Active playlist' source. If the playlist had duplicated tracks, in some cases, only a single copy of the track was selected when selecting any node instead of all copies. This behavior is now more common since panel sorting no longer has to follow playlist sorting for this source.
- Drag n' drop: workaround for CUI/SMP drag n' drop bug while dragging tracks directly from album list panel, without library view playlist usage. See here and CUI Issue 459.
- Statistics: fixed bitrate not working.
- Album art: fixed bug on original script related to hover effect image border for album art being applied to root images. Previously the shape effect (circular or square) was applied to the image without taking into consideration the image shape at all (for ex. a circle being shown over a rectangular image). Hover effect has now been substituted with an image highlighting effect for root images by default. Previous behavior can be restored at 'Display' tab (HTML options panel) or 'Highlight Frame Root Image' (properties panel), in case the chosen album art shape exactly matches the root image shape. See here.
- Album art: fixed bug, on original script, which caused Out Of Memory panel crashes related to Album art cache while using auto mode (0) under some situations. Memory management should now be automatically adjusted to the actual artwork size used to have a better estimation of RAM increases when loading new items without reaching the limit, this in turn should help minimizing the probability of such errors.
- UI: fixed bug, on original script, related to scrollbar not showing the arrow buttons on 'Windows' style except on mouse over. See here.
- UI: added setting for Windows bug workaround regarding Scrollbar 'Windows' style usage. While using dark theme on OS, the scrollbar is not dark themed too due a Windows limitation. As workaround a black mask can be applied over every element so it somewhat looks "dark themed". This fix is now applied by default if foobar2000 is set to use dark theme too and JS-host supports checking for it. Otherwise it can be switched at 'Behaviour' tab (HTML options panel) or 'Scrollbar Windows style dark theme fix' (properties panel). In any case note this "bugged" behaviour is a Windows problem, not a script error, and it was also present on original script. Wine users should never experience this problem since the 'Windows' style (win32 theme) is simply unsupported and fallbacks to 'Styled' style. See here.
- UI: minor tooltip fix for search button in some cases.
- UI: fixed bug, on original script, related to hover item not being updated after scrolling (unless the mouse was moved afterwards). This affected both mouse wheel and key scrolling (Pg Up, Pg Dn, Home, End) in tree and album art modes. See here.
- UI: fixed bug, on original script, related to scrolling not working in some cases when only a single row/column was displayed on panel. This usually happens on album art mode if panel height or width is not great enough to fully display multiple rows (vertical) or columns (horizontal). See here.
- UI: fixed bug, on original script, which caused a panel crash on small panel sizes while using blend theme. It also happened in some cases for foo_flowin panels at startup.
- HTML: fixed bug, on original script, related to some settings not being properly applied without a panel reload.
