diff --git a/src/controllers/dashboard/encodingsettings.html b/src/controllers/dashboard/encodingsettings.html
index d23602e503..9082831487 100644
--- a/src/controllers/dashboard/encodingsettings.html
+++ b/src/controllers/dashboard/encodingsettings.html
@@ -30,6 +30,11 @@
${LabelEnableHardwareDecodingFor}
diff --git a/src/controllers/dashboard/encodingsettings.js b/src/controllers/dashboard/encodingsettings.js
index 03f5455b65..a52ada96e8 100644
--- a/src/controllers/dashboard/encodingsettings.js
+++ b/src/controllers/dashboard/encodingsettings.js
@@ -31,6 +31,7 @@ function loadPage(page, config, systemInfo) {
page.querySelector('#txtFallbackFontPath').value = config.FallbackFontPath || '';
page.querySelector('#chkEnableFallbackFont').checked = config.EnableFallbackFont;
$('#txtVaapiDevice', page).val(config.VaapiDevice || '');
+ page.querySelector('#txtQsvDevice').value = config.QsvDevice || '';
page.querySelector('#chkTonemapping').checked = config.EnableTonemapping;
page.querySelector('#chkVppTonemapping').checked = config.EnableVppTonemapping;
page.querySelector('#chkVideoToolboxTonemapping').checked = config.EnableVideoToolboxTonemapping;
@@ -93,6 +94,7 @@ function onSubmit() {
config.EncodingThreadCount = $('#selectThreadCount', form).val();
config.HardwareAccelerationType = $('#selectVideoDecoder', form).val();
config.VaapiDevice = $('#txtVaapiDevice', form).val();
+ config.QsvDevice = form.querySelector('#txtQsvDevice').value;
config.EnableTonemapping = form.querySelector('#chkTonemapping').checked;
config.EnableVppTonemapping = form.querySelector('#chkVppTonemapping').checked;
config.EnableVideoToolboxTonemapping = form.querySelector('#chkVideoToolboxTonemapping').checked;
@@ -235,8 +237,12 @@ $(document).on('pageinit', '#encodingSettingsPage', function () {
if (this.value == 'qsv') {
page.querySelector('.fldSysNativeHwDecoder').classList.remove('hide');
+ page.querySelector('.fldQsvDevice').classList.remove('hide');
+ page.querySelector('#txtQsvDevice').setAttribute('required', 'required');
} else {
page.querySelector('.fldSysNativeHwDecoder').classList.add('hide');
+ page.querySelector('.fldQsvDevice').classList.add('hide');
+ page.querySelector('#txtQsvDevice').removeAttribute('required');
}
if (this.value == 'nvenc') {
diff --git a/src/strings/en-us.json b/src/strings/en-us.json
index 7fd84c390f..be05bed917 100644
--- a/src/strings/en-us.json
+++ b/src/strings/en-us.json
@@ -840,6 +840,8 @@
"LabelPublicHttpsPortHelp": "The public port number that should be mapped to the local HTTPS port.",
"LabelPublishedServerUri": "Published Server URIs",
"LabelPublishedServerUriHelp": "Override the URI used by Jellyfin, based on the interface, or client IP address. For example: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com",
+ "LabelQsvDevice": "QSV Device",
+ "LabelQsvDeviceHelp": "Specify the device for Intel QSV on a multi-GPU system. On Linux, this is the render node, e.g., /dev/dri/renderD128. On Windows, this is the device index starting from 0. Leave blank unless you know what you are doing.",
"LabelQuickConnectCode": "Quick Connect code",
"LabelReasonForTranscoding": "Reason for transcoding",
"LabelRecord": "Record",