added sqlite database funtionality and jinja templating

main
Rob Canning 2024-01-15 02:19:13 +01:00
parent 795a25451b
commit 9f70858aca
10 changed files with 688 additions and 772 deletions

BIN
database/music.db 100644

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -6,20 +6,20 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,700,900"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,700,900">
<link rel="stylesheet" href="fonts/icomoon/style.css"> <link rel="stylesheet" href="../../fonts/icomoon/style.css">
<link rel="stylesheet" href="css/bootstrap.min.css"> <link rel="stylesheet" href="../../css/bootstrap.min.css">
<link rel="stylesheet" href="css/magnific-popup.css"> <link rel="stylesheet" href="../../css/magnific-popup.css">
<link rel="stylesheet" href="css/jquery-ui.css"> <link rel="stylesheet" href="../../css/jquery-ui.css">
<link rel="stylesheet" href="css/owl.carousel.min.css"> <link rel="stylesheet" href="../../css/owl.carousel.min.css">
<link rel="stylesheet" href="css/owl.theme.default.min.css"> <link rel="stylesheet" href="../../css/owl.theme.default.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mediaelement@4.2.7/build/mediaelementplayer.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mediaelement@4.2.7/build/mediaelementplayer.min.css">
<link rel="stylesheet" href="css/aos.css"> <link rel="stylesheet" href="../../css/aos.css">
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="../../css/style.css">
</head> </head>
<body> <body>
@ -105,7 +105,7 @@
<div class="player mb-5"> <div class="player mb-5">
<audio id="player2" preload="none" controls style="max-width: 100%"> <audio id="player2" preload="none" controls style="max-width: 100%">
<source src="{{episode_audio}}" type="audio/mp3"> <source src="show.mp3" type="audio/mp3">
</audio> </audio>
</div> </div>
@ -115,6 +115,18 @@
</div> </div>
</div> </div>
{% for result in show_info %}
<tr>
<td>{{ result[0] }}</td>
<td>{{ result[1] }}</td>
<td>{{ result[2] }}</td>
</tr>
{% endfor %}
</div> </div>
<div class="site-section bg-light"> <div class="site-section bg-light">
@ -179,43 +191,7 @@
<p>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!</p> <p>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!</p>
</div> </div>
<div class="mb-5">
<h3 class="footer-heading mb-4">Recent Podcast</h3>
<div class="block-25">
<ul class="list-unstyled">
<li class="mb-3">
<a href="#" class="d-flex">
<figure class="image mr-4">
<img src="images/img_1.jpg" alt="" class="img-fluid">
</figure>
<div class="text">
<h3 class="heading font-weight-light">Lorem ipsum dolor sit amet consectetur elit</h3>
</div>
</a>
</li>
<li class="mb-3">
<a href="#" class="d-flex">
<figure class="image mr-4">
<img src="images/img_1.jpg" alt="" class="img-fluid">
</figure>
<div class="text">
<h3 class="heading font-weight-light">Lorem ipsum dolor sit amet consectetur elit</h3>
</div>
</a>
</li>
<li class="mb-3">
<a href="#" class="d-flex">
<figure class="image mr-4">
<img src="images/img_1.jpg" alt="" class="img-fluid">
</figure>
<div class="text">
<h3 class="heading font-weight-light">Lorem ipsum dolor sit amet consectetur elit</h3>
</div>
</a>
</li>
</ul>
</div>
</div>
</div> </div>
<div class="col-lg-4 mb-5 mb-lg-0"> <div class="col-lg-4 mb-5 mb-lg-0">
@ -301,18 +277,18 @@
</footer> </footer>
</div> </div>
<script src="js/jquery-3.3.1.min.js"></script> <script src="../../js/jquery-3.3.1.min.js"></script>
<script src="js/jquery-migrate-3.0.1.min.js"></script> <script src="js/jquery-migrate-3.0.1.min.js"></script>
<script src="js/jquery-ui.js"></script> <script src="../../js/jquery-ui.js"></script>
<script src="js/popper.min.js"></script> <script src="../../js/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script> <script src="../../js/bootstrap.min.js"></script>
<script src="js/owl.carousel.min.js"></script> <script src="../../js/owl.carousel.min.js"></script>
<script src="js/jquery.stellar.min.js"></script> <script src="../../js/jquery.stellar.min.js"></script>
<script src="js/jquery.countdown.min.js"></script> <script src="../../js/jquery.countdown.min.js"></script>
<script src="js/jquery.magnific-popup.min.js"></script> <script src="../../js/jquery.magnific-popup.min.js"></script>
<script src="js/aos.js"></script> <script src="../../js/aos.js"></script>
<script src="js/mediaelement-and-player.min.js"></script> <script src="../../js/mediaelement-and-player.min.js"></script>
<script> <script>
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
@ -334,7 +310,7 @@
</script> </script>
<script src="js/main.js"></script> <script src="../../js/main.js"></script>
</body> </body>
</html> </html>

View File

@ -0,0 +1,441 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>show_name</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,700,900">
<link rel="stylesheet" href="fonts/icomoon/style.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/magnific-popup.css">
<link rel="stylesheet" href="css/jquery-ui.css">
<link rel="stylesheet" href="css/owl.carousel.min.css">
<link rel="stylesheet" href="css/owl.theme.default.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mediaelement@4.2.7/build/mediaelementplayer.min.css">
<link rel="stylesheet" href="css/aos.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="site-wrap">
<div class="site-mobile-menu">
<div class="site-mobile-menu-header">
<div class="site-mobile-menu-close mt-3">
<span class="icon-close2 js-menu-toggle"></span>
</div>
</div>
<div class="site-mobile-menu-body"></div>
</div>
<header class="site-navbar py-4 absolute transparent" role="banner">
<div class="container">
<div class="row align-items-center">
<div class="col-3" data-aos="fade-down">
<h1><a href="#" class="text-white h2">{{show_name}}</a></h1>
</div>
<div class="col-9" data-aos="fade-down">
<nav class="site-navigation position-relative text-right text-md-right" role="navigation">
<div class="d-inline-block ml-md-0 mr-auto py-3"><a href="#" class="site-menu-toggle js-menu-toggle text-white"><span class="icon-menu h3"></span></a></div>
<ul class="site-menu js-clone-nav d-none">
<li class="has-children active">
<a href="index.html">Home</a>
<ul class="dropdown arrow-top">
<li><a href="#">Menu One</a></li>
<li><a href="#">Menu Two</a></li>
<li><a href="#">Menu Three</a></li>
<li class="has-children">
<a href="#">Sub Menu</a>
<ul class="dropdown">
<li><a href="#">Menu One</a></li>
<li><a href="#">Menu Two</a></li>
<li><a href="#">Menu Three</a></li>
</ul>
</li>
</ul>
</li>
<li class="has-children">
<a href="#">Dropdown</a>
<ul class="dropdown arrow-top">
<li><a href="#">Menu One</a></li>
<li><a href="#">Menu Two</a></li>
<li><a href="#">Menu Three</a></li>
</ul>
</li>
<li><a href="about.html">About</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</nav>
</div>
</div>
</div>
</header>
<div class="site-blocks-cover overlay" style="background-image: url({{episode_image}});" data-aos="fade" data-stellar-background-ratio="0.5">
<div class="container">
<div class="row align-items-center justify-content-center text-center">
<div class="col-md-8" data-aos="fade-up" data-aos-delay="400">
<h2 class="text-white font-weight-light mb-2 display-4">Latest Episode: # {{episode_number}}</h2>
<div class="text-white mb-4"><span class="text-white-opacity-05"><small>{{episode_author}} / Zavod Rizoma | 16 September 2017 | 1:30:20</small></span></div>
<p><a href="episode/{{episode_number}}/index.html" class="btn btn-primary btn-sm py-3 px-4 small">Episode Details and Player</a></p>
<div class="player">
<audio id="player2" preload="none" controls style="max-width: 100%">
<source src="episode/{{episode_number}}/show.mp3" type="audio/mp3">
</audio>
</div>
</div>
</div>
</div>
</div>
<div class="site-section bg-light">
<div class="container">
<div class="row mb-5" data-aos="fade-up">
<div class="col-md-12 text-center">
<h2 class="font-weight-bold text-black">Previous Episodes</h2>
</div>
</div>
{% for episode in episodes %}
<div class="d-block d-md-flex podcast-entry bg-white mb-5" data-aos="fade-up">
<div class="image" style="background-image: url('episode/{{episode.episode_number}}/img/cover.png');"></div>
<div class="text">
<h3 class="font-weight-light"><a href="episode/{{episode.episode_number}}/index.html">Episode: # {{episode.episode_number}} </a></h3>
<div class="text-white mb-3"><span class="text-black-opacity-05">
<small>Presented by Rob Canning <span class="sep">/</span> {{episode.episode_date}} <span class="sep">/</span> {{episode.episode_duration}}</small></span></div>
<p class="mb-4">On this weeks show music from: {{episode.episode_artists}}</p>
</div>
</div>
{% endfor %}
<div class="container" data-aos="fade-up">
<div class="row">
<div class="col-md-12 text-center">
<div class="site-block-27">
<ul>
<li><a href="#">&lt;</a></li>
<li class="active"><span>1</span></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">&gt;</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="site-section">
<div class="container" data-aos="fade-up">
<div class="row mb-5">
<div class="col-md-12 text-center">
<h2 class="font-weight-bold text-black">Behind The Mic</h2>
</div>
</div>
<div class="row">
<div class="col-md-6 col-lg-4 mb-5 mb-lg-5">
<div class="team-member">
<img src="images/rob_canning.jpeg" alt="Image" class="img-fluid">
<div class="text">
<h2 class="mb-2 font-weight-light h4">Rob Canning</h2>
<span class="d-block mb-2 text-white-opacity-05">Creative Director</span>
<p class="mb-4">Lorem ipsum dolor sit amet consectetur adipisicing elit ullam reprehenderit nemo.</p>
<p>
<a href="#" class="text-white p-2"><span class="icon-facebook"></span></a>
<a href="#" class="text-white p-2"><span class="icon-twitter"></span></a>
<a href="#" class="text-white p-2"><span class="icon-linkedin"></span></a>
</p>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 mb-5 mb-lg-5">
<div class="team-member">
<img src="images/person_2.jpg" alt="Image" class="img-fluid">
<div class="text">
<h2 class="mb-2 font-weight-light h4">Brooke Cagle</h2>
<span class="d-block mb-2 text-white-opacity-05">Creative Director</span>
<p class="mb-4">Lorem ipsum dolor sit amet consectetur adipisicing elit ullam reprehenderit nemo.</p>
<p>
<a href="#" class="text-white p-2"><span class="icon-facebook"></span></a>
<a href="#" class="text-white p-2"><span class="icon-twitter"></span></a>
<a href="#" class="text-white p-2"><span class="icon-linkedin"></span></a>
</p>
</div>
</div>
</div>
<div class="site-section bg-light block-13">
<div class="container">
<div class="row mb-5">
<div class="col-md-12 text-center">
<h2 class="font-weight-bold text-black">Featured Labels</h2>
</div>
</div>
<div class="nonloop-block-13 owl-carousel">
<div class="text-center p-3 p-md-5 bg-white">
<div class="mb-4">
<img src="images/label_logos/kamizdat.png" alt="Image" class="w-50 mx-auto img-fluid rounded-circle">
</div>
<div class="">
<h3 class="font-weight-light h5">Kamizdat</h3>
<p>Kamizdat is a Slovene free-form boutique netlabel for Creative Commons music by local artists exploring a wide range of genres often packaged in locally-made and unique hand-numbered limited editions.</p>
</div>
</div>
<div class="text-center p-3 p-md-5 bg-white">
<div class="mb-4">
<img src="images/label_logos/sploh.jpeg" alt="Image" class="w-50 mx-auto img-fluid rounded-circle">
</div>
<div class="">
<h3 class="font-weight-light h5">Zavod Sploh</h3>
<p>Sploh (Sound, Performing, Listening, Observing, Hearing) for art production and publishing is engaged in music, performing arts and intermedia arts production, publishing and education. Primarily it is oriented towards developing, staging, establishing and reflecting musical practices that dip a toe in the waters of: improvisation, contemporary composition, and sound/tech experiments. s</p>
</div>
</div>
<div class="text-center p-3 p-md-5 bg-white">
<div class="mb-4">
<img src="images/label_logos/terraformer.jpeg" alt="Image" class="w-50 mx-auto img-fluid rounded-circle">
</div>
<div class="">
<h3 class="font-weight-light h5">Terraformer Research Facilities</h3>
<p>Terraformer Research Facilities Label for experimental, drone, ambient, noise improvised music. Velenje, Slovenia.</p>
</div>
</div>
<div class="text-center p-3 p-md-5 bg-white">
<div class="mb-4">
<img src="images/label_logos/PF.png" alt="Image" class="w-50 mx-auto img-fluid rounded-circle">
</div>
<div class="">
<h3 class="font-weight-light h5">Pharmafabrik Records</h3>
<p>Delivers rare but comprehensive records of experimental, drone, ambient, electronic, and electro-acoustic music.</p>
</div>
</div>
</div>
</div>
</div>
<footer class="site-footer">
<div class="container">
<div class="row">
<div class="col-lg-4">
<div class="mb-5">
<h3 class="footer-heading mb-4">About SHOWNAME</h3>
<p>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!</p>
</div>
<div class="mb-5">
<h3 class="footer-heading mb-4">Previous Podcast</h3>
<div class="block-25">
<ul class="list-unstyled">
<li class="mb-3">
<a href="#" class="d-flex">
<figure class="image mr-4">
<img src="images/img_1.jpg" alt="" class="img-fluid">
</figure>
<div class="text">
<h3 class="heading font-weight-light">Lorem ipsum dolor sit amet consectetur elit</h3>
</div>
</a>
</li>
<li class="mb-3">
<a href="#" class="d-flex">
<figure class="image mr-4">
<img src="images/img_1.jpg" alt="" class="img-fluid">
</figure>
<div class="text">
<h3 class="heading font-weight-light">Lorem ipsum dolor sit amet consectetur elit</h3>
</div>
</a>
</li>
<li class="mb-3">
<a href="#" class="d-flex">
<figure class="image mr-4">
<img src="images/img_1.jpg" alt="" class="img-fluid">
</figure>
<div class="text">
<h3 class="heading font-weight-light">Lorem ipsum dolor sit amet consectetur elit</h3>
</div>
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="col-lg-4 mb-5 mb-lg-0">
<div class="row mb-5">
<div class="col-md-12">
<h3 class="footer-heading mb-4">Quick Menu</h3>
</div>
<div class="col-md-6 col-lg-6">
<ul class="list-unstyled">
<li><a href="#">Home</a></li>
<li><a href="#">Matches</a></li>
<li><a href="#">News</a></li>
<li><a href="#">Team</a></li>
</ul>
</div>
<div class="col-md-6 col-lg-6">
<ul class="list-unstyled">
<li><a href="#">About Us</a></li>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Contact Us</a></li>
<li><a href="#">Membership</a></li>
</ul>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h3 class="footer-heading mb-4">Follow Us</h3>
<div>
<a href="#" class="pl-0 pr-3"><span class="icon-facebook"></span></a>
<a href="#" class="pl-3 pr-3"><span class="icon-twitter"></span></a>
<a href="#" class="pl-3 pr-3"><span class="icon-instagram"></span></a>
<a href="#" class="pl-3 pr-3"><span class="icon-linkedin"></span></a>
</div>
</div>
</div>
</div>
<div class="col-lg-4 mb-5 mb-lg-0">
<div class="mb-5">
<h3 class="footer-heading mb-4">Watch Video</h3>
<div class="block-16">
<figure>
<img src="images/img_1.jpg" alt="Image placeholder" class="img-fluid rounded">
<a href="https://vimeo.com/channels/staffpicks/93951774" class="play-button popup-vimeo"><span class="icon-play"></span></a>
</figure>
</div>
</div>
<div class="mb-5">
<h3 class="footer-heading mb-2">Subscribe Newsletter</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit minima minus odio.</p>
<form action="#" method="post">
<div class="input-group mb-3">
<input type="text" class="form-control border-secondary text-white bg-transparent" placeholder="Enter Email" aria-label="Enter Email" aria-describedby="button-addon2">
<div class="input-group-append">
<button class="btn btn-primary" type="button" id="button-addon2">Send</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="row pt-5 mt-5 text-center">
<div class="col-md-12">
<p>
<!-- Link back to Colorlib can't be removed. Template is licensed under CC BY 3.0. -->
Copyright &copy;<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>document.write(new Date().getFullYear());</script> All rights reserved | This template is made with <i class="icon-heart-o" aria-hidden="true"></i> by <a href="https://colorlib.com" target="_blank" >Colorlib</a>
<!-- Link back to Colorlib can't be removed. Template is licensed under CC BY 3.0. -->
</p>
</div>
</div>
</div>
</footer>
</div>
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/jquery-migrate-3.0.1.min.js"></script>
<script src="js/jquery-ui.js"></script>
<script src="js/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/owl.carousel.min.js"></script>
<script src="js/jquery.stellar.min.js"></script>
<script src="js/jquery.countdown.min.js"></script>
<script src="js/jquery.magnific-popup.min.js"></script>
<script src="js/aos.js"></script>
<script src="js/mediaelement-and-player.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var mediaElements = document.querySelectorAll('video, audio'), total = mediaElements.length;
for (var i = 0; i < total; i++) {
new MediaElementPlayer(mediaElements[i], {
pluginPath: 'https://cdn.jsdelivr.net/npm/mediaelement@4.2.7/build/',
shimScriptAccess: 'always',
success: function () {
var target = document.body.querySelectorAll('.player'), targetTotal = target.length;
for (var j = 0; j < targetTotal; j++) {
target[j].style.visibility = 'visible';
}
}
});
}
});
</script>
<script src="js/main.js"></script>
</body>
</html>

View File

@ -1,19 +1,44 @@
#!/usr/bin/python3 #!/usr/bin/python3
import sys, os, datetime, fnmatch, glob, random, time, pathlib, re import sys, os, datetime, fnmatch, glob, random, time, pathlib, re
from datetime import timedelta from datetime import timedelta
from os.path import join from os.path import join
from tinytag import TinyTag from tinytag import TinyTag
from random import shuffle from random import shuffle
import sqlite3, json
import sqlite3
from mk_web import * from mk_web import *
con = sqlite3.connect("music.db") conn = sqlite3.connect("database/music.db")
DATE = datetime.datetime.now().strftime("%Y-%m-%d") #cursor = conn.cursor()
total_show_dur = 0 #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 = [] complete_playlist = []
show_array = [] show_array = []
show_cover = "" show_cover = ""
@ -21,8 +46,6 @@ archive = []
artists_played = [] artists_played = []
artist_abreviated = [] artist_abreviated = []
episode_number = sys.argv[1] episode_number = sys.argv[1]
show_name = "SHOWNAME" # OBED show_name = "SHOWNAME" # OBED
path = "/home/rob/antena/" path = "/home/rob/antena/"
web_path = "/home/rob/antena/html/episode/{0}/img".format(episode_number) 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): def create_show_playlist(show_array: list, complete_playlist:list):
load_all_music() load_all_music()
global total_show_dur global episode_duration
global archive global archive
track_count = 0 track_count = 0
@ -76,7 +99,7 @@ def create_show_playlist(show_array: list, complete_playlist:list):
max_track_dur = 10 max_track_dur = 10
min_track_dur = 1.8 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(\ song = random.choice(random.sample(\
complete_playlist, len(complete_playlist) )).rstrip() # pick a song complete_playlist, len(complete_playlist) )).rstrip() # pick a song
track = TinyTag.get(song) # get its metadata 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) artist_abreviated.append(art)
artists_played.append(track.artist) # and add the artist to the played list 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 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) 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 SHORT..........." )
else: print("TRACK TOO LONG..........." ) else: print("TRACK TOO LONG..........." )
else: print("SONG PLAYED IN PREVIOUS EPISODE" ) else: print("SONG PLAYED IN PREVIOUS EPISODE" )
else: print("ARTIST ALREADY IN PODCAST") 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): def combine_images(columns, space, images, variants:int):
global show_cover global show_cover
@ -147,8 +189,7 @@ def combine_images(columns, space, images, variants:int):
h2_spc = 85 h2_spc = 85
h2_baseline = 1530 h2_baseline = 1530
# Add Text to the image ---------------------------------------- # Add Text to the image ----------------------------------------
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# some logic to shuffle the list if sub sections of list are too long for layout # 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: [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") print("on of the lines is longer than fits the page... shuffling the list for a better look")
random.shuffle(artist_abreviated) 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} 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()\ 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') .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}'''\ 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}"\ im.text((30, h2_baseline + (h2_spc*4)), "{0}"\
.format(' | '.join(artist_abreviated[9:12])), (255,255,255), font=mf_h2) .format(' | '.join(artist_abreviated[9:12])), (255,255,255), font=mf_h2)
im.text((1560,1888), ''' http://{0}.rizom.si '''\ im.text((1540,1888), ''' http://{0}.rizom.si '''\
.format(show_name, DATE,episode_number), fill="white", font=mf_h4) .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,episode_date, variants)
show_cover = 'img/cover.png'.format(episode_number,DATE, variants)
#pathlib.Path.touch(show_cover)
background.save("html/" + "episode/{0}/{1}".format(episode_number, show_cover)) background.save("html/" + "episode/{0}/{1}".format(episode_number, show_cover))
return show_cover return show_cover
def create_show_coverart(show_array, variants): def create_show_coverart(show_array, variants):
# global show_array
#print(show_array)
show_cover_jpgs = [] show_cover_jpgs = []
for dir in show_array: for dir in show_array:
@ -199,11 +233,6 @@ def create_show_coverart(show_array, variants):
for i in ["cover", "COVER"]: for i in ["cover", "COVER"]:
if i in file: if i in file:
show_cover_jpgs.append(str(path) + "/" + 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(''' print('''
------------------------ ------------------------
@ -241,16 +270,10 @@ def create_animated_gif():
img.save(fp=fp_out, format='GIF', append_images=imgs, img.save(fp=fp_out, format='GIF', append_images=imgs,
save_all=True, duration=200, loop=0) save_all=True, duration=200, loop=0)
def create_pls_file(): def create_pls_file():
# write the selection as a playlist 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)) file.writelines("\n".join(show_array))
def create_podcast(show_array: list): 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] playlist_songs = [AudioSegment.from_file(flac_file) for flac_file in show_array]
show_intro = playlist_songs.pop(0) show_intro = playlist_songs[0]
first_song = playlist_songs[0].fade_in(3000) # 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) # intro_and_first = first_song.overlay(show_intro)
first_three_blurb = playlist_songs.pop(0) first_three_blurb = playlist_songs[0]
second_three_blurb = playlist_songs.pop(0) second_three_blurb = playlist_songs[0]
final_songs_blurb = playlist_songs.pop(0) final_songs_blurb = playlist_songs[0]
final_show_outro = playlist_songs.pop(0) final_show_outro = playlist_songs[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))
# 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 # blurb about first three tracks
playlist = playlist.append(first_three_blurb) # <--------------BLURB INSERT playlist = playlist.append(first_three_blurb) # <--------------BLURB INSERT
for song in playlist_songs[4:6]: # second three songs for song in playlist_songs[4:7]: # 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=(1 * 1000))
playlist = playlist.append(song, crossfade=(10 * 1000)) print("second songs added")
playlist = playlist.append(second_three_blurb) # <--------------BLURB INSERT 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 for song in playlist_songs[7:10]: # second three song
playlist = playlist.append(song, crossfade=(10 * 1000)) playlist = playlist.append(song, crossfade=(1 * 1000))
print("third songs added")
playlist = playlist.append(final_songs_blurb) # <--------------BLURB INSERT 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 playlist = playlist.append(final_show_outro) # <-------------- OUTRO SEQUENCE
# get length of final show / podcast # get length of final show / podcast
playlist_length = len(playlist) / (1000*60) playlist_length = len(playlist) / (1000*60)
# save the entire poidcast # save the entire poidcast
with open("html/episode/{0}/show.flac".format(episode_number), 'wb') as out_f: 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') 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 from jinja2 import Template, Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('html/templates')) env = Environment(loader=FileSystemLoader('html/templates'))
episode_template = env.get_template('episode.jinja') 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) 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_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() #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_pls_file()
create_html_from_template()
#create_web_page(show_name, show_array, episode_number, artists_played, show_cover, total_show_dur) create_html_episode_from_template()
#create_podcast(show_array) 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

View File

@ -1,651 +1,12 @@
Sub Persona II don't tell me what i like
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
Nothing Concealed Nothing Concealed
Jean-Luc Guionnet & Samo Kutin - Kopaš - 05 05 Action XV
Sub Persona IX Leather Wings
Tomaž Grom - Sam, za... - 05 G.V. Loss of Consciousness
My Sweet.Com Strenuous Effort
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
Irena Z. Tomažin - Cmok v grlu - Lump In The Throat - 14 Klic meduze 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 Hunahpu & Xbalanque
Radikal decrepitation_var.1a-2
whtend leftover_var.3 Speshlafer
Atlatl PSH
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