diff --git a/THIRD_PARTY.txt b/THIRD_PARTY.txt
index d9a2894f..7413d1c1 100644
--- a/THIRD_PARTY.txt
+++ b/THIRD_PARTY.txt
@@ -1896,6 +1896,8 @@ https://cdn.jsdelivr.net/npm/videojs-seek-buttons@2.2.1/dist/videojs-seek-button
https://cdn.jsdelivr.net/npm/videojs-seek-buttons@2.2.1/dist/videojs-seek-buttons.min.js
https://cdn.jsdelivr.net/npm/videojs-seek-buttons@3.0.1/dist/videojs-seek-buttons.css
https://cdn.jsdelivr.net/npm/videojs-seek-buttons@3.0.1/dist/videojs-seek-buttons.min.js
+https://cdn.jsdelivr.net/npm/videojs-seek-buttons@4.0.1/dist/videojs-seek-buttons.css
+https://cdn.jsdelivr.net/npm/videojs-seek-buttons@4.0.1/dist/videojs-seek-buttons.min.js
https://cdn.jsdelivr.net/npm/vue@1.0.28/dist/vue.min.js
https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js
https://cdn.jsdelivr.net/npm/vue-match-media@1.0.3/dist/index.min.js
diff --git a/modules/internal/targets.js b/modules/internal/targets.js
index 942f5ce2..b0c5813e 100644
--- a/modules/internal/targets.js
+++ b/modules/internal/targets.js
@@ -464,6 +464,7 @@ targets.setLastVersion = function (type, version) {
if (type.startsWith('/videojs-seek-buttons/1.')) return '1.6.0';
if (type.startsWith('/videojs-seek-buttons/2.')) return '2.2.1';
if (type.startsWith('/videojs-seek-buttons/3.')) return '3.0.1';
+ if (type.startsWith('/videojs-seek-buttons/4.')) return '4.0.1';
if (type.startsWith('/video.js/')) {
if (helpers.compareVersion('5.20.5', version)) return '5.20.5'; // <= 5.20.5
if (helpers.compareVersion('6.13.0', version)) return '6.13.0'; // > 5.20.5 to <= 6.13.0
diff --git a/pages/updates/updates.html b/pages/updates/updates.html
index 75b8f30a..d6fe19a2 100644
--- a/pages/updates/updates.html
+++ b/pages/updates/updates.html
@@ -33,6 +33,7 @@
video.js v7.21.0 -> v7.21.1 (#1214)
Swiper v8.4.4 -> v8.4.5 (#1215)
mdb-ui-kit v6.0.0 -> v6.0.1 (#1216)
+ videojs-seek-buttons v4.0.1 (#1218)
Added
diff --git a/resources/videojs-seek-buttons/4.0.1/videojs-seek-buttons.min.css b/resources/videojs-seek-buttons/4.0.1/videojs-seek-buttons.min.css
new file mode 100644
index 00000000..630ef46c
--- /dev/null
+++ b/resources/videojs-seek-buttons/4.0.1/videojs-seek-buttons.min.css
@@ -0,0 +1,2 @@
+/*! @name videojs-seek-buttons @version 4.0.1 @license Apache-2.0 */
+.video-js .vjs-seek-button{font-family:'VideoJS';cursor:pointer;font-weight:400;font-style:normal}.video-js .vjs-seek-button.skip-back .vjs-icon-placeholder::before{transform:rotate(-45deg);-ms-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);content:'\f116'}.video-js .vjs-seek-button.skip-forward .vjs-icon-placeholder::before{transform:scale(-1,1) rotate(-45deg);-ms-transform:scale(-1,1) rotate(-45deg);-webkit-transform:scale(-1,1) rotate(-45deg);content:'\f116'}
\ No newline at end of file
diff --git a/resources/videojs-seek-buttons/4.0.1/videojs-seek-buttons.min.jsm b/resources/videojs-seek-buttons/4.0.1/videojs-seek-buttons.min.jsm
new file mode 100644
index 00000000..0f833aaa
--- /dev/null
+++ b/resources/videojs-seek-buttons/4.0.1/videojs-seek-buttons.min.jsm
@@ -0,0 +1,2 @@
+/*! @name videojs-seek-buttons @version 4.0.1 @license Apache-2.0 */
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).videojsSeekButtons=t(e.videojs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=t(e);const s=o.default.getComponent("Button"),i={forwardIndex:1,backIndex:1},n=function(e){this.ready((()=>{((e,t)=>{e.addClass("vjs-seek-buttons"),t.forward&&t.forward>0&&(e.controlBar.seekForward=e.controlBar.addChild("seekButton",{direction:"forward",seconds:t.forward},t.forwardIndex)),t.back&&t.back>0&&(e.controlBar.seekBack=e.controlBar.addChild("seekButton",{direction:"back",seconds:t.back},t.backIndex))})(this,o.default.obj.merge(i,e))}))};n.VERSION="4.0.1";return o.default.registerComponent("SeekButton",class extends s{constructor(e,t){super(e,t),"forward"===this.options_.direction?this.controlText(this.localize("Seek forward {{seconds}} seconds").replace("{{seconds}}",this.options_.seconds)):"back"===this.options_.direction&&this.controlText(this.localize("Seek back {{seconds}} seconds").replace("{{seconds}}",this.options_.seconds))}buildCSSClass(){return`vjs-seek-button skip-${this.options_.direction} skip-${this.options_.seconds} ${super.buildCSSClass()}`}handleClick(){const e=this.player_.currentTime();if("forward"===this.options_.direction){let t=this.player_.duration();this.player_.liveTracker&&this.player_.liveTracker.isLive()&&(t=this.player_.liveTracker.seekableEnd()),this.player_.currentTime(Math.min(e+this.options_.seconds,t))}else"back"===this.options_.direction&&this.player_.currentTime(Math.max(0,e-this.options_.seconds))}}),o.default.registerPlugin("seekButtons",n),n}));