diff --git a/public/index.php b/public/index.php
index 6cd85fc0baa0e229c939e04a837b1a58aa638c0e..b9557736663bfb5924268b0bea37ed4b1c869a6e 100644
--- a/public/index.php
+++ b/public/index.php
@@ -43,6 +43,7 @@ $user = $api->me();
 $templateData = [
   'user' => $user,
   'playlists' => [],
+  'topArtists' => [],
 
   'infos' => [],
   'errors' => [],
@@ -53,6 +54,8 @@ if (isset($_GET['playlist'])) {
     $selectedPlaylistId = $_GET['playlist'];
 }
 
+$generatePlaylistFromArtists = isset($_GET['generate-playlist-top-artists']);
+
 if ($selectedPlaylistId) {
     $playlist = $api->getPlaylist($selectedPlaylistId);
     error_log('Will create new playlist from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".');
@@ -88,10 +91,51 @@ if ($selectedPlaylistId) {
         'name' => $newPlaylistName,
     ]);
 
+    $api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
+    $playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
+    $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
+} elseif ($generatePlaylistFromArtists) {
+    $selectedArtists = $_GET['selected-artist'];
+    error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
+    $recommendedTrackIds = [];
+
+    foreach ($selectedArtists as $selectedArtist) {
+        error_log('Get recommendations for artist '.$selectedArtist.'');
+        $recommendations = $api->getRecommendations([
+            'seed_artists' => $selectedArtist,
+            'limit' => 100
+        ]);
+        error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
+
+        // Filter by artist, remove duplicates
+        foreach ($recommendations->tracks as $recommendedTrack) {
+            $trackArtistInWantedArtists = false;
+            foreach ($recommendedTrack->artists as $trackArtist) {
+                if (\in_array($trackArtist->id, $selectedArtists)) {
+                    $recommendedTrackIds[$recommendedTrack->id] = 1;
+                }
+            }
+        }
+    }
+
+    $recommendedTrackIds = array_keys($recommendedTrackIds);
+    error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations.');
+    shuffle($recommendedTrackIds);
+    $pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
+    error_log('Keep '.count($pickedTrackIds).' random tracks.');
+
+    $now = new DateTime();
+    $newPlaylistName = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
+    error_log('Create new playlist "'.$newPlaylistName.'".');
+    $newPlaylist = $api->createPlaylist([
+        'name' => $newPlaylistName,
+    ]);
+
     $api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
     $playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
     $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
 } else {
+    $templateData['topArtists'] = $api->getMyTop('artists', ['limit' => 16, 'time_range' => 'short_term'])->items;
     $templateData['playlists'] = $api->getUserPlaylists($user->id)->items;
 }
 
diff --git a/spotify/spotify.php b/spotify/spotify.php
index 7a17d8371b922472e7abdf41315e9276473eb961..c5862dbd0842162f5158d4a457c3a8ca836cb2c8 100644
--- a/spotify/spotify.php
+++ b/spotify/spotify.php
@@ -15,4 +15,5 @@ $SPOTIFY_REQUIRED_SCOPES = [
     'playlist-modify-private',
     'playlist-modify-public',
     'user-read-private',
+    'user-top-read',
 ];
diff --git a/template.php b/template.php
index d56985d538dedca7726a9b51db90a4a3c652bb18..ec9d91a73ac93b215a3e4ffad24f0eb033ba27ca 100644
--- a/template.php
+++ b/template.php
@@ -14,7 +14,7 @@
 <body class="container mt-2">
 
   <div class="row">
-    <div class="col-2">
+    <div class="col-3">
 
       <div class="card">
         <?php if (count($templateData['user']->images)) { ?>
@@ -32,7 +32,7 @@
       </div>
 
     </div>
-    <div class="col-10">
+    <div class="col-9">
 
       <?php if (count($templateData['errors'])) { ?>
         <?php foreach ($templateData['errors'] as $message) { ?>
@@ -46,6 +46,31 @@
         <?php } ?>
       <?php } ?>
 
+      <?php if (count($templateData['topArtists'])) { ?>
+        <form class="clearfix">
+          <legend>Generate playlist from artists:</legend>
+          <ul class="list-unstyled row row-cols-4">
+            <?php foreach ($templateData['topArtists'] as $artist) { ?>
+              <li class="col">
+                <div class="custom-control custom-checkbox">
+                  <input
+                    type="checkbox"
+                    class="custom-control-input"
+                    id="check-top-artist-<?php echo $artist->id; ?>"
+                    name="selected-artist[]"
+                    value="<?php echo $artist->id; ?>"
+                  >
+                  <label class="custom-control-label" for="check-top-artist-<?php echo $artist->id; ?>">
+                    <?php echo $artist->name; ?>
+                  </label>
+                </div>
+              </li>
+            <?php } ?>
+          </ul>
+          <button name="generate-playlist-top-artists" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
+        </form>
+      <?php } ?>
+
       <?php if (count($templateData['playlists'])) { ?>
         <h3>Please pick a playlist to get recommendations from:</h3>
         <div class="list-group">