Shane Brinkman-Davis'
ID3Browse v3.1 Documentation
an ID3-based playlist generator
(updated 2006/04/17)


Contents

  1. License
  2. Requirements
  3. Goal
  4. First Time Use
  5. Usage Basics
  6. Playlist Strings
  7. Example Playlist Strings
  8. Version History

License

The ID3Browse software, source-code and documentation is distributed under the following Open Source license:

ID3Browse, Copyright (c) 2006, Shane Brinkman-Davis
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of the Shane Brinkman-Davis nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Requirements

This software requires Windows 95 or better. I have tested it on Win98, Win2000 and WinXP. It should work on Windows 95, ME, and NT, too.

The program needs about 10megs of free memory to run on a library of 15,000 MP3s.

Goal

The goal of this software is to automatically generate playlists organized in directories from any information found in ID3 tags. The core use of this is to emulate ID3 based browsing for File-System based MP3 players such as Archos' portable MP3 and AV players.

This could have been done in a very simple way supporting the standard Album, Artist, Genre, and Song sorting schemes typically hard coded into Media libraries and MP3 players. However, I wanted to make a utility that was much more flexible; that allowed you to generate playlists in directory structures in nearly anyway you can think of.

First Time Use

To generate some standard ID3-based browsing directories and playlists, follow the simple quick-start guide below. This will make an ID3 directory on the root of your hard drive with many directories and playlists inside it. It will not delete, move, copy or otherwise modify your MP3s.

Quick Start:

  1. Copy ID3Browse.exe and the .bat files to your hard drive (or MP3 player) with all your MP3 files (anywhere on that hard drive will do)
  2. Double click on the "Generate Standard ID3 Based Browsing.bat" file on the hard-drive you copied it to (this only works if the bat file is on the same drive as all your MP3s).
  3. Wait a few minutes while the ID3 directories and playlists are created
  4. When it is done you will see the message: "ID3Browse - done!" and some statistics.
  5. Press a key to close the window - that's it!

The batch file in step 3 above creates 4 standard ways to browse your MP3s:

  • By Artist
  • By Album
  • By Genre
  • By Year

Disconnect your MP3 player and browse the ID3 directory - you should find it very much like browsing your whole collection by ID3 tags! Whenever you add MP3s, just re-run this program. If you delete MP3s, delete the ID3 directory and re-run this program.

Want more? With ID3Browse you can set up just about any way to browse your MP3s based on ID3 tags. Read on if you want to learn how.

Usage Basics

The Basic Idea

ID3Browse generates M3U files and directories. To do this, it first makes a list of every MP3 in every ScanDir (root directories you provide) and their sub-directories. Then, for each MP3 file in that list, it adds the MP3 to the playlist specified by the PlaylistString. When all MP3s have been processed, duplicates are removed from every playlist (each MP3 will appear in each playlist at most once), the playlists are sorted by track number (or whatever custom sort you want), and, finally, every playlist is written to disk, creating all necessary directories as it goes.

You can specify more than one PlaylistString. In the case of multiple PlaylistStrings, each MP3 is added to the playlist specified by each PlaylistString. (Aside: The maximum number of playlists that could possibly be generated is the number of MP3s times the number of PlaylistStrings.)

A PlaylistString is the path and name of the M3U playlist file every MP3 will be added to. The only thing special is that PlaylistStrings may contain certain keywords (words that start with the pipe, '|' character) which will be replaced with actual information from the MP3's ID3 tag (or other sources). In this way one PlaylistString may represent many M3U files. For example, the playlist string "\ID3\Genre\|Genre" will generate the playlist "\ID3\Genre\Rock.m3u" for an MP3 with the Genre of Rock in its ID3 tag and "\ID3\Genre\Disco.m3u" for one with Disco for its genre.

Using ID3Browse

ID3Browse is a command-line tool. You control its various options with command-line parameters. It is probably easiest to start by copying one of the sample ".bat" files provided with ID3Browse and making changes and seeing what they do. Below is a description of how the command-line parameters work:

Usage: C:\> id3browse ScanDir(s) [*.id3b ConfigFile(s)] [/options] [/playlist="PlaylistString"]

  1. ScanDirs, config files, options, and playlists may appear in any order
  2. One or more ScanDirs must be provided
  3. Zero or more Playlists can be provided
  4. Parts in brackets '[]' are optional (don't actually type the []s)

ScanDirs: ID3Browse scans every scan dir for MP3s.

ConfigFiles are text files with the extension .id3b. They simply contain a list of ID3Browse command-line options, one per line. Any ID3Browse command-line option - include other ConfigFiles - can be listed and will be interpreted as if they were typed in on the command-line.

Boolean Options (off by default):

  • /AllowBackslashes - Don't remove backslashes from FormatVariable values (see Playlist Strings below)
  • Normally, if there is a Backslash (\) in the string resulting from a FormatVariable, they are replaced with '!' characters since otherwise they would create extra sub-directories. However, if this is what you want, use this setting.

  • /CommentPlaylists - Output comments in the playlist files.

    This is most useful to see how your SortStrings are working. Normally SortStrings are not displayed so you might be confused why your tracks are being sorted in a certain order. By turning on the /CommentPlaylists option and viewing your playlists with a text editor, you can see exactly how ID3Browse is sorting your playlists. If it isn't sorting them the way you want, you can set a different /SortBy setting.

  • /DriveLetters - enables outputting drive-letters in playlist entries
  • /IgnoreDir - ignores all files in dir or its subdirs
  • /IgnoreID3v1 - ignore ID3 v1 tags
  • /IgnoreID3v2 - ignore ID3 v2 tags
  • /IgnoreTagless - ignores files with no ID3 tags (or only ignored id3 tags)
  • /PreferID3v1 - use ID3 v1 tags over v2 tags (default is v2 over v1 tags)
  • If all your v2 tags are up to date, but your v1 tags are a mess, or visa versa, you may just want to ignore the "not-up-to-date" tag-set. Alternatively, you may wish to just swap the priority. By default, all v2 tag values take priority over v1 tag values.

  • /ReadOnly - do all the prep-work but don't actually create any dirs or playlists
  • This is useful, particularly in combination with the /Verbose option, to test your ID3Browse options without writing anything to disk.

  • /TagReport - show a tag-report when done
  • The TagReport is displayed at the end of your ID3Browse run and it tells you a bit about what is in your MP3 files. It tells you how many of each type of tag it found as well as what types of fields (or frames) within those tags that it found.

  • /Verbose - show everything ID3Browse is doing in detail

Settings:

  • /MaxPlaylistSize=# - set the maximum number of files to put in a playlist. Default: no maximum
  • If a MaxPlaylistSize is set then any playlist that is larger is broken apart into multiple files. These split playlists are numbered by adding its number to the end of the M3U's name (complete with 0-padding when necessary so alphabetical listing still sorts them correctly).

  • /MinPlaylistSize=# - playlists smaller than Min are not created. Default: 1
  • /MiscPlaylistName=string - merge all too-small playlists into one. Default: (too-small playlists are discarded)
  • When a playlist has fewer files than MinPlaylistSize, it is simply not created. Instead of discarding all too-small playlists, you can merge them into miscellaneous playlists, one per directory. Just set the /MiscPlaylistName setting when you set your /MinPlaylistSize to do this.

  • /SortBy=format_string - default M3U sort (SortString may contain any character or FormatVariable). Default: |Artist|Album|04TrackNum
  • By default, playlists are sorted by Artist, Album and Track Number. However, you can set up your own custom sort however you want. The /SortBy format string looks just like a /playlist string in that you can use characters and FormatVariables. A SortBy string is generated for every MP3 in every Playlist. Once the playlist is ready to be written to disc, the list is sorted alphabetically by the MP3's SortBy strings.

    Note: Each /playlist string can override the default /SortBy format string with its own, unique format by adding a '|SortBy=" clause to the end of the /playlist string.

  • /UnknownString=string - string to use for unknown values. Default: (Unknown)

    When a FormatVariable cannot find the requested information (for example if there is no Artist entry for an MP3 and the |Artist FormatVariable was used), then the /UnknownString is used. By default the text "(Unknown)" is inserted.

PlaylistStrings

A playlist string is the Path and Name (without the .m3u extension) of the playlist to be created. Every MP3 scanned (with an ID3 tag), is added to the playlist specified by each playlist-string. The magic happens when you have FormatVariables in your playlist string that cause different MP3s to be placed into different playlists.

Quick Info:

  • A playlist string is indicated by a /playlist="playlist_string" on the command-line.
  • Playlist strings should always be quoted.
  • Playlist strings may contain 0 or more FormatVariables (see below).
  • PlaylistStrings may also have an optional "|SortBy=" clause that overrides the default SortBy string specified by the /SortBy option. Each playlist's tracks are sorted alphabetically by the track's SortStrings.
  • Example: /playlist="ID3\Artist\|Artist\|Album"
  • There are many more examples at the end of this file...

Playlist string variables are the key to making ID3Browse useful. When an MP3 is processed, all the FormatVariables in each PlaylistString are replaced with their corresponding values out of that mp3's id3 tag and file information . The result, for each playlist string, is a specific playlist string - the playlist that MP3 will be added to.

FormatVariables are formatted as follows:

  • |[0][-][MinWidth][.MaxWidth]Keyword

Keywords:

Keyword

Description
  • Album
Takes the Album ID3 Field
  • Artist
Takes the Artist ID3 Field
  • Comment - ShortComment + LongComment
Comment is exactly the same as |ShortComment|LongComment - the long comment right after the short comment.
  • Decade - calculated from the ID3 tag's year
Takes the Decade of the Song from the Year ID3 Field
  • Dir# (#=0-9, a-z)
Directory0 is the drive the MP3 file was found on. Directory1 is the first directory in the path-string for the MP3 file, Directory 2 is the second, 3 - the third... Directory9 is the 9th, DirectoryA is the 10th, DirectoryB is the 11th up to DirectoryZ - the 35th.
  • Genre
Takes the Genre ID3 Field. If there are more than one Genre's, this is the first one (equivalent to MultiGenre0)
  • FilePath
  • FileName
  • FileExtension

You can inserted the individual parts of an MP3's entire path, name, and extension, using these keywords. The full drive-letter+path+name+extension string can be regenerated using the following format string:

  • |Dir0:\|FilePath\|FileName.|FileExtension
  • LongComment
Takes the Long-Comment part of the ID3 Comment Field
  • MultiGenre# (#=0-9, a-z)
MultiGenre0 is the first genre in the ID3 tag, MultiGenre1 the second, MultiGenre9 the 10th, MultiGenreA the 11th, MultiGenreZ the 36th.
  • NumTracks
Takes the Number of Tracks for the Album from the ID3 Track Field
  • RandomNumber

Generates a random number >=0 and < 1,000,000. This is most useful to generate randomly sorted playlist by setting the /SortBy option as follows:

  • /SortBy=|06RandomNumber
  • ShortComment
Takes the Short-Comment part of the ID3 Comment Field
  • SmartArtist
Takes the Artist ID3 Field and rearrange artist names starting with "The..." to "Group, The" where appropriate.
  • Song
Takes the Song ID3 Field
  • TrackNum
Takes the Track number part of the Track Number ID3 Field
  • Year
Takes the Year ID3 Field
  • Any 3 character ID3v2.2 FrameID followed by a space
If the ID3v2.2 Frame is a text field, this gets the text value of that frame. If not, and the frame is present, the text "Unsupported FrameID='FrameID'" is used.
  • Any 4 character ID3v2.3/.4 FrameID
If the ID3v2.3 Frame is a text field, this gets the text value of that frame. If not, and the frame is present, the text "Unsupported FrameID='FrameID'" is used.

If a particular MP3 is missing the ID3 Frame requested by the keyword (or the Directory# or MultiGenre#), the value "(Unknown)" is used (or whatever string you set with the /UnknownString option). Files with unknown FormatVariable values can be ignored (not added to that specific playlist) with the /ignoreunknowns option.

For each variable, there are options on how it is formatted. The key things you can control are: the minimum number of characters it will be, the maximum number of characters, the alignment, and the character to use when the variable is shorter than the minimum number of characters (PadChar). The Format options are:

  • Leading zero [0] sets the PadChar='0' and toggles the justification.
  • Leading minus [-] toggles the justification.
  • [MinWidth] - a positive integer - guarantees a least MinWidth characters will be used.
  • [.MaxWidth] - a positive integer - guarantees no more than MaxWidth characters will be used
  • Defaults: Left justified, MinWidth=0, PadChar=a space, no MaxWidth
  • Example: |03.3NumTracks (right justified, pad with zeros, must be exactly 3 characters wide)

There are no limitations on the strings in ID3 tags, but the characters \, /, :, *, ?, <, >, and | are illegal in Windows file names. In the case of any illegal Windows file-name character, ID3Browse replace it with an exclamation mark: '!' (if /allowbackslashes is on, '\' are left alone). Any control character (< ascii value 32) is replaced with a space: ' '. All other characters are left alone.

ExamplePlaylist Strings

The best way to really understand ID3Browse is through a bunch of examples, so below I have provided many. For every example I provide the exact /playlist="..." command-line option, an example generated playlist, and the 'verbose' description of the playlist string (a wordy, yet precise, computer-generated description).

/playlist="\ID3\AllSongs"

Make a playlist of all songs. Notice no keywords are used - this is perfectly fine. It just means every MP3 will be put into this playlist.
Example generated playlist: \ID3\AllSongs.m3u

Verbose: \ID3\AllSongs

/playlist="\ID3\Artist\|Artist"

In \ID3\Artist, group all songs by Artist.
Example generated playlist: \ID3\Artist\Underworld.m3u

Verbose: \ID3\Artist\[Keyword=Artist]

/playlist="\ID3\Album\|Album"

In \ID3\Album, group all songs by Album.
Example generated playlist: \ID3\Album\Beaucoup Fish.m3u

Verbose: \ID3\Album\[Keyword=Album]

/playlist="ID3\Artist\|Artist\|Album"

In \ID3\Artist, group all Albums by Artist.
Example generated playlist: \ID3\Artist\Underworld\Beaucoup Fish.m3u

Verbose: \ID3\Artist\[Keyword=Artist]\[Keyword=Album]

/playlist="\ID3\Album\|Artist - |Album"

In \ID3\Album, group all Albums by Artist, but instead making subdirs for each artist, just make directories with the Artist's name followed by the Album. Note this is exactly the same as the last example but the '\' was replaced with ' - '.
Example generated playlist: \ID3\Album\Underworld - Beaucoup Fish.m3u

Verbose: \ID3\Album\[Keyword=Artist] - [Keyword=Album]

/playlist="\ID3\Artist\|Artist\!|Artist"

In \ID3\Artist, group all songs by Artist - placing the playlist inside the Artist's directory with an exclamation mark (!) before the playlist's name so it will be listed first alphabetically.
Example generated playlist: \ID3\Artist\Underworld\!Underworld.m3u

Verbose: \ID3\Artist\[Keyword=Artist]\![Keyword=Artist]

/playlist="\ID3\Genre\|Genre\|Album"

In \ID3\Genre, group every Album by Genre.
Example generated playlist: \ID3\Genre\Electronica\Beaucoup Fish.m3u

Verbose: \ID3\Genre\[Keyword=Genre]\[Keyword=Album]

/playlist="\ID3\Artist\|SmartArtist\|Album"

In \ID3\Artist, group every Album by Artist's "LastName, FirstName" or "GroupTitle, The".
Example generated playlist: \ID3\Artist\Amos, Tori\Little Earthquakes.m3u

Verbose: \ID3\Artist\[Keyword=SmartArtist]\[Keyword=Album]

/playlist="\ID3\Year\|Decades\|04Year\|Artist"

In \ID3\Year, group all songs by Decade, Year, and Artist.
Example generated playlist: \ID3\Year\90s\1991\Tori Amos.m3u

Verbose: \ID3\Year\[Keyword=Decade]s\[Keyword=Year, Right-justified, MinWidth=4, PadChar='0']\[Keyword=Artist]

/playlist="\ID3\Album\|.1Album\|Album"

In ID3\Album, group all Albums by their first letter.
Example generated playlist: \ID3\Album\L\Little Earthquakes.m3u

Verbose: \ID3\Album\[Keyword=Album, Left-justified, MaxWidth=1]\[Keyword=Album]

/playlist="\ID3\Comment\|ShortComment, |LongComment"

In ID3\Comment, group all songs by ShortComment and LongComment.
Example generated playlist: \ID3\Comment\(Unknown), 980D670C.m3u

Verbose: \ID3\Comment\[Keyword=ShortComment], [Keyword=LongComment]

/playlist="\ID3\NumTracks\|02NumTracks tracks\|Album"

In ID3\NumTracks, group all Albums by track-count. Format the track-count with two columns, right justified, with leading 0s.
Example generated playlist: \ID3\NumTracks\12 tracks\Little Earthquakes.m3u

Verbose: \ID3\NumTracks\[Keyword=NumTracks, Right-justified, MinWidth=2, PadChar='0'] tracks\[Keyword=Album]

/playlist="\ID3\Song\|.1Song\|.2Song\|.3Song\|Song"

In ID3\Song, group all songs by first, then second, then third letters.
Example generated playlist: \ID3\Song\C\Cr\Cru\Crucify.m3u

Verbose: \ID3\Song\[Keyword=Song, Left-justified, MaxWidth=1]\[Keyword=Song, Left-justified, MaxWidth=2]\[Keyword=Song, Left-justified, MaxWidth=3]\[Keyword=Song]

/playlist="\ID3\Pictures\|APIC"

In ID3\Song, group all songs by their embedded pictures types.
Example generated playlist: \ID3\Pictures\Embedded Picture - Encoding=image!jpg PictureType=Other.m3u

Verbose: \ID3\APIC\[Keyword=ID3FieldID=APIC]

/playlist="|Dir0:\|FilePath\AllSongs"
/allowbackslashes

This one requires the /allowbackslashes option to work properly. This will put a playlist in every directory with MP3s that includes every MP3 in that directory (but NOT any MP3s in its sub directories).
Example generated playlist: f:\music\classical\Bach, Johann Sebastian\AllSongs.m3u

Verbose: [Keyword=Dir-0]:\[Keyword=FilePath]\AllSongs

/playlist="|Dir0:\AllSongs"
/playlist="|Dir0:\|Dir1\AllSongs"
/playlist="|Dir0:\|Dir1\|Dir2\AllSongs"
/playlist="|Dir0:\|Dir1\|Dir2\|Dir3\AllSongs"
/playlist="|Dir0:\|Dir1\|Dir2\|Dir3\|Dir4\AllSongs"
/playlist="|Dir0:\|Dir1\|Dir2\|Dir3\|Dir4\|Dir5\AllSongs"
/allowbackslashes

/ignoreunknowns

This configuration is somewhat like the last one, but is pretty handy. It requires both the /allowbackslashes and /ignoreunknowns options. All these settings together put a playlist in every directory of every MP3 in that directory and all its sub directories (assumes no more than 5 directory levels - you can extend this up to 35 by adding 6,7, 8,... a,b,c...z "Dir#"s).
Example generated playlist: f:\music\classical\Bach, Johann Sebastian\AllSongs.m3u

Verbose: [Keyword=Dir-0]:\AllSongs
Verbose: [Keyword=Dir-0]:\[Keyword=Dir1]\AllSongs
Verbose: [Keyword=Dir-0]:\[Keyword=Dir1]\[Keyword=Dir2]\AllSongs
Verbose: [Keyword=Dir-0]:\[Keyword=Dir1]\[Keyword=Dir2]\[Keyword=Dir3]\AllSongs
Verbose: [Keyword=Dir-0]:\[Keyword=Dir1]\[Keyword=Dir2]\[Keyword=Dir3]\[Keyword=Dir4]\AllSongs

Verbose: [Keyword=Dir-0]:\[Keyword=Dir1]\[Keyword=Dir2]\[Keyword=Dir3]\[Keyword=Dir4]\[Keyword=Dir5]\AllSongs

/playlist="\ID3\Genre\|MultiGenre0"
/playlist="\ID3\Genre\|MultiGenre1"
/playlist="\ID3\Genre\|MultiGenre2"
/playlist="\ID3\Genre\|MultiGenre3"
/playlist="\ID3\Genre\|MultiGenre4"
/ignoreunknowns

If you have more than one Genre per song, use this instead of the simpler Genre example above. These settings will put each MP3 into a playlist for each Genre it is in. (assumes no more than 5 genres per song - you can extend this up to 36 by adding 5,6,7,... a,b,c...z "MultiGenre#"s)
Example generated playlist: \ID3\Genre\Electronica.m3u

Verbose: \ID3\[Keyword=MultiGenre-0]
Verbose: \ID3\[Keyword=MultiGenre-1]
Verbose: \ID3\[Keyword=MultiGenre-2]
Verbose: \ID3\[Keyword=MultiGenre-3]
Verbose: \ID3\[Keyword=MultiGenre-4]

/playlist="\ID3\AllTracks|SortBy=|Artist|Album|03TrackNum"

If you want a playlist of all your tracks sorted by Artist, Album then TrackNumber, just use this option.
Example generated playlist: \ID3\AllTracks.m3u

Verbose: \ID3\AllTracks (SortBy: [Keyword=Artist][Keyword=Album][Keyword=TrackNum, Right-justified, MinWidth=3, PadChar='0'])

/SortBy="|06RandomNumber"

If you want all generated tracks to be randomized, just add this option to your ID3Browse command-line or .id3b file. Note that you could randomize just specific playlists generated by specific /playlist strings by adding "|SortBy=|06RandomNumber" to the end of the playlist string instead of using the /SortBy option which sets the sort for all playlist strings (except the ones that specifically override it with their own |SortBy clauses).


Version History

Version Key Changes
v3.1 BugFix:
  • More fixes to ensure File name and path case are preserved
v3.0 First Open-Source release.

New:
  • File name and path case is preserved
  • Lots of code re-org and cleanup for open-source release
  • Switched from the Watcom compiler to Microsoft Visual C++ v6.0. The EXE is smaller, faster, and more memory efficient.
v2.4 New:
  • Added option: /IgnoreTagless - ignores files with no ID3 tags (or only ignored id3 tags)
  • Added setting: /IgnoreDir - ignores all files in dir or its subdirs
  • Added option: /DriveLetters which enables outputting drive-letters in playlist entries

BugFix:

  • If you input an invalid path for a scan dir, the current directory on that drive would be used instead. Now it exits with an error.

BugFix (changed behavior):

  • Files with no tags, OR only ignored tags, would not get added to any playlist. There are now useful FormatVariables that do not depend on tags, so it may be desirable to generate playlists based on files which are tagless (or with only ignored tags). By default, files with no tags (or with only ignored tags) will still generate playlists with "(Unknown)" values for their ID3 fields. To return to the previous default behavior, just use the new option: /ignoretagless.
v2.3

Added new keywords:

  • FilePath - the initial backslash plus all directories and their slashes
  • FileName - the file name minus the extension
  • FileExtension - the file extension
  • RandomNumber - generates a random number between 0 and 999,999 (inclusive)

Added sort options:

  • By adding "|SortBy=" and then another FormatString to the primary PlaylistString you can cause that entry to be sorted by the SortBy format string. By default, without the SortBy clause, files are sorted by their full path and name (the default is settable by the /SortString option).

Added command-line options:

  • /CommentPlaylists - output comments in the playlist files
  • /IgnoreID3v1 - ignore ID3 v1 tags
  • /IgnoreID3v2 - ignore ID3 v2 tags
  • /PreferID3v1 - use ID3 v1 tags over v2 tags (default is v2 over v1 tags)
  • /UnknownString=string - alternate string to use for unknown values
    Default: (Unknown)
  • /SortString=format_string - default M3U sort (SortString may contain any character or FormatVariable)
    Default: |Dir0:\|FilePath|FileName.|FileExtension

Fixed bug with large frames in ID3v2.3 tags (was fine for ID3v2-2 and ID3v2-4)

v2.2

Fixed duplicate removal bug. (duplicate MP3s in each M3U are now correctly removed)
/ignoreunknowns option added
Added Dir# keywords
Added MultiGenre# keywords
Added ConfigFiles support (since ID3Browse command-lines are getting painfully long).
Changed how multiple-genres are handled - no longer automatic - must use MultiGenre
Changed SmartArtist to ONLY change "The Artist" to "Artist, The".
("Last, First" re-arranging was only right 1/2 the time)

v2.1b2

Added the /maxplaylistsize option
Fixed bug with trailing spaces in directory names

v2.1b

Added command-line option: /allowbackslashes
Added automatic support for multiple Genres (in ID2v3+ tags)

v2.0 (final) Removed the restriction on what ID3v2 Tags you can use as keywords - Non text tags have the text values: "Unsupported FrameID='XXXX'" or "FrameID 'XXXX' not present".
Added a little special support for the APIC ID3v2 tag (embedded pictures) - breaks them out by encoding type (JPG, GIF, BMP, etc...) and Picture type.
v2.0b1

Broke backward compatibility with v1.x command-line options

New, much more flexible, FormatString mechanism: playlist string
/readonly /verbose /tagreport options added
Can now have more than one ScanDir
Improved reporting and to-screen output.
Extended characters, such as umlauts, are now preserved.

v1.3b Fixed bug when Track name and Album name were the same
v1.2 Improved robustness with illegal tags
Added ID3 v2.2 tag support
Added more detailed reporting
Added more detailed Errors
Added Read-Only mode (scan MP3s, report, but do nothing)
Modified the meaning of the ':' format option for Numbers
v1.1 Added SmartArtist, NumTracks, and TrackNum keywords
Fixed directory scan bug that would sometimes add Dupes
v1.0 Initial release