diff --git a/README.md b/README.md
index 3b168bfd22acb42acbe011e282ccf0cb19a797d4..707a9900f160d90a0ccb55809d980042a6f2fce8 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,30 @@ Aplikasi web ini merupakan platform sharing music.
 2. Jalankan command berikut: chmod +x ./scripts/build-image.sh && ./scripts/build-image.sh
 
 # Screenshot
+### Login
+![Login](./images/login.png?raw=true)
+### Register
+![Register](./images/register.png?raw=true)
+### Home
+![Home](./images/home.png?raw=true)
+### Daftar Album
+![Daftar Album](./images/daftar_album.png?raw=true)
+### Search, sort, filter
+
+### Edit lagu
+![Edit lagu](./images/edit_lagu.png?raw=true)
+### Detail Lagu
+![Detail lagu](./images/detail_lagu.png?raw=true)
+### Edit album
+![Edit album](./images/edit_album.png?raw=true)
+### Detail album
+![Detail album](./images/detail_album.png?raw=true)
+### Tambah lagu
+![Tambah lagu](./images/tambah_lagu.png?raw=true)
+### Tambah album
+![Tambah album](./images/tambah_album.png?raw=true)
+### Daftar user
+![Daftar user](./images/daftar_user.png?raw=true)
 
 # Pembagian tugas
 _Server-side_  
@@ -50,7 +74,7 @@ Edit album: 13521136
 Detail album: 13521136  
 Tambah lagu: 13521163  
 Tambah album: 13521163  
-Daftar user: 13521128
+Daftar user: 13521128  
 Object storage add: 13521163  
 Object storage delete: 13521163  
 Object storage edit: 13521136  
diff --git a/images/daftar_album.png b/images/daftar_album.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0430ed629ed7875bf81433dac3dfe21c402347b
Binary files /dev/null and b/images/daftar_album.png differ
diff --git a/images/daftar_user.png b/images/daftar_user.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc3147543a7c741af0fd2d0768e74df409ede45d
Binary files /dev/null and b/images/daftar_user.png differ
diff --git a/images/detail_album.png b/images/detail_album.png
new file mode 100644
index 0000000000000000000000000000000000000000..73c40e52487b2baad46fdd809ec43671aa5db249
Binary files /dev/null and b/images/detail_album.png differ
diff --git a/images/detail_lagu.png b/images/detail_lagu.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2cdaf88b644899a0ef517232df9a177314b8c01
Binary files /dev/null and b/images/detail_lagu.png differ
diff --git a/images/edit_album.png b/images/edit_album.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb9f42db4740b9cd08f710c14f43e8968c0e1608
Binary files /dev/null and b/images/edit_album.png differ
diff --git a/images/edit_lagu.png b/images/edit_lagu.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e8f3334dcbdf928ecd799494b03bf23b491f8a3
Binary files /dev/null and b/images/edit_lagu.png differ
diff --git a/images/home.png b/images/home.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4f00aceb44826d300f8996c676cd80a59b87098
Binary files /dev/null and b/images/home.png differ
diff --git a/images/login.png b/images/login.png
new file mode 100644
index 0000000000000000000000000000000000000000..afcb8f27edd6034dda334f44956104a0745c6a0a
Binary files /dev/null and b/images/login.png differ
diff --git a/images/register.png b/images/register.png
new file mode 100644
index 0000000000000000000000000000000000000000..62d3bc165bd1bf4fdcad921d8ce5c9963e4bb338
Binary files /dev/null and b/images/register.png differ
diff --git a/images/tambah_album.png b/images/tambah_album.png
new file mode 100644
index 0000000000000000000000000000000000000000..352c2d3a97fdb12fd1e36bff2eb6b03f559e1278
Binary files /dev/null and b/images/tambah_album.png differ
diff --git a/images/tambah_lagu.png b/images/tambah_lagu.png
new file mode 100644
index 0000000000000000000000000000000000000000..3178e875624812ee282015ffe8658fc1fafebd62
Binary files /dev/null and b/images/tambah_lagu.png differ
diff --git a/src/web/presentation/music/edit/editMusic.view.php b/src/web/presentation/music/edit/editMusic.view.php
index db72787c5c8780f49474661131b4973d24eaa445..829fcd6557e6e2fa4309c3d7d4f0de6766507b8d 100644
--- a/src/web/presentation/music/edit/editMusic.view.php
+++ b/src/web/presentation/music/edit/editMusic.view.php
@@ -58,7 +58,7 @@ if (is_numeric($id)) {
         <?php require 'presentation/template/navbar.php' ?>
         <p id="title">Edit Music</p>
         <div class="img-container">
-            <img src="<?php if ($exists) echo getAlbumImage(); else echo '/presentation/music/edit/img/defalbum.jpg' ?>" alt="Album">
+            <img src="<?php if ($exists) echo getAlbumImageFromMusic(); else echo '/presentation/music/edit/img/defalbum.jpg' ?>" alt="Album">
         </div>
         <div class="fields" id="form-d">
             <form method="post" id="form">
diff --git a/src/web/presentation/music/info/albumInfo.php b/src/web/presentation/music/info/albumInfo.php
index d1078fb4c1a980ae05b9d1edade08dfd35ff253b..4781662b50e4519b42b6c71272da5464aff1e1a4 100644
--- a/src/web/presentation/music/info/albumInfo.php
+++ b/src/web/presentation/music/info/albumInfo.php
@@ -1,5 +1,9 @@
 <?php
 
+require_once 'auth/authorizer.php';
+
+$is_admin = authorizeAdmin($_COOKIE['token']) != null;
+
 if ($_SERVER['REQUEST_METHOD'] == 'GET') {
     require 'albumInfo.view.php';
 } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
@@ -38,13 +42,23 @@ function secondsToMinutes($duration): string {
 }
 
 function createListItem($class, $id, $title, $duration): void {
-    echo '<li class="'.$class.'">';
+    global $is_admin;
+
+    if ($is_admin) {
+        echo '<div class="hidden">';
+    }
+
+    echo '<li class="'.$class.'" id="'.$id.'">';
     echo '    <p class="music-title" id="music-title">'.$title.'</p>';
     echo '    <div class="music-sub-item">';
-    echo '        <p style="display: none" id="music-id">'.$id.'</p>';
     echo '        <p class="music-duration">'.secondsToMinutes($duration).'</p>';
     echo '    </div>';
     echo '</li>';
+
+    if ($is_admin) {
+        echo '    <button class="edit-music" id="'.$id.'-b">Edit</button>';
+        echo '</div>';
+    }
 }
 
 function populateList($album_id): void {
diff --git a/src/web/presentation/music/info/albumInfo.view.php b/src/web/presentation/music/info/albumInfo.view.php
index 526929d8f4fffd40eca06e87dde97a04aae29c6c..c8e58b03105513277d5ce64bd0f3b91357fcbce7 100644
--- a/src/web/presentation/music/info/albumInfo.view.php
+++ b/src/web/presentation/music/info/albumInfo.view.php
@@ -1,5 +1,6 @@
 <?php
 
+global $is_admin;
 require_once 'util/album-finder.php';
 require_once 'util/account-finder.php';
 
@@ -49,7 +50,7 @@ if (is_numeric($id)) {
         <div class="img-container">
             <img src="<?php echo getAlbumImage() ?>" alt="Album">
         </div>
-        <?php if (authorizeAdmin($_COOKIE['token']) != null) {?>
+        <?php if ($is_admin) {?>
             <div id="edit-b">
                 <button id="edit-button">Edit</button>
             </div>
diff --git a/src/web/presentation/music/info/css/albumInfo.css b/src/web/presentation/music/info/css/albumInfo.css
index c6e24ac75ff37a2f9f3c7123d528f58e33bc4c2f..9285fd4b6bfaea471838d346db19ab6ebb8a89ae 100644
--- a/src/web/presentation/music/info/css/albumInfo.css
+++ b/src/web/presentation/music/info/css/albumInfo.css
@@ -107,6 +107,24 @@ body {
     margin-right: 8px;
 }
 
+.edit-music {
+    display: flex;
+    justify-content: center;
+    width: 50px;
+    height: 20px;
+    border: none;
+    border-radius: 5px;
+    background-color: #da0f47;
+    color: white;
+    font-size: 12px;
+    font-weight: 500;
+    cursor: pointer;
+}
+
+#hidden {
+    overflow: hidden;
+}
+
 #audio-d {
     position: fixed;
     bottom: 0;
diff --git a/src/web/presentation/music/info/js/albumInfo.js b/src/web/presentation/music/info/js/albumInfo.js
index 9e603a24c3c837c0f28a3c9646b541276462b267..af92874d26992bc465d32c096584f9b7d1726b60 100644
--- a/src/web/presentation/music/info/js/albumInfo.js
+++ b/src/web/presentation/music/info/js/albumInfo.js
@@ -1,12 +1,12 @@
-const list = document.querySelector('#music-list').getElementsByTagName('li');
-// const audioPlayer = document.createElement('audio');
+const listItems = document.querySelector('#music-list').getElementsByTagName('li');
+const editButtons = document.querySelector('#music-list').getElementsByClassName('edit-music');
 const audioPlayer = document.querySelector('#audio');
 
-for (let item of list) {
+for (let item of listItems) {
     item.addEventListener('click', (e) => {
         e.preventDefault();
 
-        let id = item.querySelector('#music-id').innerHTML;
+        let id = item.id;
 
         let url = '/album';
         let xhr = new XMLHttpRequest();
@@ -28,4 +28,16 @@ for (let item of list) {
 
         xhr.send(JSON.stringify(data));
     });
+}
+
+if (editButtons && editButtons.length > 0) {
+    for (let item of editButtons) {
+        item.addEventListener('click', (e) => {
+            e.preventDefault();
+
+            let id = item.id.substring(0, item.id.length - 2);
+
+            window.location.href = '/music/edit?id=' + id;
+        });
+    }
 }
\ No newline at end of file
diff --git a/src/web/presentation/music/info/musicInfo.view.php b/src/web/presentation/music/info/musicInfo.view.php
index 917c20b419ef2be9199d25c3ef4658d2c268d6b9..dc1dd0a8109b36ee5d04d5a135d11cff94870fd0 100644
--- a/src/web/presentation/music/info/musicInfo.view.php
+++ b/src/web/presentation/music/info/musicInfo.view.php
@@ -50,7 +50,7 @@ if (is_numeric($id)) {
     <div class="main-wrapper">
         <?php require 'presentation/template/navbar.php' ?>
         <div class="img-container">
-            <img src="<?php echo getAlbumImage() ?>" alt="Album">
+            <img src="<?php echo getAlbumImageFromMusic() ?>" alt="Album">
         </div>
         <div id="music-info">
             <p id="artist-title"><?php echo $artist.' - '.$title ?></p>
diff --git a/src/web/util/album-finder.php b/src/web/util/album-finder.php
index 828ec5b3ffb11ec6026e7db5f754e57ba45f7ceb..fac74a11f34c369d0aba8c22f0c6a6cb85b227e7 100644
--- a/src/web/util/album-finder.php
+++ b/src/web/util/album-finder.php
@@ -10,6 +10,47 @@ function getAlbumCreator(mixed $album_id) {
     return $result[0]['username'];
 }
 
+function getAlbumImageFromMusic(): string {
+    $image = '/presentation/music/edit/img/defalbum.jpg';
+
+    if (!isset($_GET['id'])) {
+        return $image;
+    }
+
+    // get album id from db
+    $album_id = execSelect("SELECT album_id FROM music WHERE music_id = :id", ['id' => $_GET['id']])[0]['album_id'];
+
+    // get album cover filename from db
+    $q_result = execSelect("SELECT owner_account_id, album_cover_filename FROM album WHERE album_id = :id", ['id' => $album_id]);
+    $accountId = $q_result[0]['owner_account_id'];
+
+    if (count($q_result) != 0) {
+        $filename = $q_result[0]['album_cover_filename'];
+
+        // prepare curl request
+        $url = 'object-storage:80/object';
+
+        $data = http_build_query(array(
+            'owner' => $accountId, // account id,
+            'fileType' => 'album-cover',
+            'fileName' => $filename
+        ));
+        $getUrl = $url.'?'.$data;
+
+        $curl = curl_init($getUrl);
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+        $result = curl_exec($curl);
+
+        if (!curl_errno($curl) && curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200) {
+            $contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
+            $image = 'data:'.$contentType.';base64,'.base64_encode($result);
+        }
+        curl_close($curl);
+    }
+
+    return $image;
+}
+
 function getAlbumImage(): string {
     $image = '/presentation/music/edit/img/defalbum.jpg';