diff --git a/database/music.db b/database/music.db new file mode 100644 index 0000000..7011c51 Binary files /dev/null and b/database/music.db differ diff --git a/html/images/label_logos/PF.png b/html/images/label_logos/PF.png new file mode 100644 index 0000000..70ff974 Binary files /dev/null and b/html/images/label_logos/PF.png differ diff --git a/html/images/label_logos/kamizdat.png b/html/images/label_logos/kamizdat.png new file mode 100644 index 0000000..fb6ab66 Binary files /dev/null and b/html/images/label_logos/kamizdat.png differ diff --git a/html/images/label_logos/sploh.jpeg b/html/images/label_logos/sploh.jpeg new file mode 100644 index 0000000..6470bd9 Binary files /dev/null and b/html/images/label_logos/sploh.jpeg differ diff --git a/html/images/label_logos/terraformer.jpeg b/html/images/label_logos/terraformer.jpeg new file mode 100644 index 0000000..db42657 Binary files /dev/null and b/html/images/label_logos/terraformer.jpeg differ diff --git a/html/images/rob_canning.jpeg b/html/images/rob_canning.jpeg new file mode 100644 index 0000000..5c1064f Binary files /dev/null and b/html/images/rob_canning.jpeg differ diff --git a/html/templates/episode.jinja b/html/templates/episode.jinja index 31f9410..b45cc12 100644 --- a/html/templates/episode.jinja +++ b/html/templates/episode.jinja @@ -6,20 +6,20 @@ - + - - - - - + + + + + - + - + @@ -105,7 +105,7 @@
@@ -115,6 +115,18 @@ + +{% for result in show_info %} + + {{ result[0] }} + {{ result[1] }} + {{ result[2] }} + +{% endfor %} + + + +
@@ -179,43 +191,7 @@

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe pariatur reprehenderit vero atque, consequatur id ratione, et non dignissimos culpa? Ut veritatis, quos illum totam quis blanditiis, minima minus odio!

-
- -
- -
-
+
@@ -301,18 +277,18 @@
- + - - - - - - - - + + + + + + + + - + - + diff --git a/html/templates/homepage.jinja b/html/templates/homepage.jinja new file mode 100644 index 0000000..9c386d6 --- /dev/null +++ b/html/templates/homepage.jinja @@ -0,0 +1,441 @@ + + + + show_name + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ +
+
+
+
+ + + + +
+
+
+ +
+

Latest Episode: # {{episode_number}}

+
{{episode_author}} / Zavod Rizoma | 16 September 2017 | 1:30:20
+

Episode Details and Player

+ +
+ +
+ +
+
+
+
+ +
+
+ +
+
+

Previous Episodes

+
+
+ + {% for episode in episodes %} +
+
+
+ +

Episode: # {{episode.episode_number}}

+
+ Presented by Rob Canning / {{episode.episode_date}} / {{episode.episode_duration}}
+

On this weeks show music from: {{episode.episode_artists}}

+ +
+
+ + {% endfor %} + + + + + + + + + + + +
+
+
+
+
    +
  • <
  • +
  • 1
  • +
  • 2
  • +
  • 3
  • +
  • 4
  • +
  • 5
  • +
  • >
  • +
+
+
+
+
+
+ +
+
+
+
+

Behind The Mic

+
+
+
+
+
+ + Image + +
+ +

Rob Canning

+ Creative Director +

Lorem ipsum dolor sit amet consectetur adipisicing elit ullam reprehenderit nemo.

+

+ + + +

+
+ +
+
+ +
+
+ + Image + +
+ +

Brooke Cagle

+ Creative Director +

Lorem ipsum dolor sit amet consectetur adipisicing elit ullam reprehenderit nemo.

+

+ + + +

+
+ +
+
+ + +
+
+
+
+

Featured Labels

+
+
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/mk_show.py b/mk_show.py index 1c3bd92..e1c9b55 100755 --- a/mk_show.py +++ b/mk_show.py @@ -1,19 +1,44 @@ #!/usr/bin/python3 + import sys, os, datetime, fnmatch, glob, random, time, pathlib, re from datetime import timedelta from os.path import join from tinytag import TinyTag - from random import shuffle - -import sqlite3 +import sqlite3, json from mk_web import * -con = sqlite3.connect("music.db") +conn = sqlite3.connect("database/music.db") -DATE = datetime.datetime.now().strftime("%Y-%m-%d") -total_show_dur = 0 +#cursor = conn.cursor() +#cursor.execute("DROP TABLE SHOW") +#conn.commit() + +conn.execute('''CREATE TABLE IF NOT EXISTS SHOW( +ID INTEGER PRIMARY KEY AUTOINCREMENT, +EPISODE INT NOT NULL, +DATE TEXT NOT NULL, +DURATION INT NOT NULL, +ALBUM TEXT NOT NULL, +TRACK TEXT NOT NULL, +ARTIST TEXT NOT NULL, +TRACKDUR INT NOT NULL, +YEAR TEXT NOT NULL +);''') + +print("Table created successfully"); + +#conn.execute("INSERT INTO SHOW (ID, EPISODE,DATE,TRACK,ARTIST) \ +#VALUES (1, 1, 'wednesday', 'Some song', 'Some Artist' )"); +#conn.commit() +#print("DB Record created successfully"); +#conn.close() + + + +episode_date = datetime.datetime.now().strftime("%Y-%m-%d") +episode_duration = 0 complete_playlist = [] show_array = [] show_cover = "" @@ -21,8 +46,6 @@ archive = [] artists_played = [] artist_abreviated = [] episode_number = sys.argv[1] - - show_name = "SHOWNAME" # OBED path = "/home/rob/antena/" web_path = "/home/rob/antena/html/episode/{0}/img".format(episode_number) @@ -68,7 +91,7 @@ def load_all_music(): def create_show_playlist(show_array: list, complete_playlist:list): load_all_music() - global total_show_dur + global episode_duration global archive track_count = 0 @@ -76,7 +99,7 @@ def create_show_playlist(show_array: list, complete_playlist:list): max_track_dur = 10 min_track_dur = 1.8 - while total_show_dur < 60 * 60 and track_count < 12 : + while episode_duration < 60 * 60 and track_count < 12 : song = random.choice(random.sample(\ complete_playlist, len(complete_playlist) )).rstrip() # pick a song track = TinyTag.get(song) # get its metadata @@ -92,18 +115,37 @@ def create_show_playlist(show_array: list, complete_playlist:list): artist_abreviated.append(art) artists_played.append(track.artist) # and add the artist to the played list add_to_tracks_played(track.title) # and write entry to archive file + + if not track.year: # where missing metadata give a dummy value + track.year = 0000 + + cursor = conn.cursor() + #long_string = json.dumps(["' SomeWord"]) + cursor.execute("INSERT INTO SHOW (\ + ID, EPISODE, DATE, DURATION, ALBUM, TRACK, ARTIST, TRACKDUR, YEAR) \ + VALUES (NULL, ?, ?, ?, ?, ?, ?,?,?)", [episode_number, episode_date, episode_duration, \ + track.album, track.title, track.artist, track.duration, track.year]); + conn.commit() + print("DB Record created successfully"); + + + + + track_count += 1; print(track_count) - total_show_dur = total_show_dur + track.duration + episode_duration = episode_duration + track.duration else: print("TRACK TOO SHORT..........." ) else: print("TRACK TOO LONG..........." ) else: print("SONG PLAYED IN PREVIOUS EPISODE" ) else: print("ARTIST ALREADY IN PODCAST") + + conn.close() - total_show_dur = timedelta(seconds=round(total_show_dur)) + episode_duration = timedelta(seconds=round(episode_duration)) - print("total tracks = {0} \n total duration = {1} ".format(track_count, total_show_dur)) + print("total tracks = {0} \n total duration = {1} ".format(track_count, episode_duration)) - return show_array, total_show_dur + return show_array, episode_duration def combine_images(columns, space, images, variants:int): global show_cover @@ -147,8 +189,7 @@ def combine_images(columns, space, images, variants:int): h2_spc = 85 h2_baseline = 1530 - - + # Add Text to the image ---------------------------------------- # ------------------------------------------------------------------- # some logic to shuffle the list if sub sections of list are too long for layout @@ -160,12 +201,10 @@ def combine_images(columns, space, images, variants:int): [len(s) for s in [''.join(artist_abreviated[9:12])]][0] > str_length_thresh: print("on of the lines is longer than fits the page... shuffling the list for a better look") random.shuffle(artist_abreviated) - - - + im.text((30,10), '''an eclectic selection of contemporary independent music from slovenia: {0} - E P I S O D E #{1} '''\ - .format(DATE,episode_number), fill="white", font=mf_h3) + .format(episode_date,episode_number), fill="white", font=mf_h3) im.text((30,280), ''' THIS WEEK ON \n EPISODE #{0} of \n {1}!'''.upper()\ .format(episode_number, show_name), fill="white", font=mf_h1, stroke_width=2, stroke_fill='black') im.text((30, h2_baseline + (h2_spc*1) ), '''m u s i c _ f r o m _ : {0}'''\ @@ -177,20 +216,15 @@ def combine_images(columns, space, images, variants:int): im.text((30, h2_baseline + (h2_spc*4)), "{0}"\ .format(' | '.join(artist_abreviated[9:12])), (255,255,255), font=mf_h2) - im.text((1560,1888), ''' http://{0}.rizom.si '''\ - .format(show_name, DATE,episode_number), fill="white", font=mf_h4) + im.text((1540,1888), ''' http://{0}.rizom.si '''\ + .format(show_name, episode_date,episode_number), fill="white", font=mf_h4) - # TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - - show_cover = 'img/cover.png'.format(episode_number,DATE, variants) - #pathlib.Path.touch(show_cover) + show_cover = 'img/cover.png'.format(episode_number,episode_date, variants) background.save("html/" + "episode/{0}/{1}".format(episode_number, show_cover)) return show_cover def create_show_coverart(show_array, variants): -# global show_array - #print(show_array) show_cover_jpgs = [] for dir in show_array: @@ -199,11 +233,6 @@ def create_show_coverart(show_array, variants): for i in ["cover", "COVER"]: if i in file: show_cover_jpgs.append(str(path) + "/" + file) - #print(file) - -# print("\n ++++ show jpgs: +++++ {0} +++++++++number of jpgs: {1} +++++++\n"\ - # .format(show_cover_jpgs, len(show_cover_jpgs) ) ) - print(''' ------------------------ @@ -241,16 +270,10 @@ def create_animated_gif(): img.save(fp=fp_out, format='GIF', append_images=imgs, save_all=True, duration=200, loop=0) - - - - - def create_pls_file(): # write the selection as a playlist file - with open("shows/antena_playlist_" + DATE + ".pls","w") as file: + with open("shows/antena_playlist_" + episode_date + ".pls","w") as file: file.writelines("\n".join(show_array)) - def create_podcast(show_array: list): @@ -265,61 +288,176 @@ def create_podcast(show_array: list): playlist_songs = [AudioSegment.from_file(flac_file) for flac_file in show_array] - show_intro = playlist_songs.pop(0) - first_song = playlist_songs[0].fade_in(3000) - intro_and_first = first_song.overlay(show_intro) - first_three_blurb = playlist_songs.pop(0) - second_three_blurb = playlist_songs.pop(0) - final_songs_blurb = playlist_songs.pop(0) - final_show_outro = playlist_songs.pop(0) - playlist = intro_and_first - - for song in playlist_songs[2:3]: # first three songs (first added with intro) - # We don't want an abrupt stop at the end, so let's do a 1 second crossfades - playlist = playlist.append(song, crossfade=(10 * 1000)) + show_intro = playlist_songs[0] +# first_song = playlist_songs[0].fade_in(0) # only fadein if used over show intro - currently not used + # intro_and_first = first_song.overlay(show_intro) + first_three_blurb = playlist_songs[0] + second_three_blurb = playlist_songs[0] + final_songs_blurb = playlist_songs[0] + final_show_outro = playlist_songs[0] + # next two commented lines are for if intro goes over first track or not + #playlist = intro_and_first + + + + playlist = show_intro + + + #for song in playlist_songs[2:3]: + for song in playlist_songs[1:4]: # first three songs (first added with intro) + # We don't want an abrupt stop at the end, so let's do a 1 second crossfades + playlist = playlist.append(song, crossfade=(1 * 1000)) + print("first songs added") + # blurb about first three tracks playlist = playlist.append(first_three_blurb) # <--------------BLURB INSERT - for song in playlist_songs[4:6]: # second three songs - # We don't want an abrupt stop at the end, so let's do a 1 second crossfades - playlist = playlist.append(song, crossfade=(10 * 1000)) + for song in playlist_songs[4:7]: # second three songs + playlist = playlist.append(song, crossfade=(1 * 1000)) + print("second songs added") + playlist = playlist.append(second_three_blurb) # <--------------BLURB INSERT - for song in playlist_songs[7:]: # second three song # We don't want an abrupt stop at the end, so let's do a 1 second crossfades - playlist = playlist.append(song, crossfade=(10 * 1000)) + for song in playlist_songs[7:10]: # second three song + playlist = playlist.append(song, crossfade=(1 * 1000)) + print("third songs added") + playlist = playlist.append(final_songs_blurb) # <--------------BLURB INSERT + for song in playlist_songs[10:13]: # second three song + playlist = playlist.append(song, crossfade=(1 * 1000)) + print("final songs added") + playlist = playlist.append(final_show_outro) # <-------------- OUTRO SEQUENCE # get length of final show / podcast playlist_length = len(playlist) / (1000*60) # save the entire poidcast + with open("html/episode/{0}/show.flac".format(episode_number), 'wb') as out_f: + print("FLAC output file opened...writing to file...") playlist.export(out_f, format='flac') + print("FLAC audio file exported...") + + with open("html/episode/{0}/show.mp3".format(episode_number), 'wb') as out_f: + print("MP3 output file opened...writing to file...") + playlist.export(out_f, format='mp3') + print("MP3 audio file exported...") ### ------------------------------------------------------------ -def create_html_from_template(): +def create_html_episode_from_template(): from jinja2 import Template, Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('html/templates')) episode_template = env.get_template('episode.jinja') - output_from_parsed_template = episode_template.render(episode_author="rrrrrrrr", episode_dur="123", about_show="bla bla", episode_playlist="playlist_songs", episode_image="episode/{0}/img/cover.png".format(episode_number)) - with open("html/episode.html".format(episode_number), "w") as episode_page: + show_info = [] + + # maybe a jinja2 template loop here instead + for i in show_array: + track = TinyTag.get(i) + detail = str(track.artist) + " | " + str(track.album) + \ + " | " + str(track.title) + " | " + str(track.year) + \ + " | " + str(timedelta(seconds=round(track.duration))) + show_info.append("" + detail) + + output_from_parsed_template = episode_template.render(episode_author="rrrrrrrr",\ + episode_duration=episode_duration, episode_date=episode_date, about_show="bla bla", episode_playlist=show_info, \ + episode_image="img/cover.png".format(episode_number)) + + with open("html/episode/{0}/index.html".format(episode_number), "w") as episode_page: episode_page.write(output_from_parsed_template) +def create_html_episode_from_template(): + + from jinja2 import Template, Environment, FileSystemLoader + + env = Environment(loader=FileSystemLoader('html/templates')) + episode_template = env.get_template('episode.jinja') + + show_info = [] + + # maybe a jinja2 template loop here instead + for i in show_array: + track = TinyTag.get(i) + detail = str(track.artist) + " | " + str(track.album) + \ + " | " + str(track.title) + " | " + str(track.year) + \ + " | " + str(timedelta(seconds=round(track.duration))) + show_info.append("" + detail) + + output_from_parsed_template = episode_template.render(episode_author="rrrrrrrr",\ + episode_duration="123", about_show="bla bla", episode_playlist=show_info, \ + episode_image="img/cover.png".format(episode_number)) + + with open("html/episode/{0}/index.html".format(episode_number), "w") as episode_page: + episode_page.write(output_from_parsed_template) + + +def create_html_homepage_from_template(): + + from jinja2 import Template, Environment, FileSystemLoader + + env = Environment(loader=FileSystemLoader('html/templates')) + homepage_template = env.get_template('homepage.jinja') + + show_info = [] + + episode_artists = [] + for i in range(10): + artists = [] + conn = sqlite3.connect("database/music.db") + cur = conn.cursor() + cur.execute("SELECT ARTIST FROM SHOW WHERE EPISODE=?", [i]) + rows = cur.fetchall() + + for artist in rows: + art = string=re.sub("\(.*?\)","", artist[0]) + # shorten verbose artist names such as trojnik Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) + artist = string=re.sub("and","&",art) + artists.append(artist) + episode_artists.append(artists) + + + episodes = [] + for i in range(10): + + print(episode_artists) + an_episode = dict(date="2012-02-", episode_artists=episode_artists[i], episode_number=i, episode_date=episode_date, episode_duration=episode_duration) + episodes.append(an_episode) + episodes = reversed(episodes) # reversed order to most recent episode appears first in list + + + # maybe a jinja2 template loop here instead + for i in show_array: + track = TinyTag.get(i) + detail = str(track.artist) + " | " + str(track.album) + \ + " | " + str(track.title) + " | " + str(track.year) + \ + " | " + str(timedelta(seconds=round(track.duration))) + show_info.append("" + detail) + + output_from_parsed_template = homepage_template.render(episodes=episodes, episode_author="Rob Canning",\ + episode_duration="123", episode_number=episode_number, episode_artists=episode_artists, \ + about_show="bla bla", episode_playlist=show_info, \ + episode_image="episode/{0}/img/cover.png".format(episode_number)) + + with open("html/index.html".format(episode_number), "w") as episode_page: + episode_page.write(output_from_parsed_template) + + create_show_playlist(show_array, complete_playlist) -create_show_coverart(show_array, 1) #total_show_dur = 100 +create_show_coverart(show_array, 1) #episode_duration = 100 #create_animated_gif() -#convert -delay 100 -loop 0 html/episode/2/img/show_cover_2024-01-12* animatedGIF.gif -#create_intro(show_array) + + +create_intro(show_array) create_pls_file() -create_html_from_template() -#create_web_page(show_name, show_array, episode_number, artists_played, show_cover, total_show_dur) -#create_podcast(show_array) - + +create_html_episode_from_template() +create_html_homepage_from_template() +create_podcast(show_array) +#convert -delay 100 -loop 0 html/episode/2/img/show_cover_2024-01-12* animatedGIF.gif diff --git a/playlists/track_playout_history.txt b/playlists/track_playout_history.txt index 063ad23..a7a3ff2 100644 --- a/playlists/track_playout_history.txt +++ b/playlists/track_playout_history.txt @@ -1,651 +1,12 @@ -Sub Persona II -BE CREEP - LIVE -Mono Scarves - Bralni stroj Korenje -Coriolis Effect -Sweet Sandy -Inchoate Crimes -When Ballon And Door Collide Pt2 -Stampede -Action XIII -Domen Gnezda - Misnomer II - 15 Misnomer 37 -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 05 Čačkarije (Scribbles) -Lussid -Cyberpunk Tendencies -When Ballon And Door Collide Pt2 -Action I -Small Tyrant -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 09 Though Ashtray (Pepelnik), I Still Like To Read Your Poems -Apprentie Sorciēre -Amyl Nitrite -Domen Gnezda - Misnomer II - 10 Misnomer 32 -biking, i look back -02 Confined Movement- B -Action XV -Her Boat -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 14 Klic meduze -Untitled -chan debris_var.2a -Pudl -Je Šel Brat S Sestro -Vid Drašler - Kramljanja - 02 2. -Infinite values -Jean-Luc Guionnet & Samo Kutin - Kopaš - 06 06 -Altobar -Magie de la Pleine Lune -Keep An Eye On That Ice Cream -Domen Gnezda - Misnomer II - 16 Misnomer 38 -Liqweed -Vinko Globokar - Dialog - 05 Dialog über Luft (1994) -Samo Kutin and Martin Küchen - Stutter And Strike - 01 Uncaged (take 2) -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 05 Čačkarije (Scribbles) -biking, i look back -Tilt - Tilt - 01 Alicante 1 -Cyclidox -Cyclidox -Sub Persona III -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 10 Knitting Traps -Divine -Gfuel -Nots -you think you're so much better -debris of motus_var.1b -Tilt - Tilt - 03 Alicante 3 -Blue Waters Turn Black (P.C.M. remix) -Laszlo -Stale Futures -Tomaž Grom - Sam, za... - 08 P.Č. -Pudlica -Hollogramma -ethera (dome) -Jean-Luc Guionnet & Samo Kutin - Kopaš - 05 05 -Plastik Elastik -Tomaž Grom & Seijiro Murayama - Nepretrganost - 01 Ena. -BE CREEP - LIVE -Inna Moss Side (96' Flex) -Samo Kutin and Martin Küchen - Stutter And Strike - 04 Orans -Nihalo -Tone Pavček & Tomaž Grom - Sonce in sončice po vsem svetu - 02 Sončna idila -The Left Eye -Tides (excerpt) -Moonolog -Domen Gnezda - Misnomer II - 02 Misnomer 24 -a2 -Gravitacija -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 07 Hardhanded -Tomaž Grom - Sam, za... - 04 L.Z. -Botox -Vid Drašler - Kramljanja - 06 6. -anticipation_var.1-1 -Oholo! - Mnogobolje - 05 Influenced -Tomaž Grom & Seijiro Murayama - Nepretrganost - 05 Pet. -+ [Excerpt] -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 01 From Hands To Ears - Iz rok v ušesa -Sub Persona X -Passage -Juan Camilo Vasquez - Splitting - 05 Caliope (El canto de las abejas), for guitar and electronics (2014) -Bright Future -YuWrong -Leather Wings -Birth of a planet -Mono Scarves - Demoklejev meč in rivbiška palica dva v enem -Explored -wudang_var.3-7 -Lazy Sunday (Moshang remix) -Jean-Luc Guionnet & Samo Kutin - Kopaš - 05 05 -Of Blood -None -Mercurius & the Ram -Palimpsest V2 -5000000000 YRS -Tomaž Grom - Sam, za... - 09 N.N. -Ne Iz Sadu -Some Spatter Left -Extra space -Antichrist -Mono Scarves - Per fhodo ali kot niša -Nagauar -voices -Vid Drašler - Kramljanja - 07 7. -Untold Truths -Whale Ft -S.L.C. -Bad Girls (rework) -Jean-Luc Guionnet & Samo Kutin - Kopaš - 06 06 -Tomaž Grom - Sam, za... - 06 P.K. -Ligature part I -Magie de la Pleine Lune -Genetska Modifikacija Organskih Celic -Typhaceae -Tomaž Grom - Sam, za... - 08 P.Č. -Uroš Rojko - Splitting - 03 Chiton (2003) -Chorus 1 (SC) -things i decided against -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 10 Knitting Traps -Zulu -Weakest Parts of Society -Fightinsect -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 12 Zataknjeno za zobmi -Gfuel -Genetic Architecture Of The Evolutionary Selection -Samo Kutin and Martin Küchen - Stutter And Strike - 03 Svete gore -My Dentist -coupdotexe (mapalma remix) -Jean-Luc Guionnet & Samo Kutin - Kopaš - 05 05 -Inside Magog (Burp remix) -KIURIKI - Killem All -Oholo! - Mnogobolje - 01 Blind man's buff -Moonolog -save as -Seven Day Pill Box -conversation suppresed -Hume -The Stabbing Party -Rib Vaulting -Oscillopsia -Preludium General Ensemble (Outtake) -Non-Intersected Flight -Samo Kutin and Martin Küchen - Stutter And Strike - 08 Uncaged (take 1) -Sub Persona VI -Of Blood -Mono Scarves - Kaj pa tisti rizling -Scena Prologue -Dusted -Transition (Excerpt) -Fluid Ruin -Stop That Noise -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 10 Knitting Traps -Brazen Bull -Birth of a planet -KIURIKI - Pudl -Persecutors Persecuted (Act III) -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 08 Two Right Hands - Dve desni roki -Domen Gnezda - Misnomer II - 07 Misnomer 29 -Matej Bonin - Gymnastics of non-sense II - 06 Part VI -Seven Day Pill Box -KIURIKI - Killem All -Asphalt -Clear Love -Jošt Drašler - The Balloon Catcher - 09 Grandma Balloon -Vinko Globokar - Dialog - 05 Dialog über Luft (1994) -The Look -Kampak -Sterne Frau -Opaque Euphoria -Bojana Šaljić Podešva - Dialog - 03 Meditacija o bližini (2008) -Oholo! - Mnogobolje - 05 Influenced -a6 -Tone Pavček & Tomaž Grom - Sonce in sončice po vsem svetu - 01 Pogumna Lenka -Action XIX -Undulipodium -Stefan Beyer - Dialog - 02 Notoriously Pyratisch (2008) -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 13 Drobovje ust -Oholo! - Mnogobolje - 03 Shards II. -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 06 Peš (On Foot) -Asphalt -The Look -Cyclidox -Samo Kutin and Martin Küchen - Stutter And Strike - 09 Hjärtspion -Carve4 -Tomaž Grom - Sam, za... - 01 T.G.V.S. -Altobar -Vinko Globokar - Splitting - 07 Vinko Globokar- Dialogue about water, for acoustic and electric guitar (1994) -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 04 Forgetting Won't Help - Pozaba ne pomaga -Dromon -Amena -Jaymups -Domen Gnezda - Misnomer II - 04 Misnomer 26 -Hanged Mans Paradox -Land -Vid Drašler - Kramljanja - 03 3. -BE CREEP - LIVE -death rattle_var.2-4 -make this title easy to remember -Action XVIII -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 04 Slightly Used Machine -Arboreal -Slika 1 -Canote -Opaque Euphoria -Samo Kutin - Plovilo - 06 A -Osoje 2k5 -Domen Gnezda - Misnomer II - 10 Misnomer 32 -Sub Persona X -When Ballon And Door Collide Pt2 -annihilation_var. 0 -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 11 Sound Out - Zvonka pavza -Stabit -Lenticular -debris of motus_var.1 -Vid Drašler - Kramljanja - 03 3. -Loveful -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 03 V nedogled (Ad Infinitum) -Slika 3 -YuWrong -Offset -Tomaž Grom - Sam, za... - 01 T.G.V.S. -Jean-Luc Guionnet & Samo Kutin - Kopaš - 02 02 -My Sweet.Com -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 15 Črna ovca -Action XXI -Koldunya -Love Emergency -Tomaž Grom - Sam, za... - 06 P.K. -Jean-Luc Guionnet & Samo Kutin - Kopaš - 02 02 -Oholo! - Mnogobolje - 03 Shards II. -Dobro Jutro -Tilt - Tilt - 06 Ljubljana 3 -Domen Gnezda - Misnomer II - 13 Misnomer 35 -Mono Scarves - Ogledala za gledanje v preteklost -I Dreams of Others -Brazen Bull -Crisp Ursa Minor -Ultrascan -Loveful -Plastik Elastik -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 12 Battling For A Title - Za naslov se boriva -skull autopsy_var.2b-6 -Samo Kutin - Plovilo - 05 Nič -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 13 Drobovje ust -Gravitacija -Scena Prologue -Domen Gnezda - Misnomer II - 13 Misnomer 35 -Action VII -Reflex Action -BE CREEP - Burnt Dreams -Samo Kutin - Plovilo - 02 Bliže -Surprise! No Magic -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 11 Sound Out - Zvonka pavza -Dromon -Kampak -NTU -Soil Stone -Chorus 1 (SC) -Action IX -Action XVI -Somnambulism -Passage -Genetic Architecture Of The Evolutionary Selection -Nagauar -Tone Pavček & Tomaž Grom - Sonce in sončice po vsem svetu - 11 Înfiat din greşeală (Posvojen po pomoti) -Vid Drašler - Kramljanja - 05 5. -Keep An Eye On That Ice Cream -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 07 Cargo - Tovor -Spider Move -Mistif -Mono Scarves - Demoklejev meč in rivbiška palica dva v enem -Domen Gnezda - Misnomer II - 15 Misnomer 37 -Deabody -Atlatl -Jošt Drašler - The Balloon Catcher - 05 Yellow Balloon -Genetska Modifikacija Organskih Celic -My Sweet.Com -Amyl Nitrite -My Dentist -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 14 Klic meduze -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 02 Spone (Chains) -Crossing The Rubicon -Magie de la Pleine Lune -prpld crossover_var.3b -Vinko Globokar - Dialog - 05 Dialog über Luft (1994) -De Sica -The Look -Echo-Recoil -Offset -Passage -Fluid Ruin -Vid Drašler - Kramljanja - 07 7. -Tomaž Grom - Sam, za... - 05 G.V. -Vorspiel fur Traurige Madchen -Domen Gnezda - Misnomer II - 10 Misnomer 32 -Weakest Parts of Society -Parallax Division -coupdotexe (mapalma remix) -Preludium General Ensemble (Outtake) -Sub Persona IX -things i decided against -Action XV -Samo Kutin - Plovilo - 02 Bliže -Vrtnice -Mistif -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 05 Goldfish - Zlata ribica -Altobar -Atlatl -When Ballon And Door Collide -Action XIX -Vid Drašler - Kramljanja - 01 1. -Samo Kutin and Martin Küchen - Stutter And Strike - 06 Planota -The Stabbing Party -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 03 03 -Pudl -Cyborg Not Cyborg -Spurt -Passage -Cyborg Not Cyborg -Jošt Drašler - The Balloon Catcher - 01 Blue Balloon -None -Samo Kutin - Plovilo - 02 Bliže -Vrtnice -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 10 10 -Sun Gong Moon Song -Somnambulism -Vorspiel fur Traurige Madchen -Dolos -Afternoon: Panovec -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 07 07 -Pear of Anguish -Tomaž Grom & Seijiro Murayama - Nepretrganost - 01 Ena. -Sense of nonsense -Offset V2 -Vid Drašler - Kramljanja - 01 1. -Action III -Ambinet -Dnevnik -5000000000 YRS -Blade Runes -YuWrong -postcell -Color of Ice -anticipation_var.1-1 -Tomaž Grom - Sam, za... - 07 S.M. -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 08 08 -Mercurius & the Ram -Head Storm -Tone Pavček & Tomaž Grom - Sonce in sončice po vsem svetu - 10 Ninulla Çapkanёve (Čenčačeva uspavanka) -Smaidoša Mēnesnīca -Growing Destruction -Summer Peach Girl -chan debris_var.2a -Inside Magog (Burp remix) -Jošt Drašler - The Balloon Catcher - 06 Green Balloon -Jean-Luc Guionnet & Samo Kutin - Kopaš - 02 02 -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 10 10 -Gfuel -Action IV -Sterne Frau -Cyborg Not Cyborg -Tilt - Tilt - 07 Ljubljana 4 -Scena Prologue -Benocci 2004 -Samo Kutin - Plovilo - 06 A -Oholo! - Mnogobolje - 03 Shards II. -Outro -Magie de la Pleine Lune -wudang_var.3-7 -Whale Ft -Surprise! No Magic -一点一滴 -Fluid Ruin -Naval Cry -Lussid -Vinko Globokar - Splitting - 07 Vinko Globokar- Dialogue about water, for acoustic and electric guitar (1994) -Tomaž Grom - Sam, za... - 09 N.N. -Weakest Parts of Society -unum -Action XVII -Brazen Bull -Sun Gong Moon Song -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 02 Feeding The Distance Between Us -Of Blood -The Oppressed 1 (Outtake) -Pilsētas Likums -Modem -I.F. II Metal Rach -KIURIKI - Pudl -Oholo! - Mnogobolje - 03 Shards II. -Slika 1 -02 Confined Movement- B -shifu_var.3a-8 -Regeneracijska Sonda -Loveful -Asphyxia -De Sica -Soloveikia Moj -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 06 06 -When Ballon And Door Collide -Domen Gnezda - Misnomer II - 13 Misnomer 35 -Peter Ablinger - Splitting - 06 Das Buch der Gesänge, no. 88 (Bus ride) -Enslaved Population (DJ Surgeon remix) -conversation suppresed -Harlequin -coupdotexe -Explored -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 05 Čačkarije (Scribbles) -The Oppressed 2 (SC) -Tomaž Grom & Seijiro Murayama - Nepretrganost - 01 Ena. -1disrupt3violence1monopoly2 -Tomaž Grom - Sam, za... - 04 L.Z. -Misoneism -wudang_var.3-7 -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 10 Knitting Traps -Stale Futures -Action I -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 06 06 -Speshlafer -Domen Gnezda - Misnomer II - 03 Misnomer 25 -Crossing The Rubicon -Canote -Action III -Deabody -Palimpsest V2 -chan debris_var.2b -Oholo! - Mnogobolje - 03 Shards II. -Zink -things i decided against -Surprise! No Magic -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 11 Pesem monologa -Sirene -S.L.C. -Samo Kutin - Plovilo - 07 Sejalci -Multiply feat. N'toko -Sub Persona V -aching -BE CREEP - LIVE -Todorci2 -Metrognome -Intro -Nost -Vinko Globokar - Splitting - 07 Vinko Globokar- Dialogue about water, for acoustic and electric guitar (1994) -Mercurius & the Ram -Tilt - Tilt - 06 Ljubljana 3 -Trials -Tone Pavček & Tomaž Grom - Sonce in sončice po vsem svetu - 02 Sončna idila -a6 -H Light (Wodan remix) -Land -Her Boat -Sub Persona V -Strand Looper -Inchoate Crimes -Pool Reflection -Untold Truths -Tilt - Tilt - 05 Ljubljana 2 -The Mother And Chorus (Act II) -Vid Drašler - Kramljanja - 07 7. -Regeneracijska Sonda -Apropos -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 02 Spone (Chains) -Sunsunsun -Samo Kutin and Martin Küchen - Stutter And Strike - 05 Hammaröga -Dolos -prpld crossover_var.3b -Vinko Globokar - Splitting - 07 Vinko Globokar- Dialogue about water, for acoustic and electric guitar (1994) -Cyberpunk Tendencies +don't tell me what i like Nothing Concealed -Jean-Luc Guionnet & Samo Kutin - Kopaš - 05 05 -Sub Persona IX -Tomaž Grom - Sam, za... - 05 G.V. -My Sweet.Com -coupdotexe (mapalma remix) -Hollogramma -Kampak -Domen Gnezda - Misnomer II - 17 Misnomer 39 -Sub Persona X -postcell -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 09 Though Ashtray (Pepelnik), I Still Like To Read Your Poems -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 06 Peš (On Foot) -a3 -Paperwork pt.3 -Action IV -won't work for free anymore -Side A / KIKIRIKI - Rosy Light -Sweet Sandy -Samo Kutin and Martin Küchen - Stutter And Strike - 06 Planota -Finka -Vertex -Multiply feat. N'toko -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 12 Zataknjeno za zobmi -KIURIKI - Pudl -Jean-Luc Guionnet & Samo Kutin - Kopaš - 05 05 -Tilt - Tilt - 04 Ljubljana 1 -Zulu -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 03 03 -Slika 5 -Human Body Game -Infinite values -Koldunya -Untitled -The twelve and the dead -Land -Mono Scarves - Bralni stroj Korenje -Sub Persona V -Chorus 1 (SC) -My Dentist -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 02 Spone (Chains) -postcell -Hollogramma -Waiting for Distor -Untold Truths -Crushing Trauma -prpld crossover_var.3b -Entropy -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 12 Battling For A Title - Za naslov se boriva -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 06 Peš (On Foot) -Radikal -Arboreal -Samo Kutin - Plovilo - 05 Nič -Jean-Luc Guionnet & Samo Kutin - Kopaš - 02 02 -Genome Autism Pt. 1 -Moni Harm -Lenticular -coupdotexe (mapalma remix) -Brazen Bull -a3 -Divine -Vertex -Side B / NIHILISTIC FRONT - Balkan Nihilism -Strand Looper -Nebulae Tree -Multiply feat. N'toko -02 Confined Movement- B -Sotto La Pelle -a5 -Laszlo -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 11 11 -Amyl Nitrite -Oholo! - Mnogobolje - 03 Shards II. -Osoje 2k5 -Heretics Fork -biking, i look back -make this title easy to remember -Enslaved Population (DJ Surgeon remix) -Sub Persona VI -Cyborg Not Cyborg -What ? -Samo Kutin and Martin Küchen - Stutter And Strike - 01 Uncaged (take 2) -Regeneracijska Sonda -Deabody -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 01 Slikar (Painter) -Benocci 2004 -Untold Truths -Hydrozone -Action XIX -Sub Persona I -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 01 Each In His Own Municipality -Smaidoša Mēnesnīca -Juice 10 -Vid Drašler - Kramljanja - 06 6. -Nost -Vrtnice -Untold Truths -Paperwork pt.3 -Hydrozone -Action XIX -+ [Excerpt] -Carve4 -Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 15 Črna ovca -stepbystep -Jošt Drašler - The Balloon Catcher - 04 Bouncing Balloon -Crossing The Rubicon -Inchoate Crimes -The navigators -Tomaž Grom & Seijiro Murayama - Nepretrganost - 05 Pet. -TiTiTi (Jure Boršič, Jošt Drašler, Vid Drašler) - Štafelaj - 05 Čačkarije (Scribbles) -Action IV -Explored -Samo Kutin and Martin Küchen - Stutter And Strike - 04 Orans -Nebulae Tree -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 01 01 -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 05 Goldfish - Zlata ribica -Amena -debris of motus_var.1 -Moni Harm -Vertex -Action IX -一点一滴 -Slika 3 -Trojnik (Cene Resnik, Tomaž Grom, Vid Drašler) - Moje uho ima ostre robove - 07 07 -In His Prison (Outtake) -debris of motus_var.1b -Domen Gnezda - Misnomer II - 02 Misnomer 24 -Samo Kutin - Plovilo - 08 Lišaji -Liqweed -The navigators -Seven Day Pill Box -Summer Peach Girl -Impersonal Again -Domen Gnezda - Misnomer II - 06 Misnomer 28 -Tilt - Tilt - 01 Alicante 1 -Jošt Drašler - The Balloon Catcher - 05 Yellow Balloon -Vid Drašler - Kramljanja - 07 7. -Hanged Mans Paradox -Madmen -a4 -Finka -Naval Cry -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 08 Almost The Same -Action IX -Nagual -Je Šel Brat S Sestro -Cyberpunk Tendencies -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 06 Cinema Ear - - Kino uho -Matej Bonin - Gymnastics of non-sense II - 04 Part IV -Tomaž Grom - Sam, za... - 01 T.G.V.S. -Jewels -Samo Kutin and Martin Küchen - Stutter And Strike - 03 Svete gore -Jean-Luc Guionnet & Samo Kutin - Kopaš - 05 05 -won't work for free anymore -death rattle_var.2-4 -Gravitacija -Zulu -Human Body Game -you think you're so much better -ethera (dome) -Samo Kutin - Plovilo - 01 Platno -The twelve and the dead -Sweet Sandy -Dobro Jutro -Atlatl -Samo Kutin and Martin Küchen - Stutter And Strike - 02 Fishing In Siphon -Zlatko Kaučič, Tomaž Grom - The Ear Is The Shadow Of The Eye - 12 Battling For A Title - Za naslov se boriva -Offset -Growing Destruction -Head Storm +Action XV +Leather Wings +Loss of Consciousness +Strenuous Effort Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 14 Klic meduze -Samo Kutin and Martin Küchen - Stutter And Strike - 05 Hammaröga -Radikal -whtend leftover_var.3 -Atlatl -a2 -Matej Bonin - Gymnastics of non-sense II - 05 Part V -Zlatko Kaučič, Tomaž Grom - Torn Memories Of Folklore - Raztrgana folklora spomina - 08 Almost The Same +Hunahpu & Xbalanque +decrepitation_var.1a-2 +Speshlafer +PSH