diff --git a/changes/changelog.d/1228.bugfix b/changes/changelog.d/1228.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..226c8505719e4345efce653447a62805e51c7e9e
--- /dev/null
+++ b/changes/changelog.d/1228.bugfix
@@ -0,0 +1 @@
+Fixed duplication of discs for multi-disc albums in album views (#1228)
\ No newline at end of file
diff --git a/front/src/components/library/AlbumBase.vue b/front/src/components/library/AlbumBase.vue
index 8bdb2fc3425ce96c977702fc5d39e50f1af067a5..8ae555f6c8c7792331fffdb5c05b5e35bd04562e 100644
--- a/front/src/components/library/AlbumBase.vue
+++ b/front/src/components/library/AlbumBase.vue
@@ -134,15 +134,17 @@ import TagsList from "@/components/tags/List"
 import ArtistLabel from '@/components/audio/ArtistLabel'
 import AlbumDropdown from './AlbumDropdown'
 
-function groupByDisc(acc, track) {
-  var dn = track.disc_number - 1
-  if (dn < 0) dn = 0
-  if (acc[dn] == undefined) {
-    acc.push([track])
-  } else {
-    acc[dn].push(track)
+function groupByDisc(initial) {
+  function inner(acc, track) {
+    var dn = track.disc_number - initial
+    if (acc[dn] == undefined) {
+      acc.push([track])
+    } else {
+      acc[dn].push(track)
+    }
+    return acc
   }
-  return acc
+  return inner
 }
 
 export default {
@@ -180,7 +182,7 @@ export default {
       tracksResponse = await tracksResponse
       this.object = albumResponse.data
       this.object.tracks = tracksResponse.data.results
-      this.discs = this.object.tracks.reduce(groupByDisc, [])
+      this.discs = this.object.tracks.reduce(groupByDisc(this.object.tracks[0].disc_number), [])
       this.isLoading = false
     },
     remove () {
diff --git a/front/src/components/library/AlbumDetail.vue b/front/src/components/library/AlbumDetail.vue
index bc670ce6ba04b2e783180c388a601b956b5f0adf..b9d4821e60924a5b0a1ce133cd52ee305d930125 100644
--- a/front/src/components/library/AlbumDetail.vue
+++ b/front/src/components/library/AlbumDetail.vue
@@ -7,12 +7,12 @@
     <channel-entries v-if="artist.channel && isSerie" :limit="50" :filters="{channel: artist.channel.uuid, ordering: '-creation_date'}">
     </channel-entries>
     <template v-else-if="discs && discs.length > 1">
-      <div v-for="(tracks, discNumber) in discs" :key="discNumber">
+      <div v-for="tracks in discs" :key="tracks.disc_number">
         <div class="ui hidden divider"></div>
         <play-button class="right floated mini inverted vibrant" :tracks="tracks"></play-button>
         <translate
           tag="h3"
-          :translate-params="{number: discNumber + 1}"
+          :translate-params="{number: tracks[0].disc_number}"
           translate-context="Content/Album/"
         >Volume %{ number }</translate>
         <album-entries :tracks="tracks"></album-entries>