Magic Nodes
Version 4.3.3
- 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."

If you want to discus 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.

You could also take a look on my other add-ons for MediaMonkey.

Donation

This add-on is donationware. I am its sole developer and I worked 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. You could donate as much as you think that is appropriate, any amount would be really appreciated.
Euro (EUR) US Dollar (USD)
The enhanced version of this add-on, which was previously sent only to donors, is not available nor it is supported by me for now. Please don't post questions and requests for that version in the Forum. And please do not donate if your only reason for doing that is to get the enhanced version!

Compatibility

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 should stay with MM4. Or you could wait for me to port the add-on to MM5, but my interest for that depends only on donations.

Windows Defender Issue

There are reports that MediaMonkey with the freely available version of this add-on has very slow startup on Windows 10 after its April 2018 Update when Windows Defender has Real-Time Protection enabled. This is not caused by a bug in this add-on, but in Windows Defender, which I already reported on Microsoft site, but MS don't care about it. You could do any of the next things: The enhanced version of this add-on did not have this problem, but it is not available for now.

What is new

v4.3.3 - 2018-10-03

v4.3.2 - 2016-04-24

v4.3 - 2015-06-22

v4.2 - 2011-07-01

v4.1.5 - 2011-06-22

v4.1.4 - 2011-05-29

v4.1.3 - 2011-05-09

v4.1.2 - 2011-03-07

v4.1.1 - 2011-02-18

v4.1 - 2011-02-07

v4.0.4 - 2010-06-24

v4.0.3 - 2010-05-21

v4.0.2 - 2010-04-21

v4.0.1 - 2010-04-04

v4.0 - 2010-04-01

v3.0.3 - 2009-09-08

v3.0.2 - 2009-09-08

v3.0.1 - 2009-09-07

v3.0 - 2009-09-06

v2.7 - 2009-06-29

v2.6 - 2009-06-16

v2.5 - 2009-05-14

v2.4.1 - 2009-05-11

v2.4 - 2009-02-20

v2.3 - 2009-02-02

v2.2.3 - 2009-01-24

v2.2.2 - 2009-01-23

v2.2.1 - 2009-01-21

v2.2 - 2009-01-20

v2.1 - 2009-01-13

v2.0.8 - 2009-01-11

v2.0.7 - 2009-01-09

v2.0.6 - 2009-01-07

v2.0.5 - 2009-01-07

v2.0.4 - 2009-01-01

v2.0.3 - 2008-12-21

v2.0.2 - 2008-12-16

v2.0.1 - 2008-12-14

v2.0 - 2008-12-13

v1.8 - 2008-11-08

v1.7.8.4 - 2008-10-30

v1.7.8.3 - 2008-10-26

v1.7.8.2 - 2008-10-23

v1.7.8.1 - 2008-10-12

v1.7.8 - 2008-10-08

v1.7.7 - 2008-06-29

v1.7.6.2 - 2008-06-19

v1.7.6.1 - 2008-06-09

v1.7.6 - 2008-05-27

v1.7.5.4 - 2008-05-19

v1.7.5.3 - 2008-05-16

v1.7.5.2 - 2008-05-07

v1.7.5.1 - 2008-04-07

v1.7.5 - 2008-03-23

v1.7.4.2 - 2008-03-05

v1.7.4.1 - 2008-02-09

v1.7.4 - 2008-02-04

v1.7.3 - 2008-02-01

v1.7.2 - 2008-01-28

v1.7.1 - 2008-01-26

v1.7 - 2008-01-23

v1.6.2.4 - 2008-01-15

v1.6.2.3 - 2008-01-14

v1.6.2.2 - 2008-01-12

v1.6.2.1 - 2008-01-11

v1.6.2 - 2008-01-08

v1.6.1 - 2008-01-03

v1.6 - 2007-12-31

v1.5.0.2 - 2007-12-20

v1.5.0.1 - 2007-12-17

v1w5 - 2007-12-17

v1.4.3.1 - 2007-07-27

v1.4.3 - 2007-07-26

v1.4.2 - 2007-07-17

v1.4.1 - 2007-07-14

v1.4.0 - 2007-07-11

v1.3c - 2006-08-18

Installation

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.

Usage

Introduction
Nodes are the elements of the navigation tree structure of the MediaMonkey interface. Magic Nodes add-on allows a simple way of creating new nodes to help you manage your music library. The Magic Nodes' nodes are defined using masks which are loosely based on the way that MediaMonkey auto-organize works. The masks that represent the Magic Nodes' nodes could be typed from scratch or they could be created using controls in the Settings dialog box.

If you want to type masks from the scratch or just to understand their structure, it is recommended that you read the PDF manual written by Rick Parsons. It is outdated since it covers only 1.7 version of the add-on, which was one of the latest versions without the proper GUI, but it explains many things needed for understanding of this add-on. The things covered by that manual will not be mentioned in this section, but you could rather find here the explanation how to use the commands and options of this add-on that you could find in its GUI.

Magic Nodes add-on could be used by the beginners as well as by very advanced users, there are at least 2 levels of difficulty:
1. The beginners could use add-on just by navigating through the Magic Nodes branch of the Media Tree panel. You could find there nearly 300 different nodes that could be useful for you without any additional adjustment, e.g. you could get displayed "Tracks with the Artist name on the begin of the Filename", or "All tracks rated >= 2.5 stars from Album Artists that haven't played last 30 days", or "20 Random Tracks from each Genre which has 100 or more tracks and played more than 50 times".

2. Somewhat more experienced users could create their own masks to get nodes that are different than those that are included with the add-on. Mask could be very simple as it is Test\<Genre>, but also very complex like the mask "Artists with at least one album having at least 3 songs with track rating >= 4 stars" that is located in the "Artist Ratings" branch of the Magic Nodes.

There are three different ways to edit an existing mask and its corresponding node:
1. choose Edit / Magic Nodes / Mask Settings, then choose the wanted mask from the Caption combo box, edit it and click on the Update/Rename button.
2. choose Edit / Magic Nodes / Manage Masks, then click on the number of the needed mask from the "#" column, edit it and click on the OK button.
3. right-click on the corresponding node in the Media Tree panel, choose Edit Magic Node command, then edit the mask and click on the OK button.

If you want to create a new mask, you should use Magic Nodes Settings dialog - just click on the New button, type some text in the Caption combo box and set some fields and its qualifiers, then click on the Add button on the bottom of the dialog box.

There are also three different ways to delete an existing mask:
1. choose Edit / Magic Nodes / Mask Settings, then choose the mask from the Caption combo box and click on the Delete button on the bottom of the dialog box.
2. choose Edit / Magic Nodes / Manage Masks, then select the mask(s) in the table and click on the Delete button.
3. right-click on the corresponding node in the Media Tree panel and choose Delete Magic Node command.

The Magic Nodes commands could be found in the Edit menu of the main menu or in the context menu of the Media Tree. The first group of commands from the Magic Nodes sub-menu, including Edit Magic Node and Delete Magic Node, is enabled only if you have selected a global Magic Nodes' node, while the remaining commands could be executed even when none Magic node is selected, e.g. Mask Settings.

Mask's syntax
The description about that what is the "global" Magic node could be found in the mentioned PDF manual. Here is just a quick reference about the syntax of the Magic Nodes' masks where "[]" indicates optional and "*" indicates repeat 0-n times:

[<Group|Name:string[|Group qualifier]*>\]*Caption[|Global qualifier]*[\<Field[|Local qualifier]*>]*

Each additional "\" indicates the start of a new hierarchical level in the tree. The every level of nodes begins with "<" and ends with ">" except the global level.

As you could see, there are 3 different types of sub-nodes in the Magic nodes: group, global and local nodes. Every Magic node contains just one global node which is mandatory, while group and local nodes are optional and there is no limit on their number of hierarchical levels.

The global node is represented by its Caption that you want displayed on the node. The local nodes represents a hierarchical levels under the global node that could display values of the specified predefined fields. The group nodes could help in better organization of the related Magic nodes in a similar way to the MediaMonkey's Files to Edit group. One or more Magic nodes could be placed inside of one group, and groups could contain additional levels of sub-groups.

For example, If I have mask <Group|Name:Tests>\Artists\<Artist>, the node with the name "Tests" is the group node, the node with the caption "Artists" is the global node, while its sub-nodes with the names of the artists are local nodes.

Every node in the mask could contain additional optional qualifiers separated by the "|" character, while the group nodes have also one mandatory "Name" qualifier. With the qualifiers you could specify behaviour of some node, e.g. which part of the field should be displayed or how sub-nodes should be sorted.

MagicNodes-4.3.3 - Menu

Menu
The Magic Nodes menu contains the next commands:
  • Edit Magic Node - it is enabled only for the global nodes. If you choose this command you will get opened dialog box that is very similar to the Magic Nodes Settings dialog box, but it contains just OK and Cancel buttons on its bottom and it doesn't have a possibility to choose the mask for editing, i.e. this dialog box allows modifications of the mask only for the selected node.

  • Delete Magic Node - it is enabled only for the group nodes. This command allows deleting of the selected node and its corresponding mask. Be careful when using this command because there is no Undo command for it.

  • Refresh Magic Playlist - it is enabled only for global Magic nodes inside of the Playlists branch. Unlike regular Magic nodes outside of the Playlists branch whose filelists are updated whenever you select them, the playlists created using Position:Child qualifier of Magic Nodes have static filelists, so if you want to update their content you could use this command.

  • Mask Settings - if you choose this command you will get opened the Magic Nodes Settings dialog box that is very similar to the Edit Magic Node dialog box, but it has a possibility to choose mask for editing and it contains several additional buttons on its bottom, beside of the Close button, which allow different manipulations of the selected mask: New, Update/Rename/Add and Delete. This dialog box allows arbitrary modifications of any mask.

  • Manage Masks - this command opens the Manage Magic Nodes dialog box that contains the table with all available MN masks and it allows batch operations on several masks at the same time, e.g. Del(ete), Export or Import. Also, a search for a specific mask could be much simpler when the masks are displayed in the tabular form.

  • Options - when you choose this command you will get opened the Magic Nodes Options dialog box that contains some less important options that affect behavior of the add-on and/or all Magic nodes in general.

    MagicNodes-4.3.3 - Settings

    Magic Nodes Settings
    The Magic Nodes Settings dialog box allows arbitrary modifications of any mask, either by typing from the scratch in the Mask text box or by using other controls from this dialog box which will construct the appropriate mask for you automatically. This dialog box is resizable, so you could enlarge it, e.g. if you cannot see the content of some control.

    MagicNodes-4.3.3 - Settings_1

    Caption
    The topmost group of controls contains the controls that affect the whole mask. The first control is the Caption combo box which contains the list of all available MN masks and with it you could choose which mask you want to see or modify. The same combo box could be used to rename the caption of the global node of the selected mask, or to enter the new caption when creating the new mask. You could paste the whole mask in this combo box, e.g. after copying it from the Forum, but you cannot type masks from scratch in it - you should use the Mask text box on the bottom if you want to do that. The caption cannot contains the "|" and "\" characters.

    Move mask
    The Move mask spin control allows moving of the current mask up or down in the list of masks, which would be reflected in the text of that control that displays the serial number of the current mask and the total numbers of masks.

    Position
    The Position group of controls consists of two combo boxes - with the first one you could choose the relative position of the selected mask and its corresponding node to the node that is selected in the second combo box (the corresponding qualifiers are Position and Child of respectively). The first list box is dynamically filled depending of the node that is selected in the second combo box. For example, if you choose "Magic Nodes" in the second combo box then the first combo box will contain the "First chid of" and "Last child of" items, but if you choose "Library" then the first combo box will contain additionally "Before" and "After" items ("Before" and "After" means that the Magic node will be on the same level as the node selected in the second combo box).

    Creating playlists
    If you choose "Playlists" from the second Position combo box, beside of the "Before" and "After" items in the first combo box, you will get also the "Child of" item. This new item allows having of so-called the Magic playlists positioned inside of the Playlists branch, which are created when you add or modify their corresponding masks. All nodes in the Playlists branch are always sorted alphabetically and because of that there are not different the "First child of" and "Last child of" options for positioning of the nodes within that branch.

    Unlike regular Magic nodes outside of the Playlists branch whose filelists are updated whenever you select them, the filelists of Magic playlists are static: if you select a Magic playlist, then select some another node and finally select the same playlist again, it will contain the same files in the filelist even if the corresponding mask has some filter which should change the contained files, e.g. if it allows displaying of the random files. To be able to update such playlist you could modify the corresponding mask somehow or you could just choose the Refresh Magic Playlist command from the menu.

    Also, unlike regular Magic nodes where their whole sub-branches are updated whenever you expand them, the sub-nodes placed in the Playlists branch cannot be automatically updated when you expand their parent node because of the limited MM API. If you want to update the whole structure of sub-folders for some Magic playlist, you should choose Refresh Magic Playlist command.

    The Magic playlists have the hierarchical structure as the regular Magic nodes having the same nodes. For example, if I have the mask Test|Child of:Playlists|Position:Child\<Arstist>\<Album> I will get not only the "Test" playlist, but also its sub-playlists with names of the artists and sub-sub-playlists with the names of their albums. Be careful with the number of generated sub-playlists because too much playlists could slow down the program.

    If you want to move an existing regular Magic node to the Playlists branch, but you don't want to get its sub-nodes moved to sub-playlists, you have two possibilities: you could remove the corresponding levels of sub-nodes from the mask or you could turn off the Show nodes option, but that option could be used only for the latest (bottommost) level of nodes, so that possibility is mostly applicable for masks with only one sub-level of nodes.

    There are some limitations with the masks that create Magic playlists: you cannot set the Show node if empty option to the global node and you cannot set the Icon qualifier at all since the program has the fixed icon for all playlists. You could specify Sort by qualifier for a level of sub-nodes in the Magic playlists, but there is a chance that you will not get what you want, because the playlists are always sorted alphabetically (in such case consider a possibility to turn on the Show ordinal numbers option for that level).

    Collection [MM4] (MM Filter [MM2-3])
    If you choose the "Library" item from the second Position combo box or any following item from its list from "Artist" to "Previews", you will be able to choose a collection where you want to place the Magic node of the selected mask using the Collection combo box (the corresponding qualifier is MM filter). One Magic node cannot be placed in several collections at the same time. If you want something like that, you need to create copies of its mask with the specified different collection for each copy of that mask.

    Shortcut
    The Shortcut control allows bringing of the focus to the corresponding node in the Media Tree if you press the specified hotkey on the keyboard, e.g. Shift+Ctrl+A (the corresponding qualifier is Shortcut).

    MagicNodes-4.3.3 - Settings_2

    Node controls
    The several next controls in the Settings dialog box allow creating of nested nodes for each level of a Magic node: group, global and local. When you select an existing mask/node from the Caption combo box, the Nodes list box will be automatically filled with all nested sub-nodes with the proper indentation for each new level. If you want to create a new mask by the click on the New button, the global node would be automatically added to the Nodes list box when you type its new caption in the Caption combo box.

    Field
    The local nodes could be added to the selected mask if you choose the Field radio button and select an item from the related list box. The items from that list represents the MN fields, i.e. the predefined fields available by Magic Nodes: the simple fields, which directly correspond to the existing database fields, like "Title" or "Rating", and the complex fields, which could display one or more database fields, like "Artist - Title" or "Weeks since added".

    Group
    If you want to assign a Magic node to an existing group, you should choose the Group radio button and select the wanted item from the related combo box, but if you want to create a new group, which is not listed in that combo box, then just type its name in it (the corresponding qualifier is Name). The name of the group cannot contains "|", "\", "<" and ">" characters.

    Nodes
    The new group and local nodes could be added to the Nodes list box using the Add button located between the Filter and Nodes list boxes, after you have selected the appropriate item from the Field or Group lists. If you want to remove an existing group or local node from the mask, you should select the corresponding item in the Nodes list box and click the Del button, which is under the mentioned Add button. The spin control with the up/down buttons located bellow the Del button allows moving of the selected item in the Nodes list box in the wanted direction, i.e. up or down. Higher nodes in the Nodes list are closer to the root in the node hierarchy.

    The remaining controls from the Settings dialog box, excluding the Filter group and the Mask text box, affect only particular node in the hierarchy of some Magic node that is selected in the Nodes list box. For example, if I have the mask Test\<Artist>\<Album> and if I want to add Statistics qualifier to the "Artist" node, I need to select the "Artist" item in the Nodes list box and then to set the Statistics controls appropriately.

    Show ... controls
    The first group of the remaining controls determines the display of nodes and files, but only the first check box is enabled for all nodes (group, global or local), while the other check boxes could be set only for the local nodes (unless it is stated otherwise); also many Show controls are disabled with some Split modes which will be mentioned latter in the Split by part of this section:
  • Show tracks in tracklist - turn it on if you want to get displayed files in the filelist when you select the corresponding sub-node in the Media Tree (the corresponding qualifier is Show tracks).

  • Show [All] node - turn it on if you want to get displayed "All" node for the corresponding sub-node, similarly to the "All" nodes in the Location and My Computer folders (the corresponding qualifier is All).

  • Show [Unknown] node - turn it on if you want to get displayed "Unknown" node for the corresponding sub-node, similarly to the "Unknown" nodes in the "Title", "Artist" and many other built-in nodes (the corresponding qualifier is Unknown); turning off this option for the selected sub-nodes could speed up expanding of their parent nodes sometimes; this option is disabled if the Top items has some value greater than zero.

  • The next check box has two meanings depending of the selected sub-node:
  • Show node if empty is displayed if you select the global node or local node that is not the latest (bottommost) node in the hierarchy (the corresponding qualifier is Show if empty); you should turn on this option if you want to get displayed the selected node even if it doesn't have any child nodes, e.g. for the mask Test\<Album>\<Disc number|Unknown:No> you could turn this option on for the "Album" node to get displayed albums even if they contain files without disc numbers; this option is disabled if you have selected "Child of" - "Playlist" in the Position combo boxes.

  • Show nodes is displayed only if you select the latest (bottommost) local node in the hierarchy; you should turn this option off if you don't want to get displayed nodes on the selected level for some reason, e.g. if the Magic node is positioned inside of the Playlists branch, while you still want that node added to the mask because it could contain some important qualifiers that affect its parent nodes even if it is not displayed like Min. files or Top items (the corresponding qualifier is Show nodes).

  • Show ordinal numbers - you should turn on this option if you want to get ordinal numbers of nodes in the front of their captions (the corresponding qualifier is Show rank).

    MagicNodes-4.3.3 - Settings_3

    Filter controls
    The next group of controls allows setting of the filter for the selected mask (the corresponding qualifier is Filter). It is possible to set only one filter per mask and it will be assigned to the global node, even if you have selected a group or local node in the Nodes list box. The Filter string represents the WHERE part of the SQL query applied to the whole branch of the selected Magic node.

    The first combo box in the Filter group contains the list with the "AND" and "OR" items that you could select if you want such operators on the begin of the adding string. The next combo box contains list with all available MN fields, similarly to the Fields list box, but it has also one new item: "Any". If you add that item to the Filter string, you will get filtered files by any field that is specified on the Search tab in the Options dialog box.

    The next combo box contains the list with operators that depends if the selected field from the previous combo box has a string, numeric or date/time value. If you have selected any string or date/time field, the last combo box in this group will be dynamically filled with all values of that field from all files (that could take significant time for complex fields); if you have selected any numeric field, the spin control would be displayed, which allows changing of that numeric value.

    When you have selected all wanted items in the previously mentioned Filter controls, you could click the Add button located on the right side of the Filter group to add that construction to the main Filter text box. You could type a new filter from the scratch or modify the existing one by editing that text box. If you have selected a part of the text in that text box, you could click on the Del button to remove it, or you could click on the "(.)" button to surround the selected text with the parenthesis.

    You could turn on the SQL check box that is located on the left of the Filter text box if you want to see how a MN field in the filter will be converted to the appropriate SQL field(s). For example, instead of the <Rating> MN field I would get Songs.Ratings, or instead of the <Weeks since added> I would get Cast(JulianDay(Date('now', '-6 days', 'weekday 1', '6 days')) - JulianDay(Date(Songs.DateAdded + JulianDay('1899-12-30'))) As integer) / 7. This option is not reversible, i.e. if you turn it off after a MN field is already converted to the corresponding SQL field(s), you cannot get the original MN field again.

    MagicNodes-4.3.3 - Settings_4

    Icon
    The next control after the Filter group is the Icon combo box (the corresponding qualifier is Icon). It is enabled only for the group and global nodes, while the icons for the local nodes are automatically set depending on the related field. The selected item from the combo box determines the icon that will be displayed for the node in the Media Tree corresponding to the selected mask. You could choose some of the built-in icons represented by their numbers (the built-in icons for the Glided skin with their numbers could be downloaded from here).

    If you choose "Standard" from the Icon combo box, you will get displayed icon of the folder; if you choose "Top level", you will get displayed icon of the topmost local node and its related field; while if you choose "Bottom level", you will get displayed icon of the bottommost local node and its related field.

    Top items
    The Top items control is enabled only for the local nodes. With that control you could set the number of displayed sub-nodes of the selected node (the corresponding qualifier is Top). For example, if I have "Album" node selected in the Nodes list box for the mask Test\<Artist>\<Album>, and if I set 10 with the Top items control, I could get displayed 10 albums per artist at most.

    Min. tracks, Max. tracks
    The Min. tracks, Max. tracks and other controls below them are enabled only for the local nodes. With the Min. tracks you could set the minimal number of files that are needed for display of the selected local node (the corresponding qualifier is Min tracks), and with the Max. tracks you could set the maximal number of files (the corresponding qualifier is Max tracks). For example, if I have the "Artist" node selected in the Nodes list box for the mask Test\<Artist>, and if I set 10 with the Min. tracks control, I could get displayed only nodes for artists that have at least 10 files.

    Substr. start
    With the Substr. start, Trim and other controls below them, you could set which part of the MN field corresponding to the selected local node you want to get displayed as its caption. The Substr. start control determines the starting position of the substring that should be returned (the corresponding qualifier is Substring start). For example, if a MN field contains "The Beatles" and if I specify 5 with that control, I will get displayed "Beatles" in the caption of the corresponding node. If the negative number is specified, the first character of the substring is found by counting from the right rather than the left, e.g. with -5 I will get "atles".

    Substr. length / Trim
    The next control has two captions, depending of the value set by Substr. start control. If Substr. start is zero, the next control has Trim caption; in other cases it is Substr. lenght, but in general their effect is the same (the corresponding qualifier is Trim): with that control you could set how many characters of the MN field corresponding to the selected local node you want to display from the left to the right, starting from the character specified by Substr. start. If Substr. start is zero, the result will be same as if it is 1. If Substr. lenght is zero, then the whole string is returned starting from the Substr. start.

    Examples with the same "The Beatles" text:
  • Substr. start = 5 and Substr. lenght = 4 shows "Beat";
  • Substr. start = -5 and Substr. lenght = 4 shows "atle".

    Split by
    The Split by group of controls allows parsing of the MN field corresponding to the selected local node: within the text box you could specify with which string you want to split the original text (the corresponding qualifier is Split by), with the combo box you could determine the mode of parsing (the Split Mode qualifier) and with the spin control you could set the optional numerical value (the Split part qualifier) if it is applicable for the selected item that is set in the previous combo box.

    The Split mode combo box has the next items: String part, String Before, String After, Single Part, Parts Before, Parts After, All Parts, Categories, Odd Parts and Even Parts. The first three items that start with the "String *" don't affect the enabled state of other controls in the dialog box because they are based on the SQL code to do parsing of the MN field, but the complexity of the implemented code raises exponentially with the Split part value specified with the spin box, and for the large numbers you could even get the error message! The remaining items from the Split mode combo box don't have that problem since they are not using the SQL code, but VBScript instead. However, the drawback of the remaining items is that they cannot be used with the Sort by/Statistics qualifiers as well as almost none of the Show * qualifiers.

    One important note: the ";" and "; " are not the same strings and using them in the Split by qualifier will give you different results. The detailed explanation about the qualifiers related to this group of controls with many examples can be found in the Split examples section.

    Left of
    The next control has two meanings, depending of the following Right of control: if the Right of text box is empty, the first control has the Left of caption, otherwise it is Right until. It is somewhat awkward order of the controls, it would be better and more intuitive if the Right until has separate control on the right side of the Right of control, but in that case the Settings dialog box would be even larger and more overcrowded than it is now. Anyway, one more reason why this strange decision was made is because the Left of and Right of controls cannot be used at the same time, so it was quite logical to use the same controls for the Left of and Right until (the similar reasons was used with the Show node if empty and Show nodes).

    With the Left of control you could get displayed the leftmost characters of the MN field corresponding to the selected local node until the specified string (the corresponding qualifier is Left of). For example, if the MN field contains "The Beatles", and if I specify "eat", I would get displayed "The B".

    The Show if contain check box located under the Left of text box determines what will happen if the MN field of the selected local node doesn't contain the string specified in the Left of text box: if it is turned off, the node with the whole text of the field will be displayed; if it is turned on, there would not be displayed node for that field value at all. For example, with the same "The Beatles" field, if I specify "abc" in the Left of text box and if I have Show if contain turned off I will get "The Beatles" node, but if it is turned on I will not get any node for that field value (in that case the files by The Beatles could be found in the "Unknown" node if that node is enabled with the corresponding option). There is not corresponding qualifier for the Show if contain check box, but if you turn it on, the Left of qualifier will become Exclusive Left of.

    Right of, Right until
    The Right of control has the similar effect as the Left of, but it works in another direction: with it you could get displayed the rightmost characters of the MN field after the specified string (the corresponding qualifier is Right of). For example, if the field has "The Beatles" node and if I specify "eat" I would get displayed "les".

    The Show if contain check box under the Right of text box has the same effect as it is the case with the check box under the Left of text box: if I specify "abc" in the Right of text box and if I have Show if contain turned off I will get "The Beatles" node, otherwise I will not get any node for that field value. Similarly to the previous Show if contain check box, if this one is turned on, the Right of qualifier will become Exclusive Right of.

    If the Right of text box has specified some string, you could also specify Right until string to delimit the right end of the result (the corresponding qualifier is Right until). For example, if the MN field contains "The Beatles", and if I specify "Be" for the Right of and "es" for the Right until, I will get the node "atl". Again, similarly to the previous cases with the Show if contain check box, if this one is turned on, the Right until qualifier will become Exclusive Right until.

    The strings for parsing could be specified more than once with all Left/Right of qualifiers, and they should be separated with the "|" character. Some more examples about the (Exclusive) Left of and (Exclusive) Right of qualifiers can be found in the Left of/Right of examples section and in the mentioned PDF manual.

    Sort keys
    The sorting group of controls on the right side of the Settings dialog box can be used only with the local nodes, but not with the global and group nodes. With these controls you could set sorting of the nodes on the selected level (the corresponding qualifier is Sort by).

    The first combo box in this group contains the list of available aggregate functions that could be used for sorting. Beside of the standard SQL aggregate functions as Count, Avg, Max, Min and Sum, the list of sorting functions include also WAvg and Range custom functions. The Range(field) is equal to Max(field) - Min(field), while the WAvg is the weighted average that is most useful with the "Played", "Rating" and "Bitrate" fields, e.g. WAvg(Played) is same as Sum(Played * Length) / Sum(Length).

    The second combo box in this group contains the list of available MN fields, which is filled dynamically depending on the selected aggregate function from the previous combo box. If you have selected "Count" function, the second combo box will contain all MN fields that could be found in the Fields list box as well, with the addition of the "All" and "Tracks" items. In most cases the Count(All) and Count(Tracks) has the same effect and will return the number of files for the particular node. If you select some of the remaining functions from the first combo box (Avg, Max, ...) , the second combo box will contain only MN fields that are numerical (e.g. Year, Bitrate, ...). The only exception to this rule are the Custom fields that are added to this list because some users use them to store numerical values.

    When you have selected the wanted items in the previously two mentioned combo boxes, you could add that construction to the list box under them by click on the Add button that is located on the right of the sorting controls. If you want to remove an item from that list box, you should select it and after that click on the Del button. If you want to move an item vertically in the list, you should select it and click on the Up/Down spin control that is located on the left side of that list. The resulting value of the topmost item in the list box will be displayed first in the caption of the nodes, the value of the second item will be displayed next separated by the ", ", and so on, i.e. the resulting value(s) will be displayed on the left side of the MN field corresponding to the selected local node. The order of items in that list also affects the sorting order of nodes.

    Random
    You could use the Random check box if you want random sorting. When you turn this check box on, all sorting keys added to the list box above it will be ignored, and the random order will be applied to the MN field of the selected local node (the corresponding qualifier in that case is Sort order:Random). For example, if I select the "Artist" node in the Nodes list box and turn on the Random check box, I could get this mask Test\<Artist|Sort order: Random>.

    Desc. order
    If you turn on the Desc. order check box while none item is added to the list box with the sorting keys, the descending order will be applied to the MN field of the selected local node, similarly to the Random check box (the corresponding qualifier in that case is Sort order: Desc).

    However, if that check box is turned on while you have any item added to the list of sorting keys, the selected item from that list will be used in descending order. For example, if I have added Max(Year) to the list box with the sorting keys, after I select that item and turn on the Desc. order check box, I could get this mask: Test\<Album|Sort by: Max(Year) Desc>, which means that the albums will be sorted by years from the newest to the oldest. In this example, the year information will be displayed on the begin of each node as a prefix to the album name separated with " - ".

    Show sort key
    The Show sort key check box allows toggling of the visibility for the selected item in the list of sorting keys on the captions of nodes, e.g. if you want to sort nodes using some field, but you don't want to display that field in the front of the MN field (the corresponding qualifier is Show sort key). So, if I modify the previous example like this: Test\<Album|Sort by: Max(Year) Desc|Show sort key:0>, I will get albums sorted by year, but the year value will not be displayed in the front of the album name.

    Statistics
    The statistics group of controls (having the corresponding Statistics qualifier) can be used only with the global and local nodes, but not with the group nodes. It has a very similar usage as the sorting group, but with some differences. First of all, the resulting values of the aggregate function applied on the MN field(s) are displayed on the right side of the caption inside of the parentheses. Also, the list of aggregate functions in its first combo box contains one function more: "Concat", e.g. the mask Test\<Title|Statistics: Concat(Playlist)> will display the concatenated names of all static playlists in which specified title appears.

    If you choose "Count" item from the list of aggregate functions in the first combo box, the next combo box will contain the same fields as the corresponding sorting list with one additional item: "Items". If you add Count(Items) to the selected node in the mask, you will get displayed number of its sub-nodes. For example, if I have Test\<Artist|Statistics: Count(Items)>\<Album>, I will get displayed number of albums for each artist. Actually, I could get the same result using Test\<Artist|Statistics: Count(Album)>\<Album>, but in that case if I replace "Album" node with some another I would need to modify the Statistics qualifier as well.

    MagicNodes-4.3.3 - Settings_5

    Mask
    The Mask text box is located near the bottom of the Settings dialog box. It displays the whole mask and its content is automatically updated whenever you modify some of the previous controls above it. However, this works in other way as well, i.e. you could type some mask from the scratch or modify some existing one in the Mask text box and the corresponding controls above it will be automatically updated. Of course, you could copy/paste any mask to that text box, e.g. if you find it posted in the Forum.

    New, Update / Rename / Add
    There are several command buttons on the very bottom of the Settings dialog box that affects the currently displayed mask. The New button allows creating of the new mask and it sets all controls of the Settings dialog box to their initial (blank) state.

    The following button has three alternate captions depending of the modifications made in the dialog: Update, Rename and Add. If you have modified just the Caption string, that button will have the Rename caption; if you use any other previously mentioned control and modify the related qualifier, that button will have the Update caption. Actually, the resulting effect is very similar in both cases and by clicking on that button you could confirm that you want to save modifications of the currently displayed mask.

    However, if you modify both the Caption string and any other control, that button will have the Add caption, which allows adding of the currently displayed mask to the list of masks stored in the MediaMonkey.ini file. This also means that you cannot have two or more masks/nodes with the same caption, i.e. all masks should have unique captions.

    Delete, Close
    You could use the Delete button if you want to remove the currently displayed mask permanently, so be careful using it. With the Close button you could close the Settings dialog box, while the currently displayed mask will be stored in the INI file using the zero serial number (if the mask is modified, but not saved using the Update or Add buttons).

    MagicNodes-4.3.3 - Manage Masks

    Manage Magic Nodes
    The Manage Magic Nodes dialog box contains the table with all available MN masks and it allows batch operations on several masks at the same time. There are two radio buttons on the top of the dialog box: MediaMonkey.ini and File. If you select the MediaMonkey.ini option, you will get displayed all MN masks that are stored in the main MediaMonkey INI file, i.e. the masks that have displayed the corresponding nodes in the Media Tree. You will be able to export such masks, as well as to edit, delete or move them.

    If you choose the File option, you could get displayed masks from an external INI file which could contain e.g. your previously exported MN masks. You could type its path in the following text box or you could click on the "..." button and find that INI file in the new Open File dialog box. You will be able to import such masks, as well as to delete or move them (if the loaded INI file is not marked to open as read-only).

    The masks and their groups could be alphabetically sorted if you click on the table header that contains displayed the information about loaded masks. This operation is not reversible, so be careful using this option and make a backup of your masks first.

    Selecting/checking of the mask(s) on which you want to implement an operation could be done in two ways: you could use the check boxes located on the left side of the table or you could select the wanted mask directly in the table. When using the second way, you could select only one mask at the time and that way has the precedence over those two ways of selecting, i.e. even if you have some or all masks checked in the table, if you choose an operation as Del it will be applied only on the selected mask, but not on the checked masks. If you want to deselect the currently selected mask, e.g. if you want to do an operation against the checked masks, then you should click on the already selected mask again.

    You could edit any mask from the table if you click its serial number displayed in the "#" column, in which case you would get opened the Edit Magic Node dialog box that is the same as if you choose such command from the pop-up menu over some selected Magic node; in this case all controls from that dialog box will be set accordingly to the selected mask which means that you could use that dialog box to modify the existing mask.

    Using the Up and Down buttons you could move the selected mask in the appropriate direction in the list of masks. The moving operation could be done only on a single mask that is selected in the table at the time. Those two buttons have the auto-repeat possibility, i.e. it is enough to click on some of them and the selected mask will continue to move in the table until you release that button.

    You could use the Del button if you want to remove the selected/checked mask(s) permanently, so be careful using it. The Word wrap check box could be used to toggle the type of display of masks in the table.

    The enabled state of the next two buttons, Export and Import, depends of the selected option on the top of the dialog box: as it is already explained, you could export the selected/checked masks from the MediaMonkey.ini file or you could import the selected/checked masks from the specified external INI file.

    MagicNodes-4.3.3 - Options

    Magic Nodes Options
    The Magic Nodes Options dialog box could be opened from the Edit / Magic Nodes menu or from the Tools / Extensions menu with the selected Magic Nodes item in the list of the add-ons. It contains some less important options that affect behavior of this add-on and/or all Magic nodes. The same options could be found on the General / Magic Nodes page in the program's built-in Options dialog box that could be opened from the Tools menu.

  • Skip expanding of the Magic Nodes branch during start-up: you could turn this option on if you want the collapsed Magic Nodes branch in the tree when starting the program.

  • Allow modifying of fields data by drag & drop or renaming tree nodes: you could turn this option off if you don't want to rename the field value of the selected node directly in the Media Tree or you don't want drag&drop option to be enabled for the Magic nodes. By the way, drag&drop and renaming are not allowed at all for nodes which contain only a part of the field, i.e. nodes with the Left of/Right of/Trim/SubStr/Split by qualifiers. The drag&drop operation updates fields for all parent nodes of the target node, e.g. if you have the mask Test\<Genre>\<Artist>\<Album> and if you drop selected tracks to any album node, you will get updated the genre and artist as well beside of the album.

  • Display sorting/statistic results only if all values are defined: you could turn this option off if you want to get sorting/statistical values on the caption of the Magic nodes even if some files don't have defined the affected field value. For example, if the mentioned option is turned on, the mask Test\<Album|Sort by: Avg(Rating)> only displays the average rating in the front of the album names for the albums where all tracks have been rated; for the other album nodes, just the album names are displayed. So, you should turn off the mentioned option if you want to display these rating values even for those albums which only have some tracks rated.

  • Display sorting/statistic results for Rating rounded to the nearest half star: you could turn this option off if you don't want to get displayed ratings using sorting/statistics qualifiers rounded to the nearest 0.5 stars.

  • Move prefixes to the end when sorting by Artist, Album Artist or Original Artist: if you turn this option on, the prefixes will be moved to the end of the node captions, e.g. "The Beatles" will be displayed as "Beatles, The"; if you turn it off, the fields will be displayed as they are stored in the database, e.g. "The Beatles", but the sorting of the nodes will be still correct as if the prefixes are moved to the end, with "The Beatles" node inside of the "B" branch; in both cases it is assumed that the Ignore prefixes option on the Appearance page is already turned on.

  • Allow editing of SQL queries: you could turn this option on if you want to see or edit the SQL queries when you expand and/or select Magic nodes:
  • Show elapsed time in the progress bar after SQL queries: you could turn this option on if you want to get displayed the progress bar on the bottom of the main window of the program with the information about the time that is elapsed after some Magic node is expanded or selected.
  • Modeless MN Settings dialog box (allowed access to other parts of the program): you could turn this option on if you want to get modeless Magic Nodes Settings dialog box, which could allow access to the other parts of the program, e.g. you could navigate through the Media Tree with the already opened that dialog; when that option is turned off, the mentioned dialog box will be modal and you need to close it if you want to use the other parts of the program.

    Left of/Right of examples

    Here are some examples with the (Exclusive) Left of and (Exclusive) Right of qualifiers applied to the "Path" field with the following files:
  • c:\Angie Stone - I Wasn't Kidding [Freemasons Vocal Club].mp3
  • c:\Faith Evans - Mesmerized [Freemasons Full Vocal Mix].mp3
  • c:\Freemasons feat. Amanda Wilson - I Feel Like.mp3
  • c:\Freemasons feat. Amanda Wilson - Love on My Mind [Club Mix].mp3
  • c:\Freemasons feat. Siedah Garrett - Rain Down Love [Vocal Club Mix].mp3

    Left of: feat. (" feat. " is specified as a separator) returns the next nodes:
  • c:\Angie Stone - I Wasn't Kidding [Freemasons Vocal Club].mp3
  • c:\Faith Evans - Mesmerized [Freemasons Full Vocal Mix].mp3
  • c:\Freemasons

    Exclusive Left of: feat. returns:
  • "Unknown" (node with all files which don't contain " feat. " in the path)
  • c:\Freemasons

    Right of: feat. returns:
  • c:\Angie Stone - I Wasn't Kidding [Freemasons Vocal Club].mp3
  • c:\Faith Evans - Mesmerized [Freemasons Full Vocal Mix].mp3
  • Amanda Wilson - I Feel Like.mp3
  • Amanda Wilson - Love on My Mind [Club Mix].mp3
  • Siedah Garrett - Rain Down Love [Vocal Club Mix].mp3

    Exclusive Right of: feat. returns:
  • "Unknown" (node with all files which don't contain " feat. " in the path)
  • Amanda Wilson - I Feel Like.mp3
  • Amanda Wilson - Love on My Mind [Club Mix].mp3
  • Siedah Garrett - Rain Down Love [Vocal Club Mix].mp3

    Right of:[|Right until: Mix] ("[" is the starting and "Mix]" is the terminating string) returns:
  • Freemasons Vocal Club].mp3
  • Freemasons Full Vocal
  • c:\Freemasons feat. Amanda Wilson - I Feel Like.mp3
  • Club
  • Vocal Club

    Exclusive Right of:[|Right until: Mix] returns:
  • "Unknown" (node with all files which don't contain "[" in the path)
  • Freemasons Vocal Club].mp3
  • Freemasons Full Vocal
  • Club
  • Vocal Club

    Exclusive Right of:[|Exclusive Right until: Mix] returns:
  • "Unknown" (node with all files which don't contain "[" and " Mix]" in the path)
  • Freemasons Full Vocal
  • Club
  • Vocal Club

    Here is one example of using the "|" character as a separator between multiple strings specified for Right until qualifier:
    Exclusive Right of:[|Exclusive Right until: Mix]| Club] returns:
  • "Unknown" (node with all files which don't contain "[" and " Mix]" or " Club]" in the path)
  • Freemasons Vocal
  • Freemasons Full Vocal
  • Club
  • Vocal Club

    Split 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 returns "c:";
  • Split part:2 or Split part:-3 returns "My Music";
  • Split part:3 or Split part:-2 returns "Pink Floyd";
  • Split part:4 or Split part:-1 returns "Us and Them.mp3".

    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 returns "c:";
  • Split part:3 or Split part:-2 returns "c:\My Music";
  • Split part:4 or Split part:-1 returns "c:\My Music\Pink Floyd";
  • Split part:5 returns "c:\My Music\Pink Floyd\Us and Them.mp3".

    As you could see from those examples, when using String Before you will 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 returns "c:\My Music\Pink Floyd\Us and Them.mp3";
  • Split part:1 or Split part:-4 returns "My Music\Pink Floyd\Us and Them.mp3";
  • Split part:2 or Split part:-3 returns "Pink Floyd\Us and Them.mp3";
  • Split part:4 or Split part:-2 returns "Us and Them.mp3".

    Negative values for Split part used with String * arguments (String part, String before, String after) of the Split mode qualifier are not possible with MediaMonkey 2.x, but only with v3-4. Be careful when you use the String * arguments, 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 the 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, maybe this example with the Path field is not 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. These two arguments have similar effect, but the main difference between them is in the order how parsing of the initial MN field's string is done, and such explanation requires some digression about existing qualifiers which could be used for parsing.

    As you already know, there are several ways to parse the initial string of a Magic node obtained from the values of the specified MN field. 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. You could freely combine all those qualifiers, but you should keep in mind the internal order of the execution, because it affects the result. 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 will 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 will 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 the same, the only exception are the Categories, Odd Parts and Even Parts arguments. The order of parsing is the only 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. However, with the Categories argument 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 one example of the Categories argument using the Involved people MN field: "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 another example with the Comment MN field that describes the difference between the Categories and All parts arguments: "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 will get two parts: "Country: France" and "USA". In the next step, after parsing with Ex Right of we will 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 will be unwanted and really annoying to modify tags in all tracks. Luckily, the All parts argument could be used with the unmodified 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:
    1. using the Exclusive left of qualifier to get the leftmost part;
    2. using the Exclusive right of qualifier to get the rightmost part;
    3. using the Exclusive right of and Exclusive right until qualifiers to get the middle part;
    4. using the Exclusive right of and Right until qualifiers to get splitted right part(s).
    The first 3 modes are pretty self-explanatory. Here is one example: "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 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 the 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 last two arguments of the Split Mode qualifier, Odd Parts and Even Parts, are similar to the 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). The main difference is that the Categories argument returns all parts from the string, but Odd Parts and Even Parts returns only every other part of string alternatively.

    Usage of these arguments 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 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>.

    Information about some MN fields

    With v4 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 a multi-item Artist field, only the last one will be separated with the "&" character, other ones will be separated with the ", ". Some users prefer to store the type of the featuring artists as a new item in the multi-item Artist field, for example: Multi Artist = "Freemasons; feat.; Siedah Garrett". In such case, with the <Poly Artist> field you will 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".

    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 the remaining genres (sub-genres) from the multi-item genre. For example, with "Dance;House;Club" if I use First Genre I will get "Dance" node, and if I use Other Genre I will get two nodes on the same level: "House" and "Club". Well, I could get almost the 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 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.

    Important info about upgrade from previous versions

    The split options are changed in v4.0, and your masks created with the previous versions of the add-on containing these options will not work as you want, so they should be updated accordingly. The first important thing that 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 with v4 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. This addition is necessary because the split options have added several new modes of parsing. Also, if you had a mask with Split part:-1, you should now write Split mode:Categories instead.

    Since 2.0 version of this add-on, it has added the 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 the dropdown lists, which sometimes results with the unresponsive program and 100% CPU usage. All MM versions prior of 3.1 also have very serious bug when reading keys from the .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. So, it is highly recommended that you use the latest version of MediaMonkey, or at least the newer one than v3.1.

    Since v1.7.6 of this add-on, there is the installation package. If you have already "installed" any older version (with the version number in the script file name), you should manually remove its script from the Script/Auto folder before the installation.

    Possible reasons why your very, very old mask (MM2 and/or MN <= v1.3) doesn't work:

    Notice

    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 the 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.