diff --git a/src/directory_walker.js b/src/directory_walker.js
index f20145b1ad2d6ea0305e8007001b101d314bd0dd..faf5a336a748f7d25a3746d4544e55c27fa33813 100644
--- a/src/directory_walker.js
+++ b/src/directory_walker.js
@@ -114,6 +114,10 @@ class FileManager {
             fileName.endsWith(".vtt")
         )
 
+        const previewFilePath = path.join(base, "spritesheets", "preview.vtt");
+        const previewFileExists = (await fsPromises.stat(previewFilePath)).isFile();
+        const previewFile = previewFileExists ? previewFilePath : null;
+
         const mediaFiles = dashManifest ? [dashManifest] : files.filter(fileName =>
             fileName.endsWith(".mp4") ||
             fileName.endsWith(".webm") ||
@@ -138,7 +142,8 @@ class FileManager {
                     src: encodePath(path.relative(this.basePath, path.join(base, "subtitles", name)))
                 }
             }),
-            media: media
+            preview: previewFile !== null ? encodePath(path.relative(this.basePath, previewFile)) : null,
+            media
         }
     }
 }
diff --git a/src/metadata_loader.js b/src/metadata_loader.js
index 9866279ad472bc003948aa6ebd790e42368c09a7..437e6379b72215bd51d0a59b86b2a8c508a5a9f6 100644
--- a/src/metadata_loader.js
+++ b/src/metadata_loader.js
@@ -14,6 +14,7 @@ import {
     TitleImage,
     TitleMedia,
     TitleName,
+    TitlePreview,
     TitleRating,
     TitleSubtitles
 } from "./model";
@@ -237,7 +238,7 @@ class MetadataLoader {
         await originalTitleDescription.setTitle(episodeTitle.id, {save: false});
         await originalTitleDescription.save();
         for (let el of tmdbTranslations.translations) {
-            if (el.data.overview) {
+            if (el.data.overview && el.data.overview.trim() !== "") {
                 const titleDescription = await TitleDescription.build({
                     region: el.iso_3166_1,
                     languages: el.iso_639_1 ? el.iso_639_1.split(",") : [],
@@ -408,11 +409,23 @@ class MetadataLoader {
     }
 
     async processMediaMetadata(title, media) {
-        await TitleMedia.destroy({
-            where: {
-                title_id: title.id,
-            }
-        })
+        await Promise.all([
+            TitleMedia.destroy({
+                where: {
+                    title_id: title.id,
+                }
+            }),
+            TitleSubtitles.destroy({
+                where: {
+                    title_id: title.id,
+                }
+            }),
+            TitlePreview.destroy({
+                where: {
+                    title_id: title.id,
+                }
+            })
+        ]);
         for (let format of media.media) {
             const titleMedia = await TitleMedia.build({
                 mime: format.container,
@@ -423,11 +436,6 @@ class MetadataLoader {
             await titleMedia.setTitle(title.id, {save: false});
             await titleMedia.save();
         }
-        await TitleSubtitles.destroy({
-            where: {
-                title_id: title.id,
-            }
-        })
         for (let subtitle of media.subtitles) {
             const titleSubtitles = await TitleSubtitles.build({
                 language: subtitle.language,
@@ -439,6 +447,11 @@ class MetadataLoader {
             await titleSubtitles.setTitle(title.id, {save: false});
             await titleSubtitles.save();
         }
+        const titlePreview = await TitlePreview.build({
+            src: media.preview,
+        })
+        await titlePreview.setTitle(title.id, {save: false});
+        await titlePreview.save();
     }
 
     async loadEpisodeMetadata(ids, episodeIdentifier) {
diff --git a/src/model.js b/src/model.js
index 7fd8a13fae7a4fe8a7e99db1eadd984335742582..6b11d8a6e9dafc8b10ed50841b9fa470ddaea118 100644
--- a/src/model.js
+++ b/src/model.js
@@ -35,3 +35,6 @@ export class TitleRating extends sequelize.Model {
 
 export class TitleSubtitles extends sequelize.Model {
 }
+
+export class TitlePreview extends sequelize.Model {
+}
diff --git a/src/storage.js b/src/storage.js
index fe9b3bb0ed54e0f6f9d0dfe3ab3c2643bb3c7330..de5e1e77e7f684dcfb0a862379edc44f0bdfc7ec 100644
--- a/src/storage.js
+++ b/src/storage.js
@@ -10,8 +10,9 @@ import {
     TitleImage,
     TitleMedia,
     TitleName,
+    TitlePreview,
     TitleRating,
-    TitleSubtitles
+    TitleSubtitles,
 } from "./model";
 
 class Backend {
@@ -399,13 +400,36 @@ class Backend {
             }
         });
         Title.hasMany(TitleSubtitles);
+        TitlePreview.init({
+            id: {
+                type: sequelize.DataTypes.UUID,
+                defaultValue: sequelize.DataTypes.UUIDV4,
+                allowNull: false,
+                primaryKey: true
+            },
+            src: {
+                type: sequelize.DataTypes.TEXT,
+                allowNull: true,
+            },
+        }, {
+            sequelize: this.db,
+            underscored: true,
+            modelName: 'title_preview',
+            indexes: []
+        });
+        TitlePreview.belongsTo(Title, {
+            foreignKey: {
+                allowNull: false,
+            }
+        });
+        Title.hasOne(TitlePreview);
     }
 
     async sync() {
         await Promise.all([
             Genre.sync(), Person.sync(), Title.sync(),
             TitleCast.sync(), TitleDescription.sync(), TitleEpisode.sync(), TitleGenre.sync(), TitleImage.sync(),
-            TitleMedia.sync(), TitleName.sync(), TitleRating.sync(), TitleSubtitles.sync(),
+            TitleMedia.sync(), TitleName.sync(), TitleRating.sync(), TitleSubtitles.sync(), TitlePreview.sync(),
         ]);
     }