* feat: add title screen generation tooling Add local automation for capturing WinUtil in Light and Dark themes and generating the composite title-screen image. * ci: automate title screen updates Add a manual Windows workflow that compiles WinUtil, generates the Light and Dark composite, and opens an image-only pull request. * docs: update AGENTS.md and SPEC.md with title-screen generation details * fix: address review comments Tested image is correct, SHA-256 hash is identical to the previously verified output. * fix: deselect bitmap before reading capture pixels
2.3 KiB
WinUtil title screen
This tool generates the Light and Dark composite used as WinUtil's title screen in the repository README and documentation site. It opens the Tweaks tab, captures both themes, and combines them into one PNG. The two raw captures are temporary and are removed when the command finishes.
Requirements
- Windows with an interactive desktop
- uv
- WinUtil compiled and running
- An elevated PowerShell terminal
Run the commands below from tools/title-screen.
Generate and review a test image
Start WinUtil from the repository root:
.\Compile.ps1 -Run
With WinUtil still open, return to this directory in an elevated terminal and generate a test image:
uv run --locked python automate_title_screen.py --output "$env:TEMP\winutil-title-screen.png"
Open the resulting PNG and check that:
- the Tweaks tab is shown,
- the Light theme is on the upper-left side of the diagonal,
- the Dark theme is on the lower-right side, and
- no desktop background or other windows are visible.
The automation works whether WinUtil starts in Light or Dark mode. It leaves the window on the Tweaks tab in Light mode.
Automation
The title screen is updated through a manually triggered GitHub Actions workflow. When the generated image changes, the workflow opens or updates a pull request for review. It does not merge the pull request automatically.
Failed runs upload the capture log, UI Automation inspection, and available image as diagnostic artifacts for 14 days.
Tests
The tests cover theme detection and composite image generation without opening WinUtil:
uv run --locked python -m unittest discover
Troubleshooting
If WinUtil cannot be found, make sure the compiled WPF window is open and that the terminal is elevated. The script deliberately ignores editors, terminals, and browser windows that merely contain "WinUtil" in their title.
If a tab or theme control cannot be found, capture the UI Automation tree while WinUtil is open:
uv run --locked python inspect_winutil.py "$env:TEMP\winutil-inspect.txt"
The inspector opens the theme menu before recording its controls. Attach the text file when reporting a failure. It contains window and control metadata, not the generated screenshots.