Collection of most useful/wanted Magic Nodes masks [MM2+3]

Download and get help for different MediaMonkey Addons.

Moderators: Peke, Gurus

ZvezdanD
Posts: 3090
Joined: Thu Jun 08, 2006 7:40 pm

Collection of most useful/wanted Magic Nodes masks [MM2+3]

Post by ZvezdanD » Mon Mar 03, 2008 3:41 am

I was thinking to create a list with the most useful/wanted masks for the Magic Nodes, and after some users asked for such thing I decided to start this thread. But first of all, I wish to thank to Pablo Shmerkin, the original author of Magic Nodes, to Rick Parsons who wrote the PDF manual, and to the many creators of Magic Nodes masks who have contributed with them in the forum, especially to Bex who has been most productive.

Description:

Nodes are the elements of the navigation tree structure of the MediaMonkey interface. The Magic Nodes is a script which offers a simple and highly configurable way of creating new nodes to help you manage your music library. The Magic Nodes are defined using masks which are loosely based on the way MediaMonkey auto-organize works.

This thread is intended to help users to find some specific Magic Nodes (MN) masks for their needs. If you want to use masks included in this thread, it is recommended to download latest "unofficial" version of the script. In the following thread you could find this modified version, which enable their work with 3.x version of MediaMonkey, but it has also many bug-fixes and additions: http://www.mediamonkey.com/forum/viewtopic.php?t=19168. If you are a first-time user of the MN, before you start using this script it is also recommended to download and read the manual in the PDF format: http://west-penwith.org.uk/misc/MagicNodes.pdf (it covers only v1.6.x version of the script) or even better: http://west-penwith.org.uk/misc/MagicNodes17.pdf (v1.7.x draft).

This thread is not intended to replace the manual. If you find some of included masks useful for you, but you wish they should have another sub-nodes or its different positions, e.g. instead of ...\<Artist>\<Albums> you want ...\<Genre>\Albums>, please read mentioned PDF manual first and you will see how is easy to modify the existing mask. Also state if you want to implement some qualifier, for example Trim to display only first character of Albums or Artist. By default, included masks are considered for use with MediaMonkey v3.x (MM3), but there are also some masks which could work only within MediaMonkey v2.x (MM2) and those masks are properly indicated.

Here you could find some of the masks which I wrote by myself, but in many cases they are written by other users and just copied from posts in the Forum. I'll be glad if you want to contribute with your own masks, so please post them in this thread. I have also a plan to include same MN masks with the next major upgrade of the MN script, to help inexperienced users who would choose them directly inside of the dialog box in MM. Masks which contain the Filter and SQL Filter qualifiers are the most welcome because they are harder to define for beginners who don't have SQL experience. I'd like to concentrate here on the hardest ones which are not so easy to construct, even after reading the manual.

Masks:

Instead of the tutorial in the mentioned PDF manual which starts with the easiest masks and slowly introduce more and more complicated ones, I think that I should first present the most wanted mask which is probably the most complicated. Some of you who was reading MN forum already know my opinion about Incomplete Albums masks/scripts (http://www.mediamonkey.com/forum/viewto ... 855#121855), but anyway here you could find currently most accurate solution for this, which is extracted from Bex's Tagging Inconsistencies. I highly recommend his script, even for incomplete albums (Missing Tracks), because it is easier to configure. For example, with it you could specify minimal song length for albums which have just one or two tracks (do you remember Tubular Bells?). If you need to do same settings with this MN mask, you need to change it, which is not so easy for beginners (here is a hint - go and find SongLength >= 2400000, the previous number is in milliseconds which is 40 minute):

Code: Select all

Incomplete Albums (Bex's algorithm)|SQL Filter:Songs.IDAlbum IN (SELECT IDAlbum FROM (SELECT Songs.IDAlbum IDAlbum FROM Songs, (SELECT IDAlbum, SUM(Non3Digits) AS CountNon3Digits, SUM(Cnt) AS Cont FROM (SELECT IDAlbum, COUNT(CASE WHEN Length(TrackNumber) = 3 THEN NULL ELSE 1 END) as Non3Digits, COUNT(*) AS Cnt, COUNT(CASE WHEN TrackNumber = '' THEN NULL ELSE 1 END) AS NonBlanks, MAX(Cast(TrackNumber as INTEGER)) AS MaxNr, COUNT(CASE WHEN SongLength >= 2400000 THEN 1 ELSE NULL END) AS SngLngth FROM Songs WHERE IDAlbum > 0 GROUP BY IDAlbum, TrackNumber) AS Inline1 GROUP BY IDAlbum HAVING COUNT(*) = SUM(Cnt) AND SUM(Cnt) = SUM(NonBlanks) AND MAX(MaxNr) > SUM(Cnt) AND (SUM(SngLngth) > 0 OR SUM(Cnt) >= 2)) Inline2 WHERE Songs.IDAlbum = Inline2.IDAlbum AND Songs.IDAlbum > 0 GROUP BY Songs.IDAlbum, CASE WHEN CountNon3Digits = 0 THEN Substr(TrackNumber, 1, 1) ELSE '0' END HAVING Cast(Substr(MIN(TrackNumber), -2, 2) as INTEGER) || (MAX(Cast(TrackNumber as INTEGER)) - MIN(Cast(TrackNumber as INTEGER)) + 1 - COUNT(*)) <> '10' AND MAX(cast(TrackNumber as INTEGER)) >= COUNT(*)) GROUP BY IDAlbum)\<Album|Statistic:Count(Tracks), Max(Track Number)>
If you take a look on the included Album qualifiers, you would see that nodes have displayed total number of tracks and the number of last track for each album, but you could change that to suit your needs as usual. Now, if you want a simpler and maybe faster mask which returns more tracks, even false positives, you could try the next one also by Bex (http://www.mediamonkey.com/forum/viewto ... 982#101982):

Code: Select all

Incomplete Albums|SQL filter: Songs.IDAlbum IN (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Count(TrackNumber) <> Max(CAST(TrackNumber AS integer)) AND Count(TrackNumber) > 1)\<Album|Statistic:Count(Tracks), Max(Track Number)>
Here is the opposite mask which displays complete albums with more than 3 tracks by nojac (http://www.mediamonkey.com/forum/viewto ... 986#101986):

Code: Select all

Complete Albums|SQL filter: Songs.IDAlbum IN (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Count(TrackNumber) = Max(Cast(TrackNumber As integer)) AND Count(TrackNumber) > 3)\<Album Artist>\<Album|Statistic:Count(All)>
Here we have complete albums which are rated with 1 star (http://www.mediamonkey.com/forum/viewto ... 467#112467):

Code: Select all

Complete Albums with 1 star|SQL filter: Songs.IDAlbum IN (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Count(*) >= Max(Cast(Songs.TrackNumber As Integer)) AND Count(*) > 3 AND Min(Cast(Songs.Rating / 20.0 + 0.5 As Integer)) = 1 AND Max(Cast(Songs.Rating / 20.0 + 0.5 As Integer)) = 1)\<Album>
The next masks are also wanted very often - they are for compilations. First is the simplest one:

Code: Select all

Compilations|Filter:<Album Artist> = 'Various Artists'\<Genre>\<Album|Statistic:Max(Year)>
Better thorgal67's solution takes in account albums where tracks have Artists different then Album Artists, but it only works in MM2 (http://www.mediamonkey.com/forum/viewto ... 709#113709):

Code: Select all

Compilations|SQL Filter: Songs.IDAlbum IN (SELECT DISTINCT Albums.ID FROM Albums INNER JOIN Songs ON Albums.ID = Songs.IDAlbum WHERE Albums.IDArtist <> Songs.IDArtist AND Songs.IDAlbum > 0)\<Genre>\<Album|Statistic:Max(Year)>
Here is the similar mask for MM3 (http://www.mediamonkey.com/forum/viewto ... 770#113770):

Code: Select all

Compilations|SQL Filter: Songs.IDAlbum IN (SELECT DISTINCT Songs.IDAlbum FROM Songs WHERE Songs.Artist <> Songs.AlbumArtist AND Songs.IDAlbum > 0)\<Genre>\<Album|Statistic:Max(Year)>
Bex's solution is more reliable in situations when someone have compilations with Album Artist's names same as Artist's names (http://www.mediamonkey.com/forum/viewto ... 731#113731):

Code: Select all

Compilations|SQL Filter: Songs.IDAlbum IN (SELECT IDAlbum FROM Songs WHERE IDAlbum > 0 GROUP BY IDAlbum HAVING Count(DISTINCT Artist) > 1)\<Genre>\<Album|Statistic:Max(Year)>
Here we have one mask for display of tracks without lyrics and one for tracks without a comment, they are grouped under Files To Edit node:

Code: Select all

<Group|Name:Problematic tracks|Show tracks:No|Child of:FilesToEdit|Position:Last child>\Tracks without lyrics|Filter:<Lyrics> = ''\<Title>

Code: Select all

<Group|Name:Problematic tracks|Show tracks:No|Child of:FilesToEdit|Position:Last child>\Tracks without comment|Filter:<Comment> = ''\<Title>
Of course, you could use the same grouping possibility to put Incomplete Albums inside of the Problematic tracks group, adding <Group|Name:Problematic tracks|Show tracks:No|Child of:FilesToEdit|Position:Last child>\ to the front of previously mentioned IA masks.

Now, if I have entered the Involved People field like this: vocal:Bono;guitar:The Edge;bass:Adam Clayton;drums:Larry Mullen, Jr. I could use the following mask and get displayed nodes with guitarists:

Code: Select all

Guitarists\<Involved people|Exclusive Right of:guitar:|Right until:;>
Big Isch has another example of using custom fields with multiple values (Custom 1 = "src.cd pkg.cd.2 tracks.12+9 kind.soundtrack albumvolume.92") with a help of Exclusive Right of / Right until qualifiers (http://www.mediamonkey.com/forum/viewto ... 689#125689):

Code: Select all

By Kind\<Custom 1|Unknown:No|Exclusive right of:kind.|Right until: >\<Artist>\<Album>
If we want to display some specific style (Prog-Rock) entered in the Custom 1 field, regardless on the number of separators (http://www.mediamonkey.com/forum/viewto ... 633#113633):

Code: Select all

Specific style (Prog-Rock)|Filter:<Custom 1> Like '%Prog-Rock%'\<Album Artist>\<Album>
If we want to display only tracks with a rating of 4 or more stars we should multiply this value with 20 to be able to use Filter qualifier. Here are modified node that displays all songs from the 70s by Pablo (http://www.mediamonkey.com/forum/viewto ... 5544#15544):

Code: Select all

Best of 70s|Filter:<Rating> >= 80 AND <Year> Between 1970 And 1979\<Artist>
The previous mask filters tracks without a regard if they are from same albums. Here we have one possible way of grouping tracks by the average track ratings for an album (http://www.mediamonkey.com/forum/viewto ... 113#129113):

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with average track rating >= 4 stars|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Avg(Rating) >= 80)\<Album|Statistic:Count(All), Avg(Rating)>

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with average track ratings >= 3 and less than 4|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Avg(Rating) Between 60 AND 79)\<Album|Statistic:Count(All), Avg(Rating)>

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with average track ratings >= 2 and less than 3|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Avg(Rating) Between 40 AND 59)\<Album|Statistic:Count(All), Avg(Rating)>

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with average track ratings >= 1 and less than 2|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Avg(Rating) Between 20 AND 39)\<Album|Statistic:Count(All), Avg(Rating)>

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with average track ratings less than 1|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Avg(Rating) Between 0 AND 19)\<Album|Statistic:Count(All), Avg(Rating)>
Here is an another way of grouping by the rating of albums (http://www.mediamonkey.com/forum/viewto ... 927#131927):

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with all tracks rated|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Min(Rating) >= 0)\<Album|Statistic:Count(All), Avg(Rating)>

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with some tracks rated|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Min(Rating) < 0 AND Max(Rating) >= 0)\<Album|Statistic:Count(All)>

Code: Select all

<Group|Name:Album Ratings|Show tracks:No>\Albums with no tracks rated|Filter:Songs.IDAlbum In (SELECT IDAlbum FROM Songs GROUP BY IDAlbum HAVING Max(Rating) < 0)\<Album|Statistic:Count(All)>
By the way, previous masks with the ratings by albums will be much shorter/easier with the next version of the MN script.

If you want to display artists who have more than one album (http://www.mediamonkey.com/forum/viewto ... 808#116808):

Code: Select all

Artists with more then one album|SQL filter:Songs.Artist IN (SELECT Songs.Artist FROM Songs, ArtistsSongs, Artists WHERE Songs.ID = ArtistsSongs.IDSong AND ArtistsSongs.IDArtist = Artists.ID AND Songs.IDAlbum > 0 AND (ArtistsSongs.PersonType = 1 OR ArtistsSongs.PersonType IS NULL) GROUP BY Artists.ID HAVING Count(DISTINCT Songs.IDAlbum)> 1)\<Artist>\<Album>
Here we have the same mask, but for MM2 (which is drastically slower):

Code: Select all

Artists with more then one album|SQL filter:Songs.IDArtist IN (SELECT CountArtist FROM (SELECT DISTINCT IDArtist AS CountArtist, IDAlbum FROM Songs WHERE IDAlbum > 0) GROUP BY CountArtist HAVING Count(CountArtist) > 1)\<Artist>\<Album>
Masks for duplicated tracks from same artists presented in http://www.mediamonkey.com/forum/viewto ... 996#112996 are very slow. Here we have much faster masks (2 second instead of 280 seconds) and they are more accurate:

Code: Select all

Tracks with same Name from same Artists|SQL Filter: Songs.SongTitle || '@#$' || Songs.Artist IN (SELECT SongTitle || '@#$' || Artist FROM Songs WHERE Length(SongTitle) > 0 GROUP BY SongTitle, Artist HAVING Count(*) > 1 AND Count(DISTINCT Artist) = 1)\<Title|Trim:1>\<Title>\<Artist>

Code: Select all

Tracks with same Name from same Artists with different ratings|SQL Filter: Songs.SongTitle || '@#$' || Songs.Artist IN (SELECT SongTitle || '@#$' || Artist FROM Songs WHERE Length(SongTitle) > 0 GROUP BY SongTitle, Artist HAVING Count(*) > 1 AND Count(DISTINCT Artist) = 1 AND Min(Rating) <> Max(Rating))\<Title|Trim:1>\<Title>\<Artist>
Here we have tracks with the same name from different artists, but only for MM2 (http://www.mediamonkey.com/forum/viewto ... 002#106002):

Code: Select all

Tracks with Same Name from different Artists|SQL Filter: Songs.SongTitle IN (SELECT DISTINCT Songs.SongTitle FROM Songs INNER JOIN Songs As Inline ON Songs.SongTitle = Inline.SongTitle AND Songs.ID <> Inline.ID AND Songs.IDArtist <> Inline.IDArtist)\<Title|Trim:1>\<Title>
Similar mask for MM3 (it is now much faster and more accurate):

Code: Select all

Tracks with same Name from different Artists|SQL Filter: Songs.SongTitle IN (SELECT SongTitle FROM Songs WHERE Length(SongTitle) > 0 GROUP BY SongTitle HAVING Count(DISTINCT Artist) > 1)\<Title|Trim:1>\<Title>\<Artist>
If you have read the PDF manual, you would know that you could replace <Title> with <Title|Sort by:Count(All)> and you will get tracks sorted by the number of different artists which is the fastest way to find most re-arranged track.

Here we have Bex's mask for artists who have tracks with different genres which works only in MM2 (http://www.mediamonkey.com/forum/viewto ... 2778#22778):

Code: Select all

Multiple Genres|SQL Filter:Songs.IDArtist IN (SELECT Inline.IDArtist FROM (SELECT Songs.IDArtist, Songs.Genre FROM Songs INNER JOIN Genres ON Songs.Genre = Genres.IDGenre GROUP BY Songs.IDArtist, Songs.Genre) As Inline GROUP BY Inline.IDArtist HAVING Count(Inline.IDArtist) > 1)\<Artist>\<Genre>
Here is the similar mask for MM3:

Code: Select all

Artists with different Genres|SQL Filter:Songs.Artist IN (SELECT Songs.Artist FROM Songs, ArtistsSongs, Artists, GenresSongs, Genres  WHERE Songs.ID = ArtistsSongs.IDSong AND ArtistsSongs.IDArtist = Artists.ID AND Songs.IDAlbum > 0 AND (ArtistsSongs.PersonType = 1 OR ArtistsSongs.PersonType IS NULL) AND Songs.ID = GenresSongs.IDSong AND GenresSongs.IDGenre = Genres.IDGenre GROUP BY Artists.ID HAVING Count(DISTINCT Genres.IDGenre) > 1)\<Artist>\<Genre>
Here is again Bex's mask for CBR tracks with different bitrates, but only for MM2 (http://www.mediamonkey.com/forum/viewto ... 2922#62922):

Code: Select all

Multiple Bitrates|SQL Filter:Songs.IDAlbum IN (SELECT Inline1.IDAlbum FROM (SELECT IDAlbum, Bitrate FROM Songs WHERE Songs.VBR = 0 GROUP BY IDAlbum, Bitrate HAVING IDAlbum > 0) Inline1 GROUP BY Inline1.IDAlbum HAVING Count(Inline1.IDAlbum) > 1)\<Album>\<Bitrate>
and MM2 again (http://www.mediamonkey.com/forum/viewto ... 3390#63390):

Code: Select all

Multiple Years in Album|SQL Filter:Songs.IDAlbum IN (SELECT Inline1.IDAlbum FROM (SELECT IDAlbum, Year FROM Songs GROUP BY IDAlbum, Year HAVING IDAlbum > 0) Inline1 GROUP BY Inline1.IDAlbum HAVING Count(Inline1.IDAlbum) > 1)\<Album>
and MM2 again (http://www.mediamonkey.com/forum/viewto ... 3399#63399):

Code: Select all

Multiple Genres in Album|SQL Filter:Songs.IDAlbum IN (SELECT Inline1.IDAlbum FROM (SELECT IDAlbum, Genre FROM Songs GROUP BY IDAlbum, Genre HAVING IDAlbum>0) Inline1 GROUP BY Inline1.IDAlbum HAVING Count(Inline1.IDAlbum)>1)\<Album>
and MM2 again (http://www.mediamonkey.com/forum/viewto ... 1664#71664):

Code: Select all

Multiple FileTypes|SQL Filter:Songs.IDAlbum IN (SELECT Inline1.IDAlbum FROM (SELECT IDAlbum, Right(SongPath, 3) FROM Songs GROUP BY IDAlbum, Right(SongPath, 3) HAVING IDAlbum > 0) Inline1 GROUP BY Inline1.IDAlbum HAVING Count(*) > 1)\<Album>\<Format>
Here are similar masks as previous, but for MM3:

Code: Select all

<Group|Name:Albums with multiple...|Show tracks:No>\Bitrates|SQL Filter:Songs.IDAlbum IN (SELECT IDAlbum FROM Songs WHERE IDAlbum > 0 AND Songs.VBR = 0 GROUP BY IDAlbum HAVING Count(DISTINCT Round(Bitrate / 1000)) > 1)\<Album>\<Bitrate|Statistic:Count(All)>

Code: Select all

<Group|Name:Albums with multiple...|Show tracks:No>\Years|SQL Filter:Songs.IDAlbum IN (SELECT IDAlbum FROM Songs WHERE IDAlbum > 0 AND CAST(substr(Songs.Year, 1, 4) AS integer) > 1900 GROUP BY IDAlbum HAVING Count(DISTINCT CAST(substr(Songs.Year, 1, 4) AS integer)) > 1)\<Album>\<Year|Statistic:Count(All)>

Code: Select all

<Group|Name:Albums with multiple...|Show tracks:No>\different Genres|SQL Filter:Songs.IDAlbum IN (SELECT IDAlbum FROM Songs, GenresSongs, Genres WHERE IDAlbum > 0 AND Songs.ID = GenresSongs.IDSong AND GenresSongs.IDGenre = Genres.IDGenre GROUP BY IDAlbum HAVING Count(DISTINCT Genres.IDGenre) > 1)\<Album>\<Genre|Statistic:Count(All)>

Code: Select all

<Group|Name:Albums with multiple...|Show tracks:No>\multi-item Genres|SQL Filter:Songs.IDAlbum IN (SELECT IDAlbum FROM Songs WHERE IDAlbum > 0 GROUP BY IDAlbum HAVING Count(DISTINCT Genre) > 1)\<Album>\<Genre|Statistic:Count(All)>

Code: Select all

<Group|Name:Albums with multiple...|Show tracks:No>\FileTypes|SQL Filter:Songs.IDAlbum IN (SELECT IDAlbum FROM Songs WHERE IDAlbum > 0 GROUP BY IDAlbum HAVING Count(DISTINCT Upper(CASE WHEN substr(Songpath, -3, 1) = '.' THEN substr(Songpath, -2, 2) WHEN substr(Songpath, -4, 1) = '.' THEN substr(Songpath, -3, 3) WHEN substr(Songpath, -5, 1) = '.' THEN substr(Songpath, -4, 4) WHEN substr(Songpath, -6, 1) = '.' THEN substr(Songpath, -5, 5) ELSE substr(Songpath, -6, 6) END)) > 1)\<Album>\<Format|Statistic:Count(All)>
Here are two Bex's masks for playlists (http://www.mediamonkey.com/forum/viewto ... 3515#63515):

Code: Select all

Songs In Playlist|SQL filter: Exists (SELECT * FROM PlaylistSongs WHERE IDSong = Songs.ID)\<Artist>

Code: Select all

Songs Not In Any Playlist|SQL filter: Not Exists (SELECT * FROM PlaylistSongs WHERE IDSong = Songs.ID)\<Artist>
If you want to find albums with the same name (http://www.mediamonkey.com/forum/viewto ... 987#105987):

Code: Select all

Albums with Same Name|SQL Filter: Songs.IDAlbum IN (SELECT DISTINCT Albums.ID FROM Albums INNER JOIN Albums As Inline ON Albums.Album = Inline.Album AND Albums.ID <> Inline.ID)\<Album with Album Artist>
Here are tracks with first 4 same characters of the comment, only MM2 (http://www.mediamonkey.com/forum/viewto ... 675#109675):

Code: Select all

Only tracks with similar Comment|SQL filter:Songs.ID IN (SELECT Memos.IDSong FROM Memos, (SELECT Left(Memos.MemoText, 4) AS Comment FROM Memos WHERE Memos.MemoType = 20001 GROUP BY Left(Memos.MemoText, 4) HAVING Count(*) > 1) As Inline WHERE Left(Memos.MemoText, 4) = Inline.Comment)\<Comment|Trim:4>
Similar mask as previous, but for MM3:

Code: Select all

Only tracks with similar Comment|SQL filter:substr(Songs.Comment, 1, 4) IN (SELECT substr(Comment, 1, 4) FROM Songs GROUP BY substr(Comment, 1, 4) HAVING Count(*) > 1)\<Comment|Trim:4>
Here are several masks with playing statistics where we have displayed same information as it is in the status bar of MM, but for each album in the tree:

Code: Select all

<Group|Name:Playing statistics>\Played Today|Filter:<Days since last played> = 0\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>

Code: Select all

<Group|Name:Playing statistics>\Played This Week|Filter:<Weeks since last played> = 0\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>

Code: Select all

<Group|Name:Playing statistics>\Played This Month|Filter:<Months since last played> = 0\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>

Code: Select all

<Group|Name:Playing statistics>\Played This Year|Filter:<Years since last played> = 0\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>

Code: Select all

<Group|Name:Playing statistics>\Played Yesterday|Filter:<Days since last played> = 1\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>

Code: Select all

<Group|Name:Playing statistics>\Played Previous Week|Filter:<Weeks since last played> = 1\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>

Code: Select all

<Group|Name:Playing statistics>\Played Previous Month|Filter:<Months since last played> = 1\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>

Code: Select all

<Group|Name:Playing statistics>\Played Previous Year|Filter:<Years since last played> = 1\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>
Similar masks could be created for <... since added> and <... since modified>, for example:

Code: Select all

<Group|Name:Added statistics>\Added Previous Week|Filter:<Weeks since added> = 1\<Album|Statistic:Count(All), Sum(File Size), Sum(Length)>
If you want to display number of albums for each artist and number of artists for each genre:

Code: Select all

Genre, Artist and Album (with number of items)\<Genre|Statistic:Count(Items)>\<Artist|Statistic:Count(Items)>\<Album|Statistic:Count(All)>
If you want to display albums sorted by Custom 1 and Year fields, but want to show Year in the front of album names instead of the Custom 1 field:

Code: Select all

Albums (sorted by Custom 1 and Year)\<Album|Sort by:Max(Custom 1), Max(Year)|Show Sort Key:2>
On the end, we have several specific masks:

Code: Select all

Tracks which have track leveling but no album leveling applied|Filter:Songs.NormalizeTrack > -999999.0 AND Songs.NormalizeAlbum = -999999.0\<Album>

Code: Select all

Artists with more than 30 characters in the name (including spaces)|SQL Filter:Length(Songs.Artist) > 30\<Artist>

Code: Select all

Artists with more than 5 words in the name|SQL Filter:Length(Songs.Artist) - Length(Replace(Songs.Artist, ' ','')) > 5\<Artist>

Code: Select all

One Hit Wonders\<Artist|Max tracks:5>
In the following thread there is somewhat older list of masks, almost all of them are for MM2: http://www.mediamonkey.com/forum/viewto ... odes+magic.
Last edited by ZvezdanD on Tue Mar 18, 2008 6:52 am, edited 3 times in total.

FEB
Posts: 83
Joined: Sat Mar 01, 2008 6:57 pm

Post by FEB » Mon Mar 03, 2008 4:01 am

Awesome! I can't wait to try these out!
(I was previously requesting this as a 'guest')

aidan_cage
Posts: 291
Joined: Mon Dec 11, 2006 9:45 pm

Post by aidan_cage » Mon Mar 03, 2008 11:40 am

I have been wanting to get into Magic Nodes for a while, but was spooked by the involved learning curve of setting it up
Thanks for this
really!
PEACE

Dreadlau
Posts: 1967
Joined: Sun Nov 25, 2007 6:49 am

Post by Dreadlau » Mon Mar 03, 2008 3:16 pm

Thanks ZvezdanD. :D

gege
Posts: 861
Joined: Tue Sep 05, 2006 2:10 pm
Location: Brazil

Post by gege » Mon Mar 03, 2008 4:00 pm

Hey, I have my two cents, I mean, two nodes to give:

First, I used trixmoto's Calculate Cover Size to put cover dimensions in "Custom 4" field. Then I set up these two Magic Nodes. I like all my covers to be square, so I separated square and rectangular covers in different nodes. Now I can easily find out which covers I need to get a better version of.

Code: Select all

<Group|icon:55|Name:Cover Dimensions|Show tracks:No>\Rectangular|Filter:cast(substr(Songs.Custom4,5) as integer) != cast(substr(Songs.Custom4,1,3) as integer)|icon:55\<Custom 4|statistic:count(all)>\<Album Artist with Album|Statistic:Max(Year)>

Code: Select all

<Group|icon:55|Name:Cover Dimensions|Show tracks:No>\Square|Filter:cast(substr(Songs.Custom4,5) as integer) = cast(substr(Songs.Custom4,1,3) as integer)|icon:55\<Custom 4|statistic:count(all)>\<Album Artist with Album|Statistic:Max(Year)>
By the way, the idea for these nodes came from here. Thanks fizzjob!

fizzjob
Posts: 401
Joined: Fri Mar 30, 2007 12:37 pm

Post by fizzjob » Mon Mar 03, 2008 5:41 pm

No problem! :)

Here are a couple of nodes I use in coordination with the Calculate Cover Size script, myself:

Code: Select all

Small Artwork by Size|Filter:cast(Songs.Custom3 as integer) < 000250000\<Custom 3>\<Album Artist>\<Album>

Code: Select all

Small Artwork by Artist|Filter:cast (Songs.Custom3 as integer) < 000250000\<Album Artist>\<Album>

Code: Select all

Multiple Artwork|Filter:cast(Songs.Custom2 as integer) > 1\<Custom 2>\<Album Artist>\<Album>
...and a more general-purpose one to identify where the art is stored. For any albums that are in their own folders, I like to have the artwork linked, but for odd-ball or miscellaneous tracks, I embed the art:

Code: Select all

Cover types\<cover storage>\<album artist>\<album>
Image

cadmanmeg
Posts: 309
Joined: Sun Nov 19, 2006 5:28 am

Post by cadmanmeg » Tue Mar 04, 2008 6:01 am

Very cool! I will certainly be checking this out....

Mesiaz
Posts: 12
Joined: Tue Dec 12, 2006 11:17 am

Post by Mesiaz » Tue Mar 04, 2008 2:21 pm

I'm looking for a magic node which will give me the albums (folders) in "d:\music" if <foldername>.txt exists in d:\music. I've tried messing with the IDFolder property but my lack of SQL knowledge is a problem. Can someone help?

ZvezdanD
Posts: 3090
Joined: Thu Jun 08, 2006 7:40 pm

Post by ZvezdanD » Wed Mar 05, 2008 3:58 am

Mesiaz wrote:I'm looking for a magic node which will give me the albums (folders) in "d:\music" if <foldername>.txt exists in d:\music.
I am not sure that understand what is a request and what is a structure of your folders. What is a <foldername>.txt? The file with TXT extension or album name? If the latter is a case, here is one possible solution:

Code: Select all

Albums in Music folder|Filter:substr(<Path>, 1, 7) = ':\music' AND <Path> Like '%\' || <Album> || '\%'\<Album>
Take a note that drive letter is not contained in the Path field. If your :\music folder contain sub-folders only with one level depth, this mask could be shorter/faster:

Code: Select all

Albums in Music folder|Filter:<Path> Like ':\music\' || <Album> || '\%'\<Album>
Next mask could be more useful for other people. It will display all albums where the album name is not contained in the file path:

Code: Select all

Album name not contained in the file path|Filter:<Path> Not Like '%\' || <Album> || '\%'\<Album>
Here is a mask which tests only last folder in the path, e.g. the album name in the path similar to ':My Music\Rock\Pink Floyd\Dark Side of the Moon\03 - Time.mp3':

Code: Select all

Album name different then last folder name|Filter:Songs.ID IN (SELECT Songs.ID FROM Songs, Folders WHERE Songs.Album <> Folders.Folder AND Songs.IDFolder = Folders.ID)\<Album>

ZvezdanD
Posts: 3090
Joined: Thu Jun 08, 2006 7:40 pm

Post by ZvezdanD » Sat Mar 15, 2008 12:32 pm

There are added several masks in the first post for MM3 (previously existed only MM2 masks): Albums with multiple Bitrates/Years/Genres/FileTypes and Only tracks with similar Comment.

Album Ratings masks are slightly simplified and because of that they are now maybe faster.

Lona
Posts: 37
Joined: Mon Jun 25, 2007 4:28 am

Post by Lona » Sun Mar 16, 2008 9:32 am

I'm using (just) two nodes (yet) in MM3 to put music on my portable device.
Display a list with the most played albums (nothing spectacular):

Code: Select all

Most played albums|icon:top level\<album|sort by:avg(played)|sort order:desc|top:5>
Display a list with the albums that have been added to the library latest:

Code: Select all

Last additions|shortcut:Ctrl+F8\<album|sort by:min(Days since added)|sort by:min(played)|min tracks: 5|top: 40>

ZvezdanD
Posts: 3090
Joined: Thu Jun 08, 2006 7:40 pm

Post by ZvezdanD » Tue Mar 18, 2008 6:56 am

You could find updated masks in the first post for "Tracks with same Name from same Artists" and "Tracks with same Name from different Artists". They are now drastically faster (2 seconds instead of 280 seconds) and more accurate.

nohitter151
Posts: 23640
Joined: Wed Aug 09, 2006 10:20 am
Location: NJ, USA
Contact:

Post by nohitter151 » Sat Apr 05, 2008 4:23 pm

I'm trying to create a list of tracks where Artist does not equal Original Artist. Could someone help me find out how to make such a node if possible? (I am cross posting this in "Easy/fast nested nodes & FilesToEdit hiding" to get a feel of my options).
MediaMonkey user since 2006
Need help? Got a suggestion? Can't find something?

Please no PMs in reply to a post. Just reply in the thread.

ZvezdanD
Posts: 3090
Joined: Thu Jun 08, 2006 7:40 pm

Post by ZvezdanD » Sat Apr 05, 2008 6:42 pm

nohitter151 wrote:I'm trying to create a list of tracks where Artist does not equal Original Artist.
This should work:

Code: Select all

Artist does not equal Original Artist|Filter:<Artist> <> <Original Artist> \<Artist>
The space character on the end of the filter expression is necessary in this case because of the bug in the script (">" is not allowed as the last character of the expression). I'll resolve this drawback ASAP.

nohitter151
Posts: 23640
Joined: Wed Aug 09, 2006 10:20 am
Location: NJ, USA
Contact:

Post by nohitter151 » Sat Apr 05, 2008 6:57 pm

ZvezdanD wrote:
nohitter151 wrote:I'm trying to create a list of tracks where Artist does not equal Original Artist.
This should work:

Code: Select all

Artist does not equal Original Artist|Filter:<Artist> <> <Original Artist> \<Artist>
The space character on the end of the filter expression is necessary in this case because of the bug in the script (">" is not allowed as the last character of the expression). I'll resolve this drawback ASAP.
Thanks for your help ZvezdanD. When I try this node, it still shows me tracks with multiple artists though they are the same as the original artists.

ie.
Artist - Amy Lee; Seether
Original Artist - Amy Lee; Seether

Am I correct in assuming that this is because original artist does not support multiple values?

Is there any way around this?
MediaMonkey user since 2006
Need help? Got a suggestion? Can't find something?

Please no PMs in reply to a post. Just reply in the thread.

Post Reply