turing-smart-screen-python: unofficial Python driver for Turing Smart Screen USB-C displays
Unofficial Python system monitor and library for small IPS USB-C displays like Turing Smart Screen / TURZX
At a glance
- What is it?
- turing-smart-screen-python is an open-source Python library and system monitor for small USB-C IPS screens sold under the Turing, TURZX, XuanFang, Kipye and UsbPCMonitor brands. macOS has a known major bug, AX206-firmware displays are not supported, and the dependency list includes version-conditional pins for Python 3.9 through 3.12.
- Who is it for?
- turing-smart-screen-python is the right choice if you own a listed Turing, XuanFang, Kipye, UsbPCMonitor or WeAct display and want an open-source Python interface. Verify your exact hardware model against the supported table first, because AX206-firmware displays are not supported at all.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 20 days ago.
- What is it written in?
- Mainly Rich Text Format, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 28, 2026, and from our analysis. They are not legal advice.
Editorial analysis
An unofficial Python library for USB-C smart screens, not affiliated with any of the hardware brands
turing-smart-screen-python provides a Python interface to a family of small USB-C IPS displays sold under multiple brand names. The repository opens with a prominent disclaimer: it has no affiliation with Turing, XuanFang or Kipye, and it is not the original software shipped with the hardware. Hardware issues and questions about USBMonitor.exe or ExtendScreen.exe belong with the hardware vendors, not in this repository's issue tracker.
Supported operating systems are Windows 10/11, Linux (including Raspberry Pi), and macOS, with a concrete caveat for macOS described in its own section below. The general README statement says the project works on any OS that supports Python 3.9 or newer. Version 3.10.0 was released on 2026-04-12 under the GPL-3.0 licence, and the last push to the repository was on 2026-09-21.
Two use patterns are covered by the repository. Running `main.py` gives a standalone system monitor with a configurable theme. Importing from the `library/` directory integrates the display into an existing Python application.
Turing Smart Screen support covers 10 size variants from 2.1 to 12.3 inches
For Turing Smart Screen and TURZX devices, all available sizes and hardware revisions are listed as supported: 2.1", 2.8", 3.5", 4.6", 5", 5.2", 8.0", 8.8", 9.2" and 12.3". Both UART and USB protocols work with these models. One explicit gap stated in the README is that video and storage are not supported for now, meaning the display acts as a rendered panel rather than a general-purpose secondary screen.
Beyond Turing devices, 4 additional brands appear in the supported table. XuanFang at 3.5" is supported in revision B and the flagship model (which adds a backplate and RGB LEDs). UsbPCMonitor at 3.5" and 5" covers an unknown-manufacturer display visually similar to the Turing 3.5" and 5" screens, with UsbPCMonitor.exe as its original software. Kipye Qiye Smart Display at 3.5" is listed, with the README noting that its front panel carries the engraved inscription 奇叶智显 (Qiye Zhixian). WeAct Studio Display FS V1 is also supported at 0.96" and 3.5".
Fourteen packages in requirements.txt, with Pillow and numpy pinned separately per Python minor version
The requirements.txt lists packages across several categories. The serial link uses `pyserial~=3.5`. System metrics come from `psutil~=7.2.2` for CPU, disk and network data, `uptime~=3.0.1` for system uptime, and `ping3~=5.1.5` for ICMP ping via raw sockets. Image work relies on `Pillow` and `numpy`, each with separate version pins per Python release.
For `Pillow`, `~=11.3.0` is used when Python is below 3.10, described as the latest version for Python 3.9, and `~=12.3.0` applies for Python 3.10 and above. `numpy` has 4 separate pins: `~=2.0.2` for Python 3.9, `~=2.2.6` for Python 3.10, `~=2.4.4` for Python 3.11, and `~=2.5.2` for Python above 3.11. These splits mean the active set of packages depends on which Python runtime is used.
Platform-specific entries also appear. `pywinstyles~=1.8` is Windows-only, applying color theming to the title bar via a conditional `sys_platform=="win32"` marker. On Linux and macOS that entry is skipped. `pystray~=0.19.5` covers the tray icon across all platforms, and `darkdetect~=0.8.0` detects whether the user is in dark mode.
TURZX USB models use DES frame encryption handled by pycryptodome
The communication path differs between UART-based Turing models and the newer TURZX USB models. UART communication goes through `pyserial`, which covers the original Turing serial protocol. For TURZX USB models, the library uses `pyusb~=1.3.1` for direct USB access and `pycryptodome~=3.23.0` for encryption.
The requirements.txt comment on `pycryptodome` is explicit: it exists to decrypt and encrypt frames using DES. DES is a symmetric block cipher, and its use here means the library must replicate the hardware's own encryption scheme to send correctly formatted frames. This is about protocol compatibility, not securing the data in transit. The USB link carries pixel data formatted to what the TURZX hardware expects, and the library handles that formatting through pycryptodome.
The practical implication is that any custom code built on the `library/` layer and targeting TURZX USB devices inherits this pycryptodome dependency, even for programs that have no other cryptography requirements.
The macOS badge reads 'major bug' and links to issue #7, not a footnote
OS support is displayed at the top of the README as a row of badges. The Windows badge shows no qualifier. The Linux badge shows no qualifier. The macOS badge reads 'mac os (major bug)' and links directly to issue #7 in the repository. That placement puts the warning in the same visual line as the other OS badges, making it impossible to miss when reading the header row.
This is different from a caveat buried in a note or an optional warning in a documentation page. The macOS limitation is embedded in the badge graphic itself, in the prominent badge row that typically carries only positive status indicators such as CI pass or coverage percentage. A developer scanning supported platforms would see the warning immediately.
The README does not describe what the bug is, what a workaround involves, or when it might be resolved. Reading issue #7 directly is the only way to understand the scope of the problem before attempting a macOS deployment. The badge has not been updated to remove the warning.
AX206-firmware displays are explicitly excluded, and ACEMAGIC remains unintegrated despite a decoded protocol
The not-supported section of the README calls out two hardware categories by name. The first is displays using the Appotech AX206 hacked photo frame firmware, which covers a broad range of products from multiple manufacturers sold under different names. For those devices, the README names AIDA64 and lcd4linux as the tools that do support them. turing-smart-screen-python will not work with AX206-based hardware regardless of size or branding.
The second excluded category is the ACEMAGIC S1 Mini PC's integrated display. The README notes that the protocol has been decoded (with a reference to issue #677), but also states it is 'not supported for now but could be integrated'. That means a working driver does not exist in this project yet. For teams building around that specific mini PC, issue #677 is the starting point, but no timeline for integration is given.
NXElec BeadaPanel models are also listed in the not-yet-supported section, covering sizes 3, 4, 5, 6 and 7.
The repository provides three separate entry points and two PyInstaller spec files for standalone builds
Several Python files at the repository root serve different purposes. `main.py` is the full system monitor application with theme support and tray icon. `simple-program.py` is a minimal entry point for developers who want a starting point without the full monitor configuration. `theme-editor.py` is a graphical editor for creating and modifying themes, using the Tk Sun Valley theme from `sv-ttk~=2.6.1` and tooltips from `tkinter-tooltip~=3.1.2`. `configure.py` handles the general configuration, backed by `ruamel.yaml~=0.19.1`.
For distributing the monitor as a standalone executable, the repository includes two PyInstaller spec files: `turing-system-monitor.spec` and `turing-system-monitor-debug.spec`. `pyinstaller~=6.22.2` is listed in requirements.txt with the description 'bundles a Python application and all its dependencies into a single package'. Building an executable requires running pyinstaller against one of the spec files rather than through the monitor application itself.
The `library/` directory is the abstraction layer for anyone integrating display control into their own Python code rather than using the monitor application. The `external/` directory is listed at the repository root alongside `tests/` and `tools/`, but their contents are not documented in the README.
Editorial conclusion
turing-smart-screen-python is the right choice if you own a listed Turing, XuanFang, Kipye, UsbPCMonitor or WeAct display and want an open-source Python interface. Verify your exact hardware model against the supported table first, because AX206-firmware displays are not supported at all. Skip it for macOS until issue #7 is resolved: the README badge explicitly marks that platform as having a major bug. With version-conditional dependencies in requirements.txt that vary by Python minor version, check the requirements.txt to verify which packages will be installed for your runtime.
Frequently asked questions
Which displays does turing-smart-screen-python support?
Turing Smart Screen and TURZX devices in 10 sizes from 2.1" to 12.3" are supported via both UART and USB. Additional supported brands include XuanFang 3.5", UsbPCMonitor 3.5" and 5", Kipye Qiye Smart Display 3.5", and WeAct Studio Display FS V1 at 0.96" and 3.5". AX206-firmware displays are not supported.
Does turing-smart-screen-python work on macOS?
The macOS OS badge in the README reads 'mac os (major bug)' and links to issue #7. The README does not describe a workaround, so reading issue #7 directly is necessary before attempting macOS deployment.
What Python version does turing-smart-screen-python require?
Python 3.9 or newer is required. The requirements.txt has separate version pins for Pillow and numpy across Python 3.9, 3.10, 3.11 and above 3.11, so the correct set of dependencies depends on the active Python version.
Why does turing-smart-screen-python use pycryptodome?
The requirements.txt comments state that pycryptodome is used to decrypt and encrypt frames for TURZX USB models via DES. The TURZX USB protocol uses DES-encrypted frames, and the library must replicate that encryption to communicate with the hardware correctly.
Is turing-smart-screen-python affiliated with Turing Smart Screen?
No. The README states explicitly that the project is not affiliated with, associated with, authorized by or endorsed by Turing, XuanFang, Kipye or their subsidiaries. It is an open-source alternative to the original vendor software and is not the official application.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/mathoudebine-turing-smart-screen-python)