Skip to content

Releases: smllb/qhints-rs

1.1.2

Choose a tag to compare

@github-actions github-actions released this 29 Aug 06:28

Highlights

  • New detection pipeline — single edge-based pass: Canny → dilate → connected components. Hints now land directly on the raw components ("pieces"), which detect far more cleanly — especially with a higher kernel_size (try ~6). This replaces the old text-projection + word-overlap-classification approach, which was both slow and unreliable.
  • Live pipeline debug viewer — cargo run --example preview : capture a window or the full screen, tune every knob live with sliders + exact-value inputs, toggle pipeline layers, zoom, and save annotated screenshots. This was the tool that made the new detection approach possible.
  • AT-SPI is now optional — only runs when it's in your backends config, instead of always burning a 250ms deadline up front.
    Breaking-ish changes
  • All hints are now Element (Text/Element distinction removed from the imageproc path).
  • Removed config fields: merge_gap_factor, text_height_factor, text_min_width.
  • New config fields: text_height_min, text_height_max (debug only).
  • Removed Projection word detection and word-overlap reclassification

1.1.1

Choose a tag to compare

@github-actions github-actions released this 28 Aug 19:00

1.1.1 — 2026-08-28

Changed

  • Replaced the double max/min-of-RGB Canny with a single fused contrast channel (max − min/2): one Canny pass now covers both dark-on-light edges and bright saturated text (e.g. orange on white) that a plain max-of-RGB channel missed. Faster than the double-channel run while keeping the same detection.
  • Everything is now done in a single pass.

Removed

  • min_channel_edges config field — no longer needed, the fused channel always recovers bright colored text.
  • MIN_CHANNEL_EDGES benchmark environment toggle.

v1.1.0

Choose a tag to compare

@smllb smllb released this 13 Aug 04:02

qhints-rs v1.1.0

Keyboard-driven UI navigation for Linux (X11). Scans a focused window, assigns keyboard labels ("hints"), and lets the user click, hover, drag, or select elements by typing those labels.

This release focuses on detection performance and improved recovery of colored text.


Highlights

  • Approximately 30× faster detection. The imageproc detection pipeline (grayscale conversion, Canny edge detection, text projection, dilation, and connected-component labeling) is now parallelized with rayon, distributing work across all available CPU cores. Detection latency is reduced from approximately one second to roughly 35–45 ms per window.
  • Colored-text recovery. A secondary Canny pass on the min(R,G,B) channel — executed in parallel with the max pass — recovers bright colored text, such as orange text on a white background, that the previous single-channel detector missed. Controlled by the min_channel_edges option.
  • Downscaling. detection_scale now accepts values below 1.0, permitting a trade-off between precision and speed.
  • Screenshot benchmark suite. Screenshots may be placed in test-assets/screenshots/, named with thresholds (e.g. 30_min_60_max.png), and cargo test asserts the resulting hint count. UPDATE_BASELINES=1 records the current values as baselines.

Changes since v1.0.0

Performance

  • Parallelized imageproc pipeline (grayscale → Canny → combination → projection → dilation → components).
  • Independent max/min Canny passes on separate threads.
  • Parallel connected-component labeling (run-length encoding with union-find).
  • OCR backend reuses the parallel helpers.

Detection quality

  • min_channel_edges recovers bright colored text (enabled by default).
  • detection_scale downscaling (0.1–4.0) for the speed/quality trade-off.

Tooling

  • Screenshot benchmark tests with filename-encoded thresholds and --update-baselines.
  • Benchmark pipeline-stage image outputs (luma, edges, bfs_debug, annotated).

Modes

Mode Key Behavior
Normal hint keys Click element
Hover Ctrl + hint Move mouse without clicking
Double-click Alt Toggle then type hint
Text select / Pick start → pick end to select text
Drag Shift Pick source → pick destination to drag
Hunt dev option Re-scan after every action, Ctrl to quit

Requirements

  • X11 session
  • xdotool, libgtk-3-0
  • AT-SPI D-Bus service (at-spi-dbus-bus.service)
  • Rust 1.87+ (to build from source)

Install

Download the binary and make it executable:

chmod +x qhints-rs
sudo mv qhints-rs /usr/local/bin/

Or build from source:

cargo build --release
# with OCR: cargo build --release --features ocr

GitHub · Documentation

v1.0.0

Choose a tag to compare

@smllb smllb released this 28 Jul 02:30

qhints-rs v1.0.0

Keyboard-driven UI navigation for Linux (X11). Scan a window's elements, assign keyboard hints, and click/hover/drag/select by typing the labels.


Features

  • AT-SPI backend — walks the accessibility tree via async D-Bus for fast, accurate element detection
  • Imageproc backend — Canny edge detection + BFS connected components + text line projection as fallback
  • OCR backend (optional) — ML-powered word detection with BFS gap-filling (--features ocr)
  • GTK overlay — transparent popup with Cairo-rendered hint labels, drop shadows, per-character coloring
  • Spatial zone grid — hints assigned by screen position (QWERTY rows mapped to zones)
  • Spotlight mode — dark overlay with radial holes around matching hints
  • Per-app rules — custom Canny thresholds, scale factors, and AT-SPI filters per application
  • Config file — JSON at ~/.config/qhints/config.json merged over defaults

Modes

Mode Key Behavior
Normal hint keys Click element
Hover Ctrl + hint Move mouse without clicking
Double-click Alt Toggle then type hint
Text select / Pick start → pick end to select text
Drag Shift Pick source → pick destination to drag
Hunt dev option Re-scan after every action, Ctrl to quit

Requirements

  • X11 session
  • xdotool, libgtk-3-0
  • AT-SPI D-Bus service (at-spi-dbus-bus.service)
  • Rust 1.87+ (to build from source)

Install

Download the binary and make it executable:

chmod +x qhints-rs
sudo mv qhints-rs /usr/local/bin/

Or build from source:

cargo build --release
# with OCR: cargo build --release --features ocr

What's Changed

  • Feat/text line word hints by @smllb in #1
  • Feat/stable base by @smllb in #4
  • Feat/stable base by @smllb in #5
  • Fix/hint text centering by @smllb in #6
  • Visual markers by @smllb in #11
  • Polish/marker visuals by @smllb in #12
  • fFix/edge orientation classifier by @smllb in #13
  • fVisuals by @smllb in #14
  • Fix spotlight rectangle using center instead of edges for Element children by @smllb in #15
  • Docs/mdbook by @smllb in #16
  • Feat/no default ocr by @smllb in #17
  • fix: draw first text selection marker inside left edge of child box by @smllb in #19

Full Changelog: https://github.com/smllb/qhints-rs/commits/1.0.0