koltyj/SSL
GitHub: koltyj/SSL
通过逆向工程协议实现的 Python 客户端,用于替代官方过时软件控制 SSL 大型模拟调音台。
Stars: 0 | Forks: 0
# SSL Console 控制
**一个用于通过以太网控制 SSL 调音台的逆向工程 Python 客户端。**




## 这是什么
SSL 的大型模拟调音台(Matrix, Duality, AWS 900, AWS 924/948)具备数字控制能力 —— 自动推子、DAW 集成、Insert 路由以及 Session 回调。SSL 的官方控制软件 (MatrixRemote) 是一个 Java 应用程序,尚未针对现代 macOS 进行维护。
本项目是一个从头编写的 Python 替代品,通过逆向 SSL MatrixRemote 协议和实时抓包分析开发而成。它使用调音台原生的 UDP 协议进行通信,并自动检测连接的调音台型号,通过终端 UI、交互式 REPL 和可脚本化的 CLI 暴露可用功能。
这是一个独立的社区项目,不隶属于 Solid State Logic,也未受其认可。
## 功能特性
- **实时 TUI 仪表板**,具有 SSL 风格的深色主题、选项卡布局和命令面板
- **通道条监控** —— 名称、DAW 层分配、Insert 路由、Automation 模式
- **60+ CLI 命令**,涵盖通道、路由、配置文件、工程、Total Recall、XPatch、Softkey
- **Session 模板** —— 保存、加载、对比和 apply 完整的调音台状态快照
- **连接健康监控**,支持自动重连和心跳跟踪
- **交互式 REPL** 和单次执行 CLI 模式,用于脚本编写
- **CI 验证**包括 Lint、构建、协议、CLI、模板和 TUI 冒烟测试
- **极简依赖** —— Python stdlib + [Textual](https://github.com/Textualize/textual) 用于 TUI
## 快速开始
```
pip install ssl-console-client
# 启动 REPL
ssl-console
# 启动 TUI
ssl-console tui
# 一次性命令
ssl-console channels
ssl-console --ip 10.0.0.50 layers
ssl-console -v status
```
或从源码安装:
```
git clone https://github.com/koltyj/SSL.git
cd SSL
pip install ".[dev]"
```
调音台的默认 IP 是 `192.168.1.2`,UDP 端口为 `50081`。传递 `--ip` 以覆盖默认设置。
客户端假定调音台在受信任的本地网络上可达。在将任何控制主机暴露于录音室 LAN 之外之前,请参阅 [SECURITY.md](SECURITY.md)。
## 终端 UI
TUI 提供了一个基于 Textual 构建的全屏仪表板,包含四个选项卡:
- **Channels** —— 实时通道条显示,包含名称、DAW 层信息,状态变化时会有高亮闪烁
- **Routing** —— Insert 矩阵和 XPatch 配置
- **Templates** —— Session 模板管理(保存/加载/对比)
- **Settings** —— 调音台配置、Profiles、Automation 模式
按键绑定:
| 按键 | 动作 |
|-----|--------|
| `1`-`4` | 切换选项卡 |
| `/` | 打开命令面板 |
| `q` | 退出 |
状态栏显示连接健康状况(绿/黄/红点)、活动 Project 和最后加载的 Template。当调音台离线时,会自动出现断开连接覆盖层。
## CLI 命令
### 连接
| 命令 | 描述 |
|---------|-------------|
| `connect` | 连接到调音台并同步状态 |
| `disconnect` | 断开连接 |
| `status` | 显示调音台信息、固件、心跳时间 |
| `health` | 详细连接健康报告 |
### 通道与 Profiles
| 命令 | 描述 |
|---------|-------------|
| `channels` | 列出所有通道名称 |
| `rename ` | 重命名通道(最多 6 个字符) |
| `profiles` | 列出可用的 DAW Profiles |
| `layers` | 显示 DAW 层协议分配 |
| `setprofile ` | 将 Profile 分配给 DAW 层 |
| `transportlock <0-4>` | 将传输锁定设置为特定层 |
### 路由与 Inserts
| 命令 | 描述 |
|---------|-------------|
| `matrix` | 显示 Insert 矩阵分配 |
| `assign ` | 将设备分配给 Insert 插槽 |
| `stereo ` | 切换立体声链接 |
| `chains` | 显示 Insert 链 |
| `devices` | 列出可用的 Insert 设备 |
| `matrix_presets` | 列出路由预设 |
### XPatch
| 命令 | 描述 |
|---------|-------------|
| `xpatch_setup` | 显示 XPatch 配置 |
| `xpatch_routes` | 显示当前 XPatch 路由 |
| `xpatch_route ` | 设置 XPatch 路由 |
| `xpatch_presets` | 列出 XPatch 预设 |
### Projects 与 Total Recall
| 命令 | 描述 |
|---------|-------------|
| `projects` | 列出调音台上的 Projects 和 Titles |
| `new_project ` | 创建新 Project |
| `select_title ` | 加载 Project Title |
| `tr_snapshots` | 列出 Total Recall 快照 |
| `tr_take` | 获取 TR 快照 |
| `tr_select ` | 回调 TR 快照 |
### Softkeys
| 命令 | 描述 |
|---------|-------------|
| `softkey_keymap` | 显示当前 Keymap |
| `softkey_edit ` | 编辑 Softkey 分配 |
| `softkey_midi ...` | 将 MIDI 输出分配给 Softkey |
| `softkey_usb ...` | 将 USB HID 输出分配给 Softkey |
### Session 模板
| 命令 | 描述 |
|---------|-------------|
| `template save ` | 保存当前调音台状态 |
| `template load ` | 恢复已保存的模板 |
| `template diff ` | 将实时状态与模板进行对比 |
| `template list` | 列出已保存的模板 |
| `split ` | 在两个 DAW 层之间分割调音台 |
### Automation 与控制
| 命令 | 描述 |
|---------|-------------|
| `automode ` | 设置 Automation 模式 (read/write/touch/latch) |
| `motors ` | 启用/禁用自动推子 |
| `mdac ` | 启用/禁用 MDAC 模式 |
| `restart` | 重启调音台固件 |
## 架构
单 Socket UDP 客户端,具有线程接收循环和分发表。
```
cli.py (cmd.Cmd REPL + argparse one-shot)
├── tui.py (Textual TUI application)
└── client.py (SSLMatrixClient)
├── protocol.py (TxMessage/RxMessage wire format, 197 MessageCodes)
├── models.py (ConsoleState dataclass tree)
└── handlers/ (10 handler modules, ~105 dispatch entries)
├── connection.py — GET_DESK discovery, heartbeat
├── channels.py — Channel names, scribble strips
├── profiles.py — DAW layers (HUI/MCU/CC), transport lock
├── delta.py — Automation mode, motors, MDAC, restart
├── routing.py — Insert matrix V2, chains, presets
├── projects.py — Project/title CRUD, directory listing
├── total_recall.py — TR snapshots
├── chan_presets.py — Channel name presets
├── xpatch.py — XPatch routing, presets, chains, MIDI
└── softkeys.py — Programmable keys, keymap editor
```
每个处理模块包含 **builders**(Python 到调音台)和 **handlers**(调音台到 Python)。客户端的分发表将 `MessageCode` 枚举映射到处理函数。线格式使用 16 字节的大端序头,后跟可变长度 Payload —— 这在所有 SSL 调音台型号之间共享,并根据 SSL MatrixRemote 协议逆向工程得出。
## 支持的调音台
客户端在连接时自动检测调音台型号并启用相应的功能集。
| 调音台 | 通道 | Insert 矩阵 | XPatch | DAW 层 | Delta |
|---------|----------|---------------|--------|------------|-------|
| SSL Matrix | 32 | Yes | Yes (16ch) | Yes (4) | Yes |
| SSL Duality | 96 | -- | -- | -- | -- |
| SSL AWS 900 | 48 | -- | -- | -- | -- |
| SSL AWS 924/948 | 48 | -- | -- | -- | -- |
所有调音台共有:通道名称、Projects、Total Recall、通道名称预设、UDP 端口 50081。
Matrix 已在固件 V3.0/5 上测试通过。其他调音台和固件版本可能可用但未经测试 —— 欢迎反馈。
## 开发
```
# 创建开发环境
python3 -m venv .venv
source .venv/bin/activate
pip install ".[dev]"
# 运行所有测试
python3 -m pytest tests/ -v
# 运行特定测试文件
python3 -m pytest tests/test_protocol.py -v
# Lint 和格式化
python3 -m ruff check ssl-matrix-client tests
python3 -m ruff format ssl-matrix-client tests
# 构建分发 artifacts
python3 -m build
# Pre-commit hooks (ruff, 尾部空格, EOF 修复器, 调试语句)
pre-commit run --all-files
```
测试使用 `tests/conftest.py` 中的导入 shim 来处理带连字符的包目录。CI 在 Python 3.9 至 3.13 上运行 Lint、测试和打包检查。工具配置位于 `pyproject.toml` 中。
## 社区
- [CONTRIBUTING.md](CONTRIBUTING.md) -- 开发设置、PR 预期和测试命令
- [SUPPORT.md](SUPPORT.md) -- 如何寻求帮助或提交可操作的 Bug 报告
- [SECURITY.md](SECURITY.md) -- 安全模型和私人报告指南
- [CHANGELOG.md](CHANGELOG.md) -- 版本历史
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) -- 预期的社区行为
## 许可证
MIT
标签:DAW集成, DNS解析, MatrixRemote替代, Python, REPL, SSL, Textual, TUI, UDP协议, 云资产清单, 会话管理, 内核驱动, 开源项目, 录音棚设备, 数字取证, 无后门, 物联网, 硬件黑客, 终端用户界面, 网络协议, 自动化脚本, 计算机取证, 调音台控制, 逆向工具, 逆向工程, 防御绕过, 音乐制作, 音频工程