Agent skill

Qt Testing

by toonoumi in toonoumi/FreeCCR

Capture and visually inspect FreeCCR's PySide6/Qt GUI widgets using screenshots.

AGPL-3.0Auto-check passedMedia & Creative

Install Qt Testing

skills CLI
$ npx skills add toonoumi/FreeCCR --skill qt-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install toonoumi/FreeCCR qt-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/toonoumi/FreeCCR.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/qt-testing .claude/skills/qt-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
qt-testing
GitHub stars
181
Token cost
~1.3k tokens
SKILL.md length
265 words
Files
2 (incl. scripts)
Skills in repo
1
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Capture and visually inspect FreeCCR's PySide6/Qt GUI widgets using screenshots.

  • Works in 4 steps: Create/obtain the FreeCCR widget to test… → Call capture_widget(widget, "description") → Read the saved screenshot with the Read… → …
  • Asked to verify GUI rendering
  • SKILL.md covers Quick Start, Core Script, Output Location and Workflow, plus 5 more sections
  • Runs Python scripts from its folder; calls python

What it does

Qt Testing is an agent skill from toonoumi/FreeCCR. Capture and visually inspect FreeCCR's PySide6/Qt GUI widgets using screenshots. Use when asked to verify GUI rendering, test widget appearance, check layouts, theming/QSS, or visually inspect any FreeCCR widget (image preview, sliders panel, curve editor, thumbnail list, dust panel, export dialog, main window). Enables Claude to "see" the Qt interface by capturing offscreen screenshots and analyzing them with vision.

Its SKILL.md is about 1.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/qt_capture.py`).

It sits in Media & Creative, covering Theming and dark mode. It works with Python. The repository describes itself as: Free physics-based film negative converter — batch RAW processing, Free For Everyone. The licence is AGPL-3.0.

When your agent uses it

  • Asked to verify GUI rendering
  • Test widget appearance
  • Visually inspect any FreeCCR widget (image preview

Example prompts

  • “/qt-testing”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Create/obtain the FreeCCR widget to test (see examples below)
  2. Call capture_widget(widget, "description")
  3. Read the saved screenshot with the Read tool
  4. Analyze with vision to verify correctness (layout, spacing, theming, labels)

What it can do on your machine

Read from SKILL.md and the folder at commit db1b679. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Qt Testing loads about 1.3k tokens when it runs. Until then it costs about 108 tokens; SKILL.md has 265 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~108
When it runs · the whole SKILL.md, loaded when a task matches
~1.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from toonoumi/FreeCCR at commit db1b679, republished under its AGPL-3.0 licence (© toonoumi). 265 words, ~1,339 tokens.

Download SKILL.mdSave it as .claude/skills/qt-testing/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
qt-testing
description
Capture and visually inspect FreeCCR's PySide6/Qt GUI widgets using screenshots. Use when asked to verify GUI rendering, test widget appearance, check layouts, theming/QSS, or visually inspect any FreeCCR widget (image preview, sliders panel, curve editor, thumbnail list, dust panel, export dialog, main window). Enables Claude to "see" the Qt interface by capturing offscreen screenshots and analyzing them with vision.

Qt GUI Testing (FreeCCR)

Capture screenshots of FreeCCR's Qt widgets for visual inspection without displaying windows on screen, then read the image back and critique it.

Quick Start

python
# Capture any widget
import sys
sys.path.insert(0, ".claude/skills/qt-testing")   # so `from scripts.qt_capture import ...` works
from scripts.qt_capture import capture_widget, init_qt, setup_freeccr_path

setup_freeccr_path()          # puts repo root + src/ on sys.path
app = init_qt()               # creates the QApplication

path = capture_widget(my_widget, "description_here")
# Then read the screenshot with the Read tool

Core Script

Run scripts/qt_capture.py or import helpers from it:

bash
# Standalone self-test (renders a throwaway widget, saves a PNG)
python .claude/skills/qt-testing/scripts/qt_capture.py

Helpers exposed by scripts/qt_capture.py:

  • setup_freeccr_path() — add the repo root and src/ to sys.path (call before importing FreeCCR modules).
  • init_qt(offscreen=False) — create/return the QApplication. Pass offscreen=True to force the offscreen Qt platform (matches FreeCCR's headless tests); the default Windows platform also works.
  • capture_widget(widget, "desc") — render offscreen and save a PNG, returns the path.
  • capture_and_click(widget, x, y, "desc") — click the child at (x, y), then capture.

Output Location

All screenshots save to: <repo>/scratch/.qt-screenshots/ (git-ignored).

Naming: {YYYY-MM-DD.HH-MM-SS}_{description}.png

Workflow

  1. Create/obtain the FreeCCR widget to test (see examples below)
  2. Call capture_widget(widget, "description")
  3. Read the saved screenshot with the Read tool
  4. Analyze with vision to verify correctness (layout, spacing, theming, labels)

FreeCCR Widget Cheat-Sheet

Import after setup_freeccr_path(). None require images loaded; the ccr_backend singleton is created on import.

python
from core.ccr_backend import ccr_backend          # ensures the global singleton exists

from ui.main_window import MainWindow              # MainWindow()              — full app shell
from widgets.sliders_panel import SlidersPanel     # SlidersPanel(None)        — Kelvin/tint/exposure controls
from widgets.image_preview import ImagePreview     # ImagePreview(None)        — central canvas + toolbar
from widgets.curve_editor import CurveEditor       # CurveEditor(None)         — tone curve tool
from widgets.thumbnail_list import ThumbnailList   # ThumbnailList(lambda *a: None)  — sidebar (needs a callback)
from widgets.tether_banner import TetherBanner     # TetherBanner(None)        — tether status strip

# Widgets that need collaborators — pass lightweight stubs:
from widgets.dust_panel import DustRemovalPanel    # DustRemovalPanel(main_window, image_preview)
from widgets.export_dialog import ExportSettingsDialog  # ExportSettingsDialog()  — reads ccr_backend.images

Example: Capture the sliders panel

python
import sys
sys.path.insert(0, ".claude/skills/qt-testing")
from scripts.qt_capture import capture_widget, init_qt, setup_freeccr_path

setup_freeccr_path()
app = init_qt()

from core.ccr_backend import ccr_backend           # singleton ready
from widgets.sliders_panel import SlidersPanel

panel = SlidersPanel(None)
panel.resize(360, 700)                              # give it a sensible size before grab()
path = capture_widget(panel, "sliders_panel_default")
print(f"Inspect: {path}")

Example: Capture the full main window

python
import sys
sys.path.insert(0, ".claude/skills/qt-testing")
from scripts.qt_capture import capture_widget, init_qt, setup_freeccr_path

setup_freeccr_path()
app = init_qt()

from ui.main_window import MainWindow

win = MainWindow()
win.resize(1280, 800)
path = capture_widget(win, "main_window_empty")
win.close()
print(f"Inspect: {path}")

Interaction Pattern

To interact with widgets (click buttons, etc.):

python
# Find widget at coordinates (from vision analysis)
target = widget.childAt(x, y)

# Trigger it directly (not mouse events)
if hasattr(target, 'click'):
    target.click()
    QApplication.processEvents()

# Capture result
capture_widget(widget, "after_click")

Key Points

  • Uses Qt.WA_DontShowOnScreen - no window popup.
  • Renders identically to on-screen display (verified upstream).
  • Call setup_freeccr_path() before importing FreeCCR modules; import ccr_backend first so the singleton exists.
  • Give widgets a size (resize/setFixedSize) before grab() — an unsized widget may render at its minimum.
  • Call processEvents() after interactions before capture.
  • Use childAt(x, y) to map vision coordinates to widgets.
  • Direct method calls (.click()) work; simulated mouse events don't.
  • DustRemovalPanel requires a main_window and image_preview; pass real instances or minimal stubs exposing the attributes it reads.

© toonoumi, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (scripts) in .claude/skills/qt-testing of toonoumi/FreeCCR.

  • SKILL.md
  • scripts/qt_capture.py

Open the folder on GitHubat commit db1b679

Compare with similar skills

Qt Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Qt Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Qt Testing this skilltoonoumi/FreeCCR181—~1.3kAutomated safety check: PassAGPL-3.0
Great Docspymc-labs/pathmc132—~2.7kAutomated safety check: PassMIT
Building Streamlit Custom Components V2iusztinpaul/designing-real-world-ai-agents-workshop513—~2.8kAutomated safety check: PassApache-2.0
UI UX Pro Maxfutureboard/futureboard-studio106—~5.6kAutomated safety check: PassMIT
PosterlyChenruishuo/posterly415—~4.6kAutomated safety check: NotesAGPL-3.0
Create Remotion GeistMarve10s/Better-Fullstack752—~1.4kAutomated safety check: PassMIT

Similar skills

  • Great Docs

    pymc-labs/pathmc

    Generate documentation sites for Python packages with Great Docs.

    132 GitHub stars~2.7k tokensUpdated 6 days ago
    Frontend & DesignAuto-check passed
  • Building Streamlit Custom Components V2

    iusztinpaul/designing-real-world-ai-agents-workshop

    Builds bidirectional Streamlit Custom Components v2 (CCv2) using st.components.v2.component.

    513 GitHub stars~2.8k tokensUpdated 4 mo ago
    Frontend & DesignAuto-check passed
  • UI UX Pro Max

    futureboard/futureboard-studio

    Comprehensive design guide for web, mobile, and desktop applications.

    106 GitHub stars~5.6k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Posterly

    Chenruishuo/posterly

    Create or revise academic conference posters in HTML/CSS and export print-ready PDFs.

    415 GitHub stars~4.6k tokensUpdated 2 days ago
    Media & CreativeAuto-check: notes
  • Create Remotion Geist

    Marve10s/Better-Fullstack

    Create Remotion videos using the Geist design system aesthetic.

    752 GitHub stars~1.4k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Reimagine It Audit

    Kayforkind/reimagine-it

    Design Health — runs 19 deterministic quality checks on HTML output.

    203 GitHub starsUsed in 1 repo~756 tokens
    Media & CreativeAuto-check passed

Works with

Questions about Qt Testing

What does Qt Testing do?

Capture and visually inspect FreeCCR's PySide6/Qt GUI widgets using screenshots. Qt Testing is an agent skill from toonoumi/FreeCCR. Capture and visually inspect FreeCCR's PySide6/Qt GUI widgets using screenshots.

When should I use Qt Testing?

Qt Testing fits situations like: asked to verify GUI rendering; test widget appearance; visually inspect any FreeCCR widget (image preview.

How do I install Qt Testing in Claude Code?

Run `npx skills add toonoumi/FreeCCR --skill qt-testing -a claude-code`. Or copy the skill folder (.claude/skills/qt-testing in toonoumi/FreeCCR) into .claude/skills/qt-testing in your project. Claude Code loads it when a task matches its description.

How do I install Qt Testing in Codex?

Run `npx skills add toonoumi/FreeCCR --skill qt-testing -a codex`. Or copy the skill folder (.claude/skills/qt-testing in toonoumi/FreeCCR) into .agents/skills/qt-testing in your project. Codex loads it when a task matches its description.

Can I use Qt Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add toonoumi/FreeCCR --skill qt-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/qt-testing, .gemini/skills/qt-testing, .github/skills/qt-testing and .opencode/skills/qt-testing in your project.

What does Qt Testing need to run?

Going by SKILL.md and its folder, Qt Testing needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: Python 3.

Does Qt Testing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Qt Testing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Qt Testing use?

Qt Testing is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Qt Testing use?

About 1.3k tokens (SKILL.md is roughly 5.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Qt Testing?

Skills that share tags, products or a category with Qt Testing: Great Docs (pymc-labs/pathmc, 132 stars), Building Streamlit Custom Components V2 (iusztinpaul/designing-real-world-ai-agents-workshop, 513 stars), UI UX Pro Max (futureboard/futureboard-studio, 106 stars) and Posterly (Chenruishuo/posterly, 415 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Qt Testing?

toonoumi (a GitHub user) maintains it in toonoumi/FreeCCR, which has 181 GitHub stars. The repository was last updated on October 7, 2026.

Source: toonoumi/FreeCCR on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.