fix(gui, screencast, videocut): Phantom Spirit 120 Vision EVO support confirmation, BulkLCD screencast fix, GIF support, and video cut zoom/pan - #271
Open
alan7383 wants to merge 5 commits into
Conversation
…rt, and add zoom/pan in video cut
alan7383
force-pushed
the
fix/grandvision-screencast-videocut
branch
from
August 13, 2026 23:03
1aeaf4a to
0cb34d1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR resolves several issues identified while testing and confirming hardware support for the Thermalright Phantom Spirit 120 Vision EVO (
87AD:70DB, 3.95-inch IPS 480×480 screen,Wire.BULK, PM 4, SUB 4A1LF10V):Hardware Support Confirmation for Phantom Spirit 120 Vision EVO:
doc/TESTERS_WANTED.mdfor the Phantom Spirit 120 Vision.README.md,doc/REFERENCE_DEVICES.md,doc/TESTERS_WANTED.md).Fix BulkLCD Screencast Wire Format:
LCDHandler.on_screencast_frame,build_screencast_framewas called withoutprofile=device.profile. On BulkLCD devices requiring JPEG compression, this caused frames to fall back to uncompressed RGB565 (460KB/frame), breaking live hardware screencasting.rebuild_preview,_render_and_send, and_DeviceRenderObserver) while Screencast is active to prevent the default theme from overriding the screencast stream.spectaclefallback capture support on KDE Wayland with output file readiness polling.Native Animated GIF Background Support:
.gifto_VIDEO_EXTS,_VIDEO_CANDIDATES, and theme save/load allowlists so animated GIFs can be loaded directly into background/media playback.QImageinstances inQtRenderer.from_raw_rgb24.Video Cutter (
UCVideoCut) Fixes & Zoom/Pan Enhancements:-s 480x480distortion with properforce_original_aspect_ratioand center crop).Fix Gallery / Custom Background Override Persistence Across App Restarts:
LCDHandler._cleanup_device,StopVideowas called unconditionally upon GUI close, which wipedDeviceSettings.background_pathtoNoneintrcc.json. Addedkeep_override=TruetoStopVideoso tearing down the GUI does not delete user preferences.RestoreLastTheme, check ifbackground_pathis set and replayPlayVideoon startup so custom and cloud gallery video backgrounds resume playing immediately instead of falling back to the base theme background.trcc doctorUdev Path Detection Fix:health.py:check_udev_rules_linux(), search for99-trcc-lcd.rules(the canonical filename installed by distro packages and_udev.py) as well as standard distro/usr/lib/udev/rules.d/paths, fixing a false-positive[WARN]warning on system health checks.Changes by Component
src/trcc/ui/gui/lcd_handler.py:profile=device.profiletobuild_screencast_frame.rebuild_preview()and_render_and_send()when screencast is active.keep_override=TruetoStopVideoduring_cleanup_device.src/trcc/ui/gui/trcc_app.py:_on_bus_frame_sentwhen screencast is active.src/trcc/ui/gui/uc_video_cut.py:src/trcc/ui/screen_overlay.py:spectaclecommand support with file existence check for KDE Wayland.src/trcc/core/commands/_helpers.py,src/trcc/services/display.py,src/trcc/services/theme.py:.gifextension to video candidate and save/load sets.src/trcc/core/commands/theme.py:PlayVideofor persistedbackground_pathinRestoreLastTheme.src/trcc/core/commands/device.py:keep_overrideparameter toStopVideo.background_pathwhenkeep_override=True.src/trcc/adapters/render/qt.py:QImageinfrom_raw_rgb24.src/trcc/adapters/diagnostics/health.py,src/trcc/adapters/system/linux.py:99-trcc-lcd.rulesand distro/usr/lib/udev/rules.d/in health check candidate paths.src/trcc/app.py,src/trcc/core/commands/device.py:RenderAndSendand_DeviceRenderObserverwhen screencast region is set.README.md,doc/REFERENCE_DEVICES.md,doc/TESTERS_WANTED.md:87AD:70DB).Checklist
87AD:70DB)python -m py_compile)trcc doctorhealth check passes cleanly (0 fail / 0 warn)