Browse tree / [tv, movies, music, pictures] /tv [show1, show2, show3] /tv/show1 [series1, series2, series3] /tv/show1/series1 [ep1/_meta/media, ep2/_meta/media] /_meta/image/tv/show - image for show /_meta/image/tv/show1/series1 - image for series /_meta/media/tv/show1/series1/ep1 - direct link to episode, served by webserver /_meta/image/tv/show1/series1/ep1 - image for episode /movies [movie1/_meta/media, movie2/_meta/media] /_meta/image/movies/movie1 - image for movie /_meta/media/movies/movie1 - direct link to movie file, served by webserver Much harder because we need id3 parsing for everything: /music [artists, songs, playlists] /music/artists [artist1, artist2, artist3] /music/artists/artist1 [all, album1, album2] /music/artists/artist1/album1 [song1/_meta/media, song2/_meta/media] /_meta/image/music/artists/artist1/album1 - album art /_meta/media/music/artists/artist1/album1/song1 - direct link to song, served by webserver /music/songs [.../artist1/album1/song1/_meta/media, etc] Config file values are substituted with the contents of $XDG_CONFIG_HOME/user-dirs.dirs these are defaults, if not present in the config file provide rest api for configuring provide web UI which uses JS to talk to the rest ui look up config stuff every time you do anything; cache nothing tv = "$XDG_VIDEOS_DIR/tv" movies = "$XDG_VIDEOS_DIR/movies" music = "$XDG_MUSIC_DIR" placeholder_image _meta when requesting anything from _meta other than media, look for the appropriate file. If it does not exist, put a placeholder in its place and serve the placeholder. All _meta information is stored in XDG_CACHE_DIR. indexer look for placeholders and replace them with the real thing Running Use nginx to serve, calling wsgi to run. Files needed: conf/nginx.conf conf/default.conf scripts/start - starts nginx, webui webui/* lib/web - web.py lib/config - config handler