diff --git a/modules/gui/macosx/library/VLCInputItem.h b/modules/gui/macosx/library/VLCInputItem.h
index a9e9690a9db7601db0c97653f0a89f163576d6f5..5b5f1d221c8eb3ab84a012cca727624337c8b4d7 100644
--- a/modules/gui/macosx/library/VLCInputItem.h
+++ b/modules/gui/macosx/library/VLCInputItem.h
@@ -42,6 +42,7 @@ extern NSString *VLCInputItemSubtreeAdded;
 @property (readonly) vlc_tick_t duration;
 @property (readonly) enum input_item_type_e inputType;
 @property (readonly) struct input_item_node_t *subTree;
+@property (readonly) NSURL *artworkURL;
 
 - (void)parseInputItem;
 - (void)cancelParsing;
diff --git a/modules/gui/macosx/library/VLCInputItem.m b/modules/gui/macosx/library/VLCInputItem.m
index 394114cef468c39b9a51ab29f597a879461dcee5..16e512cf708ae202fa00a8846df65613ab92749f 100644
--- a/modules/gui/macosx/library/VLCInputItem.m
+++ b/modules/gui/macosx/library/VLCInputItem.m
@@ -115,6 +115,19 @@ static const struct input_item_parser_cbs_t parserCallbacks =
     return ITEM_TYPE_UNKNOWN;
 }
 
+- (NSURL *)artworkURL
+{
+    if (_vlcInputItem) {
+        char *p_artworkURL = input_item_GetArtworkURL(_vlcInputItem);
+        if (p_artworkURL) {
+            NSString *artworkURLString = toNSStr(p_artworkURL);
+            FREENULL(p_artworkURL);
+            return [NSURL URLWithString:artworkURLString];
+        }
+    }
+    return nil;
+}
+
 - (void)parseInputItem
 {
     _p_parserID = input_item_Parse(_vlcInputItem,
diff --git a/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m b/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m
index 3f5ecdc433ec776eaa5e0ee2add4c6af0691cf23..885d26626872e425d0cc84aaba8ad28d7b8240f0 100644
--- a/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m
+++ b/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m
@@ -119,6 +119,14 @@
     VLCInputItem *childRootInput = childNode.inputItem;
     viewItem.titleTextField.stringValue = childRootInput.name;
 
+    NSURL *artworkURL = childRootInput.artworkURL;
+    NSImage *placeholder = [NSImage imageNamed:@"NSApplicationIcon"];
+    if (artworkURL) {
+        [viewItem.mediaImageView setImageURL:artworkURL placeholderImage:placeholder];
+    } else {
+        viewItem.mediaImageView.image = placeholder;
+    }
+
     return viewItem;
 }
 
diff --git a/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m b/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m
index 29b7b9b71ad1be6259c22e20314434025fa9b464..708fffb55ee3029c5651118c0defde584a68ca72 100644
--- a/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m
+++ b/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m
@@ -31,10 +31,10 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCMediaSourceCellIdentifier";
 
 @implementation VLCMediaSourceCollectionViewItem
 
-- (void)viewDidLoad {
-    [super viewDidLoad];
-
-    [self.mediaImageView setImage:[NSImage imageNamed:@"NSApplicationIcon"]];
+- (void)prepareForReuse
+{
+    [super prepareForReuse];
+    self.mediaImageView.image = nil;
 }
 
 @end
diff --git a/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m b/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m
index 329f7977fe607f9c505acf37cba801ebf82ac59d..475efd47df18b0d6046e27c8b4493d3426738443 100644
--- a/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m
+++ b/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m
@@ -27,6 +27,8 @@
 #import "media-source/VLCMediaSource.h"
 #import "main/VLCMain.h"
 #import "playlist/VLCPlaylistController.h"
+#import "views/VLCImageView.h"
+#import "extensions/NSString+Helpers.h"
 
 @interface VLCMediaSourceDataSource()
 {
@@ -71,6 +73,14 @@
     VLCInputItem *childRootInput = childNode.inputItem;
     viewItem.titleTextField.stringValue = childRootInput.name;
 
+    NSURL *artworkURL = childRootInput.artworkURL;
+    NSImage *placeholder = [NSImage imageNamed:@"NSApplicationIcon"];
+    if (artworkURL) {
+        [viewItem.mediaImageView setImageURL:artworkURL placeholderImage:placeholder];
+    } else {
+        viewItem.mediaImageView.image = placeholder;
+    }
+
     return viewItem;
 }