How to Create Your Own Custom Navigation Trees

General discussion about the media server. Feature requests. Hints, tips and tricks.
Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Sat Feb 28, 2009 10:43 pm

How Advanced Users Can Create Their Own Custom Navigation Trees

Since TwonkyMedia manager came out, people have been asking how they can customize the navigation trees that are used to browse media on TwonkyMedia server. Classical fans want to add several composer-based trees. Users with incredibly large libraries want to change Artist Index, so it only displays a single letter at a time, and so on.

For some time now we've been promising to post instructions that will help technical users do this. I'm pleased to announce these instructions are finally ready. Special thanks go to Burkhard Gauss for taking the time to do this.

Although most users won't be able to do this on their own. Our goal is that the high-technical users on this forum (and there are many of these), will post trees they create here, so others can use them.

Some really good examples of custom trees can be seen here: Make sure to scroll down past the contest section. http://www.twonkyforum.com/viewtopic.php?f=24&t=6341&start=0


Please Read This Before Downloading

- DO NOT attempt this if you are not a technical user. These instructions are for those who have edited XML files before.
- Always make a backup of your files BEFORE you edit them. This way you can go back if things don't turn out as planned.
- DO NOT send questions about this to our Web site e-mail support. They will not be able to help you. This is an officially unsupported feature.
- DO post your questions here so others can help you.
- DO post your custom nav trees here after you've tested them. Make sure to include detailed descriptions with tree headings and subheadings.
- Do NOT delete the "Genre", "Artist" or "Album" trees. TwonkyMedia manager needs these to run properly.

That should be enough dos and don'ts for now. Here is the file you've all been waiting for:
TMS-View-Configuration.zip
(150.38 KiB) Downloaded 10026 times


UPDATE: Please notice there is a now an addendum attached here that covers some of the changes which have occurred in TwonkyMedia server 5.1.

- Rick
Attachments
TMS-5-1-View Configuration.zip
(217.63 KiB) Downloaded 6726 times
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

Metaman
Posts: 1
Joined: Fri Dec 19, 2008 11:27 am
AV Hardware: Synology DS-207+
Sony PS3
Denon AVR-3808A

Re: How Advanced Users Can Create Custom Nav Trees

Postby Metaman » Mon Mar 02, 2009 10:56 am

Thank you for this long awaited instruction. I will test it within the next days on my Synology DS-207+.

User avatar
mgillespie
Posts: 1222
Joined: Fri Jul 08, 2005 1:19 pm
AV Hardware: TwonkyMedia AV UPnP Mediaserver (Marvell Kirkwood ARM Sheevaplug with Debian Squeeze).
2x Noxon V2 audio client
1x PS3 Slim 500GB Audio/Video UPnP client.
1x Sony VGF-CP1 Wireless Photoframe.
Location: UK

Re: How Advanced Users Can Create Custom Nav Trees

Postby mgillespie » Mon Mar 02, 2009 8:13 pm

After having a quick look at the document, it's instantly clear that the customizable views that TMS5 offers, is huge step forward over what TMS4 offered. IMHO with this and the huge reliability/compatibility improvements in the TMS 5.0.55 build, it's a compelling reason to for those holding out because of problems or lack of customization, to reevaluate TMS5.

Myself, I have been able to permanently move to TMS5 for my day to day server use.
Please note: Moderators here are voluntary and do not work for PacketVideo or Twonky, please do not attack us. Any posts are personal opinion, and may not be those of PV/Twonky.

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How Advanced Users Can Create Custom Nav Trees

Postby Briain » Tue Mar 03, 2009 1:13 pm

Hi

Absolutely fantastic; I can't wait to get experimenting with it. Many thanks to Burkhard for pulling this together for us.

Bri

michaeljhuman2
Posts: 7
Joined: Sun Mar 08, 2009 1:29 am
AV Hardware: Win XP PC
Yamaha RX-V3900, PS3, XBox 360

Re: How to Create Your Own Custom Navigation Trees

Postby michaeljhuman2 » Sun Mar 08, 2009 2:46 am

Hello,

I downloaded the trial of media manager. And I was able to create a custom view using the default XML file.

As the directions explained, I am supposed to create a separate file to contain my view. So I tried that. To keep it simple, I copied the simple demo example, created a file called demo.view.xml, and put it in the c:\program files\twonkymedia\resources\views directory.

But no matter what I tried, the new view would not show as an option in the server options. I restarted the server, I reloaded the database, I even resintalled Twonky.

User avatar
mikle_01
Posts: 208
Joined: Sat Jul 09, 2005 11:32 am
Location: Germany, Kiel

Re: How to Create Your Own Custom Navigation Trees

Postby mikle_01 » Sun Mar 08, 2009 11:04 am

I made the same experience....try a couple of xml put in the resources\views directory. Should there be the same name as the original!? This is my "simpleview.xml to list only folders (as described in the pdf) :

<view name='simple' path='simple.view' >
<include>
<tree path='*' />
</include>
<navtree>
<container> … </container>
</navtree>
</view>
<container
name='videos' id='video'
sortcriteria='+dc:title'
upnp:originalTrackNumber='1'
createClass=
'object.item.videoItem.movie,object.item.videoItem.online.movie'
class='object.container'
>
<container
name='byfolder'
id='video/folders'
class='object.container.storageFolder'
restricted='0'
createClass='object.item.videoItem.movie'
>
<container
buildon='res'
sortcriteria='+dc:title'
createClass='object.item.videoItem.movie'
class='object.container.storageFolder'
/>
</container>
</container>
</navtree>
</view>


But no luck...
NAS: Synology DS211j 4TB with Twonky 6.0.31 "Kirkwood"- Clients: Philips Streamium NP2500, Sagem "My Dual 700", WD TV Live Gen.2 + Gen.3, - TV:Philips 42PFL8654

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Mon Mar 09, 2009 1:45 am

I'm checking to get an answer for both of you. I'll make a post here as soon as I get an answer.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Mon Mar 09, 2009 4:45 pm

I just got a response from Berlin on this. Apparently there is a bug in the view module that prevents additional views from being used. The bug itself is fixed in version 5.0.55, but the engineer says this version hasn't been posted yet.

As a workaround, you can replace the default.view.xml file with your custom one. Always make a copy of the original XML file before replacing it however.

Let me know if this doesn't work for you. Thanks.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

michaeljhuman2
Posts: 7
Joined: Sun Mar 08, 2009 1:29 am
AV Hardware: Win XP PC
Yamaha RX-V3900, PS3, XBox 360

Re: How to Create Your Own Custom Navigation Trees

Postby michaeljhuman2 » Mon Mar 09, 2009 6:57 pm

Oh, replacing the default definitely works. I just added my own view stuff to it. I asked because the directions specifically stated not to do that :) It seemed ok, and my album index view worked but you never know if something odd was going to break somewhere.

It's a perfectly fine workaround for now.

In my mind, Twonky would be painful to use without an album index view (I have a lot of compilation albums), so I was excited about the ability to add one :)

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Mon Mar 09, 2009 9:32 pm

Glad to hear this is working for you. Would you mind posting your modified view here, so others can learn from it?

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

michaeljhuman2
Posts: 7
Joined: Sun Mar 08, 2009 1:29 am
AV Hardware: Win XP PC
Yamaha RX-V3900, PS3, XBox 360

Re: How to Create Your Own Custom Navigation Trees

Postby michaeljhuman2 » Tue Mar 10, 2009 3:02 am

I modified the music view in the default.view.xml. What I post here replaced all <container> tags underneath the music container tag.

* I removed the radio station container, as I saw little use for it
* I changed the visibility of the two genre related tags to not show up in enchanced, as I felt they were not very useful to me. It's easy to add enchanced to their visibility
* I added album index, which works very much like the artist index container
* I removed the artist/album view because it was very much like the artist index view, but without the index. If you have 100's of artists, it was tedious to shift through

Remaining, in the enchanced view, is Album index, Artist index, Folder, and Playlists. I wanted to add a song index, but I can't figure out how to do it. There does not seem to be a upnp:track to build on, unlike artist and album.

Posted here were the modifications I made between the <container name=music...> and it's end tag.

<container name='alltracks' visibility="ipod,simple" id='music/all' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'/>

<container name='Album Index' visibility="enhanced" id='music/albumindex' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:album[3]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:album' sortcriteria='+dc:title' class='object.container.person.musicArtist' createClass='object.item.audioItem.musicTrack'>
</container>
</container>
</container>

<container name='artistindex' visibility="enhanced" id='music/artistindex' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:artist[3]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container.person.musicArtist' createClass='object.item.audioItem.musicTrack'>
<container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container' />
<container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum' />
</container>
</container>
</container>

<container name='genre' visibility="ipod,simple" id='music/genre' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.musicTrack' />
</container>

<container name='genreartist' visibility="ipod,simple" id='music/genreartistalbum' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.musicTrack'>
<container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container' >
<container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container' />
<container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum' />
</container>
<container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container' />
<container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum' />
</container>
</container>
</container>

<container name='artist' visibility="ipod,simple" id='music/artists' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container' />
<container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container.person.musicArtist' createClass='object.item.audioItem.musicTrack' />
</container>

<container name='album' visibility="ipod,simple" id='music/albums' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container' >
<container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum' />
</container>

<container name='composer' visibility="ipod" id='music/composers' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container' >
<container buildon='upnp:author@role' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum' />
</container>

<container name='folder' visibility="simple,enhanced" id='music/folders' class='object.container.storageFolder' createClass='object.item.audioItem.musicTrack'>
<container buildon='res' sortcriteria='+upnp:originalTrackNumber,+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container.storageFolder' />
</container>

<container name='playlists' id='music/playlists' class='object.container' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' sortcriteria='+upnp:originalTrackNumber,+dc:title' restricted='0' flags='pv:playlistRoot=Music' >
<container name='playlistrecentlyadded' filteron='pv:addedLast60' sortcriteria='-pv:addedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='3' restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1' />
<container name='playlistmostplayed' filteron='pv:playcount' sortcriteria='-pv:playcount' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='1' restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1' />
<container name='playlistlastplayed' filteron='pv:lastPlayedTime' sortcriteria='-pv:lastPlayedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='2' restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1' />
<container name='playlisthighlyrated' filteron='pv:highrated' sortcriteria='-pv:rating' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='4' class='object.container.playlistContainer' restricted='1' flags='pv:smartplaylist=1' />
<container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' upnp:originalTrackNumber='5' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' class='object.container.playlistContainer' />
</container>

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Tue Mar 10, 2009 9:57 pm

This is great Micheal. Thanks for posting this. I can't wait to try it.

It would be great if someone else could post the following:
1. A custom tree for classical music fans that has a lot of composer variations.
2. A custom tree for those with really large libraries that need a single letter artist index.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

michaeljhuman2
Posts: 7
Joined: Sun Mar 08, 2009 1:29 am
AV Hardware: Win XP PC
Yamaha RX-V3900, PS3, XBox 360

Re: How to Create Your Own Custom Navigation Trees

Postby michaeljhuman2 » Wed Mar 11, 2009 12:09 am

(2) is as simple as going to the artist index section, and changing artist[3] to artist[1]

I leave (1) to people more motivated than myself :)

martinuse
Posts: 3
Joined: Thu Mar 12, 2009 12:37 pm
AV Hardware: PopCorn Hour; MP101;
Location: Frankfurt

Re: How to Create Your Own Custom Navigation Trees

Postby martinuse » Thu Mar 12, 2009 10:45 pm

I've tried to apply the alpha-grouping mechanism to playlists, but I haven't been able to get it to work. This was (one of) my attempts:

<container name='my playlists' class='object.container' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' sortcriteria='+upnp:originalTrackNumber,+dc:title' >
<container buildon='upnp:playlist[3]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' upnp:originalTrackNumber='5' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' class='object.container.playlistContainer' />
</container>
</container>

what am I doing wrong?

cheers
Martin

michaeljhuman2
Posts: 7
Joined: Sun Mar 08, 2009 1:29 am
AV Hardware: Win XP PC
Yamaha RX-V3900, PS3, XBox 360

Re: How to Create Your Own Custom Navigation Trees

Postby michaeljhuman2 » Fri Mar 13, 2009 1:44 am

Why do you have two containers with buildon playlist? Did you try using just the one with the [3] on it?

martinuse
Posts: 3
Joined: Thu Mar 12, 2009 12:37 pm
AV Hardware: PopCorn Hour; MP101;
Location: Frankfurt

Re: How to Create Your Own Custom Navigation Trees

Postby martinuse » Fri Mar 13, 2009 12:29 pm

Well, I've tried with and without the inner container. Both have the same result, namely that the playlists are simply listed without intermediate alpha-grouping.

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Fri Mar 13, 2009 1:15 pm

TMM_Product_Manager wrote:This is great Micheal. Thanks for posting this. I can't wait to try it.

A custom tree for those with really large libraries that need a single letter artist index.

- Rick


Hi

I'm getting there. I've built up a tree.view.xml file which adds two new trees to the existing default list (i.e. I've not touched the default.view file) and hope to post something soon. I've still a few bugs to sort with it but can't be far away now.

It'd be good if the document contained a few more worked examples such that it would be easier to reverse engineer them into solutions. It woud also help if the class list was enhanced (for example, class='object.container.person.musicArtist' is used in the default.view but not mentioned in the document).

Bri

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Fri Mar 13, 2009 7:04 pm

martinuse wrote:I've tried to apply the alpha-grouping mechanism to playlists, but I haven't been able to get it to work. This was (one of) my attempts:

<container name='my playlists' class='object.container' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' sortcriteria='+upnp:originalTrackNumber,+dc:title' >
<container buildon='upnp:playlist[3]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
<container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' upnp:originalTrackNumber='5' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' class='object.container.playlistContainer' />
</container>
</container>

what am I doing wrong?

cheers
Martin


Hi Martin,

You're not doing anything wrong. There is currently no alpha grouping on playlists. We're updating the tree customization document to make this clear. :(

I'm submitting this as a feature request, but I don't know if and when this can be addressed.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Fri Mar 13, 2009 7:08 pm

Briain wrote:
It'd be good if the document contained a few more worked examples such that it would be easier to reverse engineer them into solutions. It woud also help if the class list was enhanced (for example, class='object.container.person.musicArtist' is used in the default.view but not mentioned in the document).

Bri


I agree. We might even include some of the examples posted here. With permission of course.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

martinuse
Posts: 3
Joined: Thu Mar 12, 2009 12:37 pm
AV Hardware: PopCorn Hour; MP101;
Location: Frankfurt

Re: How to Create Your Own Custom Navigation Trees

Postby martinuse » Fri Mar 13, 2009 11:28 pm

Hi Rick,

thanks for the response. It would be nice to be able to structure playlists. Having looked at quite a number of software and hardware devices, it seems that playlists are somewhat neglected. It would be nice feature for twonky.

cheers

Martin

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Sat Mar 14, 2009 12:39 pm

Hi

Update: 2nd June 2009: I have massively revised the code (compared to the below post) to make it much more appropriate for all users (including those who don't use the albumartist tag). Please see my latest post
(click here to navigate to it) which has the latest code attached for download and details of what it does. I currently use it with 5.0.55 on my ReadyNAS and have tested it with 5.0.65 on my PC.

Bri


----

Hi Folks

I've tried my custom tree on a PC based TMS5.0.55 containing 27GB of FLAC tracks (about 1200 FLAC files) and it works really well. It does however break the three default views (iPodlike etc). When any of the defaults are selected, all that is shown in the media browser is the Music tree and all that it contains are Handpicked Radio and Playlists.

I also tried adding the new (TecScot.view.xml) file to my NAS (with only a few albums selected in the sharing path) and again, it worked fabulously (well, apart from again breaking the default views). The ability to nest alpha-groups into 4 then 1 is really fabulous and I can't wait to get a working version such that I can use this feature!

When I changed the NAS version sharing path to include all the tracks (now about 15,000 FLAC tracks), the database expands to 10GB (it was 2.7GB for all tracks and only the default.view.xml file). Also, the database seems to get very badly corrupted and not display anything correctly. Things like the alpha grouping are all in the wrong structure and wrong order. As well as that and they contain only a few items and things like artists are shown in the titles containers. In other words, it displays a lot of random unsorted rubbish.

I also noticed that changing the shareing path to point at only a single album and then doing a db rebuild (which took several hours) didn't remove anything; it stayed at 10GB and the view.old directory increased to 1.3GB. I realise that the blame for the size of these directories is partly due to Netgear using 16k blocks, but still, they are way too large and contain 10's and 10's of thousands of files and directories.

I'd suspect that my xml is maybe not all correct, but the fact that it works so well when only dealing with a 100 or so albums makes me wonder if it is me that's causing this or whether part of the blame is that TMS is creating thousands of files per additional container? The fact that it breaks the default views also gives me cause for concern; even assuming my XML is totally defective, I can't see how it could completely break the existing views.

Hope this helps and it would be good to know what's going on. I'm also now of the opinion that you should consider publishing a few more examples (something like a working version of my own tree) as examples of what the code should look like would very much help people to build their own code (and save your forum exploding with questions).

The example below was saved as TecScot.view.xml. I also created a longer version to try to incorporate the picture and video trees but as with the default views, my new file simply showed the music container and no picture or video ones.

Code: Select all

<view name='TecScot' path='TecScot.view' subviews="Music_Short,Music_Long">
<include>
<tree path='*' />
</include>
<navtree sortcriteria='+upnp:originalTrackNumber'>
<container name='music' id='music' multiview='1'
sortcriteria='+dc:title' upnp:originalTrackNumber='1' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack'>
   <container name='1 Browse All Albums' visibility="Music_Short,Music_Long" id='music/albums' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack' >
   <container buildon='upnp:album[1]' sortcriteria='+dc:title' Class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   </container>
   <container name='2 Album Artist ~ Find Album' visibility="Music_Short,Music_Long" id='music/albumartists' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:albumArtist[4]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:albumArtist[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:albumArtist' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   </container>
   </container>
   </container>
   <container name='3 Song Artist ~ Find Albums' visibility="Music_Short,Music_Long" id='music/artists' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:artist[4]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
   <container buildon='upnp:artist[1]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
   <container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
   <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   </container>
   </container>
   </container>
   <container name='4 Tunes ~ Find Album' visibility="Music_Short,Music_Long" sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='dc:title[4]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='dc:title[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='dc:title' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   </container>
   </container>
   </container>
   <container name='5 Tunes ~ List All Tunes' visibility="Music_Short,Music_Long" id='music/all' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'>
   <container buildon='dc:title[4]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='dc:title[1]' albumart='0' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'/>
   </container>
   </container>
   <container name='6 composer' visibility="Music_Short,Music_Long" id='music/composers' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'>
   <container buildon='upnp:author@role' albumart='0' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   <container name='folder' visibility="Music_Long" id='music/folders' class='object.container.storageFolder' createClass='object.item.audioItem.musicTrack'>
   <container buildon='res' albumart='1' sortcriteria='+upnp:originalTrackNumber,+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container.storageFolder'/>
   </container>
   <container name='genrealbum' visibility="Music_Short,Music_Long" sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   </container>
   <container name='genreartist' visibility="Music_Long" id='music/genreartistalbum' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'/>
   <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.musicTrack'>
   <container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'>
   <container name='allname' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'/>
   <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   <container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'/>
   <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
   </container>
   </container>
   </container>
   <container name='genre' visibility="Music_Long" id='music/genre' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
   <container buildon='upnp:genre' albumart='0' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.musicTrack'/>
   </container>
   <container name='playlists' id='music/playlists' class='object.container' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' sortcriteria='+upnp:originalTrackNumber,+dc:title'   restricted='0' flags='pv:playlistRoot=Music'>
   <container name='playlistrecentlyadded' filteron='pv:addedLast60' sortcriteria='-pv:addedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='3' restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
   <container name='playlistmostplayed' filteron='pv:playcount' sortcriteria='-pv:playcount' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='1'  restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
   <container name='playlistlastplayed' filteron='pv:lastPlayedTime' sortcriteria='-pv:lastPlayedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='2' restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
   <container name='playlisthighlyrated' filteron='pv:highrated' sortcriteria='-pv:rating' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='4' class='object.container.playlistContainer' restricted='1'  flags='pv:smartplaylist=1'/>
   <container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' upnp:originalTrackNumber='5' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' class='object.container.playlistContainer'/>
   </container>
   <container buildon='pv:onlineServiceTitle'  sortcriteria='+pv:onlineServiceTitle' createClass='object.item.audioItem.online.musicTrack' class='object.container'>
   <container name='allstations' sortcriteria='+dc:title' createClass='object.item.audioItem.online.musicTrack' class='object.container'/>
   <container name='genrestation' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
   <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.online.musicTrack' >
   </container>
   </container>
   <container name='stationindex' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
   <container buildon='dc:title[3]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
   </container>
   </container>
   </container>
</container>
</navtree>
</view>

So the big questions: is my crappy code breaking TMS5 or is TMS5 breaking itself due to the db size?
Last edited by Briain on Wed Jun 03, 2009 11:48 am, edited 1 time in total.

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Sun Mar 15, 2009 2:28 pm

Hi

Another person I know has tried 5.0.55 with a large collection (more than twice the size of mine) and he too has found problems with it (using just the bundled default views). Judging from both our findings, it looks like the database is just growing way too big and that adding any custom containers expands it to ever greater size.

It also seems worth pointing out that changing the ‘sharing path’ and performing a database rebuild doesn’t remove the structure as defined by the previous path.

I’d love to use TMS5 as being able to design nested alpha-grouping makes this product outrageously great, but at the same time, it also seems to increases the database size so much that the product breaks and is thus a total 'show-stopper'. Any chance of an indication on whether this issue will be looked at and what the intended timeline might (very approximately) look like?

Bri

bump
Posts: 50
Joined: Sun Mar 15, 2009 3:58 pm
AV Hardware: NA

Re: How to Create Your Own Custom Navigation Trees

Postby bump » Sun Mar 15, 2009 4:01 pm

There is an interesting discussion going on here as well:

http://forums.linn.co.uk/bb/showthread. ... 707&page=7

I hope the Twonky folks will read this as well!

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Sun Mar 15, 2009 5:23 pm

Hi

Update: 2nd June 2009: I have massively revised the code (compared to the below post) to make it much more appropriate for all users (including those who don't use the albumartist tag). Please see my latest post
(click here to navigate to it) which has the latest code attached for download and details of what it does. I currently use it with 5.0.55 on my ReadyNAS and have tested it with 5.0.65 on my PC.

Bri


----

It would be great if the database wasn't so big and thus it worked! I've found the following sizes using the PC version:

Original tree db: 50 FLAC Tracks = 1251 files in 573 folders
Add my new tree: 50 FLAC tracks = 2139 files in 1010 folders

With 1200 Flac files (and my trees) 12,758 files in 6005 folders
Size is 2.82 MB but (on an NTFS partition) is 51MB
Block size is bigger on a NAS so it'd be much lager again (in my case, it was 11.3GB for 15,000 flac files).

Incidentally, the below are samples from the code I've posted up a bit and enable navigation as shown in the attached screen dumps. It gives an idea of what I'm trying to achieve (for fast navigation). The main menu shows the Music_Short selected tree (which just has genre/album) and the Music_Long one has the other two genre selections (as shown by the Twonky supplied tree).

Sorry the images are too big to fit but they do show tha art and list the tracks

Code: Select all

   <container name='3 Song Artist ~ Find Albums' visibility="Music_Short,Music_Long" id='music/artists' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:artist[4]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:artist[1]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>


Image

The albumartist code: again, only a few albums so the lists are very small (well, in this case just one) and also see the Music_Long tree:

Code: Select all

   <container name='2 Album Artist ~ Find Album' visibility="Music_Short,Music_Long" id='music/albumartists' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist[4]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>

Image
Last edited by Briain on Wed Jun 03, 2009 11:49 am, edited 2 times in total.

asanderson
Posts: 2
Joined: Sat Feb 14, 2009 9:06 pm
AV Hardware: Centos Linux
Philips Streamium
SoundBridge

Re: How to Create Your Own Custom Navigation Trees

Postby asanderson » Sun Mar 15, 2009 9:40 pm

One issue I've come across with the XML views, if you use the sort criteria of originalTrackNumber it does not take into account any zero padding therefore if you are playing an album the track order becomes track 1,10,11,12,13,14,15,16,17,18,19,2,20,21,etc. instead of its normal flow of track 01,02,03,etc.

Is there anyway to get around this in it's present form or would this have to be a development request?

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Mon Mar 16, 2009 12:53 am

bump wrote:There is an interesting discussion going on here as well:

http://forums.linn.co.uk/bb/showthread. ... 707&page=7

I hope the Twonky folks will read this as well!


Twonky folks read each and every post made in the TMM section of this forum. Even on Sundays (like today). We are serious about getting these issues fixed.

How serious are we? We have exchanged a large number of e-mails with Bri about this and even asked him to send us a hard drive containing all of his content so we could replicate these issues. Which he has done.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Mon Mar 16, 2009 2:10 am

Briain wrote:Hi

Another person I know has tried 5.0.55 with a large collection (more than twice the size of mine) and he too has found problems with it (using just the bundled default views). Judging from both our findings, it looks like the database is just growing way too big and that adding any custom containers expands it to ever greater size.

...Any chance of an indication on whether this issue will be looked at and what the intended timeline might (very approximately) look like?

Bri


Hi Bri,

I'll talk to Christian about this tomorrow (since he's in San Diego this week) and let you know what he says.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

User avatar
mgillespie
Posts: 1222
Joined: Fri Jul 08, 2005 1:19 pm
AV Hardware: TwonkyMedia AV UPnP Mediaserver (Marvell Kirkwood ARM Sheevaplug with Debian Squeeze).
2x Noxon V2 audio client
1x PS3 Slim 500GB Audio/Video UPnP client.
1x Sony VGF-CP1 Wireless Photoframe.
Location: UK

Re: How to Create Your Own Custom Navigation Trees

Postby mgillespie » Mon Mar 16, 2009 9:13 am

Just to chip in here. Back in the old days, with 4.x, every node you added in the custom view massively increased the memory footprint of the server. We know how limited NAS devices are on memory and cpu resources, so it sounds like a really bad idea to create additional tree views with LOTS of music, as that sounds like a sure-fire recipe on how to exhaust NAS memory.

Out of interest, have you tried to replicate the same behaviour on a PC with more resources?
Please note: Moderators here are voluntary and do not work for PacketVideo or Twonky, please do not attack us. Any posts are personal opinion, and may not be those of PV/Twonky.

bump
Posts: 50
Joined: Sun Mar 15, 2009 3:58 pm
AV Hardware: NA

Re: How to Create Your Own Custom Navigation Trees

Postby bump » Mon Mar 16, 2009 7:32 pm

TMM_Product_Manager wrote:
Twonky folks read each and every post made in the TMM section of this forum. Even on Sundays (like today). We are serious about getting these issues fixed.

How serious are we? We have exchanged a large number of e-mails with Bri about this and even asked him to send us a hard drive containing all of his content so we could replicate these issues. Which he has done.

- Rick


Hi Rick, thats great. I appreciate your commitment to getting a quality product out that is satisfying your customer base - as I know a lot of them that are currently mightily frustrated about the bugs they get for their bucks !!

Bump

bump
Posts: 50
Joined: Sun Mar 15, 2009 3:58 pm
AV Hardware: NA

Re: How to Create Your Own Custom Navigation Trees

Postby bump » Mon Mar 16, 2009 7:47 pm

mgillespie wrote:Just to chip in here. Back in the old days, with 4.x, every node you added in the custom view massively increased the memory footprint of the server. We know how limited NAS devices are on memory and cpu resources, so it sounds like a really bad idea to create additional tree views with LOTS of music, as that sounds like a sure-fire recipe on how to exhaust NAS memory.

Out of interest, have you tried to replicate the same behaviour on a PC with more resources?


No issues whatsoever at this end with a pretty complex user defined tree and almost 40.000 FLAC files on a Readynas NV+ under 4.4.9. Moving from there to 5.0.55 and the whole NAS goes totally bonkers !! It had to be reset to factory defaults.

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Tue Mar 17, 2009 3:53 pm

Hi Folks

Nice and Sunny in Scotland today; hope it's the same wherever you are!

Most of my testing has been on a PC as it enables much faster rebuilds than on a NAS. The above post contains the actual file sizes taken from the PC tests and are as repeated below:

Original tree db: 50 FLAC Tracks = 1251 files in 573 folders
Add my new tree: 50 FLAC tracks = 2139 files in 1010 folders

With 998 Flac files (and my tree) 12,758 files in 6005 folders
Size is 2.82 MB but disk space used (on an NTFS partition) is 51MB

On the NAS, running either ps aux or top shows that Twonky uses remarkably little cpu/memory resources (much less than SqueezeCentre; which I have removed to enable the NAS to operate at max performance) but navigating to the /c/webroot and running du -h shows the size of the Twonky folder (which is massive compared to a PC installation; most likely due to the 16K block size set by Netgear).

What I don't know is how it would perform on a partition with a smaller block size (maybe I need to think about changing my NAS supplier; an option I would actually consider if I know it's going to enable TMS5 to work) but my concern is still that the database is so big that it might still cause problems. If the above NTFS results are correct, it would imply that the physical disk usage on a Windows/NTFS machine would maybe be in the order of 600MB (for 15K FLACS)* which is still a bit large but might indeed work. I'll try copying a few thousand files from my NAS to my PC and see how it scales up (give me a day before I get the results as it'll take a while to copy them over).

I've still to work out how to add a couple more selection criteria (artist/tunes ie artist[1][4]) to my own tree but of course this will expand things even further and thus likely cause more problems.

Whatever results I do get trying this on NTFS, my thoughts are that for only 1200 Flac files (and my basic additional tree), to generate 12,758 files in 6005 folders would seem a bit excessive. It's good to spot this now as it might also be indicative of a general problem for anyone who has a really large collection (even using the default tree structure in a Windows or WHS environment).

Hope that helps
Bri

* I've just thought of a new word; kiloflac (15 kiloflacs = 15000 flac files). I wonder if it'll catch on? Do you think we can set a goal to make TMS5 work for 0.1 megaflacs on a ReadyNAS? :)

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Wed Mar 18, 2009 12:28 am

Hi

I've been playing with the PC version as it's faster to rebuild the database between experiments (and also smaller due to the NTFS block size) and my results so far are:

998 FLAC files on the PC version (NTFS):

Twonky default tree:
5770 files in 2512 folders
1.87MB data / 23.4MB disk space

Twonky default plus my (above) tree:
12,758 files in 6005 folders
2.82MB data/ 51MB disk space

6029 FLAC files on the PC version (NTFS):

Twonky default tree:
20,690 files in 8009 folders
10.3MB data / 87MB disk space

Twonky default plus my (above) tree:
53,242 files in 24,283 folders
13.9MB data / 214MB disk space

My next experiment is to try ditching the default.view.xml and try just using my own, but the last time I tried that, it caused chaos (that's OK though, chaos I like; it makes life more fun). I'd really like to keep the original trees so I can experiment with TMM as a control point, but just to see if it works, I'll give it a go with just my own. My additional trees seem to break the default ones anyway so at some point, I'll have to investigate what's happening with that too.

Time to pull the plug now as it's getting a bit late and all the wine's finished (looks like I'll finally have to start that bottle of glass cleaning solvent I've been saving for a special occasion; it'll probably be okay once I've put a splash of vodka in it) :D

Tomorrow, I'll slim down my code to only have one tree option (and remove some of the genre options I don't need) to see how lean and mean I can make it. As far as I can tell though (and I've just finished scanning the library) my additional trees are both working really well with 6000 files* on the PC version but it's still an awesome quantity of database files and I've still to add the title[4][1] tree, so goodness knows how big that'll make the database.

Bri

*That'll be 6 kiloflacs (I love that word) :)

audiokaas
Posts: 11
Joined: Fri May 09, 2008 5:12 am
AV Hardware: Readynas duo 2x750 samsung
linn akurate DS client, twonky server

Re: How to Create Your Own Custom Navigation Trees

Postby audiokaas » Wed Mar 18, 2009 2:58 pm

TMM_Product_Manager wrote:I'll talk to Christian about this tomorrow (since he's in San Diego this week) and let you know what he says.

- Rick


Any news from Christian on the zillion files constituting the twonky database? Is there anything to be done?

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Wed Mar 18, 2009 3:00 pm

Hi

Update: 2nd June 2009: I have massively revised the code (compared to the below post) to make it much more appropriate for all users (including those who don't use the albumartist tag). Please see my latest post
(click here to navigate to it) which has the latest code attached for download and details of what it does. I currently use it with 5.0.55 on my ReadyNAS and have tested it with 5.0.65 on my PC.

Bri


----

Well, here are the previous findings with my latest test results (folowed by the code) at the end:

998 FLAC files on the PC version (NTFS):

Twonky default tree:
5770 files in 2512 folders
1.87MB data / 23.4MB disk space

Twonky default plus my tree:
12,758 files in 6005 folders
2.82MB data/ 51MB disk space

6029 FLAC files on the PC version (NTFS):

Twonky default tree:
20,690 files in 8009 folders
10.3MB data / 87MB disk space

Twonky default plus my tree:
53,242 files in 24,283 folders
13.9MB data / 214MB disk space

I then removed Twonky from the PC and created a replacement default.view.xml file (based on my music-short one). With the same 6029 FLAC files and on the NTFS partition the size of the database is as follows:

29,624 files in 12,853 folders
9.46MB data / 120MB disk space

This is much less but still a massive quantity of files and might still cause problems on my NAS, but I'll give it a try and see what happens.

Incidentally, I ensured that the initial scan (using the Twonky supplied default.view.xml) was done with Twonky pointed to an empty folder such that I could avoid having the initial database created. I also noticed that it seems to need the three views (i.e. subviews="advanceddefault,ipodlike,simpledefault") even though there are no XML statements in my XML file which refer to them. Now that the database is built, I'll try removing the 'simpledefault' and see if it changes the db size (and if it still works).

Below is the code which I've saved as default.tree.view. It's worth noting that I've not included the 'all tracks' tree (as I don't need it) but that this prevents the counter in the server status page showing how many music tracks there are. Seems not to break anything else though! :)

I'll add the pics and video tomorrow then see how big the database gets but the below is working very well so far.

Code: Select all

<view name='default' path='default.view' subviews="advanceddefault,ipodlike,simpledefault">
<include>
<tree path='*' />
</include>
<navtree sortcriteria='+upnp:originalTrackNumber'>
<container name='music' id='music' multiview='1'sortcriteria='+dc:title' upnp:originalTrackNumber='1' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack'>
    <container name='1 Browse All Albums' visibility="advanceddefault" id='music/albums' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album[1]' sortcriteria='+dc:title' Class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    <container name='2 Album Artist ~ Find Album' visibility="advanceddefault" id='music/albumartists' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>
    <container name='3 Song Artist ~ Find Albums' visibility="advanceddefault" id='music/artists' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:artist[6]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:artist[1]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>
    <container name='4 Tunes ~ Find Album' visibility="advanceddefault" sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>
    <container name='5 Tunes ~ List All Tunes' visibility="advanceddefault" id='music/all' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'>
    <container buildon='dc:title[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title[1]' albumart='0' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'/>
    </container>
    </container>
    <container name='6 composer' visibility="advanceddefault" id='music/composers' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container'>
    <container buildon='upnp:author@role' albumart='0' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    <container name='genrealbum' visibility="advanceddefault" sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='1' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    <container name='playlists' id='music/playlists' class='object.container' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' sortcriteria='+upnp:originalTrackNumber,+dc:title'   restricted='0' flags='pv:playlistRoot=Music'>
    <container name='playlistrecentlyadded' filteron='pv:addedLast60' sortcriteria='-pv:addedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='3' restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlistmostplayed' filteron='pv:playcount' sortcriteria='-pv:playcount' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='1'  restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlistlastplayed' filteron='pv:lastPlayedTime' sortcriteria='-pv:lastPlayedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='2' restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlisthighlyrated' filteron='pv:highrated' sortcriteria='-pv:rating' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='4' class='object.container.playlistContainer' restricted='1'  flags='pv:smartplaylist=1'/>
    <container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' upnp:originalTrackNumber='5' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack' class='object.container.playlistContainer'/>
    </container>
    <container buildon='pv:onlineServiceTitle'  sortcriteria='+pv:onlineServiceTitle' createClass='object.item.audioItem.online.musicTrack' class='object.container'>
    <container name='allstations' sortcriteria='+dc:title' createClass='object.item.audioItem.online.musicTrack' class='object.container'/>
    <container name='genrestation' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
    <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.online.musicTrack'>
    </container>
    </container>
    <container name='stationindex' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
    <container buildon='dc:title[3]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
    </container>
    </container>
    </container>
</container>
</navtree>
</view>
Last edited by Briain on Wed Jun 03, 2009 11:50 am, edited 4 times in total.

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Wed Mar 18, 2009 3:46 pm

audiokaas wrote:
Any news from Christian on the zillion files constituting the twonky database? Is there anything to be done?


They are testing a possible solution to this in Berlin. This is a really big change, so it's unclear whether it will be released in Q2 or not. I'll let you know more about this as I learn it.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

bump
Posts: 50
Joined: Sun Mar 15, 2009 3:58 pm
AV Hardware: NA

Re: How to Create Your Own Custom Navigation Trees

Postby bump » Wed Mar 18, 2009 4:04 pm

TMM_Product_Manager wrote:
audiokaas wrote:
They are testing a possible solution to this in Berlin. This is a really big change, so it's unclear whether it will be released in Q2 or not. I'll let you know more about this as I learn it.

- Rick


Rick,
please allow a really dumb question: Why has such a material issue not been catched up by your folks before? We all dont mind a little bug here and there - thats what software is all about. But a software with release-count 55 that closk up users NAS drives with a quazilion fies and makes them unusuable is a material issue! I mean this is not freeware, we all pay for this software.

thanks
bump

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Wed Mar 18, 2009 4:18 pm

Hi Rick

That's great news. I'm progressing well with the new tree and I've got it to work well by using the above code to replace the default (even the radio still works) but obviously the video and picture trees are not included (well I can add the pictures one later, as soon as I've seen how it copes with the FLAC files).

It has an awful lot going for it compared to TMS4 in that it has superior music selection criteria (the nested alpha-grouping), it recognises composer tags and it also isn't limited to the 100 per container artwork limit of TM4 (which was creaking under the weight of my collection).

I'm hoping that reducing it to the above code (and from 52K files to 29K files for 6000 FLACs) will maybe just about permit it to work on a NAS (with 15000 FLACs) and thus I'll be able to test it in everyday use. I'll obviously have to wait until the next release before I can restore the default tree and thus try using TMM as a control point, but if I can at least get it to go, it'll give me plenty of operational familiarity with it as a music server.

I'm backing up my main NAS (ReadyNAS NV+) and will let you know by tomorrow whether it has been successful or not.

Bri

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Wed Mar 18, 2009 8:30 pm

Hi Folks

I've got it all working including the radio!! The database was 2.4GB with the above code. I'm just done a database rebuild having changed four of the alpha-groupings from [4][1] to [6][1] and it's only risen to 3GB so all is still very well. This makes it fine for music (but only using the super-poussin ReadyNAS addon version of TMS5 which locates Twonky on the main partition; the original would fill the OS partition and stop the ReadyNAS from functioning) but the above code in isolation will not make it compatible with using TMM as a control point.

I'll add the pics and video bits soon and get that going with my own code (easy as it's just a lift and shift job). The last (and key) bit is to see if I can add my custom views into the existing standard tree and see if I can get it all to fly without the database getting too big. That would ensure that it also talks to TMM1 which would be the ideal end result. One of the chaps on the Linn forum (not a Linn employee) has also posetd a full code for his version which is geared to classical use. He has already incorporated the code into the existing default.view.xml but I've not actually looked at the code yet to see exactly what he's left from the original (I think he's also stripped some of it out). It is also now running on a ReadyNAS so that's also a good indicator that I might be able to get the full code working; we'll just have to see what it does when I build and try it over the next few days.

Bri :)

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Wed Mar 18, 2009 11:11 pm

Hi

This is now working really well! There are obviously a few small things to sort out (and of course one bigger one; the db size) but when they're all fixed, TMS5 will be a totally fabulous product and absolutely miles (kilometers too) ahead of anything else!! :)

I've changed all my alpha-groupings to all be [6][1] (including the first one to 'browse albums') as this means all the alphabetical characters are displayed on Linn's KinskyPDA screen so you don't have to scroll until you reach the end list of albums; it looks good and is very fast to navigate.

I've updated the code listed above and am rebuilding the database to test it now (all I've done is added an additional container for the first bit so it should be okay; famous last words)

Bri

Update: Having now alpha-grouped most containers, the result is absolutely fabulous for navigating on a small screen UPnP control point. Okay, I've not yet added picture and video trees, but from the music selection point of view, this is a massive improvement over TMS4. There are a few things that need changed the optional facility to display 'The Beatles' as 'Beatles, The' (PV are aware of this) and how to alpha-group composers (I'll keep experimenting) and how to stop albumart in the composer container (albumart='0' doesn't seem to work).

The [6][1] alpha-grouping displays like the below and I chose [6][2] as it enables all characters to display on the control point I use (which, due to the chosen font and screen size, only shows 6 rows of container letters) and avoids the need to scroll:

ABCDEF
GHIJKL
MNOPQR
STUVWX
YZ


For example, selecting third row then displays:

S
T
U
V
W
X


Selecting any letter then displays the container contents; fantastic!

To give an example using the artist container; selecting Velvet Underground would normally involve a lot of scrolling but as you can see from the above, getting to the 'V' container is again just 2 clicks on the screen (then a short scroll through the artists beginning with 'V'.

As I say, this is a really fabulous new facility and I realise that this would be tricky but really hope that there will eventually be an easy way for non-technical customer to enjoy this development going forwards.

Bri
Last edited by Briain on Thu Mar 19, 2009 11:01 am, edited 4 times in total.

ematignon
Posts: 7
Joined: Thu Mar 19, 2009 1:43 am
AV Hardware: SLM5700
NAS Synology CS407e
Philips NP1100
Philips NP2900

Re: How to Create Your Own Custom Navigation Trees

Postby ematignon » Thu Mar 19, 2009 2:02 am

Hi Rick,

I have an issue with installation of Twonky (5.0 as well as 4.4.11) on my Synology CS407e. It happens with teh new FW2.1. Previously everything was working well.

Despite the fact that autoinstaller told me tha tserver has been started, I have the following error message in my browser :
Though the site seems valid, the browser was unable to establish a connection.
* Could the site be temporarily unavailable? Try again later.
* Are you unable to browse other sites? Check the computer's network connection.
* Is your computer or network protected by a firewall or proxy? Incorrect settings can interfere with Web browsing.

Main root cause is the fact that files can't be copied from my PC to my NAS.

I have already changed the name of the Public directory in the install.nas file from public to Public but it doesn't work.

Consequently, nas-installer can't be launched. I know that twonky autoinstal try at a point of time to copy everything from my PC to NAS but it doesn't work.

It is apparently due to the fact that twonky wants to copy nas-installer from 192.168.2.9:9000 (supposed to be my PC IP address). When I try to ping 192.168.2.9:9000 from my NAS, I have no answer.

I don't know how to go further in my investigation.

Waiting for your help,

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Fri Mar 20, 2009 12:11 am

Hi

I've compiled a bunch of XML code which really makes my UPnP control point (Linn's Kinsky PDA) fly. I simply can't integrate it with Twonky's default views as my containers seem to conflict with them far too much (the chaos and carnage it causes is entertaining to say the least).

I'll paste it below (for interest or scrutiny) and I have asked super-poussin (the Netgear addon expert) if he will very kindly compile two addons for us; one to install it and another to install the original code again (in other words, to remove my code again).

If he agrees to do it, the two addons will be as simple as installing Twonky (point to the addon and press one button) so there'll be no need for all this scary SSH and Linux stuff!

I'll eventually get my head round what I've done to upset the supplied code so much (the 'all' cannot be used with the below code; possibly because I've got my own version of it) as the below code will almost certainly not work in harmony with TMM1. Many, many thanks due to Rick, and again to Burkhard from PV in Berlin, who sent me a tip which helped me develop container 4 (that one was a bit elusive).

NB This code generates 2.7GB db for 15000 FLAC files; a similar size to the PV original code.

Code: Select all

Code updated: see below email
Last edited by Briain on Sat Mar 21, 2009 5:13 pm, edited 1 time in total.

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Fri Mar 20, 2009 3:16 pm

Hi

Update: 2nd June 2009: I have massively revised the code (compared to the below post) to make it much more appropriate for all users (including those who don't use the albumartist tag). Please see my latest post
(click here to navigate to it) which has the latest code attached for download and details of what it does. I currently use it with 5.0.55 on my ReadyNAS and have tested it with 5.0.65 on my PC.

Bri


----

Hi

Just found out that now that I've used all my own code for the music section, I can alpha-group composers without causing the tree to mess up the display. I'm not sure which part of my own code upset the PV code but that's my longer term project. As long as it works (I'll know later today) then this will be my final (deployed) version and I've dropped super-poussin a note to use this for the ReadyNAS addon (assuming he's about and willing to actually do this) once I've tested it on the full NAS collection; it looks really good so far on my PC testbed one though!

Next job is to see if I can get it to work as an additional tree to the existing one but for the moment, this will be used on my music playing NAS (as a replacement for the default.view.xml tree) to check that it's stable and there are no hidden issues.

Bri

Update: There are three trees: the first for people who do now want to show the albumartist tag (not many people will have populated it), the second is the same as the first but with the album artist showing at the top and the third shows everything (it's the one I'll be using). It works on a small quantity of albums and I'm just rebuilding it on the full NAS collection to ensure it's all okay.

Below shows the three trees as you'd see them on a GUI or (like Linn Products GUI or KinskyPDA)

Simple Default Navigation

1 Browse All Albums
3 Song Artist ~ Show Albums
6 Tunes ~ List Tunes
7 Composer ~ Show Albums
8 Genre ~ Show Albums
Handpicked Radio
Playlists

iPod-like

1 Browse All Albums
2 Album Artist ~ Show Albums
3 Song Artist ~ Show Albums
6 Tunes ~ List Tunes
7 Composer ~ Show Albums
8 Genre ~ Show Albums
Handpicked Radio
Playlists

Advanced Default Navigation

1 Browse All Albums
2 Album Artist ~ Show Albums
3 Song Artist ~ Show Albums
4 Song Artist ~ List Tunes
5 Tunes ~ Show Albums
6 Tunes ~ List Tunes
7 Composer ~ Show Albums
8 Genre ~ Show Albums
9 Genre ~ Composer
Handpicked Radio
Playlists

Code: Select all

<view name='default' path='default.view' subviews="advanceddefault,ipodlike,simpledefault">
<include>
<tree path='*' />
</include>
<navtree sortcriteria='+upnp:originalTrackNumber'>
<container name='music' id='music' multiview='1'sortcriteria='+dc:title' upnp:originalTrackNumber='1' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack'>
    <container name='1 Browse All Albums' visibility="advanceddefault,ipodlike,simpledefault" id='music/albums' sortcriteria='+dc:title' class='object.container'

createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album[6]' sortcriteria='+dc:title' Class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album[1]' sortcriteria='+dc:title' Class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    <container name='2 Album Artist ~ Show Albums' visibility="advanceddefault,ipodlike" id='music/albumartists' sortcriteria='+dc:title' class='object.container'

createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:albumArtist' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>
    <container name='3 Song Artist ~ Show Albums' visibility="advanceddefault,ipodlike,simpledefault" id='music/artists' sortcriteria='+dc:title' class='object.container'

createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:artist[6]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:artist[1]' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:artist' sortcriteria='+dc:title' class='object.container' createclass='object.container.person.musicArtist'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>
    <container name='4 Song Artist ~ List Tunes' visibility="advanceddefault" id='music/artistindex' sortcriteria='+dc:title' class='object.container'

createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:artist[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:artist[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:artist' albumart='0' sortcriteria='+dc:title' class='object.container.person.musicArtist' createClass='object.item.audioItem.musicTrack'/>
    </container>
    </container>
    </container>
    <container name='5 Tunes ~ Show Albums' visibility="advanceddefault" sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>
    <container name='6 Tunes ~ List Tunes' visibility="advanceddefault,ipodlike,simpledefault" id='music/all' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack'

class='object.container'>
    <container buildon='dc:title[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='dc:title[1]' albumart='0' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'/>
    </container>
    </container>
    <container name='7 Composer ~ Show Albums' visibility="advanceddefault,ipodlike,simpledefault" id='music/composers' sortcriteria='+dc:title' createClass='object.item.audioItem.musicTrack'

class='object.container'>
    <container buildon='upnp:author@role[6]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:author@role[1]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:author@role' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    </container>
    <container name='8 Genre ~ Show Albums' visibility="advanceddefault,ipodlike,simpledefault" sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    <container name='9 Genre ~ Composer' visibility="advanceddefault" sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:author@role' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.musicTrack'>
    <container buildon='upnp:album' albumart='0' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.audioItem.musicTrack' class='object.container.album.musicAlbum'/>
    </container>
    </container>
    </container>
    <container name='playlists' id='music/playlists' class='object.container' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack'

sortcriteria='+upnp:originalTrackNumber,+dc:title'   restricted='0' flags='pv:playlistRoot=Music'>
    <container name='playlistrecentlyadded' filteron='pv:addedLast60' sortcriteria='-pv:addedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='3'

restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlistmostplayed' filteron='pv:playcount' sortcriteria='-pv:playcount' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='1' 

restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlistlastplayed' filteron='pv:lastPlayedTime' sortcriteria='-pv:lastPlayedTime' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='2'

restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlisthighlyrated' filteron='pv:highrated' sortcriteria='-pv:rating' createClass='object.item.audioItem.musicTrack' maxitems='500' upnp:originalTrackNumber='4'

class='object.container.playlistContainer' restricted='1'  flags='pv:smartplaylist=1'/>
    <container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' upnp:originalTrackNumber='5' createClass='object.item.audioItem.musicTrack,object.item.audioItem.online.musicTrack'

class='object.container.playlistContainer'/>
    </container>
    <container buildon='pv:onlineServiceTitle'  sortcriteria='+pv:onlineServiceTitle' createClass='object.item.audioItem.online.musicTrack' class='object.container'>
    <container name='allstations' sortcriteria='+dc:title' createClass='object.item.audioItem.online.musicTrack' class='object.container'/>
    <container name='genrestation' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
    <container buildon='upnp:genre' sortcriteria='+dc:title' class='object.container.genre.musicGenre' createClass='object.item.audioItem.online.musicTrack'>
    </container>
    </container>
    <container name='stationindex' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
    <container buildon='dc:title[3]' sortcriteria='+dc:title' class='object.container' createClass='object.item.audioItem.online.musicTrack'>
    </container>
    </container>
    </container>
    </container>
<container name='pictures' id='picture' multiview='1' sortcriteria='+dc:title' upnp:originalTrackNumber='2' createClass='object.item.imageItem.photo,object.item.imageItem.online.photo'

class='object.container'>
    <container name='allpictures' id='picture/all' sortcriteria='+dc:title' createClass='object.item.imageItem.photo' class='object.container'/>
    <container name='byfolder' visibility="advanceddefault,simpledefault" id='picture/folders' class='object.container.storageFolder' restricted='0' createClass='object.item.imageItem.photo'>
    <container buildon='res' sortcriteria='+dc:title' createClass='object.item.imageItem.photo' class='object.container.storageFolder'/>
    </container>
    <container name='byyear' id='picture/year' createClass='object.item.imageItem.photo' class='object.container'>
    <container buildon='dc:date[1:4]' createClass='object.item.imageItem.photo' class='object.container.album.photoAlbum' />
    </container>
    <container name='bydate' id='picture/date' createClass='object.item.imageItem.photo' class='object.container'>
    <container buildon='dc:date[1:4]' createClass='object.item.imageItem.photo' class='object.container'>
    <container buildon='dc:date[6:2]' createClass='object.item.imageItem.photo' class='object.container.album.photoAlbum'/>
    </container>
    </container>
    <container name='album'  visibility="ipodlike,simpledefault" id='picture/albums' sortcriteria='+dc:title' createClass='object.item.imageItem.photo'  class='object.container'>
    <container buildon='upnp:album' albumart='1' sortcriteria='+dc:title' createClass='object.item.imageItem.photo' class='object.container.album.photoAlbum'/>
    </container>
    <container name='keywords' visibility="advanceddefault,ipodlike,simpledefault" id='picture/keywords' sortcriteria='+dc:title' createClass='object.item.imageItem.photo' 

class='object.container' >
    <container buildon='pv:avKeywords' sortcriteria='+dc:title' createClass='object.item.imageItem.photo' class='object.container.album.photoAlbum'/>
    </container>
    <container name='rating' visibility="ipodlike,simpledefault" id='picture/rating' sortcriteria='+dc:title' class='object.container' createClass='object.item.imageItem.photo'>
    <container buildon='pv:rating' sortcriteria='+dc:title' class='object.container.album.photoAlbum' createClass='object.item.imageItem.photo'/>
    </container>
    <container name='slideshows' id='picture/playlists' class='object.container' createClass='object.item.imageItem.photo,object.item.imageItem.online.photo'

sortcriteria='+upnp:originalTrackNumber,+dc:title' restricted='0' flags='pv:playlistRoot=Picture' >
    <container name='playlistrecentlyadded' filteron='pv:addedLast60' sortcriteria='-pv:addedTime' createClass='object.item.imageItem.photo' maxitems='500' upnp:originalTrackNumber='3'

restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1' />
    <container name='playlistmostviewed' filteron='pv:playcount' sortcriteria='-pv:playcount' createClass='object.item.imageItem.photo' maxitems='500' upnp:originalTrackNumber='1' restricted='1'

class='object.container.playlistContainer' flags='pv:smartplaylist=1' />
    <container name='playlistlastviewed' filteron='pv:lastPlayedTime' sortcriteria='-pv:lastPlayedTime' createClass='object.item.imageItem.photo' maxitems='500' upnp:originalTrackNumber='2'

restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1' />
    <container name='playlisthighlyrated' filteron='pv:highrated' sortcriteria='-pv:rating' createClass='object.item.imageItem.photo' maxitems='500' upnp:originalTrackNumber='4'

class='object.container.playlistContainer' restricted='1' flags='pv:smartplaylist=1' />
    <container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.imageItem.photo,object.item.imageItem.online.photo' upnp:originalTrackNumber='5'

class='object.container.playlistContainer'/>
    </container>
    <container buildon='pv:onlineServiceName'  sortcriteria='+pv:onlineServiceName' createClass='object.item.imageItem.online.photo' class='object.container'>
    <container name='allname' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo' class='object.container.album.photoAlbum' />
    <container buildon='pv:onlineServiceTitle'  sortcriteria='+pv:onlineServiceTitle' createClass='object.item.imageItem.online.photo' class='object.container'>
    <container name='allname' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo' class='object.container.album.photoAlbum' />
    <container name='keywords' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo'  class='object.container' >
    <container buildon='pv:avKeywords' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo' class='object.container.album.photoAlbum'/>
    </container>
    <container name='album' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo'  class='object.container'>
    <container buildon='upnp:album' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo' class='object.container.album.photoAlbum'/>
    </container>
    <container name='date' createClass='object.item.imageItem.online.photo' class='object.container'>
    <container buildon='dc:date[1:4]' createClass='object.item.imageItem.online.photo' class='object.container'>
    <container name='allname' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo' class='object.container.album.photoAlbum'/>
    <container buildon='dc:date[6:2]' createClass='object.item.imageItem.online.photo' class='object.container.album.photoAlbum'/>
    </container>
    </container>
    <container name='author' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo' class='object.container' >
    <container buildon='upnp:author' sortcriteria='+dc:title' createClass='object.item.imageItem.online.photo' class='object.container.album.photoAlbum'/>
    </container>
    </container>
    </container>
    </container>
<container name='videos' id='video' multiview='1' sortcriteria='+dc:title' upnp:originalTrackNumber='3' createClass='object.item.videoItem.movie,object.item.videoItem.online.movie'

class='object.container'>
    <container name='allvideos' id='video/all' sortcriteria='+dc:title' createClass='object.item.videoItem.movie' class='object.container'/>
    <container name='album' visibility="ipodlike,simpledefault"  id='video/albums' sortcriteria='+dc:title' createClass='object.item.videoItem.movie'  class='object.container' >
    <container buildon='upnp:album' sortcriteria='+dc:title' createClass='object.item.videoItem.movie' class='object.container'/>
    </container>
    <container name='byfolder' visibility="advanceddefault,simpledefault" id='video/folders' class='object.container.storageFolder' restricted='0' createClass='object.item.videoItem.movie'>
    <container buildon='res' sortcriteria='+dc:title' createClass='object.item.videoItem.movie' class='object.container.storageFolder'/>
    </container>
    <container name='byyear' id='video/year' createClass='object.item.videoItem.movie' class='object.container'>
    <container buildon='dc:date[1:4]' createClass='object.item.videoItem.movie' class='object.container'/>
    </container>
    <container name='bydate' id='video/date' createClass='object.item.videoItem.movie' class='object.container'>
    <container buildon='dc:date[1:4]' createClass='object.item.videoItem.movie' class='object.container'>
    <container buildon='dc:date[6:2]' createClass='object.item.videoItem.movie' class='object.container'/>
    </container>
    </container>
    <container name='rating' id='video/rating' visibility="ipodlike,simpledefault"  sortcriteria='+dc:title' class='object.container' createClass='object.item.videoItem.movie'>
    <container buildon='pv:rating' sortcriteria='+dc:title' class='object.container' createClass='object.item.videoItem.movie' />
    </container>
    <container name='playlists' id='video/playlists' class='object.container' createClass='object.item.videoItem.movie,object.item.videoItem.online.movie'

sortcriteria='+upnp:originalTrackNumber,+dc:title' restricted='0' flags='pv:playlistRoot=Video' >
    <container name='playlistrecentlyadded' filteron='pv:addedLast60' sortcriteria='-pv:addedTime' createClass='object.item.videoItem.movie' maxitems='500' upnp:originalTrackNumber='3'

restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlistmostviewed' filteron='pv:playcount' sortcriteria='-pv:playcount' createClass='object.item.videoItem.movie' maxitems='500' upnp:originalTrackNumber='1' restricted='1'

class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlistlastviewed' filteron='pv:lastPlayedTime' sortcriteria='-pv:lastPlayedTime' createClass='object.item.videoItem.movie' maxitems='500' upnp:originalTrackNumber='2'

restricted='1' class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container name='playlisthighlyrated' filteron='pv:highrated' sortcriteria='-pv:rating' createClass='object.item.videoItem.movie' maxitems='500' upnp:originalTrackNumber='4' restricted='1'

class='object.container.playlistContainer' flags='pv:smartplaylist=1'/>
    <container buildon='upnp:playlist' sortcriteria='+upnp:originalTrackNumber' createClass='object.item.videoItem.movie,object.item.videoItem.online.movie' upnp:originalTrackNumber='5'

class='object.container.playlistContainer'/>
    </container>
    <container buildon='pv:onlineServiceName'  sortcriteria='+pv:onlineServiceName' createClass='object.item.videoItem.online.movie' class='object.container'>
    <container buildon='pv:onlineServiceTitle'  sortcriteria='+pv:onlineServiceTitle' createClass='object.item.videoItem.online.movie' class='object.container'>
    </container>
    </container>
    </container>
</container>
</navtree>
</view>
Last edited by Briain on Wed Jun 03, 2009 11:51 am, edited 6 times in total.

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Fri Mar 20, 2009 7:03 pm

These are all really useful examples Bri, thanks for posting these!

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Fri Mar 20, 2009 7:45 pm

Hi

I hope they're all 'legal' code. They seem to work very well but it would be good if somwone here can verify it to be correct (or more likely, point out the mistakes). It all works fine but I can't add the 'all' or the original PV supplied 'Composer' xml which is odd. Anyhow, the above suite me fine and the only thing it doesn't do is list the total number of music files on the server configuration page (that'll be caused by me removing the 'all' line).

NB The Pictures and Videos sections are as per the original default.view.xml file; it's just the Music section I've changed.

Bri
Last edited by Briain on Sat Mar 21, 2009 5:35 pm, edited 3 times in total.

User avatar
Briain
Posts: 478
Joined: Thu Jan 03, 2008 8:07 pm
AV Hardware: Linn Klimax DS
Linn Majik DS-I
Linn Sneaky DS
WDTV Live Hib
Sonos 80
Location: Edinburgh, Scotland

Re: How to Create Your Own Custom Navigation Trees

Postby Briain » Fri Mar 20, 2009 10:58 pm

Hi

Views and code vastly improved (I've updated the post above Rick's post). I've tested it on a few albums and am now rebuilding the database on my full collection.

I've also noticed that there might be a problem with the ReadyNAS addon version but have contacted super-poussin (Netgear forum) and he is looking into it. The issue is that it's creating archive files after each database rebuild but these can be deleted using SSH. The rescan option is fine though so it's not a show-stopper as they say :)

Bri

streamer
Posts: 8
Joined: Sun Mar 15, 2009 2:25 am
AV Hardware: PS3, Vista, TwonkyMedia Server 5

Re: How to Create Your Own Custom Navigation Trees

Postby streamer » Wed Apr 01, 2009 5:04 pm

This explains very little about Video files...I want my videos sorted by Genre and Actor.

Is there an easy way to do this?

Also, what tags from a video files does TwonkyMedia support?

Thanks

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Wed Apr 01, 2009 11:51 pm

The screenshot below shows the video tags that TMM supports:
Attachments
SP32-20090401-155006.jpg
SP32-20090401-155006.jpg (5.61 KiB) Viewed 65870 times
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/

streamer
Posts: 8
Joined: Sun Mar 15, 2009 2:25 am
AV Hardware: PS3, Vista, TwonkyMedia Server 5

Re: How to Create Your Own Custom Navigation Trees

Postby streamer » Thu Apr 02, 2009 2:55 pm

Is there a way to edit these from TwonkyMedia Manager?

I have installed the Beta 3 version on my server.

Thanks

streamer
Posts: 8
Joined: Sun Mar 15, 2009 2:25 am
AV Hardware: PS3, Vista, TwonkyMedia Server 5

Re: How to Create Your Own Custom Navigation Trees

Postby streamer » Thu Apr 02, 2009 4:30 pm

With regards to the "keywords" video tag, can we use that for our custom navigation tree?

I want all these to show up on my PS3 for navigation.

Moni

Twonky_Rick
Posts: 3816
Joined: Wed Nov 19, 2008 1:59 am
AV Hardware: Samsung 650 Series TV (2010), 4.5TB HP MediaSmart server with 100,000 songs, 5) AT&T U-Verse STB, CE form-factor Media Center PC and 6 other networked PCs running TwonkyManager, 2 Sonos ZP80, Sonos S5 speaker, Apple TV (running XBMC), Roku Soundbridge, X-Box 360, Sony PS3, Kodak 10" Wireless Photo Frame, iPhone with PlugPlayer software, Sonos CR-100.
Location: San Diego
Contact:

Re: How to Create Your Own Custom Navigation Trees

Postby Twonky_Rick » Thu Apr 02, 2009 7:25 pm

streamer wrote:Is there a way to edit these from TwonkyMedia Manager?

I have installed the Beta 3 version on my server.

Thanks


Yes. By checking the boxes shown above, the fields will appear in TMM and you can edit them, but the edited text will be added to the TMM database and not the original file. In most cases this should not be a problem, since your device pulls its data from TMM/TMS and not the file directly. Of course someone would have to post a custom tree to use some of these fields.

- Rick
Follow me on Twitter! mostlytech1
Checkout my blog: http://mostly-tech.com/


Return to “TwonkyServer”

Who is online

Users browsing this forum: Bing [Bot] and 2 guests