diff --git a/server/src/wled_controller/static/app.js b/server/src/wled_controller/static/app.js index a073e70..f8f595e 100644 --- a/server/src/wled_controller/static/app.js +++ b/server/src/wled_controller/static/app.js @@ -3815,6 +3815,8 @@ async function showTargetEditor(targetId = null) { document.getElementById('target-editor-name').value = target.name; deviceSelect.value = target.device_id || ''; sourceSelect.value = target.picture_source_id || ''; + document.getElementById('target-editor-fps').value = target.settings?.fps ?? 30; + document.getElementById('target-editor-fps-value').textContent = target.settings?.fps ?? 30; document.getElementById('target-editor-border-width').value = target.settings?.border_width ?? 10; document.getElementById('target-editor-interpolation').value = target.settings?.interpolation_mode ?? 'average'; document.getElementById('target-editor-smoothing').value = target.settings?.smoothing ?? 0.3; @@ -3826,6 +3828,8 @@ async function showTargetEditor(targetId = null) { document.getElementById('target-editor-name').value = ''; deviceSelect.value = ''; sourceSelect.value = ''; + document.getElementById('target-editor-fps').value = 30; + document.getElementById('target-editor-fps-value').textContent = '30'; document.getElementById('target-editor-border-width').value = 10; document.getElementById('target-editor-interpolation').value = 'average'; document.getElementById('target-editor-smoothing').value = 0.3; @@ -3837,6 +3841,7 @@ async function showTargetEditor(targetId = null) { name: document.getElementById('target-editor-name').value, device: deviceSelect.value, source: sourceSelect.value, + fps: document.getElementById('target-editor-fps').value, border_width: document.getElementById('target-editor-border-width').value, interpolation: document.getElementById('target-editor-interpolation').value, smoothing: document.getElementById('target-editor-smoothing').value, @@ -3860,6 +3865,7 @@ function isTargetEditorDirty() { document.getElementById('target-editor-name').value !== targetEditorInitialValues.name || document.getElementById('target-editor-device').value !== targetEditorInitialValues.device || document.getElementById('target-editor-source').value !== targetEditorInitialValues.source || + document.getElementById('target-editor-fps').value !== targetEditorInitialValues.fps || document.getElementById('target-editor-border-width').value !== targetEditorInitialValues.border_width || document.getElementById('target-editor-interpolation').value !== targetEditorInitialValues.interpolation || document.getElementById('target-editor-smoothing').value !== targetEditorInitialValues.smoothing @@ -3886,6 +3892,7 @@ async function saveTargetEditor() { const name = document.getElementById('target-editor-name').value.trim(); const deviceId = document.getElementById('target-editor-device').value; const sourceId = document.getElementById('target-editor-source').value; + const fps = parseInt(document.getElementById('target-editor-fps').value) || 30; const borderWidth = parseInt(document.getElementById('target-editor-border-width').value) || 10; const interpolation = document.getElementById('target-editor-interpolation').value; const smoothing = parseFloat(document.getElementById('target-editor-smoothing').value); @@ -3902,6 +3909,7 @@ async function saveTargetEditor() { device_id: deviceId, picture_source_id: sourceId, settings: { + fps: fps, border_width: borderWidth, interpolation_mode: interpolation, smoothing: smoothing, diff --git a/server/src/wled_controller/static/index.html b/server/src/wled_controller/static/index.html index e15b8bf..251373a 100644 --- a/server/src/wled_controller/static/index.html +++ b/server/src/wled_controller/static/index.html @@ -271,6 +271,18 @@ +
+
+ + +
+ +
+ + 30 +
+
+
diff --git a/server/src/wled_controller/static/locales/en.json b/server/src/wled_controller/static/locales/en.json index 1f1aa61..80db917 100644 --- a/server/src/wled_controller/static/locales/en.json +++ b/server/src/wled_controller/static/locales/en.json @@ -318,6 +318,8 @@ "targets.source": "Source:", "targets.source.hint": "Which picture source to capture and process", "targets.source.none": "-- No source assigned --", + "targets.fps": "Target FPS:", + "targets.fps.hint": "Target frames per second for capture and LED updates (10-90)", "targets.border_width": "Border Width (px):", "targets.border_width.hint": "How many pixels from the screen edge to sample for LED colors (1-100)", "targets.interpolation": "Interpolation Mode:", diff --git a/server/src/wled_controller/static/locales/ru.json b/server/src/wled_controller/static/locales/ru.json index f72cccd..3ceed13 100644 --- a/server/src/wled_controller/static/locales/ru.json +++ b/server/src/wled_controller/static/locales/ru.json @@ -318,6 +318,8 @@ "targets.source": "Источник:", "targets.source.hint": "Какой источник изображения захватывать и обрабатывать", "targets.source.none": "-- Источник не назначен --", + "targets.fps": "Целевой FPS:", + "targets.fps.hint": "Целевая частота кадров для захвата и обновления LED (10-90)", "targets.border_width": "Ширина границы (px):", "targets.border_width.hint": "Сколько пикселей от края экрана выбирать для цвета LED (1-100)", "targets.interpolation": "Режим интерполяции:",