Skip to content

Releases: shubshub/programmers-screenshot

programmers-screenshot 0.28.0

Choose a tag to compare

@shubshub shubshub released this 17 Sep 01:39

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

Choose a tag to compare

@shubshub shubshub released this 10 Sep 03:27

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

Choose a tag to compare

@shubshub shubshub released this 04 Sep 11:22
6e21839

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

Choose a tag to compare

@shubshub shubshub released this 03 Sep 01:53
3fddb21

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

Choose a tag to compare

@shubshub shubshub released this 03 Sep 00:39
f91c9c0

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

Choose a tag to compare

@shubshub shubshub released this 01 Sep 23:44
d923290

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

Choose a tag to compare

@shubshub shubshub released this 07 Aug 02:18
658c40f

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

Choose a tag to compare

@shubshub shubshub released this 05 Aug 02:26
f7500b2

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

Choose a tag to compare

@shubshub shubshub released this 05 Aug 01:52
b6accaf

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

Choose a tag to compare

@shubshub shubshub released this 05 Aug 01:32
52b162c

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