github regorxxx/Playlist-Tools-SMP v5.0.0
v5.0.0 - Tag tools revamp + UI cleanup + Music map pools

latest releases: v5.1.1, v5.1.0
2 months ago

There may be a SMP's bug on installation. See wiki.
REQUIRES SMP OR JSPLITTER

See full changelog here.

5.0.0 - 2025-09-20

Added

  • Toolbar: new preset 'Statust bar' available for empty toolbars. This preset creates a statust bar similar to the one found at DUI/CUI at bottom, but it may be tweaked with any TF (even for the volume or selection size fields), like the 'display_tf' button (see below).
  • Toolbar: new entry on toolbar menu to share current UI settings across all toolbar panels on foobar2000. See here.
  • Pools: added 'Radio (Alistral)' pools presets, based on Alistral radio algorithms (see link for more info). Restore defaults to load the new presets.
  • Pools: expanded 'Genre mixes' presets. Restore defaults at pools submenu to show them.
  • Pools: expanded 'Top tracks (...)' presets. Restore defaults at pools submenu to show them.
  • Selection manipulation\Sort: added sorting methods for listen rates and overdue listens, based on Alistral radio algorithms (see link for more info). Restore defaults to load the new presets.
  • Selection manipulation\Move selection to: new entry 'Move selection to\To specified position...' is added which moves the selection to an absolute index. 'Move selection to\By delta...' moves by delta value (previous behavior). Both support non-contiguous selections unless the extremes can not move anymore (thus they start to compact) but allow to use positive or negative values to choose where to start from (top or bottom of playlist) to avoid it. All this info is shown in the input popup.
  • Selection manipulation\Move selection to: added 'To the top' and 'To the bottom' entries which move to the first and last index respectively. These options, along 'To the middle' will compact non-contiguous selections.
  • Selection manipulation\Select (by time): new tool to set selection by specified time (rounded to tracks actual time). As 'Selection manipulation\Select (# tracks)' it also allows to select half, a third or a quarter of the total time of a playlist, random X minutes, or next X minutes. There are also additional entries to take into consideration crossfade between tracks.
  • Playlist manipulation\Query filtering: added filtering methods based on listen rates. Restore defaults to load the new presets.
  • Most played tracks at: new presets for 'Most played today' and 'Most played yesterday'. Different than using 'DURING LAST 1 DAYS'. See here.
  • Dynamic queries: new presets based on listen rates. Restore defaults to load the new presets.
  • Dynamic queries: new presets based last played. Restore defaults to load the new presets. Different than using 'DURING LAST 1 DAYS'. See here.
  • Standard queries: new presets based on playcount. Restore defaults to load the new presets.
  • Other tools\Group Tagger: new tool to calculate average, sum, count, median or mode of tag values for selected tracks and -optionally- save the result to another tag. It may be used to calculate album ratings, weights by duration, etc. See here.
  • Other tools\Tagger: added support for foo_dr_meter replacement of all the DR meters out there, compatible with x64 and much faster. 100% clones the log and tags output.
  • Other tools\Tagger: added quiet mode settings. On quiet mode they can be automatically run without user input (usually on report windows). Note you also have to enable quiet mode on their own component settings (ask for support in their respective threads if you need help). Enabling quiet mode on the components without also enabling it on the script will probably produce errors while tagging files due to them being in use; you must use the same settings at both places.
  • Other tools\Tagger: added configurable tags for every tool. Note in some cases tags also have to be set on their own component settings (ask for support in their respective threads if you need help).
  • Other tools\Tagger: added configurable menu entries for every tool. These are related to the contextual menu called when running to add/remove tags.
  • Other tools\Tagger: added setting to suppress warning popup when running.
  • Other Tools\Check tags: added af_ZA, de_DE, es_ES, fr_FR, pt_PT and ru_RU dictionaries.
  • Other Tools\Check tags: added missing artwork checks for front, back, disc, icon and artist types. These art types must be added to the list of tags to be checked, check the documentation.
  • Dynamic queries: support for '#NOW#' (or #TODAY#) variable, which resolves to current date (2025-3-8).
  • Dynamic queries: support for '#YESTERDAY#' variable, which resolves to yesterday date (2025-3-8).
  • Dynamic queries: support for '#WEEK#' variable, which resolves to first day of current week (8).
  • Dynamic queries: support for '#NOW_TS#' and '#YESTERDAY_TS#' variables, which resolves to Unix timestamps in seconds (1750881508).
  • Dynamic queries: support for '#DDAY#', '#DWEEK#', #MMONTH# variables, which analog to #DAY#, #WEEK# and #MONTH# but on DD and MM format. See dynamic queries readme for more info.
  • Dynamic queries: support for '#DECADE#', '#PREVDECADE#', '#PREVYEAR#', '#PREVMONTH#', #PREVMMONTH#, '#PREVWEEK#' and '#PREVDWEEK#'. See dynamic queries readme for more info.
  • Dynamic queries: support for '#VOLUME#', '#VOLUMEDB#, '#VERSION#', '#SELTYPE#', '#ISPLAYING#', '#ISPAUSED#','#PLAYSTATE#', '#DEVICE#', '#DEVICEID#', '#SAC#', '#RGMODE#', '#PLAYMODE#', '#PLSCOUNT#' variables. See dynamic queries readme for more info.
  • Dynamic queries: support for '#SELTRACKS#', '#SELDURATION#, '#SELSIZE#', '#SELPLAYING#', '#SELINLIBRARY#' variables for selections. See dynamic queries readme for more info.
  • Dynamic queries: support for '#PLSIDX#', '#PLSNAME#', '#PLSTRACKS#, '#PLSISAUTOPLS#, '#PLSISLOCKED#', '#PLSDURATION#', '#PLSSIZE#', '#PLSLOCKS#', '#PLSLOCKNAME#' variables for playlists. See dynamic queries readme for more info.
  • Dynamic queries: support for '#PLSPLAYIDX#', '#PLSPLAYNAME#', '#PLSPLAYTRACKS#, '#PLSPLAYDURATION#, '#PLSPLAYSIZE#' variables for playing playlist. See dynamic queries readme for more info.
  • Quicksearch: merged 'Beginning with', 'Partially includes' and 'Partial match' results into a new submenu named 'Similar match'.
  • Script Integration\Add SKIP tag at current playback: added warnings when trying to add SKIP tag to the end of start of a track.
  • Buttons: new separator element which may be added (multiple times) to the toolbar.
  • Buttons: new 'display_volume' button which may be used to display and control foobar2000 volume.
  • Buttons: new 'display_tf' button which may be used to display arbitrary Title Format expressions on the toolbar (evaluated on selection, now playing or globally). It also works with dynamic queries variables (see below).
  • Buttons: 'utils_main_menu' button now has additional settings to save and handle button states, either internally or by syncing with main menu checks (on clicking or by time interval). If button and menu states don't match, the script will automatically attempt to fix them when clicking on it. WARNING: this feature relies on SMP/JSplitter menu checking which has been found to be problematic on old versions of the components. If you experience problems, either update the component used or don't use this feature.
  • Buttons: added more presets to remove/show duplicates and filter playlist buttons.
  • Readmes: added readme for 'buttons_device_switcher.js' button.
  • Readmes: Ctrl + L. Click on any entry within 'Add button' submenu on toolbar now opens directly their associated readme (without actually adding the button).
  • Playlist Manager integration: added support for foo_playcount_2003 tags in Smart Playlists. i.e. '%2003_ADDED%', '%2003_LAST_PLAYED%', '%2003_PLAYCOUNT%' and '%2003_RATING%'.
  • Installation: new panel menu, accessed through 'Ctrl + Win + R. Click' (which works globally on any script and panel, at any position), used to export/import panel settings and any other associated data. These entries may be used to fully backup the panel data, help when moving between different JS components (JSplitter <-> SMP) or even foobar2000 installations,, without needing to manually backup the panel properties or other external files (like .json, etc.).
  • UI: new menu entry to share current UI settings across all available Playlist Manager panels within foobar2000. It can be found at the settings menu 'Panel UI' submenu. Every other panel will be highlighted and show a popup asking to import the new settings or ignore them.
  • UI: exposed color settings via window.NotifyOthers() method for themes/multi-panel support. You may pass a color scheme -size 6 recommended- (output from GetColourScheme()) at 'Colors: set color scheme' (applies to all compatible panels) or 'Toolbar: set color scheme' (applies only to this script), which will set appropriate colors following panel's color logic; alternatively you may set direct color settings at 'Toolbar: set colors' which needs an array of 5 colors or an object {toolbar, text, button, hover, active}. Panel has also independent settings to listen to colors from other panels (but not for sending colors as a color-server to others). See this and this.
  • Configuration: external files like world map database references are now exposed as a panel property.
  • Configuration: added MD5 and AUDIOMD5 to the list of global tags, found at '[foobar_profile]\foobar2000\js_data\presets\global\globTags.json'.
  • Configuration: added DANCENESS to the list of global tags, found at '[foobar_profile]\foobar2000\js_data\presets\global\globTags.json'.
  • Configuration: added REPLAYGAIN_TRACK_RANGE (i.e. LRA) to the list of global tags, found at '[foobar_profile]\foobar2000\js_data\presets\global\globTags.json'.
  • Remove duplicates: added asynchronous processing settings for remove duplicates tool.

Changed

  • Installation: added support for foobar v2.25+ file-relative protocols.
  • Installation: added popup warnings when scripts are installed outside foobar2000 profile folder. These checks can be tweaked at globSettings.json.
  • Installation: script may now be installed at any path within the foobar profile folder, no longer limited to '[FOOBAR PROFILE FOLDER]\scripts\SMP\xxx-scripts' folder. Obviously it may still be installed at such place, which may be preferred if updating an older version.
  • Installation: multiple improvements to path handling for portable and non-portable installations. By default scripts will always try to use only relative paths to the profile folder, so scripts will work without any change when exporting the profile to any other installation. This change obviously doesn't apply to already existing installations unless restoring defaults.
  • JSplitter (SMP) support for locked playlists.
  • Script Integration\SMP Dynamic menu: changed names for the numbered menu entries, which are now prefixed with 'Playlist Tools: '. Adjust external buttons if needed to new path.
  • Script Integration\SMP Dynamic menu: improved menu (un)registering logic; now the numbered menu entries are always registered first (so they maintain their ID no matter if dynamic menus are enabled or not), thus not altering external buttons functionality. Note in any case the ID is still linked to button registering order, so other script buttons loaded first may alter the ID order if they also register their own menus (same than previous behavior).
  • Quickmatch: now properly handles selection from other sources different to active playlist.
  • Quicksearch: now properly handles selection from other sources different to active playlist.
  • Quicksearch: evaluation on multiple tracks limited to max 1000 first tracks selected.
  • Other Tools\Check tags: input popups to set dictionary now display the current list of dictionaries found (more may be installed by the user).
  • Other tools\Write Tags: renamed to 'Batch Tagger'.
  • Other tools\Tagger: now uses the global tag remap set by user ('[foobar_profile]\foobar2000\js_data\presets\global\globTags.json') for danceness and LRA tags.
  • Other tools\Tagger: Shift + L. Click action on button has been moved to Ctrl. + L. Click; for consistency with the other buttons which have shift actions associated to settings menus (not available on this one).
  • Other tools\Tagger: added more checks for incompatible tools or settings.
  • Other tools\Tagger: updated for compatibility with latest True Peak Scanner updates.
  • Buttons: 'buttons_tags_automation.js' renamed to 'buttons_tags_tagger.js'. And button name from 'Auto. Tags' to 'Tagger', which is shorter and more clear. Path handling is automatically remapped by the script (since the button file now has a different file name).
  • Buttons: 'buttons_device_selector.js' renamed to 'buttons_device_switcher.js'. Path handling is automatically remapped by the script (since the button file now has a different file name).
  • Buttons: 'utils_main_menu' button now displays the current state of main menu entries on tooltip (when button states are enabled).
  • Selection manipulation\Select by Query: if query returns no tracks, then selection is cleared (instead of maintaining the previous selection).
  • Selection manipulation\Select (# tracks): 'Selection manipulation\Select' renamed to 'Selection manipulation\Select (# tracks)'.
  • Selection manipulation\Intercalate by tags: now handles multi-value tags without joining them. i.e. it will try to intercalate the most frequent tag value for every track on the entire selection. For ex. for a track with 2 artists, the one which appears more in the entire selection will be preferred.
  • Selection manipulation\Shuffle by tags: now handles multi-value tags without joining them. The same behavior applies to pools using this feature. See above.
  • Selection manipulation\Sort: support for dynamic queries. While they will be evaluated to focused item, it's probably more useful for special variables like #NOW#, #MONTH#, etc.
  • Pools: music graph mixes moved to their own submenu 'Pools (Music Graph)'.
  • Pools: some presets reordered between 'Top tracks (rating)' and 'Top tracks (playcount)'.
  • Pools: added extra checks to pools before processing them, console will output any error or wrong source setting.
  • Pools: support for dynamic queries within SORT BY expressions for sources. i.e. 'GENRE IS rock SORT ASCENDING BY $sub(%DATE%,#DATE#)' -> 'GENRE IS rock SORT ASCENDING BY $sub(%DATE%,2000)' (when the reference track has a date tag equal to '2000').
  • Dynamic queries: 'By... (query)' entry is now available even when no track has been selected. In such case the input popup warns about only static variables being available (some examples below). i.e. '"$year(%DATE%)" IS #YEAR#' can be used but not 'ARTIST IS #ARTIST#'.
  • Dynamic queries: when creating a new preset entry, a popup asks if it should be available even when no track is selected (i.e. a static entry -see above-).
  • Dynamic queries: support for '' wildcard (also for multi-value tags). i.e. 'ARTIST IS #ARTIST#' -> 'ARTIST IS A*' (when the reference track has an artist tag equal to 'A').
  • Dynamic queries: support for 'ALBUM ARTIST' fallback expansion for multi-value tags. Note in foobar2000 '%ALBUM ARTIST%' works as a virtual tag pointing to ALBUM ARTIST|ARTIST|COMPOSER (but values are joined with commads) and 'ALBUM ARTIST' points to a file tag, thus never working with multiple values as intended. i.e. 'ALBUM ARTIST IS ACDC' only works if the track has a real tag with such value, but '%ALBUM ARTIST% IS ACDC' would not work properly with a track with 2 artists. Dynamic queries will automatically replace queries like 'ALBUM ARTIST IS #ALBUM ARTIST#' -> '(ALBUM ARTIST PRESENT AND ALBUM ARTIST IS #ALBUM ARTIST#) OR (ALBUM ARTIST MISSING AND ARTIST IS #ARTIST#)', thus working as intended in most cases.
  • Buttons: track selection bias setting is now also saved on presets for remove/show duplicates and filter playlist buttons.
  • Presets: unified presets along different query filtering tools.
  • Presets: changed all references to rating >x to ≥X+1. i.e. 'Rating ≥3' instead of 'Rating >2'.
  • UI: submenu 'Tagging' contains now Batch tagger, Group tagger and Check tags tools (from 'Other tools').
  • UI: submenu 'Playlist manipulation' contains now Playlist revive and Playlist history tools (from 'Other tools').
  • UI: submenu 'Library search' contains now Search same by tags, Standard queries, Dynamic queries, Special playlists tools and Import track list tools (from 'Other tools').
  • UI: submenu 'Statistics search' contains now Most played tracks at, Top played tracks from and Top rated tracks from.
  • UI: unified script updates settings across all my scripts, look for 'Updates' submenu.
  • UI: show shortcuts on tooltip setting moved to global setting for the toolbar.
  • Helpers: updated helpers.
  • Helpers: general code cleanup on menus internal code. Please report any bug on extra separators or menu entries not working as expected.

Removed

  • Quicksearch: removed entries with multi-value tags on queries on 'Partial match' submenu; they were never supported.
  • Script Integration\SMP Dynamic menu: removed all pools entries at dynamic menus generation.

Fixed

  • Quicksearch: switch active playlist on AutoPlaylist creation.
  • Quickmatch: switch active playlist on AutoPlaylist creation.
  • Most played tracks at: fix for 'last day' and 'last week'.
  • Script Integration\SMP Dynamic menu: fixed double '&' shown in some entries.
  • Script Integration\SMP Dynamic menu: fixed multiple errors on dynamic menus (un)registering.
  • Remove duplicates: show duplicates feature sometimes reporting as duplicate tracks which only appeared once (by TF) when using partial Multi-value matching.
  • Last.fm: fix malformed youTube links.
  • Pools: fix complex dynamic queries with static tags not working in some cases if there was no focused item.
  • UI: '&' being displayed as '_' on tooltips.
  • UI: removed extra menu bar break on pools submenus.
  • UI: fixed icons alignment in different layouts and orientations.
  • UI: multiple workarounds for rounded rectangles not being painted properly or producing crashes (SMP limitation).
  • UI: workaround for DPI checking under multiple OSes, specially for Wine (Unix).
  • Playlist Manager Integration: fixed playlist revive tool being overridden by 'Playlist saving\Skip overwriting Playlists on file loading' setting.
  • Dynamic Queries: improved support for tags with '#' values (for ex. KEY tags).
  • Presets: minor error on queries using decades.
  • Other Tools\Check tags: fixed corrupted JSON output for EBUR 128 scanner (ffmpeg) with newest versions of ffmpeg (>5.0).
  • Fixed some inconsistencies with foo_playcount_2003 support.
  • Fixed some misspelled terms on UI and variables (which also lead to some minor bugs).

Don't miss a new Playlist-Tools-SMP release

NewReleases is sending notifications on new releases.