Description:
This add-on works with MediaMonkey v2.x or higher. It has two operation modes, manual and automatic. In the manual mode it allows batch export of playlist files (M3U/ASX/XSPF) or creating of playlists for each child node of the node selected in the tree panel. For example, if you select the Playlists node, you would export playlist files for all playlists in the Library. This works with almost all nodes, even the Magic Nodes. In the automatic mode this add-on periodically saves specified playlist node and/or its sub-nodes from the Playlists branch.

Playlist files/playlists could be saved in a hierarchically organized folders within the specified parent folder, using the same structure as sub-nodes of the selected node, or could be saved in a single folder using a specified string as separator. Playlist files could be saved in ANSI, UTF-8 or Unicode, while M3U files could have simple or extended format. Track paths could be URL encoded and stored absolute or relative to the playlist's path using Windows "\" or Unix "/" folder separator. If the relative path option is turned off, the paths stored in playlist files would be same as they are in the Path field of the database, but could be also replaced with the user-defined replacement, e.g. "c:\Documents and Settings\" could be replaced with "e:\My Music\".

This add-on also allows copying of audio files, export of M3U nodes from My Computer branch (e.g. conversion of M3U files) and export of the selected node or selected tracks only.

v3.6 - 2011-11-21
* Added: Export As .m3u Playlist to Selected Folder and Export M3Us for Child Nodes to Same Folders commands to the File menu and the tree's context menu which allows export of the selected node (and its sub-nodes) to the same folder(s) with media files (only enabled for nodes within Location and My Computer branches).

v3.5.1 - 2011-04-22
* Fixed: the From field for automatic export when Playlists is specified;
* Fixed: automatic export Every xx minutes without need to restart the program.

v3.5 - 2011-04-17
* Added: Export As .m3u Playlist command to the File menu and the tree's context menu which allows export of the selected node (similar to the Send To \ Export as .m3u playlist option, but more configurable).

v3.4 - 2011-01-17
* Added: Replace paths/with: dropdown lists with the last 5 entered strings;
* Fixed: automatic export on shutdown if automatic export on every xx minutes is not used;
* Fixed: settings of playlist for automatic export with non-skinned program;
* Fixed: export of .m3u files for nodes which are grandchildren of nodes without tracks;
* Fixed: export of .m3u files for playlists when some of parent playlists has duplicate name on the same node level;
* Fixed: restoring of expanded state of nodes after finished export.

v3.3 - 2010-07-13
* Added: Export As .m3u Playlist command to the main tracklist and Now Playing context menu which allows export of selected tracks only (similar to the Send To \ Export as .m3u playlist option, but more configurable).

v3.2 - 2010-07-02
* Changed: Unix folder separator option to Unix .m3u file format; a .m3u files would have both the "/" as a separator and a new line without a carriage return when this option is turned on.

v2.9.3 - 2010-05-20
* Fixed: automatic export on startup, now with 1 second delay to enable loading of main window.

v2.9.2 - 2010-04-22
* Fixed: export with First level and Last level of nodes only options for the All nodes in Location and My Computer branches.

v2.9.1 - 2010-04-20
* Fixed: error when the Create playlists for child nodes sub-menu is displayed if the last created playlist doesn't exist, e.g. if you start MM with another database file.

v2.9 - 2010-04-05
* Added: option to save .m3u files/create playlists for the last (deepest) level of nodes only;
* Added: option to save paths in .m3u files using Unix separator ("/") instead of Windows ("\");
* Improved: speed of displaying menu with playlists if there are many of them;
* Changed: the list of playlists in the Options dialog box is now limited to playlists on the first level because the large number of nested playlists have slowed down its display; if you need to specify some nested playlist, you could still write it using "\" as a separator between nested levels.

v2.8 - 2009-08-25
- Added: option to save .m3u files in child folders, i.e. one level more in depth (until now they are saved to parent folders only).

v1.3 - 2009-01-10
- Added: option to export the playlist for the parent (selected) node (beside of child nodes);
- Added: option to exclude unavailable tracks from export;
- Improved: speed and work with the All nodes from My Computer and Location branch;
- Fixed: relative paths;
- Fixed: playlist filenames for some Magic Nodes, e.g. Album Artist with Album (MN v2.0 or up required).

v1.2.1 - 2008-11-29
- Fixed: export when turned on the Regular expressions option and turned off the Skip for folders option.

v1.2 - 2008-11-29
- Added: an option to store track paths relative to the playlist path (default setting as it is in MM);
- Added: an option to skip export of playlists for specified nodes/folders (e.g. DiscXX for multi-CD);
- Added: an option to use Regular expressions for specifying nodes/folders;
- Added: an option to exclude files with specified extensions from export;
- Added: skipping of All node (even for Magic Nodes) and playlist files from My Computer branch from export;
- Fixed: unresponsive program with 100% CPU when trying to export an empty node/folder (e.g. in My Computer node).

v1.1 - 2008-11-28
- Added: an option to recursively scan all sub-levels of the selected node (default setting), playlists are stored in a hierarchically organized folder structure, same as with the selected node.

v1.0 - 2008-11-27
- First public version.

Installation:

For MediaMonkey 3.0 or higher - just double-click on the ExportM3UsForSubNodes.mmip file; if you are on Vista or Win7 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 a .zip, extract the ExportM3UsForSubNodes.vbs file to the MediaMonkey's "Scripts\Auto" folder and restart MM program.

Usage:

Select a node whose child nodes you want to export playlists, then choose a command from the Export/Create Playlists menu in the main File menu or the context menu of the tree panel:
- Export to M3U/ASX/XSPF Playlist... - if you want to export a playlist file with all tracks of the selected node displayed in the tracklist, after that you should specify a destination playlist file on the disk;

- Export As Playlist File to Selected Folder - if you want to export a playlist file with all tracks of the selected node displayed in the tracklist to the same folder with media files (only enabled for nodes within Location and My Computer branches);

- Export Child Nodes to Playlists Files... - if you want to export playlist files for some or all sub-nodes of the selected node (depending of the Options settings), after that you should specify a parent destination folder on the disk;

- Export Child Nodes As Playlist Files to Same Folders - if you want to export playlist files for some or all sub-nodes of the selected node (depending of the Options settings) to the same folders with media files (only enabled for nodes within Location and My Computer branches);

- Export Child Nodes to Playlist Files & Copy Media Files... - if you want to export playlist files and to copy media files for some or all sub-nodes of the selected node (depending of the Options settings), after that you should specify a parent destination folder on the disk, paths in the playlist files will be for copied files, instead of all other commands where the playlist files contain paths to the files as they are displayed in the tracklist;

- Export M3U Playlists from Child Nodes... - if you want to export M3U files from some or all sub-nodes of the selected node (depending of the Options settings), after that you should specify a parent destination folder on the disk (only enabled for nodes within My Computer branch);

- Export M3U Playlists in Child Nodes to Same Folders - if you want to export M3U files from some or all sub-nodes of the selected node (depending of the Options settings) to the same folders with M3U files, e.g. if you want to save M3U files to ASX or XSPF, or if you want to convert M3U files from the simple format to the extended one or vice versa (only enabled for nodes within My Computer branch, unfortunately MediaMonkey doesn't display ASX and XSPF files as nodes inside of My Computer, so it is not possible to convert from ASX or XSPF format to some another);

- Create Playlists for Child Nodes - if you want to create playlists that would be stored in the Playlists branch, after that you should specify a parent playlist node.

If you want to export just selected tracks, choose Export to M3U/ASX/XSPF Playlist... from the context menu of the main tracklist or Now Playing panel.

Add-on settings are located in the Options dialog which you could get if you: 1) chose the Options command from the File > Export/Create Playlists menu, or 2) select Export/Create Playlists add-on in the Tools > Extensions dialog box and click on the Options button, or 3) select the General > Export/Create Playlists sheet in the Tools > Options dialog box.

In the first group of controls on that dialog we could specify what we want to export if we choose some command from the menu that exports sub-nodes, e.g. Export Child Nodes to Playlists Files... or any other command that contains "Child Nodes" in its name. If the Selected node option is turned off then only sub-nodes of the selected node would be exported, while if it is turned on the selected node would be exported as well. With the next 3 options we could choose which levels of sub-nodes we want to export: the first level, the last level or all levels.

Let say, for example, that I have the following tree branch and that I have selected the Rock node:

If I have ticked First level of sub-nodes I would get exported only the "Pink FLoyd" playlist file. If I have ticked Last level of sub-nodes I would get only "Dark Side of the Moon" and "Wish You Were Here" playlist files. Finally, if I have ticked All levels of sub-nodes I would get "Pink FLoyd", "Dark Side of the Moon" and "Wish You Were Here" playlist files. Of course, if I have ticked Selected node then I would get the "Rock" playlist file as well, together with the previously mentioned playlist files.

With the second group of options we have 3 choices to specify where and how we want to store playlists: to parent folders, to child folders or to a single folder. However, the settings in this group have only effect with the "Child Nodes" commands with the "..." on the end of a name, e.g. Export Child Nodes to Playlists Files..., i.e. the commands that allow us to specify some arbitrary destination folder. Those settings are ignored with the "Child Nodes" commands with the "to Same Folders" text on the end of a name, e.g. Export Child Nodes As Playlist Files to Same Folders, since in that case the playlist files are always stored to the same folders with media files.

Here is the same example of the "Rock" branch with the previously ticked All levels of sub-nodes option. If I have ticked To parent folders I would get "Pink FLoyd" playlist file in the specified destination folder and "Dark Side of the Moon" and "Wish You Were Here" playlist files in the "Pink Floyd" sub-folder of that specified folder. If I have ticked To child folders I would get "Pink FLoyd" playlist file in the "Pink Floyd" sub-folder of the specified folder, "Dark Side of the Moon" playlist file in the "Dark Side of the Moon" sub-folder of the "Pink Floyd" folder and ""Wish You Were Here" playlist file in the "Wish You Were Here" sub-folder of the "Pink Floyd" folder.

Finally, If I have ticked To single folder I would get all files in the specified folder, i.e. I would get "Pink FLoyd", "Pink FLoyd - Dark Side of the Moon" and "Pink Floyd - Wish You Were Here" playlist files in the same folder. With the Separator option we could specify which string of characters we want to use as a separator between nested levels of nodes; by default it is " - " (without double quotes, of course), as it is in the previous example.

Those last examples are such that if I have the Selected node option turned off. However, if I turn that option on, I would get one additional, "Rock" sub-folder in the specified folder and inside of it there would be created folders mentioned in the previous two examples with To parent folders and To child folders options. If I choose To single folder with the Selected node option turned on, then I would get "Rock - Pink FLoyd", "Rock - Pink FLoyd - Dark Side of the Moon" and "Rock - Pink Floyd - Wish You Were Here" playlist files in the specified folder.

With the third group of options we could specify a format of the exported playlist files: .m3u, .asx and .xspf. If we choose export to the M3U format, with the #EXT option we could further specify the format of the exported .m3u files. If that option is turned off, we would get the so-called Simple M3U format, i.e. .m3u files will have only list of paths to the media files, e.g.:
c:\My Music\Rock\Pink Floyd\Dark Side of the Moon\01 - Speak to Me; Breathe in the Air.mp3
c:\My Music\Rock\Pink Floyd\Dark Side of the Moon\02 - On the Run.mp3

However, if the #EXT option is turned on, we would get the Extended M3U format, with the additional information about each included media file which helps faster display of added/opened playlists in many players, but some another players don't support such extended M3U format:
#EXTM3U
#EXTINF:240,Pink Floyd - Speak to Me; Breathe in the Air
c:\My Music\Rock\Pink Floyd\Dark Side of the Moon\01 - Speak to Me; Breathe in the Air.mp3
#EXTINF:213,Pink Floyd - On the Run
c:\My Music\Rock\Pink Floyd\Dark Side of the Moon\02 - On the Run.mp3

The fourth group of options determines encoding format of the exported playlist files: ANSI, UTF-8 and Unicode (UTF-16). You should choose UTF-8 or Unicode if you have non-ANSI characters in your paths of audio files, e.g. Cyrillic, but you should first check if such files are supported with your media player. If you choose UTF-8 format you could specify if playlist files should have BOM characters. A byte-order mark (BOM) is the invisible Unicode character placed at the begin of the file, it is used as a marker to indicate that text is encoded in UTF-8; you should uncheck this option if you have a player that cannot read files with a BOM. By the way, if you modify some playlist file in UTF-8 format using Notepad, it will save that file with added BOM always.

The next group of options determines what we want to skip/exclude from the export. We could skip M3U nodes from My Computer branch of the tree, "All" nodes from My Computer, Location and Magic Nodes branches, Autoplaylists from the Playlists branch and nodes/folders with the specified name(s). Names of folders could be specified using regular expressions if that option is turned on, but even if we don't use regular expressions we could specify several names of nodes/folders for skipping using the vertical line "|" as a separator.

If some named folder is skipped during the export, then all its sub-folders would be skipped as well. The sub-nodes of "All" nodes from the Location branch are skipped by design even if you turn off skipping of "All" nodes. The M3U and "All" nodes from My Computer branch don't have sub-nodes anyway. The Skip export of - M3U nodes option is ignored if we choose Export M3U Playlists from Child Nodes or Export M3U Playlists in Child Nodes to Same Folders commands from the menu. The last (rightmost) level of "All" nodes in My Computer branch could be skipped using the SkipLastAllNodes INI key to get consistent behavior with "All" nodes from Location branch which will be explained later in the Additional INI keys section. Also, the export of sub-nodes of Autoplaylists depends of the SkipAutoPlsSubNodes INI key which will be explained later.

The exported playlist files and created playlists contain only the media files that are displayed in the tracklist for each corresponding source node. With the Exclude files options we could specify which media files should be additionally omitted from the playlists during the export: unavailable files and/or files with the specified extension(s). The several extensions could be specified using the "|" as a separator, e.g. ogg|aac|mp4.

The next group of options determines how paths of media files will be stored in playlist files. With the Relative option we could choose if we want paths in playlist files in relative or absolute format. Absolute paths represents full paths to the media files as you could see from the previous examples for the Extended .m3u format. Relative paths represents paths of the media files relative to the path of the playlist file. For example, if I choose export to parent folders, I would get "Dark Side of the Moon" playlist file with relative paths as:
Dark Side of the Moon\01 - Speak to Me; Breathe in the Air.mp3
Dark Side of the Moon\02 - On the Run.mp3

Relative paths could help if you have different paths on the source and destination computers/players (e.g. different absolute paths c:\My Music\Rock\Pink Floyd\Dark Side of the Moon\02 - On the Run.mp3 on the computer and e:\Music\Rock\Pink Floyd\Dark Side of the Moon\02 - On the Run.mp3 on the player would have the same relative path Dark Side of the Moon\02 - On the Run.mp3), but some players don't support them, so you should check first if you could use that option.

With the URL (file://) option we could choose another format for paths in playlist files. If I turn that option on, with the previous example I would get:
file:///c:/My%20Music/Rock/Pink%20Floyd/Dark%20Side%20of%20the%20Moon/01%20-%20Speak%20to%20Me%3B%20Breathe%20in%20the%20Air.mp3
file:///c:/My%20Music/Rock/Pink%20Floyd/Dark%20Side%20of%20the%20Moon/02%20-%20On%20the%20Run.mp3

There is a very small number of players that require playlist files with such paths, so most probably you wouldn't need that option.

With the Short (8.3) option we could get paths in old DOS format that are required on some players. That option works only with the existing files, so the Exclude unavailable files option should be turned on for it. Also, it is not possible to use URL and Short paths at the same time. If this option is turned on then all folders/filenames will be stored using such short form. For example, with the following full path:
D:\Music FLAC\Kurt Masur; New York Philharmonic Orchestra\Dvořák; Symphony #9, Slavonic Dances\01 Dvořák_ Symphony #9 In E Minor, O.flac

we would get:
D:\MUSICF~1\KURTMA~1\DVOK_S~1\01DVOK~1.FLA

However, some players like Logitech Media Server (LMS) require short form only for folders/filenames with non-ANSI characters, like this:
D:\Music FLAC\Kurt Masur; New York Philharmonic Orchestra\DVOK_S~1\01DVOK~1.FLA

So, in that case to get such paths you should turn on ANSI file format and turn off Short (8.3) paths.

With the Unix ("/", LF) option we could also specify format for paths in playlist files. If your media player has some Unix variation as Linux for its OS, you should turn that option on. In that case paths of media files would have the "/" separator between folders instead of "\" and the new lines would be represented with the LF character instead of CR+LF as it is in Windows.

With the Replace and With options we could replace parts of paths with another string in almost same way as we could do it in e.g. Notepad using its Replace option (well, maybe as with EditPad or similar advanced text editor which also supports Regular expressions). Within the Replace text box you could specify string which you want to replace and with the second, With text box you could specify string for replacement. You could also use the "..." buttons to specify paths, but only if you want to replace one folder with some another. For example, "c:\Documents and Settings\My Name\My Music\" could be replaced with "e:\Music\.

However, with the Use Regular expressions for specifying paths/folders option we could specify very complex patterns for replacement, e.g. we could replace several different paths with the single one at once. For example, the "^.+\\(?=[^\\]+\.[^\.\\]+$)" string is the expression which represents any full path, excluding the filename and the extension. So, using that expression, if you leave the With text box empty, all folders would be removed from paths, saving only filenames and extensions into playlist files, or you could enter "e:\Music\" in the With text box and all folders would be replaced with that single one. Although, you should turn on the Regular expressions only if you know how to use them.

The Use Regular expressions option has an effect on both Replace - Paths in playlist files and Skip export of - Folders options, i.e. you cannot use the Regular expressions for the first option and not to use them for the second option, and vice versa. Also, the Replace option cannot be used with the Relative paths.

The next group of remaining controls on the Export/Create Playlist dialog is used only for automatic export of MM playlists to the playlist files. We could choose when playlists should be exported: On startup, On shutdown and/or Every xx minute(s). Then we could choose the playlist which should be automatically exported (altogether with its sub-playlists) using the From dropdown list. Only playlists from the first level in Playlists branch could be directly selected from that list, but some nested playlist could be also specified using "\" as a separator between sub-levels. Within the To text box we should specify the folder where we want to get exported playlist file(s). Its usage is similar to the destination folder specified after chosen some "Child Nodes" command from the menu for the manual export. This also means that almost all previously mentioned options are shared for manual and automatic export including "Export to parent/child/single folder(s)", "Relative paths" and so on.

With the Create new child folder with a dated name option we could specify if we want automatically exported playlist files in separated folders with dates in their names which would be within the folder specified in the To text box. If the For every auto-export option is turned on, dated folders with playlist files would be created whenever the condition for automatic export is satisfied, e.g. if Every xx minutes is chosen then every specified minutes would be created a new folder. If the Once in a day option is turned on, folders with dates in their names would be created only once in a day.

Additional INI keys:
There are some keys in the [ExportM3UsForChildNodes] section of the MediaMonkey.ini file for some less used options that are not represented with GUI:
- ExportOnStartupDelayMs - delay for automatic export on startup, in milliseconds, default value is 1000, i.e. 1 second delay;

- DontUseSQLForTracklist - the export of nodes from the Library (and collections in MM4) and Magic Nodes is much faster if this option is = 0 (default value) because it doesn't need to wait for the tracklist to be refreshed for each exported node, however if you notice some problems with SQL generated playlist then you could write = 1;

- PathsWithFullMNCaptions - if this key is = 0 (default) then playlists exported from Magic nodes would not have Statistic addition to the node's caption in their names, however if you want that part of caption in the playlist names then you should write = 1;

- AllNodesMode - this value determines the export of "All" nodes and names of exported playlists:
-- AllNodesMode = 0 - "All" nodes are exported instead of their parents, i.e. the playlist files would contain paths to files in corresponding nodes and all their sub-nodes (the default behavior of the add-on versions before v4.0);
-- AllNodesMode = 1 - "All" nodes are exported with parent node names, the result could be very similar to the previous mode;
-- AllNodesMode = 2 - "All" nodes are exported with "[All]" playlist names, should be avoided with To parent folder option;
-- AllNodesMode = 3 - "All" nodes are exported as "Parent_Name [All]" playlist names (default mode);

- SkipLastAllNodes - the rightmost (deepest) disk folders in My Computer branch have displayed "All" sub-nodes, which is different from the disk folders from the Location branch (I think this is a program bug), you should write = 1 if you want skipped those "All" nodes from My Computer (dafault is = 0);

- SkipAutoPlsSubNodes - when you choose option to Skip export of - Autoplaylists, if this key is = 1 export would be omitted for their sub-nodes as well, however autoplaylists could have static playlists as sub-nodes so you may want to leave this at = 0 (default);

- UseLastExportM3UsDir - when you choose some "Child Nodes" command you would get the dialog box for specifying the destination folder, if this option is = 0 (default) you would get displayed folder depending of the selected node/file in the tracklist, however if you write = 1 the last destination folder that you have selected for export would be retrieved from the .ini file;

- DontShowInfoBoxOnExportEnd - if this is = 0 (default) you would get displayed the message box showing the number of exported playlists and elapsed time on each finished export using some "Child Nodes" command;

- EventLoggerMode - if you have installed the Event Logger add-on you could get displayed some additional information in its Event Viewer panel, the values could be from = 0 (default, without any information) to = 3 (most displayed information), e.g. value = 1 would display every exported playlist file and number of included media files; the negative values from = -1 to = -3 would cause logging of those information to the log file as well.

The MediaMonkey.ini file is stored in the c:\Documents and Settings\User_Name\Application Data\MediaMonkey folder for MM4. If you want to modify some key in it using e.g. Notepad, you should do that with closed MediaMonkey application.

Limitations:
Refreshing of the tracklist works very strange in MediaMonkey 2.x and because of that an user needs to click on the confirmation dialog after every generated playlist, i.e. for every sub-node. This confirmation dialog is not needed with MM 3.x, but speed and reliability are much better if you have installed MM 3.1.0.1218 or up. Nodes within the Playlist branch don't have such limitation, only regular nodes. Also, with the version 4.0 of add-on the nodes from the Library are exported using SQL without the mentioned limitation.

You could directly select a playlist for automatic export in the From combo box in the Options box only for playlists on the first level, i.e. a playlist which is a child of the Playlists node. If you want to auto-export some nested playlist, you could do that if you manually enter a full path to that playlist using "\" as a separator between nested levels, e.g. Genres\Rock\Pink Floyd. This also means that you cannot use the "\" character in the playlist names specified in that combo box. However, this limitation has only the playlists specified in the From path for the automatic export - other exported playlists has not that limitation, even the child playlists of that playlist could have "\" in their names. However, it is possible to specify the name of some nested playlist without its full path, but only if that name is unique.

Last edited by ZvezdanD on Thu Jul 11, 2013 10:58 am, edited 41 times in total.

This script has some great potential but I am running into a problem for nodes which have alot of child nodes. I tried it on a node which had 3 children and each of them had 250 children. It exported the three children but not playlists for the 250 children of each node. I tried it on one of the 3 children and it did export the 250 child nodes as playlists. It seems to only process the first child node and none of the child nodes after. This is something that I would enjoy using but I do not have many nodes which I would export which only have one level. I can think of some instances where I wouldn't want it to export the children but also instances when I would. Is it possible to have an option to export just the top level or all existing levels? And if you can add it, can the exports be in the same folder structure as they exist in the node?

Well, I though about a possibility to recursively go into all sub-levels of selected branch, but in that case I don't know where to store playlists. It could work if all tracks from some node are in the same folder, e.g. if I have one artist on the first level and its albums on the second level, so I could write playlists for each album into corresponding folders. But where to save playlist file if its node contain tracks from many folders? For example, I have the Year node which contain sub-nodes from many years, and each year contain tracks from different folders... In that case nodes don't have same folder structure as you mentioned.

I guess that would apply if you are savng the playlists in the same folder as the tracks. But here I have my playlists saved in a separate folder, so the only structure which I would want is the same as the node(s) in MM. But if you are saving them in the same directory as the track, how about saving it in the first location that the tracks exists in. But if you are saving them in multiple locations, wouldn't this make using them more difficult since you would have to look in many locations for the playlists?

Actually, I prefer to store playlists within parent folders of contained tracks. Here is an example how I have organized tracks: <Genre>\<Artist>\<Album>. So, if I select Pink Floyd node which contain nodes "The Piper at the Gates of Dawn", "A Saucerful of Secrets", "More", ... I could store each playlist into folder with contained audio tracks, just because each album has corresponding folder, i.e. connection is unique and unambiguous. But, now if I have Year node which contain nodes 1967, 1968, 1969, ... they could contain tracks from many artists and albums beside of Pink Floyd, and because I don't have folder level for the Year I don't know where to store playlists for corresponding years.

If I understand correctly your suggestion, I could have audio tracks for example in d:\My Music\Rock\Pink Floyd\The Piper at the Gates of Dawn, d:\My Music\Rock\Pink Floyd\A Saucerful of Secrets ..., and playlists into some another location, for example e:\My Playlists\Rock\Pink Floyd\The Piper at the Gates of Dawn, e:\My Playlists\Rock\Pink Floyd\A Saucerful of Secrets, ... Well, I don't see a point to put playlists into some new folder structure into some another location which is not connected with audio tracks when I already have same folder structure with audio tracks. When I have playlists organized into folders and their sub-folders, it doesn't matter if they are stored into d:\My Music\... or e:\My Playlists\..., right?

Anyway, I could add a possibility to this script to recursively store all playlists into location(s) wherever you want, but you should explain me exactly where this should be done because I don't have any idea. This solution should be general and it should work for every possible situation with different nodes, not only Artist and Album, but also Year, Conductor, Classification, custom created nodes...

I'm a native English speaker but don't quote me on correct grammar, but I think Child Nodes is the correct term.

Here is how mine is stored, I have my tracks stored in folders by Genre and that is it. But my playlists are stored in a separate folder based on how the playlists are stored in MM (...\My Playlists\...). Because I use my playlists between many computers I do not want them scattered all over, just one parent folder for me to grab up and be on the go. To use this script as I use the other Export M3U scripts I need for it to be able to maintain the node structure as it is in MM, that way when I use the import M3U feature of DEISync, I can have the file structure whether I have the custom node installed or not. Here is a pic of part of my file structure to give you an idea of what I need. BTW my playlists have a more structured hierarchy than my tracks, once again I need simplicity there to make it easier to move the tracks back and forth on my player and to use the Custom Report script to run reports comparing data between my player and MM.

OK, I will try to add recursion, but I am now just wondering what about a path? It is currently stored in absolute form, i.e. d:\My Music\Rock\ When you transfer your playlists to some another computer it could not have same drive letters, nor root folders. How about portable players, which kind of path they should have? Maybe I should store relative path to files, e.g. ..\Rock\.

Personally I prefer absolute paths and yes I have all my computers setup to use the same path to ensure minimal problems, but I think to cater to a wider audience relative paths might be best. And the path on my player is different but the script shouldn't have to worry about that because my syncing is based on the playlists within MM and MM will make the necessary changes when syncing to the player(s).

I am not sure about the speed increase, but the script intentionally is slowing down its execution with one loop because it need to wait for MM to refresh tracklist when node is changed. This is a main reason why things could go wrong, since MM don't expose necessary event for detection when the tracklist is finished with refreshing. I tried to do my best to eliminate unneeded results, but there is some small possibility that sometimes script could not detect that tracklist has any track because MM is not fast enough to refresh it and in that case playlist wouldn't be created at all. So, I recommend to check a result of the script execution, at least in the begin.

By the way, there is a new version of the script (1.2) with some additions and removed one critical bug.