Repository navigation
Releases: shubshub/programmers-screenshot
Release list
programmers-screenshot 0.28.0
programmers-screenshot (0.28.0) noble; urgency=medium
- --record takes a WebM of a region instead of a picture of it. The
overlay comes up with the region tool only, Capture (or Enter) starts
it, and the command exits at once printing the path it is filling, so
binding one key to --record gives start and stop on that key: running
it again stops the recording. ffmpeg does the encoding and joins
Recommends; without it, one clear error naming the package. - A red record dot sits beside Capture on the toolbar and on the floating
palette, so an ordinary screenshot run can become a recording without
starting again. It is only offered where recording would work. - While a recording runs there is a dot in the desktop's status area
carrying Stop recording -- the top bar, beside the volume and the
battery, rather than a button behind a notification's expander arrow.
It needs no extra package: StatusNotifierItem is a D-Bus interface, and
it is served over Gio. The desktop has to be listening for one, which
on GNOME means the AppIndicator extension Ubuntu ships switched on. - The recording is readable only by its owner from the first frame, and
stopping sends SIGINT so ffmpeg finalises the file rather than leaving
it truncated. --gif converts the result and keeps that instead. - Recording is X11 only. Under Wayland the one route is the portal's
screencast, which cannot begin without somebody choosing a screen in a
dialog, so a hotkey cannot start one; it refuses with a message.
-- Shubshub Thu, 17 Sep 2026 13:38:08 +1200
programmers-screenshot 0.27.2
programmers-screenshot (0.27.2) noble; urgency=medium
- The screen can be captured on a Wayland desktop that is not GNOME. The
capture knew only X11's root window and org.gnome.Shell.Screenshot, which
is GNOME's own interface, so on KDE, sway, Hyprland or COSMIC every shot
failed with "no X11 root access, and org.gnome.Shell.Screenshot is
unavailable". It now falls back to xdg-desktop-portal, which those
desktops provide. GNOME is unchanged: its interface is still tried first,
and takes the picture without a permission prompt. The file the portal
leaves behind is removed, as the Shell's already was.
-- Shubshub Thu, 10 Sep 2026 15:25:30 +1200
programmers-screenshot 0.27.1
programmers-screenshot (0.27.1) noble; urgency=medium
- A clipboard helper that dies mid-copy no longer ends the run with a
traceback after the file was saved. The copy falls back to the GTK
clipboard, the same way it already did when no helper was installed. - The version is written in one place, src/programmers_screenshot/cli.py.
build.sh, release.sh and the man page read it from there. - An internal tidy, with nothing changed in how a shot is taken: one
reader for the config files, one way to spawn a helper process, a
renderer a recipe can use without building an overlay, cli.main split
into its steps, and dead code deleted. Every suite passes unchanged. - For development: a ruff configuration, python3 tests/run.py to run every
suite, and a GitHub Actions workflow that lints, runs the suites under
Xvfb and builds the package on every push.
-- Shubshub Fri, 04 Sep 2026 23:19:34 +1200
programmers-screenshot 0.27.0
programmers-screenshot (0.27.0) noble; urgency=medium
- --dpr FACTOR (or "dpr" in a recipe) takes window.devicePixelRatio
alongside --viewport. A Claude in Chrome save made at a page zoom other
than 100% is cropped to 1/dpr of the viewport, so the width alone landed
every mark a quarter short at 125%. With both numbers the scale is exact
at 100% and at 125%, checked against dots the page drew. - The skill and --recipe-help say what a post-mortem found about Chrome
captures: no scroll in the capture batch, because a stale frame follows
one; wait two seconds after a DOM change and retry a capture timeout
once; a fresh active tab for a heavy page; no async wrapper in
javascript_tool; and how to script a nested claude --chrome -p when the
session has no Chrome tools of its own. --window is described as the
fair fallback it is. - The post-mortem and its scripts are in docs/, with a synthetic stand-in
for the captured page.
-- Shubshub Thu, 03 Sep 2026 13:48:24 +1200
programmers-screenshot 0.26.0
programmers-screenshot (0.26.0) noble; urgency=medium
- A browser tab is now a two-call job from Claude in Chrome. The skill and
--recipe-help name the handoff exactly -- one browser_batch that reads
window.innerWidth and the rectangles and saves the screenshot to disk,
then one run of --input -- and say the picture must never go through a
nested claude --chrome -p session, which is where an hour went. - --viewport WIDTH (or "viewport" in a recipe) takes window.innerWidth and
works the scale out from the picture's own width, so nothing has to open
the file to measure it. --scale still wins when both are given. - --input is quiet: no shutter, no notification and no five-minute
notification agent, because no screen was read. The path is still
printed, and the clipboard is still yours to opt out of.
-- Shubshub Thu, 03 Sep 2026 12:24:08 +1200
programmers-screenshot 0.25.0
programmers-screenshot (0.25.0) noble; urgency=medium
- A screenshot can now be described rather than taken by hand, so that
something other than a person can produce one. --recipe takes JSON naming
a region, a delay, an output path and a list of marks: boxes, ellipses,
lines, arrows, numbered step badges, labels, redaction bars and
pixelation, in the colours and sizes the toolbar already offers. Nothing
is drawn until the whole recipe has been understood, so a mistake in the
last arrow does not leave the first three baked into a half-finished
image; the message names the entry and the exit status is 2. - --recipe-help prints the whole reference, generated from the parser's own
table so it cannot go stale, and needs no display. - --region X,Y,W,H captures an area with no overlay, and --delay N waits
before the screen is read, so a menu or a hover state can be set up first.
The delay works with the overlay too. - --window TITLE captures one window whatever is stacked on top of it.
Nothing is raised and nothing is focused: under a compositor every window
is drawn to an offscreen pixmap of its own, so a completely buried window
can be photographed without disturbing it, and whatever is lying over it
stays out of the picture. --list-windows says what can be named. X11 only,
and it wants libwnck. - --input FILE annotates a picture something else took, with --scale for the
size it came out at and --origin to move where coordinates start. This is
how a browser tab is done: nothing outside a browser can address a tab, so
the browser captures the tab it means and this annotates the result, with
every coordinate the page's own. - --install-skill writes a Claude Code skill, so that a session in any
project knows the command exists and how to drive it. --uninstall-skill
takes it back. - All of it is off until switched on, in the settings window, for the same
reason the update check is: a person pressing Print Screen knows what is
on their screen and a script does not. Annotating a picture with --input
is exempt, since it reads no screen at all. - Fix: a stray copy of the file list had been pasted into the middle of the
--install-hotkey paragraph of the man page, splitting a sentence in two.
-- Shubshub Wed, 02 Sep 2026 14:20:00 +1200
programmers-screenshot 0.24.1
programmers-screenshot (0.24.1) noble; urgency=medium
- Fix: the floating palette could not be dragged onto another monitor. The
rule keeping its handle reachable was measured against whichever monitor
the pointer was on when the overlay opened, so on two screens the palette
was stuck on one of them. It is now measured against whichever monitor it
is nearest, so it moves freely and still cannot be lost off every screen. - Its tooltips and sub-tool flyouts follow it across, rather than being
positioned for the monitor it started on.
-- Shubshub Tue, 05 Aug 2026 15:30:00 +1200
programmers-screenshot 0.24.0
programmers-screenshot (0.24.0) noble; urgency=medium
- The update notice and the post-upgrade changelog are now windows rather
than desktop notifications. A notification vanishes while you are looking
somewhere else, and truncates a changelog to a couple of lines; a window
waits to be dismissed and scrolls. - The whole changelog entry is shown, rather than the first three bullets
that fitted in a notification. - The package description no longer claims there are no dialogs. There have
been since the settings window, and there are more now.
-- Shubshub Tue, 05 Aug 2026 13:10:00 +1200
programmers-screenshot 0.23.0
programmers-screenshot (0.23.0) noble; urgency=medium
- Fix: the eraser ground to a halt after a few seconds of dragging, and
recovered only when you let go. Two things grew with the length of a
stroke and multiplied: the whole swept path was repainted every frame,
and every hole made so far was punched into it again. Only the part that
moved is repainted now, and only holes that could change a pixel in it
are punched. Cost per frame no longer grows with the stroke. - Holes are also spaced by about the eraser's radius rather than every 4
pixels. They were stacked four deep for no visual gain, and holding the
eraser still used to add another on every mouse event.
-- Shubshub Tue, 05 Aug 2026 11:40:00 +1200
programmers-screenshot 0.22.0
programmers-screenshot (0.22.0) noble; urgency=medium
- Optional update check. Switch it on in the settings window and the tool
asks github.com once a day whether a newer release exists, and shows a
notification with a button to the release notes if so. Off by default:
this is the only network call the program makes. - The check runs in a process of its own after a capture has finished, so
nothing can put a network timeout between the keypress and the overlay.
It never downloads or installs anything. - Silent whenever there is nothing to say: up to date, offline, rate
limited, or a reply that does not parse. - The first run after an upgrade now reports what changed, read from the
changelog already shipped in the package. No network. Nothing on a first
install, on a downgrade, or twice for the same version. - Bookkeeping moved to its own state.json, so machine state is not mixed
into the preferences you edit.
-- Shubshub Tue, 05 Aug 2026 09:15:00 +1200