"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. |
- leave your complain to Microsoft, because every new report will increase the chance that the folks at Microsoft will do something about the problem; or
- turn off Real-Time Protection of Windows Defender (Control Panel / Windows Defender / Tools / Options / Real-time protection) and use some another anti-malware instead; or
- keep installed as few Magic Nodes masks as possible since this slow down is related to the number of installed masks:
- during installation of the add-on, skip installation of all predefined masks; or
- after installation, remove masks that you don't need using Manage Magic Nodes dialog box.
- v4.3.3 - 2018-10-03
- Added: info about slow startup;
- Fixed: some Date/Time fields.
- v4.3.2 - 2016-04-24
- Fixed: typing numerical values on keyboard in SpinEdit controls on the Mask Settings dialog box (functional only in MM v3.1.0.1220 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 3.1.0.1207 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.
- v1.7.8.4 - 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 1.7.5.2) [MM2].
- v1.7.8.3 - 2008-10-26
- Added: detection when the active MM filter is changed with auto-folding of nodes (similar as MM built-in nodes).
- v1.7.8.2 - 2008-10-23
- Fixed: combination of Filter, SQL Filter and MM filter qualifiers containing expressions with OR operator.
- v1.7.8.1 - 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.
- v1.7.6.2 - 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.
- v1.7.6.1 - 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).
- v1.7.5.4 - 2008-05-19
- Fixed: again a "fix" for incorrect display of Avg(Rating) with the Sort by/Statistic qualifier for some locales.
- v1.7.5.3 - 2008-05-16
- Fixed: incorrect display of Avg(Rating) with the Sort by/Statistic qualifier for some locales.
- v1.7.5.2 - 2008-05-07
- Fixed: updating tags into files after drag & drop or renaming nodes.
- v1.7.5.1 - 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];
Example:
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.
- v1.7.4.2 - 2008-03-05
- Fixed: bug which sometimes displays an error message during start-up;
- Fixed: descending order with the last sorting key.
- v1.7.4.1 - 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).
- v1.6.2.4 - 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).
- v1.6.2.3 - 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.
- v1.6.2.2 - 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].
- v1.6.2.1 - 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').
- v1.5.0.2 - 2007-12-20
- Fixed: sorting with Custom fields;
- Fixed: displaying of the genre with ID = 0 [MM3].
- v1.5.0.1 - 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/...);
- ...
- v1.4.3.1 - 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 newer Windows 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.
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.
Menu
The Magic Nodes menu contains the next commands:
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.
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).
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:
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.
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:
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.
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).
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.
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.
- when expand field nodes: e.g. if you have the mask Test\<Artist> and you expand the "Test" node, you will get opened the Magic Nodes SQL Editor dialog box displaying the SQL query that is used to generate all artist nodes.
- for the Unknown node: if you expand the "Test" node of the mentioned mask, you will get the same dialog box displaying the SQL query that is used to generate the "Unknown" artist node, i.e. the node that contains files with the unspecified Artist tag.
- when select a field node: if you select any sub-node of the mentioned mask, e.g. "The Beatles", you will get the same dialog box displaying the SQL query that is used to generate the filelist for that field value, i.e. the files of the Beatles.
- Remove progress bar after: you could set after how many seconds you want to get removed the progress bar that is displayed using the previous option.
- Expand node after applying the Update option, even if it is collapsed: you could turn this option on if you want to get expanded the corresponding node of the currently displayed and edited mask in the Settings dialog box.
Here are some examples with the (Exclusive) Left of and (Exclusive) Right of qualifiers applied to the "Path" field with the following files:
Left of: feat. (" feat. " is specified as a separator) returns the next nodes:
Exclusive Left of: feat. returns:
Right of: feat. returns:
Exclusive Right of: feat. returns:
Right of:[|Right until: Mix] ("[" is the starting and "Mix]" is the terminating string) returns:
Exclusive Right of:[|Right until: Mix] returns:
Exclusive Right of:[|Exclusive Right until: Mix] returns:
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:
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:
Here are examples using the same Path value as previous, but now with the Split mode:String Before with:
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:
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:
- 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).
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:
- 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.