- MediaMonkey Add-on - by Zvezdan Dimitrijević
This add-on works with MediaMonkey v2.x-4.x. It lets you create new tree nodes using masks which are loosely based on the way that Auto-organize works. There are 370 already predefined masks, for example: artist grouped by first letter [A]-[Z], albums sorted by year, playing statistics, album ratings, random tracks, ... Magic Nodes add-on is based on the 1.3b version of the script by Pablo Shmerkin, but it is almost completely rewritten and drastically improved. Here is an excerpt about this script from his site:
"MediaMonkey is the best jukebox/music organizer around. Magic Nodes, a script designed to work with Media Monkey 2.3 and up (some features work only in MediaMonkey 2.4 and up), extends its capabilities even further. In short, Magic Nodes lets you create new tree nodes in an intuitive and highly configurable way. For advanced users, Magic Nodes includes SQL filters, which provides ultimate flexibility for the creation of nodes with Playlist functionality."
For a discussion about this add-on, you could visit its related MediaMonkey forum thread. If you are using some skin which is not supported by default, you could take a look of skin styles for this add-on made by nynaevelan at the next forum thread. If you are the first time user, it is recommend that you read the PDF manual written by Rick Parsons (it is outdated and covers only v126.96.36.199, but explains many things needed for understanding this add-on).
This add-on is donationware. I am its sole developer and work on it in my own free time. I am not employed by Ventis Media, the company behind MediaMonkey, nor have I been paid by them for my efforts. If you find my add-on useful and want to help its further development, it would be nice if you could send a small donation using PayPal. In that case you will receive the enhanced version as a gift that is available only to donors.
The enhanced version of the add-on is sent via e-mail attachment. If your personal e-mail address is different than the one for your Paypal account, please leave me a note with that info. After donating, if a day or two has passed and you still have not gotten my e-mail, you should check your Spam folder; if you cannot find it in there, please send me an e-mail with the information about your donation to:
. To avoid that from happening, I strongly recommend putting my e-mail address in your contact list before you make a donation to prevent it from being seen as spam, especially if you are a GMail user. Thanks in advance!
This add-on doesn't work with MediaMonkey v5! No add-on made for a previous version of the program will work with MM5, either by me or any other author, since MM5 has completely different programming interface than before. If you really like my add-on and think that it is essential for your work with the program, you have several possibilities:
- you could stay with MM4;
- you could ask MM developers to implement support for old add-ons in MM5;
- you could wait for me to port the add-on to MM5, but don't hold your breath.
There are reports that MediaMonkey with this add-on has a very slow startup on Windows 10 after its April 2018 Update when Windows Defender has Real-Time Protection enabled. This problem is reported to Microsoft, but they don't care about it. You could do any of the next things:
- go to Microsoft site and leave your report, there is a better chance that the folks at Microsoft will do something about the problem if more people request that; or
- turn off Windows Defender Real-Time Protection and use some another anti-malware; or
- remove all MN masks that you don't need since this slow down is related to the number of installed masks; or
- donate to me and you will receive the enhanced version of the add-on which has implemented a workaround for this problem, making it as fast as before the mentioned Windows Update.
I am sorry, but currently I don't have time to implement the same workaround in the freely available version.
Fixed: typing numerical values on keyboard in SpinEdit controls on the Mask Settings dialog box (functional only in MM v188.8.131.520 or higher);
Fixed: unnecessary display of dialog box on start-up asking if you want to install new presets after automatic adjustment of clock caused by switch in daylight saving time.
v4.3 - 2015-06-22
Renamed/Improved: menu items;
Fixed: many things.
v4.2 - 2011-07-01
Added: possibility to place nodes into the Collections, MM filter option in GUI changed to Collection, nodes outside Collections cannot have applied MM filters, but only MN filters [MM4];
Added: drag&drop with Ctrl key for nodes with multi-item fields;
Fixed: renaming of nodes (modifying their caption) for multi-item fields.
v4.1.5 - 2011-06-22
Fixed: filters with <Track Number> = '' and <Disc Number> = '';
Fixed: collapsing of Magic nodes when collection is changed [MM4].
v4.1.4 - 2011-05-29
Fixed: Show if empty qualifier of the global node set by GUI when a mask doesn't contain any local node.
v4.1.3 - 2011-05-09
Added: 6 new masks, some old improved (mainly in the Artist Ratings group);
Fixed: missing nodes which don't contain specified string of the Split by qualifier (broken since v4.0);
Fixed: clearing the field by setting the empty caption of a node.
v4.1.2 - 2011-03-07
Fixed: long execution time when opening nodes with Album field on some sub-level and Min/Max Tracks qualifier (broken since v3.0).
v4.1.1 - 2011-02-18
Fixed: hangup of program with some large masks;
Fixed: error on uninstall of add-on;
Fixed: random error on start-up with the last selected node on exit from Magic Nodes branch [MM4].
v4.1 - 2011-02-07
Added: Odd Parts and Even Parts arguments for Split Mode qualifier which allow usage of Involved People field in ID3 format (please read the Information section about their usage);
Added: First Artist with Title, First Album Artist with Album, Poly Artist, Poly Album Artist, Poly Artist with Title and Poly Album Artist with Album fields;
Added: 50 new masks, some old improved;
Improved: import/export of masks with the same caption, but different contents;
Fixed: error with Parts * splitting modes and fields containing single apostrophe (');
Fixed: wrong masks copied from MM Forum using Select All command;
Fixed: skin styles path [MM4];
Fixed: error on start-up with the last selected node on exit from Magic Nodes branch [MM4].
v4.0.4 - 2010-06-24
Added: 7 new masks;
Fixed: error with Multi Composer field.
v4.0.3 - 2010-05-21
Fixed: error with String Before/String After arguments used with Left of/Right of qualifiers;
Fixed: moving of nodes withing some group to the Playlists branch;
Fixed: plus sign for expanding global node when none sub-node exists.
v4.0.2 - 2010-04-21
Added: 12 new masks (mainly in Random folder);
Fixed: drag & drop and renaming of nodes (broken in v4.0);
Fixed: incorrect time unit for Song Length with Filter spinedit control in Settings dialog box.
v4.0.1 - 2010-04-04
Fixed: error with Range function when "Display sorting/statistic results only if all values are defined" is turned on.
v4.0 - 2010-04-01
Added: possibility to get nested playlists with local level nodes using Child of:Playlists and Position:Child (until now only global level of nodes inside of the Playlists branch was possible);
Added: Split mode qualifier with several possibile arguments: String Part (old Split Part values >= 0), String Before, String After, Single Part, Parts Before, Parts After, All Parts (old Split Part = -1) and Categories; for their usage please take a look at the Information section;
Added: possibility to specify negative values for Split part qualifier, in which case parts are counting from the right to the left;
Added: possibility to use Substring/Trim/Left/Right of qualifiers with the multi-item split using the new * Parts arguments;
Added: Artist with Title, Title with Artist and Title with Artist plus Album fields displayed as Artist - Title, Title (Artist) and Title (Artist - Album) respectively;
Added: First Artist, Other Artist, First Album Artist, Other Album Artist, First Genre and Other Genre fields, e.g. for displaying main genre and subgenres;
Added: Lyrics, Date and Original Date fields as nodes (until now only as a part of the Filter expression) [MM3];
Added: Month, Day, Original Month and Original Day fields (month displayed as text in locale language) [MM3];
Added: Year Played, Month Played and Day Played fields (month displayed as text in locale language);
Added: Range custom aggregate function (could be used with same fields as other aggregate functions within Sort by and Statistic qualifiers, e.g. Range(Year) is same as Max(Year) - Min(Year));
Changed: Split options are changed and your masks containing them need to be updated; please take a look at the Information section;
Changed: controls from the Filter group are now always enabled (until now they are enabled only when the global level node is selected in the Nodes listbox, however this behavior could be reversed in the future if I decide to add a possibility for Filter to be specified with the local level nodes);
Fixed: multi-item split and Split by, Left of and Right of qualifiers with lower case characters;
Fixed: multi-item split and renaming of MN playlists with MM2.
v3.0.3 - 2009-09-08
Fixed: groups not created inside of the Library branch until restart (bug introduced in v2.2.2).
v3.0.2 - 2009-09-08
Fixed: error with the Statistic and Show if empty qualifiers used on the global level;
Fixed: error with the filter: <Any> = '' (although comparing <Any> field with empty string has not too much sense);
Fixed: space character on the begin/end of the sub-string when using Split by:-1.
v3.0.1 - 2009-09-07
Fixed: error during the first install.
v3.0 - 2009-09-06
Added: possibility to create playlists using Child of:Playlists and Position:Child (a full description at the first post of the MM forum thread);
Added: Refresh Magic Node option to the tree context menu when you right-click on some Magic node in the Playlists branch;
Added: Modeless MN Settings dialog box (allowed access to other parts of the program) option;
Added: Expand node after applying the save option, even if it is collapsed option;
Added: <Any> pseudo-field for the Filter qualifier (using fields specified on the Search tab in the Options dialog box);
Added: Cover Description, DateTime Played, DateTime Last Played, DateTime Added and DateTime Modified fields;
Added: Show ordinal numbers option and corresponding Show rank qualifier;
Added: possibility to use Show if empty option/qualifier for all local nodes except the last (deepest) one, with the hidden plus sign for nodes without sub-nodes; especially useful when Unknown qualifier for the next level is set to No, e.g. <Album|Show if empty:Yes>\<Disc Number|Unknown:No> (mask examples - Genres and sub-genres and Drives & Folders in the Split examples branch);
Added: possibility to use Split by/Split part qualifiers in combination with Left of/Right of qualifiers (mask example - Sub-folders of Music folder in the Split examples branch);
Added: support for multiple values with fields that are not multi-items, e.g. Involved people or CustomX, using Split by qualifier and Split part:-1 (mask example - Multi-item Custom 1 field in the Split examples branch);
Added: support for multiple values with several levels of categorization, e.g. each person in the Involved people field could belong to some involvement group and could have one or more roles (mask examples - Involved People by... in the Split examples branch);
Added: many new masks, some old improved and better organized;
Added/Changed: drive letter to the Path field;
Changed: Save button now have 3 possible states depending of modifications in the Settings dialog - Rename, Update and Add (it is now much easier to create a new mask based on some existing one);
Improved: speed of Count(Items) function, it is now as fast as Count(some_field) [MM3];
Fixed: Statistic qualifier used on the global (caption) level with the Filter qualifier.
v2.7 - 2009-06-29
Added: Multi Artist, Multi Album Artist, Multi Composer, Multi Conductor, Multi Lyricist, Multi Genre, Multi Tempo, Multi Mood, Multi Occasion and Multi Quality fields (e.g., the <Artist> node could have two sub-nodes "David Bowie" and "Queen" for the song "Under Preasure" , but the <Multi Artist> node would have only one sub-node "David Bowie; Queen" for the same song; this is especially useful if you have multi-item genres and want to get the nested display of nodes with genres and sub-genres using Split by/Split part qualifiers, for example: Genres and Sub-Genres\<Multi Genre|Split by:;>\<Multi Genre|Split by:;|Split part:1>\<Multi Genre|Split by:;|Split part:2>) [MM3].
v2.6 - 2009-06-16
Added: Date and Original Date fields for the Sort by/Statistic qualifiers (e.g. if you want correct sorting order when you have several albums released same year) [MM3];
Added: possibility to use Substring start/Trim qualifiers in combination with Left of/Right of/Split by qualifiers (e.g. if you have Custom 1 field like "some_fields added.2007-08-31 some_other_fields" you could write Right of:added.|Substr:6|Trim:2 to get the month part);
Added/Changed: drive letter to the Folder field;
Fixed: Statistic qualifier used on the global (caption) level together with the Filter qualifier;
Fixed: disappeared program during startup in some rare situations with MM v 3.0.x (upgrade to MM v3.1.x is recommended anyway);
Fixed: editing of node captions on a local level (e.g. the Composer name).
v2.5 - 2009-05-14
Improved: skin styles;
Fixed: error when "(" and ")" are used with Left Of/Right Of/Right Until qualifiers.
v2.4.1 - 2009-05-11
Fixed: error with Sort by/Statistic:Count(some_field) when used with some specific filters;
Fixed: sufixes like tracks, files, kbps, kHz, ... not displayed with localized versions of Windows;
Fixed: error when renaming captions of Group nodes using tree view (bug introduced in 2.0);
Fixed: option "Move prefixes to the end when sorting by Artist" (bug introduced in 2.0.5).
v2.4 - 2009-02-20
Added: Date Played field (whenever some track is played, not only for the last played time);
Added: Play Length field (total playing time of tracks, same as Played * Length);
Added: WAvg custom aggregate function (weighted average, could be used with same fields as other aggregate functions, but most useful with Played, Rating and Bitrate, e.g. WAvg(Played) is same as Sum(Played * Length) / Sum(Length)).
v2.3 - 2009-02-02
Added: auto-repeat for Up/Down buttons in the Export/Import dialog box with MM 3.1.1220 or up;
Added: word-wrap option for display of masks in the Export/Import dialog box;
Added: alphabetical sort of masks in the Export/Import dialog box by click on the table header;
Added: Original Decade field.
v2.2.3 - 2009-01-24
Fixed: removal of the first node (the topmost one before the Now Playing branch).
v2.2.2 - 2009-01-23
Fixed: duplicated display of nodes in some situations.
v2.2.1 - 2009-01-21
Fixed: duplicated display of groups in some situations.
v2.2 - 2009-01-20
Improved: look of dialog boxes with some skins (custom configurable with CSS files);
Added: some new masks.
v2.1 - 2009-01-13
Added: option Show node if empty and corresponding qualifier Show if empty which could be used only on the global (caption) level when it is a child of the Magic Nodes or belongs to some group.
v2.0.8 - 2009-01-11
Fixed: installation procedure.
v2.0.7 - 2009-01-09
Fixed: incorect display when the Ignore prefixes settings has "(" character, and probably some of SQL queries which have it as a part of the string.
v2.0.6 - 2009-01-07
Fixed: disapearing of nodes when SQL editor is allowed with MM versions older than 3.1 (bug introduced in 2.0.4).
v2.0.5 - 2009-01-07
Fixed: error with the Ignore prefixes option with some characters (' ( ) [ ]).
v2.0.4 - 2009-01-01
Fixed: memory leaks with dialog boxes in MM versions older than 3.1, excluding the Options dialog (anyway, upgrade to MM 184.108.40.2067 or higher is recommended).
v2.0.3 - 2008-12-21
Fixed: Show tracks qualifier;
Fixed: the "$" sign used in the Filter expression.
v2.0.2 - 2008-12-16
Fixed: error with Unknown node and some fields when displaying part of field (Trim/Left of/Substr/...);
Regression: speed of generating nodes was drastically slowed down with introduced progress bar, especially for large number of sub-nodes.
v2.0.1 - 2008-12-14
Fixed: error during installation and when adding/deleting masks if they are more than 100;
Fixed: truncated bottom buttons with some skins.
v2.0 - 2008-12-13
Added: real GUI! (more information about it in the Information section of the first post in MediaMonkey forum);
Added: export/import/move up/down of masks;
Added: SQL editor when expanding/selecting nodes;
Added: Show nodes qualifier which could be used with the last (bottom) node's level;
Improved and fixed: to many to mention.
v1.8 - 2008-11-08
Added: Split by and Split part qualifiers, argument for Split part is an integer >= 0 (e.g. Split by:\\|Split part:1);
Added: possibility to specify a backslash with Left/Right of/until/Split by qualifiers (should be typed as double backslashes, e.g. Right of:\\My Music\\Rock);
Added: Sort Order:Random (or Sort Order:Rnd), most useful in combination with the Top qualifier;
Added: possibility to use Count aggregate function with any field (please read information about that in MM forum) [MM3];
Fixed: Top qualifier;
Fixed: drag & drop for some fields;
Fixed: renaming of nodes with Album Artist with Album, Album with Album Artist (only the album part of a field is renaming) and Disc Number qualifiers.
v220.127.116.11 - 2008-10-30
Fixed: Drag & drop and renaming of nodes for artists with prefixes (The, ...) when the option "Move prefixes to the end ..." are turned on [MM3];
Fixed: Drag & drop and renaming of nodes (broken since 18.104.22.168) [MM2].
v22.214.171.124 - 2008-10-26
Added: detection when the active MM filter is changed with auto-folding of nodes (similar as MM built-in nodes).
v126.96.36.199 - 2008-10-23
Fixed: combination of Filter, SQL Filter and MM filter qualifiers containing expressions with OR operator.
v188.8.131.52 - 2008-10-12
Regression: (Exclusive) Left/Right of qualifiers which are broken in the last update.
v1.7.8 - 2008-10-08
Added: Decade, Time since added and Time since modified fields;
Added: SubString Start qualifier for taking a part of a field from specified position (could be shortened to SubStr Start or even SubStr, e.g. SubStr:4; if negative number is specified, the first character of the substring is found by counting from the right rather than the left; the lenght of the substring could be specified with the Trim qualifier);
Added: MM filter global qualifier for specifying the MediaMonkey filter (could be combined with the Magic Nodes' filters; if not specified, the current MM filter is used) [MM3];
Added: option "Move prefixes to the end when sorting by Artist" to the Options dialog;
Fixed: usage of the current MM filter when the last node in some branch is selected [MM3];
Fixed: display when "Ignore prefixes when sorting by Artist" is unchecked.
v1.7.7 - 2008-06-29
Added: option sheet in the Options dialog box with several options:
Added: option "Skip expanding of the Magic Nodes branch during start-up";
Added: option "Allow modifying of fields data by drag & drop or renaming tree nodes";
Added: option "Display sorting/statistic results only if all values are defined";
Added: option "Display sorting/statistic results for Rating rounded to the nearest half star";
Improved: installation proccess with merging of predefined masks;
Improved: FirstDayOfWeek determined from the system locale;
Fixed: expanding/not expanding of Magic nodes during start-up (nasty MM3);
Fixed: error "This key is already associated..." when Custom field has improper name;
Fixed: error with the Delete All Magic Nodes command.
v184.108.40.206 - 2008-06-19
Fixed: Right of in combination with (Exclusive) Right until qualifier;
Fixed: merging new masks with old ones after installation for multi-user accounts.
v220.127.116.11 - 2008-06-09
Fixed: Days since added/last played/modified.
v1.7.6 - 2008-05-27
Added: installation package with 50 predefined masks in INI file;
Added: support for the Time since last played field with Sort by/Statistic qualifiers (calculation based on seconds);
Fixed: adding/removing nodes from groups which are children of built-in MM nodes, e.g. Files To Edit;
Fixed: corrupting masks when renaming nodes on the global level (i.e. Caption nodes).
v18.104.22.168 - 2008-05-19
Fixed: again a "fix" for incorrect display of Avg(Rating) with the Sort by/Statistic qualifier for some locales.
v22.214.171.124 - 2008-05-16
Fixed: incorrect display of Avg(Rating) with the Sort by/Statistic qualifier for some locales.
v126.96.36.199 - 2008-05-07
Fixed: updating tags into files after drag & drop or renaming nodes.
v188.8.131.52 - 2008-04-07
Fixed: multiple display of same tracks in the tracklist from multi-item artists;
Fixed: character ">" on the end of the Filter expression;
Fixed: Name, Icon and probably some another grouping qualifiers;
Fixed: error "wrong number of arguments to function substr" for older MM 3.0.1.x versions.
v1.7.5 - 2008-03-23
Added: File Name and Folder fields [MM3];
Path = ':\My Music\Rock\Pink Floyd\Dark Side of the Moon\03 - Time.mp3'
Folder = ':\My Music\Rock\Pink Floyd\Dark Side of the Moon\'
File Name = '03 - Time'
Format = 'mp3'
Improved: Format and Disc number fields [MM3];
Fixed: Filter expressions with OR operator;
Fixed: Count(Items) when used on the first node level.
v184.108.40.206 - 2008-03-05
Fixed: bug which sometimes displays an error message during start-up;
Fixed: descending order with the last sorting key.
v220.127.116.11 - 2008-02-09
Fixed: weird VB Script's bug, which is manifesting with the Group pseudo-field.
v1.7.4 - 2008-02-04
Added: 10 new fields - Grouping (built-in MM field which has nothing in common with existing pseudo-field Group), Weeks since last played/added/modified, Months since last played/added/modified and Years since last played/added/modified (when used with Filter qualifier 0 is current week/month/year, 1 is previous week/month/year, and so on; default value for the first day of week is Sunday, but if you want to use some another day, please edit the iFirstDayOfWeek constant on the begin of the script file);
Fixed: renaming of group/root caption, now possible editing of existing text.
v1.7.3 - 2008-02-01
Added: possibility to rename/drag&drop to the node on any level (until now, renaming was possible only to root/group levels, but not fields, and drag&drop was possible only to the first level field), drag&drop updates all nested fields, e.g. if you drop selected tracks to the node on 3rd level, it will be updated 1st and 2nd level fields as well;
Added: several new fields for drag&drop (allowed fields: Album, Album Artist, Album Artist with Album, Album with Album Artist, Artist, BPM, Comment, Composer, Conductor, Copyright, Custom 1-5, Disc Number, Encoder, Genre, InvolvedPeople, ISRC, Lyricist, Mood, Occasion, Original Artist, Original Lyricist, Original Year, Publisher, Quality, Rating, Tempo, Year), trimmed nodes are not allowed (those which contain Trim/Left of/Right of qualifiers).
Warning: drag&drop and renaming operations modify the content of the database. You are strongly encouraged to backup your database.
v1.7.2 - 2008-01-28
Added: using of MM built-in filters in the combination with Magic Nodes' filters [MM3];
Added: the warning text to the Create/Edit dialog when the entered mask is not correct;
Added: possibility to display sorting/statistical result, even when some value of the field is negative, i.e unknown (bSortStatOnlyIfPositive = False);
Fixed: sorting/statistic display when Avg function is used with some fields.
v1.7.1 - 2008-01-26
Added: Exclusive Right until qualifier (for full description please read the PDF manual or visit the MM forum);
Added: possibility for multiple arguments with all Left/Right qualifiers (separated by "|", for full description please visit the MM forum);
Added: Path field as a node (until now it is used only for statistics/filters, be extremely careful with this because it could return too many sub-nodes and hang the program, this field could be useful only with Left/Right qualifiers);
Fixed: errors with Left/Right qualifiers in some cases;
Fixed: error during loading in some cases (with some specific masks);
Fixed: Icon with numerical values (0 - 57) as global qualifier for the root level.
v1.7 - 2008-01-23
Added: grouping with the unlimited number of hierarchy level, using the Group pseudo-fields in the front of the existing mask, i.e. before the mask caption and global qualifiers, e.g. <Group|Name:Problematic tracks>\Missing lyrics|Filter:<Lyrics> = ''\<Title> (for full description, please wait for the updated manual or visit the MM forum);
Added: the Position qualifier for specifying the location of the node relative to its parent: Before, After (default for all nodes, except Magic Nodes), First Child, Last Child (default for Magic Nodes), e.g. Missing tracks|Child of:FilesToEdit|Position:Last child|Filter: ... \<Album>;
Added: Exclusive Left of, Exclusive Right of and Right until qualifiers (Right until qualifier helps in parsing of fields and should be used in combination with Right of or Exclusive Right of qualifiers, for full description, please visit the MM forum);
Added: display of statistics for the root node, i.e. Statistic qualifier could be global (please be careful with this, it could drastically slow down expanding of nodes);
Added: display of Unknown node with Trim, (Exclusive) Left of and (Exclusive) Right of qualifiers;
Added: display of any MM supported tree icon (0 - 57), every Group could have its own Icon qualifier;
Added: on-line checking of the correct syntax while you are typing the mask;
Fixed: editing/removing nodes which are not inside of the Magic Nodes branch, also removed annoying message about a need for MM restart;
Fixed: display with truncated all specified characters of the Right of qualifier;
Changed: Left of qualifier now returns all field values, even those which don't contain specified string, to be consistent with Right of qualifier (if you want old behavior of Left of qualifier you should use new Exclusive Left of qualifier).
v18.104.22.168 - 2008-01-15
Fixed: Left of and Right of qualifiers used with small case letters [MM3];
Changed: display of Bitrate nodes rounded to multiply of 16 kbps (instead of 32 kbps).
v22.214.171.124 - 2008-01-14
Added: possibility to put one space character after the name of qualifier for better readability (e.g. Statistic: Count(All));
Fixed: incorrect display of Avg(Rating) with Sort by/Statistic qualifiers.
v126.96.36.199 - 2008-01-12
Added: check for TweakMonkey settings (Enable startup node) [MM3];
Fixed: expand of the node which was last selected on exit (only the first level) [MM3].
v188.8.131.52 - 2008-01-11
Fixed: Show tracks:no when it is on the global level (root node).
v1.6.2 - 2008-01-08
Added: item names for Statistic:Count(Items);
Fixed: statistics and display of nodes/tracks for tracks with entered multiple values in multi-item fields [MM3];
Fixed: error with Album with Album Artist and Album Artist with Album fields [MM2];
Fixed: error with Sort By qualifier;
Fixed: display of Unknown node for several fields (Artist, Album, Genre,...);
Fixed: formated display for several fields;
Fixed: display of the Custom 4 and 5 fields [MM3].
v1.6.1 - 2008-01-03
Added: Send To, Edit and Delete Magic Node options to the Tree window context menu;
Fixed: Trim and Left of qualifiers;
Fixed: some incorrect Rating values.
v1.6 - 2007-12-31
Added: Show Sort Key qualifier to determine which sorting key should be displayed if Sort By is used with multiple keys (e.g. Show Sort Key:n, where n is from 1 to the number of sorting keys or 0 if sorting value shouldn't be displayed at all, 1 is default value);
Added: automatic use of the character '/' for separation of statistic items for same or similar fields (e.g. result for Statistic:Min(Length), Sum(Length) will be displayed as xx/yy MB instead of xx MB, yy MB), but statistics for different fields are separated with the comma - this only has an effect on displayed result, arguments in the user masks still should be separated as before;
Fixed: statistics and display of nodes/tracks when using Unknown, Min Tracks and/or Max Tracks qualifiers (Top qualifier still unresolved);
Fixed: statistics for Unknown node;
Fixed: display of statistics/sorting information with some fields (Rating, Length,...);
Fixed: date/time functions [MM3];
Fixed & changed: fields inside of the Filter qualifier need to be surrounded by < and >, but this qualifier now works correctly (e.g. Filter:Album Artist = 'Various Artists' didn't worked, instead it should be written as Filter:<Album Artist> = 'Various Artists');
Changed: name of the Album and Artist field to the Album with Album Artist, name of the Album and Year field to the Album Artist with Album (a reason for this is because names could be misinterpreted during parsing);
Changed: the Album Artist with Album field (former Album and Year) initially will not display year information (if you need such behavior, please use the same field with Statistic:Max(Year));
Changed: the Tracks argument for statistics/sorting (similar as All, but instead of the text 'files' it show 'tracks').
v184.108.40.206 - 2007-12-20
Fixed: sorting with Custom fields;
Fixed: displaying of the genre with ID = 0 [MM3].
v220.127.116.11 - 2007-12-17
Added: Track Number and Disc Number fields for statistic/sorting (e.g. <Album|Statistic:Max(Track Number)> to display a number of the last track from each album) - there could be a problem if someone use alphanumeric characters for disc/track numbers, as it is possible with MM3;
Fixed: bug which is manifesting with some nodes.
v1w5 - 2007-12-17
Added: multiple arguments for Statistic qualifier separated with the comma characters (e.g. Statistic:Count(All), Sum(File Size), Sum(Length));
Added: multiple sorting keys with Sort by qualifier (similar usage as Statistic, with a possibility to specify sorting order for each sort key, e.g. Sort by:Count(All) Asc, Max(Length) Desc, only first sorting key is displayed);
Added: keyword Items for Statistic qualifier to get the number of node sub-items (e.g. <Artist|Statistic:Count(Items)>\<Album> for the number of albums for each artist) - a little bit slow, so be a careful and don't use it on the top level nodes with too many sub-items;
Added: several new fields for displaying (Disc Number,...) and sorting (Custom,...);
Added: support for all multi-item fields (Artist, Genre, Mood,...) [MM3];
Fixed: Unknown node;
Fixed: sorted display of items in the Tree list by the number of tracks with Sort by:Count(All);
Fixed: sorting items with underscore ('_') and maybe some another characters [MM3];
Fixed: problem with a backslash ('\') inside of the SQL Filter / Filter qualifiers (it can be used now between quotes, e.g. SongPath Like '%\My music\%');
Fixed: problem with a vertical line ('|') inside of the SQL Filter / Filter qualifiers (it can be used now for string concatenation in MM3);
Fixed: Artist node wrongly displayed composers, conductors...[MM3];
Fixed: problem with Artist and Album Artist fields within same node (e.g. Compilations|Filter:Album Artist = 'Various'\<Artist>\<Album>);
Fixed: problem with several fields which couldn't worked together in the same node (e.g. Mood/Tempo..., Artist/Composer/...);
v18.104.22.168 - 2007-07-27
Fixed: error after click on the parent node with filtered display [MM2].
v1.4.3 - 2007-07-26
Fixed: duplicated albums in the tree list with <Album and Year> when some albums have songs with different year;
Fixed: not filtered display of tracks in the tracks window after selecting parent node when Top, Min Tracks and Max Tracks qualifiers are used;
Fixed: All node;
Fixed: Left of and Right of qualifiers [MM3];
Fixed: <Leveling> [MM3].
v1.4.2 - 2007-07-17
Added: Statistic qualifier for displaying some statistical information about items in the Tree list; e.g. <Album|Statistic:Count(All)> to display number of tracks for each album;
Added: some new fields for sorting (Length, File Size and Leveling) as well as for Statistic qualifier.
v1.4.1 - 2007-07-14
Fixed: some small bugs.
v1.4.0 - 2007-07-11
Added: support for MediaMonkey 3.0.
v1.3c - 2006-08-18
Fixed: incorrect sorting of Artists with prefixes ("The", "A",...) in some cases (e.g. when Trim qualifier is used).
For MediaMonkey 3.0 or higher - just double-click on the MediaMonkey.xx.mmip file; if you are on Vista or Win7 and you got "Product installation error", make sure you have MM3 set to "Run as Administrator"; if you downloaded the installation package with IE7 and it changed its extension to a .zip, you should first change it back to a .mmip.
For MediaMonkey 2.x - rename a .mmip extension to .zip, extract MagicNodes.vbs and MagicNodes.ini files to the MediaMonkey's "Scripts\Auto" folder and restart MM program.
Note: The MagicNodes.ini file is used only after the installation. During its work, the Magic Nodes add-on stores masks into the MediaMonkey.ini file.
Split Mode qualifier could accept two new arguments, Odd Parts and Even Parts. They are similar to Categories argument since they have the same execution order of parsing command, i.e. the Split by qualifier is applied first, then the each resulting part of the string is parsed using Left/Right of qualifiers (if they are specified). Main difference is that Categories argument returns all parts from some string, but Odd Parts and Even Parts returns only every other part of string alternatively.
Usage of these qualifiers is most practical with the Involved People field if it is stored in the ID3 format. For example, the earlier illustration with "Vocals: Bono; Guitars: The Edge; Bass: Adam Clayton; Drums: Larry Mullen, Jr." is not compatible with the ID3 standard, and it should be written as "Vocals;Bono;Guitars;The Edge;Bass;Adam Clayton;Drums;Larry Mullen, Jr.", i.e. the same separator ";" is used between roles and persons and between persons themselves. So, if you have such format and want to display all roles, you could write <Involved people|Split by:;|Split Mode:Odd Parts>. Also, if you want to display persons, you could write <Involved people|Split by:;|Split Mode:Even Parts>.
With these two new arguments you have a possibility to specify roles and sub-roles using Exclusive Left of and Exclusive Right of qualifiers as well. Here is the same Involved People example as before, but adjusted for ID3 tag: "Band member-Vocals;Bono;Band member-Guitars;The Edge;Band member-Bass;Adam Clayton;Band member-Drums;Larry Mullen, Jr.;Guest musician-Guitars;B.B. King;Guest musician-Vocals;B.B. King". To get main roles you should write <Involved people|Split by:;|Split Mode:Odd Parts|Exclusive left of:->, to get sub-roles you should write <Involved people|Split by:;|Split Mode:Odd Parts|Exclusive right of:-> and to get persons you should write <Involved people|Split by:;|Split Mode:Even Parts>.
With this version of the add-on there are 4 new <Poly *> fields. They are similar to <Multi *> fields, but their display is more friendly. For example, with Multi Artist = "David Bowie; Queen" we would get displayed Poly Artist = "David Bowie & Queen". If there are 3 or more artists in some multi-item Artist field, only the last one would be separated with "&", other ones would be separated with ", ". Some users prefer to store the type of the featuring artists as new item in multi-item Artist field, for example: Multi Artist = "Freemasons; feat.; Siedah Garrett" - using <Poly Artist> field you would get "Freemasons feat. Siedah Garrett". Here are several more examples:
- "Dave Armstrong; Redroche; feat.; H-Boogie" -> "Dave Armstrong & Redroche feat. H-Boogie",
- "Jerry Ropero; Denis The Menace; pres.; Sabor; feat.; Jaqueline" -> "Jerry Ropero & Denis The Menace pres. Sabor feat. Jaqueline",
- "Robbie Rivera; Axwell; JJ; feat.; Suzan Brittan" -> "Robbie Rivera, Axwell & JJ feat. Suzan Brittan".
Information about version 4.0
Several added things need some more explanations; the first is possibility to generate nested playlists. I think it is pretty straightforward - just enter your mask as usual and specify Child of:Playlists and Position:Child qualifiers or using GUI you should choose Position: Child of - Playlists (first select Playlists from the second dropdown list, then Child of from the first one). Well, it is the same syntax which is already introduced with the version 3.0, but the big difference is that now you could specify sub-nodes, e.g.
Test mask|Child of:Playlists|Position:Child|Filter:<Lyrics> <> ''\<Arstist>\<Album>
With v3.x you could specify the same mask, but it would generate playlists only with the global (Test mask) node; however, with v4.0 you would now get nested both Artist and Album local sub-nodes. Be careful with the number of generated sub-nodes, because too much playlists could slow down the computer. Of course, as with the previous version, the global node could be nested inside of group nodes in the same way as the other Magic nodes outside of the Playlists branch. There are several limitations with such nodes as with the previous version, i.e. you could not use Show tracks, Statistic and Icon qualifiers with them. You could specify Sort by qualifier, but there is a chance that you would not get what you want, because playlists are always sorted alphabetically (in such case consider a possibility to add Show rank qualifier, i.e. turn on the Show ordinal number option).
If you want to move some existing node from Magic Nodes to Playlists branch, but you don't want to get sub-nodes, you have two possibilities: you could remove sub-nodes from the mask or you could turn off the Show nodes option, but that option could be used only for the last (bottomless) level of nodes, so that possibility is only applicable for masks with only one sub-level of nodes.
The introduction of the next possibilities is a reason for masks incompatibility with older versions, i.e. none of your masks with the Split by qualifier will not work as you want. The first important thing you should know is that all non-negative values for Split part are now shifted for +1. For example, instead of Split part:0 you should now specify Split part:1 and so on. Beside of the added functionality, I think this is also more natural/logical, because the specified value now represents the actual part of the field which you would get, instead of the previous version where you was forced to specify Split part:0 for the first part, Split part:1 for the second...
However, beside of the better logical representation, the main reason for such change is the added possibility for use of the reverse parsing, i.e. the parsing from the right to the left, using negative values for the Split part qualifier in a similar way as you could specify negative values for the Substring start and Trim qualifiers. So, if you specify Split part:1 you would get the leftmost part and if you specify Split part:-1 you would get the rightmost part of the field. Of course, if you specify Split part:-2 you would get the second part of the field from the right, and so on.
The another important thing that you should know, is that now you need to specify Split mode:String part if you want the same behavior as with the previous versions, of course with already explained difference for Split part values. For example, if you had Split by:;|Split part:1, you should now write Split by:;|Split part:2|Split mode:String part. Here are some more examples - let say that I have the Path = "c:\My Music\Pink Floyd\Us and Them.mp3" and using the Split by:\\|Split mode:String part:
with Split part:1 or Split part:-4 I would get "c:";
with Split part:2 or Split part:-3 I would get "My Music";
with Split part:3 or Split part:-2 I would get "Pink Floyd";
with Split part:4 or Split part:-1 I would get "Us and Them.mp3".
If the Split mode qualifier has just that single argument (String part), then there wouldn't be any reason for its introduction. So, beside of the String part argument, the Split mode qualifier also accepts String Before, String After, Single Part, Parts Before, Parts After, All Parts and Categories arguments. Here are examples using the same Path value as previous, but now with the Split mode:String Before:
with Split part:2 or Split part:-3 I would get "c:";
with Split part:3 or Split part:-2 I would get "c:\My Music";
with Split part:4 or Split part:-1 I would get "c:\My Music\Pink Floyd";
with Split part:5 I would get "c:\My Music\Pink Floyd\Us and Them.mp3".
As you could see from those examples, when using String Before you would get the left part of the field's string before the specified part. Here are examples with the Split mode:String After which could be used to get the right part of the field's string after the specified part:
with Split part:0 or Split part:-5 I would get "c:\My Music\Pink Floyd\Us and Them.mp3";
with Split part:1 or Split part:-4 I would get "My Music\Pink Floyd\Us and Them.mp3";
with Split part:2 or Split part:-3 I would get "Pink Floyd\Us and Them.mp3";
with Split part:4 or Split part:-2 I would get "Us and Them.mp3".
Negative values for Split part used with String * arguments (String part, String before, String after) of the Split mode qualifier is not possible with MediaMonkey 2.x, but only with v3.x. Be careful, if you use String * arguments, and if you specify the large value for Split part, you could get the error message! This is because the complexity of the generated SQL code raises exponentially with each value increment.
The next argument of the Split mode qualifier is Single part. It has almost same effect as String part, with some pros and cons. Its advantage is that it does not generate the error message with the large values for Split part, since it is not using the SQL code, but VBScript instead. However, its drawback is that it cannot be used with Sort by/Statistic qualifiers as well as almost none Show * qualifiers. Same advantage and drawback have all remained Split mode arguments.
The Parts before and Parts after arguments are similar to the String before and String after arguments respectively, but instead of the one resulting node with concatenated multiple parts of the string, they could generate multiple nodes with the single parts of the string each. Let's see again what we got with Split mode:String After|Split part:1 - "My Music\Pink Floyd\Us and Them.mp3". This is just one node. Now, if we replace String after with Parts after, we would get three nodes on the same level: "My Music", "Pink Floyd" and "Us and Them.mp3". Well, this example with the Path field is not the best nor too much useful, since those arguments are better with the multi-item fields or those fields that could contain multi-item values like the Involved people. Let's try again with some another field, e.g. <Multi Genre> = "Dance;House;Club". Using Split mode:String After|Split part:1 we would get one "House;Club" node, but using Split mode:Parts After|Split part:1 we would get two nodes on the same level - "House" and "Club".
The All parts argument is the special case of the previous argument, i.e. it has the same effect as Split mode:Parts After|Split part:0 where all parts are displayed as nodes on the same level within their parent node. This argument is default for the Split mode qualifier, i.e. if you omit this qualifier it would be same as if you specify Split mode:All parts. If you are using this argument you don't need to specify the Split part qualifier (it would be ignored). Also state for the next, Categories argument.
Now, you may think that All parts argument has the same effect with multi-item fields as previous versions of add-on using Split part:-1, but this is not exactly the case; it is the Categories which has the same effect. For example, if you had the mask with Split by:;|Split part:-1, you should now write Split by:;|Split mode:Categories. The main difference between those two arguments is in the order how parsing of the initial field's string is done, and such explanation requires some digression about existing qualifiers which could be used for parsing.
I suppose that you already know that we have several ways to parse the initial field's string. There are Substring start and Trim qualifiers, then there is the Split by qualifier and finally there are (Ex) Left of and (Ex) Right of qualifiers. The older versions of this add-on didn't have a possibility to use those qualifiers with each other, i.e. you could not use Split by together with Trim or Left of. Well, this was improved in time and now you could freely combine all those qualifiers, but I never explained what is happening internally, and I think that you should know that. The parsing of the initial string is executed in 3 steps: in the first step the initial string is parsed using the Left/Right of qualifiers, then the newly string is parsed with the Split by qualifier and finally the resulting string is parsed using Substring start/Trim qualifiers.
Here are some examples using the same Path value as before. If I write Right of:My Music\\|Split by:\\|Split mode:String part|Split part:2, in the first step the initial string would be trimmed from the left using the Right of qualifier (resulting with "Pink Floyd\Us and Them.mp3"), then in the second step the resulting string would be parsed using Split qualifiers, so finally I would get "Us and Them.mp3". This is the nice trick to know if you need to use Split part qualifier with large values and some of String * arguments, since if you use Right of you could decrease the Split part value and avoid generating of the error message.
The presented order for parsing of the string is almost always same, the only exception is the Categories argument, and this is the main difference between All parts and Categories arguments. With the All parts argument the initial string is parsed first using Left/Right of qualifiers (if they are specified), then it is parsed using the Split by qualifier, as it is already explained. With the Categories argument instead, the initial string is first parsed using the Split by qualifier, then the each resulting part of the string is parsed using Left/Right of qualifiers (if they are specified).
Here is same example as with the 3.x version of add-on, but instead of Split part:-1 we now should use Split mode:Categories: Involved people = "Vocals: Bono; Guitars: The Edge; Bass: Adam Clayton; Drums: Larry Mullen, Jr.". If we write Split by:; |Split mode:Categories|Ex Left of:: , the initial string is parsed first using Split by qualifier and we get 4 parts "Vocals: Bono", "Guitars: The Edge", "Bass: Adam Clayton" and "Drums: Larry Mullen, Jr." In the next step the each part is parsed using the Ex Left of qualifier, so we finally get four nodes on the same level: "Vocals", "Guitars", "Bass" and "Drums".
Here is one example that not worked before as it should: Comment field = "Country: France/USA". If we use Ex Right of:: |Split by:/|Split mode:Categories we are still parsing the string using Split by first and so we would get two parts: "Country: France" and "USA". In the next step, after parsing with Ex Right of we would get only one node "France", because "USA" part doesn't contain ": " separator. Well, such field layout could be modified for use with the previous qualifiers, i.e. the Comment field could be modified to "Country: France/Country: USA", but it would be really annoying to modify tags in all tracks. Luckily, there is now this new argument, All parts, which should be used with the presented field layout as: Ex Right of:: |Split by:/|Split mode:All parts. With this argument we first get trimmed the initial string from the left using Ex Right of, so we get "France/USA"; then we parse resulting string using Split by, so finally we get two nodes, "France" and "USA".
There are 4 basic modes for parsing the string using the Categories argument, depending of used (Ex) Left/Right of qualifiers:
using the Exclusive left of qualifier to get the leftmost part;
using the Exclusive right of qualifier to get the rightmost part;
using the Exclusive right of and Exclusive right until qualifiers to get the middle part;
using the Exclusive right of and Right until qualifiers to get splitted right part(s).
The first 3 modes are pretty self-explanatory and already known from the previous version of the add-on. Here is again the same example as before: "Band member-Vocals: Bono; Band member-Guitars: The Edge; Band member-Bass: Adam Clayton; Band member-Drums: Larry Mullen, Jr.; Guest musician-Guitars: B.B. King; Guest musician-Vocals: B.B. King". Here we have involvement groups on the leftmost side: "Band member" and "Guest musician", then we have roles in the middle: "Vocals", "Guitars", "Bass" and "Drums", and finally we have musicians on the rightmost side: "Bono", "The Edge", "Adam Clayton", "Larry Mullen, Jr." and "B.B. King".
Those 3 modes are sufficient if we write category for each artist, but it could lead to the duplicated text. For example, if some track have two vocalists, we need to enter e.g. "Vocals: Bono; Vocals: The Edge; Guitar: The Edge". Now, it would be nice if we could write: "Vocals: Bono/The Edge; Guitar: The Edge". This is exactly where could be used the forth mentioned mode of the Categories argument: with the Split by:; |Split mode:Categories|Exclusive left of:: we could get the leftmost part as usual: "Vocals" and "Guitar", and now using Split by:; |Split mode:Categories|Exclusive right of::|Right until:/ we could get "Bono" and "The Edge" (of course, in this example "The Edge" would be under two nodes, Vocals and Guitar).
Here is the last example which demonstrates usage of Categories argument with the mentioned forth mode. Let say that we have Custom1 field = "Country :France/USA; Tones: Reflective/Ethereal; Style: Prog-Rock/Art Rock". We could create just one mask for all included categories: Example\<Custom 1|Split by:; |Split mode:Categories|Ex Left of:: >\<Custom 1|Split by:; |Split mode:Categories|Ex Right of:: |Right until:/>. With this mask we would get two level of nodes; on the first level we would get "Country", "Tones" and "Style" nodes, where the "Country" node would contain two sub-nodes, "France" and "USA", the "Tones" node would contain "Reflective" and "Ethereal" sub-nodes, and finally the "Style" node would contain "Prog-Rock" and "Art Rock" sub-nodes.
The 4.0 version has also added First/Other Artist/Album Artist/Genre fields. For example with the First Genre field I could get the leftmost (main) genre from the multi-item genre, and with the Other Genre I could get remaining genres (sub-genres) from the multi-item genre. For example, with "Dance;House;Club" using First Genre I would get "Dance" node, and using Other Genre I would get two nodes on the same level: "House" and "Club". Well, I could get almost same results using <Multi genre|Left of:;> for the first genre, and using <Multi genre|Split by:;|Split mode:Parts After|Split part:1> for the remaining genres, but, as I already mentioned, the nodes with the Split mode:Parts After cannot have Statistic qualifier and have some another drawbacks which the First/Other fields don't have.
Split options are changed in v4.0 and your masks containing them will not work as they should. You need to update such masks accordingly to the information about usage of Split options that could be found at the Information section on this page.
Version 2.0 of this add-on has an advanced graphical user interface which uses dynamically populated dropdown lists. Skinned versions of MediaMonkey from 3.0 till 3.1 have very serious bug with dropdown lists which sometimes results with unresponsive program and 100% CPU usage. All versions prior of 3.1 also have very serious bug when reading keys from .ini files which are longer than 2048 characters (some Magic Nodes masks could be longer) and this bug sometimes results with disappeared program during execution. It is highly recommended to use the latest version of MediaMonkey.
Since v1.7.6 of this script there is an installation package. If you have already installed some older version (those with version number in the file name), you should manually remove it from the Script/Auto folder before the installation.
Possible reasons why your old mask (MM2 and/or MN <= v1.3) doesn't work:
Album and Artist qualifier is renamed to Album with Album Artist.
Album and Year qualifier is removed (you could use Album Artist with Album|Statistic:Max(Year) instead).
Field names should be surrounded with < and > when used inside of the Filter qualifier.
Count aggregate function of Sort by and Statistic qualifiers only supports All, Tracks and Items arguments.
Masks with Percent argument of Top qualifier don't work in MM3 (you could omit the word Percent and you would get specified number of items, e.g. Top 10).
Masks with First and Last aggregate function of Sort by qualifier don't work in MM3 (you could try Min and Max functions instead).
Masks with Filter and SQL Filter qualifiers which use MS Jet specific functions (e.g. IIf, Left, Right, Mid, Val, DateDiff, Now, Asc,...) don't work in MM3.
Masks with Filter and SQL Filter qualifiers which use some table/field names changed in MM3 (e.g. SongOrder renamed to TrackNumber) don't work in MM3.
This add-on is a false positive reported as a worm by F-Secure. The author of F-Secure promised me that will update its database and put the add-on on white-list, but still didn't. If you go to the www.virustotal.com/en/ site, you will see that it is safe tested by 54 popular anti-virus engines; the only one reporting a worm in it is F-Secure.