slPhantomRemote – Devialet Speaker Controller Technical Specification

This describes what the code should do.

Product Version: 1.0.0.813 RC
Build Version: 813
Specification: 2507
Target Framework: .NET 8.0 Windows Forms
Compatibility: Windows 10/11 with .NET 8.0 Runtime
Last Updated: 8/11/2025

slPhantomRemote is a WinForms application for discovering, connecting to, and controlling Devialet speakers using the Devialet IP Control API. The application provides device discovery via mDNS, playback control, source management, audio features, and logging capabilities.

Contents

Overview & Goals

This application provides:

Built for .NET 8.0 (WinForms), the application minimizes external dependencies while providing a user experience with audio control capabilities.

Dependencies

The application is designed with minimal external dependencies, ensuring a small installation footprint and reduced security surface area.

Architecture & Design Patterns

Namespace Architecture

The application supports three Devialet API namespaces with intelligent fallback and automatic detection:

Namespace Endpoint Pattern Use Case Default
Devices /ipcontrol/v1/devices/current/ Individual speaker control No
Systems /ipcontrol/v1/systems/current/ Stereo pairs, multi-device setups Yes
Groups /ipcontrol/v1/groups/current/ Zone control, logical groupings No

Users can switch between namespaces via a dropdown in the control interface, with the selection persisted in configuration and automatic namespace detection based on device capabilities.

UI State Management

The application implements a dual-mode interface pattern with smooth transitions:

Discovery View: Device list with mDNS discovery, favorites management with star icons, hidden device support, and manual entry with IP validation
Control View: Comprehensive device control interface with real-time status, Unicode-based playback controls, advanced audio features, and source management with color coding
Detached Log Window: Real-time verbose logging with configurable positioning, auto-scroll with pause capability, and persistent window state

Configuration Management

All settings are persisted to config.json with advanced features:

{ "DeviceNames": { "192.168.0.30": "Arch-e86b", "192.168.0.31": "Gold Phantom-Left" }, "FavoriteDevices": ["192.168.0.31"], "HiddenDevices": ["192.168.0.11", "192.168.0.30"], "DeviceSettings": {}, "DeviceInfoCache": { "192.168.0.31": { "DeviceId": "e6e97c6f-0ac8-5a35-b68d-52f70cef57af", "SystemId": "256b186f-76bc-5ca2-ab74-076795765bc7", "GroupId": "9131a5fd-0afc-40b0-bb5c-3032377d1d11", "Model": "Phantom I Gold", "Serial": "N07P000734U10", "FirmwareVersion": "2.18.3", "LastUpdated": "2025-07-26T20:12:12.7228997-07:00" } }, "SourceFriendlyNames": { "1972effc-5b53-42c7-9d1f-ce67a1635bcf": "Arch" }, "HiddenSources": [ "c08fe6f4-4524-403b-ba12-f57c6660f797" ], "SourceIdentifiers": {}, "PreferredNamespace": 2, "PollingIntervalSeconds": 20, "ConnectionTimeoutSeconds": 3, "MainWindow": { "Left": -329, "Top": -837, "Width": 512, "Height": 383 }, "LogWindow": { "Left": 282, "Top": -992, "Width": 1119, "Height": 593 }, // "EqualizerWindow": { // Feature removed "Left": 0, "Top": 0, "Width": 0, "Height": 0 }, "MinimumLogLevel": 0, "MaxLogFileSizeMB": 10, "MaxLogFileAgeDays": 7, "Theme": 0, "UseCustomColors": false, "CustomLightColors": { "BackgroundColor": "White", "ForegroundColor": "Black", "PanelColor": "WhiteSmoke", "AccentColor": "0, 120, 212", "AccentLightColor": "16, 110, 190", "AccentDarkColor": "0, 90, 158", "MutedColor": "138, 138, 138", "ErrorColor": "209, 52, 56", "SuccessColor": "16, 124, 16", "WarningColor": "255, 185, 0", "LinkColor": "0, 120, 212" }, "CustomDarkColors": { "BackgroundColor": "White", "ForegroundColor": "Black", "PanelColor": "WhiteSmoke", "AccentColor": "0, 120, 212", "AccentLightColor": "16, 110, 190", "AccentDarkColor": "0, 90, 158", "MutedColor": "138, 138, 138", "ErrorColor": "209, 52, 56", "SuccessColor": "16, 124, 16", "WarningColor": "255, 185, 0", "LinkColor": "0, 120, 212" }, "EnableAutoSave": true, "AutoSaveIntervalSeconds": 30 }

Design Patterns

Key Design Patterns Used:

High-Level Workflow

Startup: Program.MainDeviceForm initialization → Configuration loading with validation → UI setup with Unicode icons
Discovery:
Connection:
Control Interface:
Source Management:
Logging & Debugging:
Shutdown & Cleanup:

Application Structure

slPhantomRemote is built as a .NET 8.0 Windows Forms application with the following key components:

The application follows a layered architecture with separate concerns for UI, business logic, and data access.

6. Core Components

DeviceForm (Main Interface)

Discovery Panel Features:
Control Panel Features:
Status & Navigation:
System Tray Integration:

DevialetController (API Client)

Core Capabilities:

Discovery Service

Multi-service mDNS scanning:

Note: The following services are not currently implemented: _raop._tcp.local. (Remote Audio Output Protocol) and _spotify-connect._tcp.local. (Spotify Connect enabled devices). Device filtering uses keyword detection for "devialet", "phantom", or "r1" in display names.

Configuration System

Advanced Persistence Features:

UI Component Summary

UI Components (7 Total):
Service Components (8 Total):

Enhanced Audio Features

Night Mode (Dynamic Range Compression):
Equalizer System (Experimental):
Stream Sensing (Not Implemented):

API Integration Details

7.1 Supported Endpoints

Base URL Pattern: http://{device_ip}:80/ipcontrol/v1/{namespace}/current/

Device Information & Status:
GET /sources # List all available sources
GET /sources/current # Get current source state & metadata
GET /sources/current/soundControl/volume # Get current volume (0-100)
GET /devices/current # Get device information and capabilities
Playback Control:
POST /sources/current/playback/play # Start playback
POST /sources/current/playback/pause # Pause playback
POST /sources/current/playback/next # Next track
POST /sources/current/playback/previous # Previous track
POST /sources/current/playback/mute # Mute audio
POST /sources/current/playback/unmute # Unmute audio
Post /groups/current/sources/current/playback/position # The position within the current track
Volume Control:
POST /sources/current/soundControl/volume # Set volume {"volume": 0-100}
POST /sources/current/soundControl/volumeUp # Increment volume
POST /sources/current/soundControl/volumeDown # Decrement volume
POST /bluetooth/startAdvertising # Start Bluetooth Advertising
Source Control:
GET /groups/current/sources # get a list of sources
GET /groups/current/sources/current # get the current playback state info
POST/sources/{sourceId}/playback/play # Switch source with auto-play
Advanced Audio Features:
GET /equalizer # Get current equalizer settings
POST /equalizer # Set equalizer settings
GET /audio/nightMode # Get Night Mode status
POST /audio/nightMode # Set Night Mode {"enabled": true/false}
GET /audio/streamSensing # Get Stream Sensing data
POST /audio/streamSensing/mode # Set Stream Sensing mode
GET /audio/presets # Get available audio presets
POST /audio/presets/current # Set current preset
System Control:
POST /powerOff # Power off
POST /restart # reboot
POST /resetToFactorySettings # Reset to factory settings
GET baseurl # Get device | system | group information
EQ Endpoint Info
GET, POST, /systems/{systemId}/settings/audio/equalizer Query or set equalizer gains/preset for the designated system. Minimal version: - DOS >= 2.16 Parameters / fields: { enabled: , (GET only) preset: , currentEqualization: (GET only) { BAND_LABEL: { frequency: (optional), gain: }, ... }, customEqualization: (optional for POST) { BAND_LABEL: { gain: }, ... }, gainRange: (GET only) { min: , max: , stepPrecision: }, availablePresets: (GET only) [ , ... ] } enabled indicates if the equalizer is active. It can become inactive in certain special audio processing modes of the product. When it is inactive, the client application may manipulate all the settings as usual, but there will be no audible impact. However, for better user experience, it is usually recommended to disable equalizer controls in this case. This field is read-only (the equalizer can not be re-enabled via this endpoint). preset is the selection of one of the available presets. Possible values are "flat", "custom", and "voice". currentEqualization provides gains and other information for all bands for the currently used equalizer preset. Different systems may have different BAND_LABEL values. BAND_LABEL examples include: "low", "high". currentEqualization.frequency provides a user-facing “central frequency” (it actually may be rounded) for the given band, in hertz. This value may be absent. currentEqualization.gain provides a positive or negative gain for the given band, in steps (may be fractional). customEqualization provides gains and other information for all bands for the "custom" equalizer preset. The BAND_LABEL values are the same as in currentEqualization above. customEqualization.gain provides a positive or negative gain for the given band, in steps (may be fractional). For POST requests, it will be rounded to the nearest authorized value by the device (in this case, the value read back by the client application may be slightly different). If the value is out of authorized bounds, "InvalidValue" error code is reported. Although these gains only have an effect when the "custom" preset is selected, it is possible to change their values at any time. The stored custom gain values can be modified independently from the preset. I.e., one can modify custom gain values while using a different (non-"custom") preset. Also, modifying just a preset does not trigger any changes to the stored custom gain values. The gains may be provided either simultaneously for all or for some bands (in which case the device guarantees to apply the new settings for all provided bands at the same moment) or one by one. Both preset and customEqualization are present in the response. However, customEqualization can be omitted in the POST request, in which case the values of the gains corresponding to the "custom" preset will not be modified. If provided equalizer parameters already correspond to the current state, the call will succeed. gainRange.min provides the minimal authorized value for the gain when using the "custom" preset, in steps. It applies to all bands. gainRange.max provides the maximal authorized value for the gain when using the"custom" preset, in steps. It applies to all bands. gainRange.stepPrecision provides the step precision, in arbitrary units. This value determines how the gain rounding operates: the gain values are rounded to the nearest positive or negative multiple of the step precision. This value can be used by the client application to adapt the UI so as to match the device gain precision as closely as possible. Typical values are 0.1, 0.25, 0.5, and 1. availablePresets provides a full list of available equalizer presets on the designated system. For POST requests, if the system leader is absent, the "SystemLeaderAbsent" error code is reported. GET example: { "preset": "flat", "currentEqualization": { "low": { "frequency": 400, "gain": 0 }, "high": { "frequency": 2000, "gain": 0 } }, "customEqualization": { "low": { "gain": -0.5 }, "high": { "gain": 2.25 } }, "gainRange": { "min": -6, "max": 6, "stepPrecision": 1 }, "availablePresets": [ "flat", "custom", "voice" ] } POST example 1: { "preset": "custom", "customEqualization": { "low": { "gain": 3.0 }, "high": { "gain": 3.0 } } } POST example 2: { "preset": "flat" }

User Interaction Patterns

Device List Interactions

Action Trigger Result Visual Feedback
Select Device Single-click Device selected, context menu enabled Highlight in list, status update
Connect to Device Double-click or Context Menu → Connect Switch to control mode, initiate connection Mode change, "Connecting..." status, UI transition
Toggle Favorite Click star icon (first 28px) or Context Menu Add/remove from favorites Star filled/empty (⭐/☆), status message
Device Management Right-click device Show context menu Context menu with 8 management options
Hidden Device Management Right-click empty area Show empty area menu Context menu with 3 discovery options
Discovery Trigger Click discovery icon (🔍) Start network device discovery "Discovering..." status, icon feedback
Network Diagnostics Context Menu → Diagnostics Open network diagnostics tool Diagnostics form with device-specific tests

Control Interface Interactions

Control Interaction Behavior Throttling/Limits
Volume Slider Drag or click Set volume 0-100% with live preview 200ms throttling, immediate UI update
Volume Up/Down (🔉/🔊) Button click Increment/decrement volume by device step 300ms delay + state refresh
Play/Pause (▶/⏸) Button click Toggle playback state with icon update 500ms delay + state refresh
Mute/Unmute (🔊) Button click Toggle mute state with visual feedback 300ms delay + state refresh
Night Mode (🌙) Button click Toggle night mode with button color change 300ms delay + state refresh
Source Selection Double-click ListView item Switch source + auto-play with color change 800ms switch + 1200ms refresh
Namespace Change ComboBox selection Reconnect with new namespace Full reconnection cycle with progress
Equalizer Access Click equalizer icon Open experimental equalizer dialog Modal dialog with real-time preview
Track Progress Hover/click progress bar Show position, enable seeking 500ms update interval, 300ms seek throttling
Source Context Menu Right-click source item Show source-specific options Immediate menu display

Keyboard Shortcuts & Controls

Implementation Status: Most keyboard shortcuts are implemented for the main forms. Equalizer, Log, and Network Diagnostics forms do not have keyboard shortcuts.

Main Interface

Key Combination Context Action Availability
F5 Discovery Mode Refresh/discover devices When in discovery view
F5 Control Mode Reconnect to current device When connected to device
F12 Any Mode Open log window Always available
Escape Control Mode Return to discovery When connected to device
Space Control Mode Play/pause toggle When connected to device
Ctrl+O Any Mode Open config file Always available
Ctrl+E Control Mode Open equalizer (experimental) When connected to device
Ctrl+N Control Mode Toggle Night Mode When connected to device
Ctrl+P Control Mode Toggle polling pause/resume When connected to device
Ctrl+S Control Mode Manage sources When connected to device
Up Arrow Control Mode Volume up When connected to device
Down Arrow Control Mode Volume down When connected to device
Left Arrow Control Mode Previous track When connected to device
Right Arrow Control Mode Next track When connected to device
Ctrl+D Control Mode Open network diagnostics When connected to device
Ctrl+M Control Mode Open device management When connected to device
Ctrl+A Discovery Mode Add device manually When in discovery view

Sources Management Form

Key Action Description Implementation Status
Space Toggle Visibility Show/hide selected source (✓/✗) ✅ Implemented
F2 Rename Source Edit friendly name ✅ Implemented
Delete Reset Name Restore default name ✅ Implemented
Ctrl+I Change Icon Select custom icon for source ✅ Implemented
Escape Close Form Close without saving ✅ Implemented
Enter Save & Close Apply changes and close ✅ Implemented
Ctrl+D Cleanup Invalid Remove invalid entries ✅ Implemented

Device Management Form

Key Action Description Implementation Status
F5 Refresh Device Refresh device information ✅ Implemented
Space / Enter Unhide Device Restore hidden device to list ✅ Implemented
F2 Rename Device Edit friendly name ✅ Implemented
Delete Remove Device Permanently remove ✅ Implemented
Escape Close Form Close dialog ✅ Implemented
Ctrl+R Restart Device Restart selected device ✅ Implemented
Ctrl+L Open Log File Open application log file ✅ Implemented

Equalizer Form

Key Action Description Implementation Status
No keyboard shortcuts implemented

Log Form

Key Action Description Implementation Status
No keyboard shortcuts implemented

Network Diagnostics Form

Key Action Description Implementation Status
No keyboard shortcuts implemented

Command Line Interface

slPhantomRemote V3 includes a command line interface for automation, scripting, and quick operations without launching the GUI. This enables integration with external tools, scheduled tasks, and rapid device control.

Command Line Usage

slPhantomRemote.exe [command] [parameters]

Available Commands

Device Discovery and Connection

Command Description Example
-discover Scan network for Phantom devices using mDNS/Zeroconf slPhantomRemote.exe -discover
-connect <IP> Open GUI connected to specific device slPhantomRemote.exe -connect 192.168.1.100
-dump Comprehensive network interrogation (all devices, all info) slPhantomRemote.exe -dump
-testendpoints <IP> Test which API namespace works with device slPhantomRemote.exe -testendpoints 192.168.1.100

Playback Control

Command Description Example
<IP> -play Play current source slPhantomRemote.exe 192.168.1.100 -play
<IP> -pause Pause playback slPhantomRemote.exe 192.168.1.100 -pause
<IP> -getnowplaying Get current playing information slPhantomRemote.exe 192.168.1.100 -getnowplaying

Volume Control

Command Description Example
<IP> -volup Increase volume by 5% slPhantomRemote.exe 192.168.1.100 -volup
<IP> -voldown Decrease volume by 5% slPhantomRemote.exe 192.168.1.100 -voldown
<IP> -volume <level> Set volume to specific level (0-100) slPhantomRemote.exe 192.168.1.100 -volume 30
-volup Volume up on last connected device slPhantomRemote.exe -volup
-voldown Volume down on last connected device slPhantomRemote.exe -voldown
-mute Toggle mute on last connected device slPhantomRemote.exe -mute

Source Management

Command Description Example
<IP> -getsourcelist List all available sources slPhantomRemote.exe 192.168.1.100 -getsourcelist
<IP> -playsource <source> Play source by index, ID, name, or type slPhantomRemote.exe 192.168.1.100 -playsource "My Spotify"

Device Power Management

Command Description Example
<IP> -restart Restart the Phantom device slPhantomRemote.exe 192.168.1.100 -restart
<IP> -poweroff Power off the Phantom device slPhantomRemote.exe 192.168.1.100 -poweroff

Advanced Usage

You can specify the namespace explicitly for devices that support multiple namespaces:

slPhantomRemote.exe <IP> <namespace> <operation>

Where namespace is: devices, systems, or groups

Source Selection Methods

The -playsource command supports multiple selection methods:

Example Command Sequences

# Discover all devices on network
slPhantomRemote.exe -discover

# Connect GUI to specific device
slPhantomRemote.exe -connect 192.168.1.100

# Full network interrogation
slPhantomRemote.exe -dump

# Play/pause controls
slPhantomRemote.exe 192.168.1.100 -play
slPhantomRemote.exe 192.168.1.100 -pause

# Volume control
slPhantomRemote.exe 192.168.1.100 -volume 30
slPhantomRemote.exe 192.168.1.100 -volup

# Source selection
slPhantomRemote.exe 192.168.1.100 -getsourcelist
slPhantomRemote.exe 192.168.1.100 -playsource "My Spotify"
slPhantomRemote.exe 192.168.1.100 -playsource 0

# Explicit namespace usage
slPhantomRemote.exe 192.168.1.100 groups -play
slPhantomRemote.exe 192.168.1.100 systems -volume 25

Network Interrogation (-dump)

The -dump command provides information about all Phantom devices on your network:

This is particularly useful for:

Integration Examples

Windows Task Scheduler

Create scheduled tasks to automate device control:

# Morning wake-up routine
slPhantomRemote.exe 192.168.1.100 -volume 20
slPhantomRemote.exe 192.168.1.100 -playsource "Morning Playlist"
slPhantomRemote.exe 192.168.1.100 -play

PowerShell Scripting

Integrate with PowerShell for advanced automation:

# Check if music is playing and adjust volume
$status = & slPhantomRemote.exe 192.168.1.100 -getnowplaying
if ($status -match "playing") {
    & slPhantomRemote.exe 192.168.1.100 -volume 15
}

Batch File Automation

Create batch files for common operations:

@echo off
REM Party mode script
slPhantomRemote.exe 192.168.1.100 -playsource "Party Mix"
slPhantomRemote.exe 192.168.1.100 -volume 60
slPhantomRemote.exe 192.168.1.100 -play

Configuration Schema

Note: The configuration file is automatically created and maintained by the application. See docs/Example_config.json for a complete example.

Configuration File Location

Configuration Properties

Property Type Description Default
DeviceNames Dictionary<string, string> Maps device IPs to friendly names {}
FavoriteDevices List<string> IP addresses of favorite devices (shown with star) []
HiddenDevices List<string> IP addresses of hidden devices []
DeviceSettings Dictionary<string, object> Per-device custom settings (reserved for future use) {}
DeviceInfoCache Dictionary<string, DeviceInfoCache> Cached device information including GUIDs {}
SourceFriendlyNames Dictionary<string, string> Maps source IDs to friendly names {}
HiddenSources List<string> Source IDs to hide from the UI []
SourceIdentifiers Dictionary<string, object> Source identification mapping (reserved) {}
PreferredNamespace int (enum) 0=Devices, 1=Systems, 2=Groups 2
PollingIntervalSeconds int Device status polling interval 20
ConnectionTimeoutSeconds int HTTP request timeout 3
MainWindow WindowPosition Main window position and size System default
LogWindow WindowPosition Log window position and size System default
EqualizerWindow WindowPosition Equalizer window position and size System default
MinimumLogLevel LogLevel (enum) Logging verbosity level: Verbose, Debug, Info, Warning, Error, Critical Info
MaxLogFileSizeMB int Maximum log file size before rotation 10
MaxLogFileAgeDays int Days to keep old log files 7
Theme int (enum) 0=System, 1=Light, 2=Dark 0
UseCustomColors bool Enable custom color themes false
CustomLightColors ThemeColors Custom light theme colors Default light theme
CustomDarkColors ThemeColors Custom dark theme colors Default dark theme
EnableAutoSave bool Enable automatic configuration saving true
AutoSaveIntervalSeconds int Auto-save interval 30

DeviceInfoCache Structure

{ "192.168.0.31": { "DeviceId": "e6e97c6f-0ac8-5a35-b68d-52f70cef57af", "SystemId": "256b186f-76bc-5ca2-ab74-076795765bc7", "GroupId": "9131a5fd-0afc-40b0-bb5c-3032377d1d11", "Model": "Phantom I Gold", "Serial": "N07P000734U10", "FirmwareVersion": "2.18.3", "LastUpdated": "2025-07-26T20:12:12.7228997-07:00" } }

WindowPosition Structure

{ "Left": -329, "Top": -837, "Width": 512, "Height": 383 }

ThemeColors Structure

{ "BackgroundColor": "White", "ForegroundColor": "Black", "PanelColor": "WhiteSmoke", "AccentColor": "0, 120, 212", "AccentLightColor": "16, 110, 190", "AccentDarkColor": "0, 90, 158", "MutedColor": "138, 138, 138", "ErrorColor": "209, 52, 56", "SuccessColor": "16, 124, 16", "WarningColor": "255, 185, 0", "LinkColor": "0, 120, 212" }

Logging Configuration

The application includes a logging system accessible via the F12 key. Log verbosity is controlled by the MinimumLogLevel setting in config.json.

Available Log Levels

Level Description Use Case
0 (Verbose) Everything including detailed debug traces Deep troubleshooting, API call details
1 (Debug) Debug information and above Development and debugging
2 (Info) Informational messages and above (default) Normal operation monitoring
3 (Warning) Warnings and above Important notices, recoverable errors
4 (Error) Errors and critical issues only Failure tracking
5 (Critical) Only critical issues Application-breaking problems

Changing Log Level

  1. Press Ctrl+O to open config.json
  2. Modify the MinimumLogLevel value to desired integer (0-5)
  3. Save the file and restart the application
  4. Press F12 to open the log window
Note: Log files are stored in the same directory as config.json (%LocalAppData%\slPhantomRemote\) and are automatically rotated based on size (MaxLogFileSizeMB) and age (MaxLogFileAgeDays) settings.

Testing Strategy

10.1 Testing Approach

Testing Methodology:

10.2 Test Cases

Category Test Cases Coverage
Device Discovery
  • mDNS discovery on all supported service types
  • Manual device entry with IP validation
  • Duplicate device detection and merging
  • Device filtering and categorization
  • Recovery from network changes
100%
Device Control
  • Connection establishment and error handling
  • Namespace auto-detection and switching
  • Playback controls with state preservation
  • Volume control with throttling verification
  • Source switching and persistence
  • Reconnection with state recovery
100%
Configuration Management
  • Persistence across application restarts
  • External file change detection
  • Import/export validation
  • Migration from legacy formats
  • Error recovery and rollback
100%
UI Validation
  • Dual-mode UI transition
  • Theme application and switching
  • Layout adaptation on window resize
  • Keyboard shortcut functionality
  • Context menu behavior
  • Status feedback and visual indicators
100%
Advanced Audio Features
  • Equalizer preset application
  • Night Mode toggling and state
  • Stream Sensing activation and mode switching
  • Custom equalizer settings persistence
  • Performance impact of audio processing
100%
Error Handling
  • Network connectivity loss recovery
  • API error classification and handling
  • Configuration corruption recovery
  • Unexpected exception handling
  • User feedback for all error conditions
100%

10.3 Test Environment

Test Matrix:

11. Deployment & Distribution

14.1 Installation Options

Distribution Methods:

Prerequisites

Installation Steps

Standalone Installation:
  1. Download slPhantomRemote.exe from official distribution channel
  2. Place in desired location
  3. Get .net 8 if needed from Download .NET 8 from Microsoft
  4. Create desktop shortcut or pin it to your taskbar (optional)
  5. First run will generate config.json in same directory

Update Mechanism

NONE! - ET NO PHONE HOME.

Deployment Considerations

You will need .net 8 on the machine, its not part of the disto but you can get it from Microsoft. Download .NET 8 from Microsoft
Security Considerations:

Future Enhancement Ideas

The following enhancements have been considered but are currently outside the scope of the initial implementation. They are documented here for potential future development:

PRIMARY DIRECTIVE ABOVE ALL ELSE - First LAW
Multi-Room Management:
TO-DO Cross Platform Maui APP:

Recent Updates (Version 1.0)

This section documents the latest enhancements and features added to slPhantomRemote:

Version 1.0.0.813 RC (Build 813) - Release Candidate

Bluetooth Support

UI Enhancements

Configuration Management

Technical Improvements

Configuration Schema Updates:

Summary

slPhantomRemote represents an implementation of the Devialet IP Control API specification in a .NET 8.0 WinForms application. The application provides device discovery, connectivity, control interfaces, and audio features while maintaining performance and reliability.

Important: This specification reflects the current implementation of slPhantomRemote as of August 2025.

Credits & Acknowledgments

Open Source Dependencies

slPhantomRemote is built with the following open-source libraries:

Acknowledgments

Devialet IP Control - REFERENCE API DOCUMENTATION - Revision 1 - December 2021

Devialet IP Control - REFERENCE API DOCUMENTATION - Revision 1 - December 2021 Document history

Implementation Notes - slPhantomRemote V3

Technical Implementation Details

Version: This documentation reflects the V3 implementation as of the latest codebase update.