diff --git a/input_viewer_electron/src/main/index.js b/input_viewer_electron/src/main/index.js
index e4910b3..9d476e4 100644
--- a/input_viewer_electron/src/main/index.js
+++ b/input_viewer_electron/src/main/index.js
@@ -433,12 +433,6 @@ ipcMain.handle('diag-log', (event, lines) => {
}
})
-ipcMain.handle('diag-log-reset', () => {
- const file = diagLogPath()
- try { fs.writeFileSync(file, '') } catch { /* first run */ }
- return file
-})
-
// Art-Net reactive mode (issue #59).
//
// The POST lives here rather than in the renderer for two reasons. In production
@@ -562,11 +556,6 @@ ipcMain.handle('save-settings', (event, settings) => {
return saveSettings(settings)
})
-// Get settings file path (for debugging)
-ipcMain.handle('get-settings-path', () => {
- return settingsPath
-})
-
// Get app version for display in UI
ipcMain.handle('get-app-version', () => {
return getAppVersion()
diff --git a/input_viewer_electron/src/preload/index.js b/input_viewer_electron/src/preload/index.js
index 3c136c1..520d7ee 100644
--- a/input_viewer_electron/src/preload/index.js
+++ b/input_viewer_electron/src/preload/index.js
@@ -11,12 +11,10 @@ contextBridge.exposeInMainWorld('electronAPI', {
// Diagnostic log (temporary; see the no-signal detection investigation)
diagLog: (lines) => ipcRenderer.invoke('diag-log', lines),
- diagLogReset: () => ipcRenderer.invoke('diag-log-reset'),
// Settings persistence
loadSettings: () => ipcRenderer.invoke('load-settings'),
saveSettings: (settings) => ipcRenderer.invoke('save-settings', settings),
- getSettingsPath: () => ipcRenderer.invoke('get-settings-path'),
// App info
getAppVersion: () => ipcRenderer.invoke('get-app-version'),
diff --git a/input_viewer_electron/src/renderer/index.html b/input_viewer_electron/src/renderer/index.html
index 88279e7..68f89a7 100644
--- a/input_viewer_electron/src/renderer/index.html
+++ b/input_viewer_electron/src/renderer/index.html
@@ -32,11 +32,6 @@
-
-
diff --git a/input_viewer_electron/src/renderer/renderer.js b/input_viewer_electron/src/renderer/renderer.js
index fd79845..3da0dd1 100644
--- a/input_viewer_electron/src/renderer/renderer.js
+++ b/input_viewer_electron/src/renderer/renderer.js
@@ -199,7 +199,6 @@ const elements = {
rightVideo: document.getElementById('right-video'),
videoWrapper: document.getElementById('video-wrapper'),
centerDivider: document.getElementById('center-divider'),
- bottomLogo: document.getElementById('bottom-logo'),
leftBorder: document.getElementById('left-border'),
rightBorder: document.getElementById('right-border'),
inputNameOverlay: document.getElementById('input-name-overlay'),
@@ -237,8 +236,6 @@ const elements = {
dropdownSystemVolume: document.getElementById('dropdown-system-volume'),
dropdownSystemVolumeValue: document.getElementById('dropdown-system-volume-value'),
// Cached label references (avoids DOM queries in hot paths)
- leftLabel: document.querySelector('#left-feed .input-label'),
- rightLabel: document.querySelector('#right-feed .input-label'),
// DVD screensaver overlay
dvdOverlay: document.getElementById('dvd-overlay'),
screensaverCanvas: document.getElementById('screensaver-canvas'),
@@ -824,10 +821,6 @@ async function startVideoStream(deviceId, videoElement, side) {
// leaves it up in forced mode.
hideNoSignal(side)
- const label = side === 'left' ? elements.leftLabel : elements.rightLabel
- if (label && device) {
- label.textContent = getInputName(deviceId, device.label || 'Mock Input')
- }
state.health[side].opened(performance.now())
resetCrop(side)
return mock.stream
@@ -957,14 +950,6 @@ async function startVideoStream(deviceId, videoElement, side) {
hideNoSignal(side)
- // Update input label using cached reference
- const device = state.devices.find(d => d.deviceId === deviceId)
- const label = side === 'left' ? elements.leftLabel : elements.rightLabel
- if (label && device) {
- const name = getInputName(deviceId, device.label || 'Unknown Input')
- label.textContent = name
- }
-
attachStreamHealth(side, deviceId, stream)
return stream
} catch (error) {
@@ -2134,7 +2119,6 @@ function setLayout(mode) {
void elements.rightFeed.offsetWidth
elements.rightFeed.classList.remove('collapsed')
elements.centerDivider.classList.remove('hidden', 'overlay')
- elements.bottomLogo.classList.add('hidden')
ensureRightStream()
break
case 'single':
@@ -2151,7 +2135,6 @@ function setLayout(mode) {
if (state.layoutMode === 'single') elements.rightFeed.classList.add('hidden')
}, animMs)
elements.centerDivider.classList.add('overlay')
- elements.bottomLogo.classList.add('hidden')
break
}
@@ -2912,11 +2895,6 @@ function buildPickerVolume(side) {
return row
}
-/** Volume lives in the pickers now; kept so existing callers still refresh it. */
-function renderDropdownVolumeControls() {
- renderDropdownInputLists()
-}
-
/**
* Put one input on both halves, as the number keys do, but with the same fade a
* click on one half gets.
@@ -5076,9 +5054,8 @@ async function init() {
console.error('[Detection] Initialization error:', err)
})
- // Render dropdown input lists and volume controls
+ // Render the dropdown's pickers (each carries its half's volume)
renderDropdownInputLists()
- renderDropdownVolumeControls()
// Label the view-mode buttons and fill the Settings shortcut table from the
// shared list (#258). After renderDropdownInputLists, which paints the rows
diff --git a/input_viewer_electron/src/renderer/styles.css b/input_viewer_electron/src/renderer/styles.css
index b9cee58..a40ad78 100644
--- a/input_viewer_electron/src/renderer/styles.css
+++ b/input_viewer_electron/src/renderer/styles.css
@@ -193,22 +193,6 @@ body.single-view .video-feed.single video {
object-fit: contain;
}
-.input-label {
- position: absolute;
- bottom: 20px;
- left: 20px;
- padding: 8px 16px;
- background-color: rgba(0, 0, 0, 0.7);
- border-radius: 6px;
- font-size: 14px;
- opacity: 0;
- transition: opacity 0.3s ease;
-}
-
-body.cursor-visible .input-label {
- opacity: 1;
-}
-
/* =============================================================================
No Signal Overlay
============================================================================= */
@@ -464,28 +448,6 @@ body.gpu-compositing #right-video {
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.5));
}
-/* Bottom Logo (shown in single view) */
-#bottom-logo {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- height: 60px;
- display: flex;
- align-items: center;
- justify-content: center;
- background-color: var(--bg-color);
- z-index: 15;
-}
-
-#bottom-logo .divider-logo {
- opacity: 1;
-}
-
-#bottom-logo.hidden {
- display: none;
-}
-
/* =============================================================================
Freeze Frame
============================================================================= */
diff --git a/input_viewer_electron/test/helpers/renderer-dom.js b/input_viewer_electron/test/helpers/renderer-dom.js
index 6ca0788..4c9dacb 100644
--- a/input_viewer_electron/test/helpers/renderer-dom.js
+++ b/input_viewer_electron/test/helpers/renderer-dom.js
@@ -36,11 +36,9 @@ export function requiredElementIds() {
}
// Nodes the renderer reaches for with a descendant selector rather than an id.
-// These mirror src/renderer/index.html, where each feed contains both a label
-// and a no-signal overlay.
+// These mirror src/renderer/index.html, where each feed contains a no-signal
+// overlay.
const NESTED = [
- { parent: 'left-feed', className: 'input-label' },
- { parent: 'right-feed', className: 'input-label' },
{ parent: 'left-feed', className: 'no-signal-overlay hidden' },
{ parent: 'right-feed', className: 'no-signal-overlay hidden' },
]
diff --git a/settings.example.json b/settings.example.json
index f24ee95..fb04641 100644
--- a/settings.example.json
+++ b/settings.example.json
@@ -1,5 +1,5 @@
{
- "_comment": "Example of the settings file the app writes, for reference only. The real file lives in the app's user data directory (Settings shows the exact path) -- nothing reads this copy. Keys mirror getDefaultSettings() in src/renderer/renderer.js.",
+ "_comment": "Example of the settings file the app writes, for reference only. The real file is settings.json in the app's user data folder, next to the logs folder whose path the log's startup line prints -- nothing reads this copy. Keys mirror getDefaultSettings() in src/renderer/renderer.js.",
"leftDeviceId": null,
"rightDeviceId": null,