Skip to main content

PlotRuler

A translucent desktop overlay for accurately reading (X, Y) values off a graph shown on screen. Calibrate once against the known plot coordinates (click at two points on each axis, and type their labeled values), then hover to read coordinates anywhere else, and click to copy.

The graph itself is not rendered by PlotRuler — it is whatever other app is on screen underneath the overlay (a browser, a PDF viewer, a plotting window, etc.) PlotRuler is a live translucent overlay that reads through it, not a screenshot workflow.

How it works

Calibration and readout all live in absolute screen coordinates (physical pixels), not coordinates relative to the overlay window. That is what makes the overlay feel stable: you can drag or resize the window and the calibrated graph box stays glued to the graph underneath wherever it sits on screen. Windows and macOS get this natively; Linux/X11 uses the same absolute-coordinate model.

Each axis is calibrated independently with two reference points — click once at a known pixel on the axis, type its labeled value, then repeat for a second point. PlotRuler fits a line through those pairs (linear by default, optional log), so it works for any graph where the scale is straight-line or log. Everything persists to disk (calibration, window position, number format), so the overlay reopens already calibrated.

Features

  • Hover to read — a crosshair and a (X, Y) readout follow the cursor once calibrated, showing the values under it.
  • Click to copy — a click copies the hovered coordinate as e.g. (12.5, 4.0) and flashes a confirmation.
  • Number formats — plain, scientific, engineering, E-notation, SI (auto/1..6 via the number keys, or the tray menu).
  • Calibration — Ctrl+N starts a fresh one; Ctrl+Z undoes a step; Esc cancels. Each axis gets its own linear/log choice.
  • Custom frameless title bar — translucent, with minimize, maximize, and (on no-tray systems) a close button.
  • Tray resident — sits in the system tray; tray click toggles the overlay.

Platform comparison

Windows macOS Linux/X11
Absolute screen coordinates ✅ native ✅ native ✅ (same model)
Overlay readout through the graph ✅ ✅ ✅
Move / resize the window ✅ native ✅ native ✅ Qt-driven
Calibration survives window move/resize ✅ ✅ ✅
Global hotkey (Win+Alt+P / Cmd+Alt+P) ✅ RegisterHotKey ⏳ ⏳ deferred (XGrabKey)
System tray ✅ ✅ ⚠️ depends on DE
Build/ship .exe (PyInstaller) ⏳ untested pip / PyPI wheel

Wayland is not supported yet. Wayland forbids absolute screen coordinates by design and GNOME refuses the workarounds, so the overlay model cannot work there without a window-relative rewrite. Linux requires an X11 session for now; see LINUX_PLAN.md.

Notes on the platform table:

  • macOS is untested. The architecture is OS-portable (absolute screen coordinates, Qt overlay), and Qt provides a native macOS path, but no macOS build or hotkey code exists in this repo yet. Treat the macOS column as a design feature, not a shipped one.
  • Global hotkey — Windows-only today. On Linux the tray (or Ctrl+N/Esc and the title-bar buttons) are the controls; an X11 XGrabKey hotkey is a follow-up.
  • System tray — always present on Windows; on Linux it depends on the desktop environment. GNOME has no tray by default unless the AppIndicator and KStatusNotifier extension is installed. When no tray exists, PlotRuler shows a close button and quits on minimize/close/Esc rather than hiding into an unreachable state.

Development

conda activate plotruler
python -m plotruler        # run the app
pytest                     # run tests
ruff check .               # lint
ruff format .              # auto-format

Linux

Linux requires an X11 session (Wayland is deferred — see above). Qt 6.5+ also needs the xcb-cursor system library for the X11 backend, which pip cannot install:

# Debian / Ubuntu
sudo apt install libxcb-cursor0
# Fedora / RHEL
sudo dnf install xcb-util-cursor
# Arch
sudo pacman -S xcb-util-cursor

Install and run (no frozen binary on Linux):

pip install plotruler       # or, from source: pip install -e . then plotruler
plotruler

PyPI/wheels cannot install system libraries like libxcb-cursor; without it the app aborts at first launch. Install it first (commands above). The build/install_linux.sh helper also checks for it and fails fast with your distro's package name.

Releases & publishing

PlotRuler ships through two channels:

Channel Artifact Who uses it
PyPI (pip install plotruler) wheel (.whl) everyone, all platforms; the Linux and pip path
GitHub Releases PlotRuler.exe Windows users who don't want pip

Publish a Python release to PyPI:

pip install build twine
./build/publish_pypi.sh --check   # first: upload to TestPyPI and verify
./build/publish_pypi.sh           # then: upload to PyPI

Requires TWINE_USERNAME/TWINE_PASSWORD (or a ~/.pypirc), and an account with upload rights for the plotruler name. The package supports Python 3.10+ (down to PySide6 6.11's own floor).

The Windows .exe is separate and must be built on Windows.

Build a stand-alone Windows executable

python -m pip install pyinstaller
python build/build.py

Produces a single-file, windowed dist/PlotRuler.exe with a tray icon and version metadata. The app bundles Qt, so the exe is ~46 MB but needs no Python install to run. This is the artifact you attach to a GitHub release.

See AGENTS.md for development conventions.

License

MIT License (see LICENSE).

(This was generated almost entirely by AI under human direction, so likely lacks the human authorship required for copyright in the US and is therefore in the public domain. MIT license applies anywhere else.)

Metadata

Release files for plotruler 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plotruler 0.1.3
File Size Uploaded
plotruler-0.1.3.tar.gz 61.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for plotruler 0.1.3
File Interpreter ABI Platform
plotruler-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 104.6 kB

Release files / plotruler-0.1.3.tar.gz

Download URL plotruler-0.1.3.tar.gz
Size 61.8 kB
Tags Source
SHA-256 checksum
How to use checksums
bf7ed9dac25ed1b3ea946fb4ea5c1b4f273245aa5758ab090fa4d15b78609b72
BLAKE2b-256 checksum
How to use checksums
f7ee7f3be1019c669a914640757fd259a820c4d4f169a32a2f29e1843d3b4c12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release files / plotruler-0.1.3-py3-none-any.whl

Download URL plotruler-0.1.3-py3-none-any.whl
Size 42.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6097ff44c035c2a9d8ec8505b4f386d225d7f67148b9dc2855b897409337d1c0
BLAKE2b-256 checksum
How to use checksums
413dddf75b622ca2e36346cab47db05c3c98b5a98e1c9adfd96a8545692ded6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.5

2 release files

0.1.4

2 release files

This release

0.1.3 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page