Repository navigation
Releases: josh-vanorden/shotscribe
Release list
1.7.3
- Naming takes seconds, not tens of seconds. Each title was a whole
Claude Code session: every hook the user has set up ran on every call, and
the model's two seconds sat inside eight to twenty-seven. Title calls now run
with hooks off and save no session. On this Mac, capture to name went from
12 seconds to 4 for the same shot. Two side effects, both wanted: a hook is
no longer handed the text of every screenshot, and no transcript of that
text is left in the Claude projects folder any more. A user's sign-in and
chosen model still apply, and aclaudetoo old for either flag is asked
the old way. - The same screen gets the same name. The titler's instructions now say
how to choose, not just how long: prefer the words the screen uses for
itself, name the subject rather than the app or a person on it, no "Slide",
"Diagram" or "Screen" unless the screen says so, no slide numbers, and the
plainest reading wins. An ampersand becomes the word "and" before the name
is cut, so "Guardrails & Permissions" and "Guardrails And Permissions" are
one name. Measured on the same 25 captures twice over: the old instructions
agreed with themselves on 16 titles, the new on 20. - Offline, the headline is the title. Without an AI connected, a capture
with one line set clearly bigger than the rest near the top — a slide's
title, a dialog's heading, a page's h1 — is named from that line, read off
the positions the text pass already has, with a slide's number dropped.
Pictures of one size of text, a terminal or a chat, keep the keyword
titles. A small slide's title had also been mistaken for a menu bar and
stripped as chrome; the bar rules now ask where the line starts and how
tall it is. - The capture card stays through a drag, whatever lands meanwhile. A name
arriving mid-drag re-armed the card's hard forty-second stop, so a drag
held long enough saw the card leave under the cursor. Found by a Codex
read-only review of the day's commits. - A title the model gave is never thrown away for an exit code. Twice in
three daysclaudeprinted a good answer and exited non-zero, and the app
took the exit code as the verdict, logged the answer as the failure's
reason, and used the offline name. The reply is now read from the CLI's own
result envelope: the answer is the answer whatever the process exited with,
and an expired session or a rate limit is still reported in its own words. - The capture card: naming you can see, a name in colour, a tile you can
drag. While the title is being written the card moves — pulsing dots on
the badge, a shimmer where the name will go — instead of a still
"Naming…". When the name lands it fades in, in green; a shot that got the
generic word because nothing could be read is set in grey, under a badge
that says so. The tile keeps its picture through the rename (it used to
blank for a beat when the file's path changed under it) and is a drag
source: drag it into Finder, Slack, a browser's upload field or Jira and
the file on disk arrives, never a bag of pixels. Draggable from the moment
the card appears — the drop reads the file's name as it is then, so a drag
that outlasts the naming delivers the renamed file — and the card stays
put for as long as a drag lasts. - The words in a shot, findable in Spotlight at once. A switch in the File
tab writes each capture's significant words — the title's, the tags, then the
distinct words the text read — into the file's Spotlight keywords, so a plain
Spotlight search for what a shot showed finds it within seconds instead of
the hours or days Apple's own image-text pass takes. Off by default: the
words travel with the file on AirDrop and in an archive. Switching on writes
them to every shot in the library from the text the index already holds;
switching off takes them off again. - Every capture is read at the accurate level, and a small one is doubled
first. Two kinds of shot came back titled "Screenshot" from the fast text
pass in one day: a wide org chart with five-pixel names (75 characters of
noise), then five small captures of slides, 280 pixels wide with the title
in plain sight (0 to 36 characters). The fast pass is gone. Every picture is
read at Vision's accurate level — 40 to 200 ms on real captures, against a
titler that takes seconds — and a picture under 1,000 pixels on its longer
side is read at twice its size, which turned 171 characters of the wrong
alphabet into 797 clean ones on one of the slides. The chart titles as
"Company Org Chart"; the slides as what they say.
1.7.2 — send the picture to a chat
- Send the picture to a chat. "Send to Claude" copied a
/screenshot "<path>"line, which is right for a Claude Code session on this Mac and
useless in claude.ai or the Claude app — their chats run in a container that
has never seen your disk, so nothing arrived. There are two destinations now,
named by what they can see: Send to Claude Code copies the line as
before; Send the picture to a chat copies the image itself (with the
file's name, never its path), so ⌘V in any chat attaches it. Both are on the
landing zone's Send tile, the capture card and every shot's right-click, and
either can be the click default.
1.7.1 — an interrupted rename is retried
- An interrupted rename is retried. A rename now records itself as in
flight before the slow part — reading the picture, asking for a title — and
clears the record on every outcome. If ShotScribe quits mid-rename, the
capture used to join the backlog silently; now it is picked up and named the
next time watching starts, in the app and inshotscribe watchalike, ahead
of the backlog sweep, and by the titler you chose rather than the offline one. - Fixed before it shipped:
shotscribe watchwould have crashed at startup.
The retry was first written as a bare top-levelawait, which traps at
dispatchMain(); it runs in a task now, and the watcher arms before the
retry so a capture landing meanwhile is not lost. - The titler presets say which are verified.
docs/titlers.mdstates, for
each preset, a real run on this Mac or an honest "unverified". - Packaging leaves the CLI and the MCP server findable. The universal build
now builds the host's slice last, so.build/releasestill holds
shotscribeandshotscribe-mcpafterwards. - Removed: the menu bar popover in
ShotScribeUI.ShotScribeChrome.menuBar
— the 340pt panel the menu bar item opened through 1.6.6 — and
ShotScribeView'sonOpenWindow:are gone; 1.7.0 replaced the panel with a
menu and nothing used it.ShotScribeSurface(chrome: .hosted)is unchanged.
A host that built its own popover on.menuBarshould mount
ShotScribeMenuinstead.
1.7.0 — Dock, menu bar, or both
- Dock, menu bar, or both. Settings (⌘,) has Show in Dock and Show in
menu bar. Both are on by default, so an upgrade changes nothing, and they
can never both be off — the last one ticked is disabled rather than refused.
Switching is live, no restart. In the menu bar only, launch is silent: no
Dock icon appears even for a moment, no window opens, and the Library opens
from the menu (or by launching ShotScribe again). Launch at login moved here
too. - A real menu. The menu bar icon opens a menu, not a panel, in order of
whose job it is: Go to Library first; pause, and rename the capture that
was missed; the last capture into the editor, or under your kept watermark
(Watermark ▸ Apply / Remove, no editor); the five most recent, each with
Edit, Reveal and Undo Rename; then Settings and Quit. The folder and AI
controls it used to repeat are where they always also were, in the Library. - Go to Library. The window has a name, and the capture card's button and
the menu use it. - The folder and the tags, from the top of the Library. The status capsule
is a menu now — the four usual folders, a picker, Finder, pause — and a Tags
capsule beside it shows whether new captures are filed and under how many
words, with the switch, a search by tag, and the vocabulary behind it. - A lighter editor. The picture is resampled once per size instead of on
every mouse move, a dragged pixelation no longer queues a full render per
event, and the frame you see is drawn by the same code that writes the file. - Universal. The app builds for Apple silicon and Intel. Through 1.6.6 the
release carried only the build host's slice (arm64), so it never launched
on an Intel Mac that macOS 13 still supports, and nothing said so.
package-app.shnow builds one slice per architecture, joins them with
lipo, and stops if either is missing. All 232 tests pass on the Intel slice
under Rosetta. - The README is a landing page. The reference moved verbatim into
docs/;
the README shows the app, then says what it touches. - A site.
docs/index.html, ready for GitHub Pages frommain/docs:
one file, four images, no third-party requests.
1.6.6 — the audit stamp
- An audit stamp. The watermark panel's third kind, beside Text and Logo:
a signature block with your name, when the picture was taken, when you saved
it (the moment of the save, not of opening the panel), which Mac, and a
SHA-256 of the original picture's pixels — the same for any lossless copy,
so an auditor holding the original can check it. Each line is a checkbox;
the times carry their zone; the digest readsoriginalwhile ShotScribe
still has the untouched capture andas keptonce a redaction has been
burned in. It can be the standing watermark ("Use on every edit"). - Edit with ShotScribe. What was "Edit the Image" says whose editor it is,
everywhere it appears. - The right-click menu, in order of who does it. What ShotScribe adds
first (edit, send to your assistant, rebuild as code, tag, restore the
name), what the Mac already does next (Finder, Preview, Share), the bin last.
1.6.5 — Edit the Image
- Edit the Image. ShotScribe has its own editor now — the landing zone's
mark-up tile opens it (Preview is still one right-click away). Pixelate or
black out a region, boxes, ellipses, lines, arrows (drag the middle handle to
bend one), highlights, labels, and step numbers that count up as you click
— bubble, square, chevron, flag or pin. Every mark stays an object until Save:
select it, move it, resize it, recolour it, delete it. Colour is black by
default, then white, then the palette; size is a slider. Undo and redo. - Edits stay editable. Saving writes a flat picture for everyone else and
keeps the untouched capture and the marks beside it, so opening the same
shot again puts everything back where it was. Revert to original is
honest: it is offered only while nothing has been redacted, because a
redaction is burned in on purpose and there is no lifting it. - Frame, crop, resize. Corners, margin and shadow as sliders; the margin
filled with a colour, a two-colour gradient (six shipped combos and + for
your own, by hex or the colour wheel) or a picture of your own. Crop to what
matters — the rest stays in the edit and can come back — and save at a
smaller size. - Watermark. Your name or logo over the picture: a corner, the centre, or
tiled across everything. With ink on Auto it is set in white or near-black
against whatever is under it, with a soft halo; a logo becomes a silhouette,
and a logo exported on a white square is keyed off that square rather than
drawn as a box. Use on every edit keeps one watermark and starts every
new edit with it on. - Fonts. Labels, step numbers and watermark text can be set in the system
face, Rounded, Serif, Mono, or any family installed on the Mac; a face that
is not installed stands down to the system one and says so. - Backlog sweep. Captures that landed while ShotScribe was not running —
still calledScreenshot …— can be named after the fact: the Folder tab
and the window's "never named" link propose names three at a time, and you
approve, drop or apply. Never automatic, never a file you named yourself. - Light or dark, your call. A moon or sun beside the search field flips
the whole app; right-click it to follow the Mac again. - Fixed: the watcher was re-titling ShotScribe's own output. Every renamed
file came back through the watcher and was read again before the name check
said no — 257 wasted titler calls in one log. The name check runs first now.
ShotScribe 1.6.4
Every screenshot, named — the moment it lands, by the AI you already use, and it stays a file in your folder.
1.6.4 gives the rename a moment you can see, and fixes three things that were traps rather than rough edges.
- A card when a capture lands. It slides up from the bottom of the screen about a second after the shot arrives, says Naming…, then fills in the name and widens to fit it — the name is the point, so it is never cut short. On the card: the picture, the tags it was filed under, and marks for Open ShotScribe, Send to your assistant, Finder and Preview, plus a bin. Click a tag to take it off, or + Tag to add one. It waits eight seconds from the moment the name arrives and pauses while your cursor is on it.
Switch it off in the Rename tab — and beside it, a switch that mutes macOS's own thumbnail, which appears before the rename and so can only ever show an unnamed file. - Send to now carries both AI jobs. "Rebuild as code" was a separate tile doing a different job to the same destination. It lives under Send to's right-click now, along with which assistant to use and which of the two a plain click performs. Six tiles in the landing zone instead of seven.
- Tags come off again. A tag could only ever be added — every menu greyed out the ones a shot already had, so the first guess was permanent. Now a ticked tag comes off when you pick it, anywhere. "File as" is called Tag, and + New Tag is the first thing in the menu.
- The tag list can be emptied. Removing the last word used to put all sixteen shipped ones straight back, so clearing it never finished. Remove all does it in one gesture and Shipped list is the way back.
- A bin on every day heading, and the word it eats says how many go with it — "Delete 12", not "Delete".
- Fixed: the bin went dead after one delete. It never reset after firing, and in a scrolling list macOS hands that state to whatever takes the slot, so every later click was swallowed until something forced a redraw.
Install: open the DMG and drag ShotScribe to Applications. Signed, notarized by Apple and stapled; macOS 13 or later. Upgrading keeps every setting and every name.
ShotScribe 1.6.3
Every screenshot, named — the moment it lands, by the AI you already use, and it stays a file in your folder.
1.6.3 is a morning of shaping the window around how it actually gets used.
- The landing zone is yours to arrange. Right-click any tile → Arrange tiles…: drag to reorder, the minus puts a tile away, and under each one is the count of how often you have actually used it, so the row can lead with what earns its place. Reset restores the shipped row and keeps the counts. The tally is a number in your own Mac's preferences — nothing counts it anywhere else and nothing leaves the machine.
- A carousel instead of a grid. Each day lays out on one line as overlapping cards; the card under the cursor rises out of the row and the ones after it step aside. It is what the window opens on. Everything a tile did it does: click, right-click, drag out, the bin, tags. There are two views now, Carousel and List.
- The list shows the picture. Hovering a row shades it and brings up the capture itself beside it, at the carousel's card size. The list was names and matched text, which says nothing about what a shot looked like.
- A welcome, once. The first run says what ShotScribe is and asks the one thing that has to be right before anything else means anything: which folder it watches, and whether it names what lands there. The inspector now starts closed, and opens on Folder.
- Smaller: one drag hint everywhere and no file paths in tooltips; the click default set from a landing-zone tile is marked with a green halo.
Install: open the DMG and drag ShotScribe to Applications. Signed, notarized by Apple and stapled; macOS 13 or later. Upgrading keeps every setting and every name.
ShotScribe 1.6.2
Every screenshot, named — the moment it lands, by the AI you already use, and it stays a file in your folder.
1.6.2 is the security pass and the two things a day of use asked for.
- Right-click any screenshot — a tile, a list row, the landing zone, the popover — for everything the landing zone does: Reveal in Finder, Mark up in Preview, Share, Send to your assistant, Rebuild as code, File as, Restore, the bin.
- A click has a default. Right-click a landing-zone tile and choose Set as default; from then on a plain click on any screenshot does that (Reveal in Finder to start). The default tile wears a green halo so there is no guessing.
- The seven-track security pass, twelve fixes, none High — the reports are in
docs/security/2026-09-13/andSECURITY.mdcarries the summary. What changes in use: a saved API key is refused over plainhttpto a non-local host (the AI tab says so); an endpoint URL must behttp(s);forcerenames captures only; the MCP server honours tagging-off; a watcher that stops takes its queued scan with it.
Install: open the DMG and drag ShotScribe to Applications. Signed, notarized by Apple and stapled; macOS 13 or later. Upgrading keeps every setting and every name.
ShotScribe 1.6.1
Every screenshot, named — the moment it lands, by the AI you already use, and it stays a file in your folder.
1.6.1 is the same evening's second release: what a day of using 1.6.0 turned up.
- Mark up in Preview. A tile with Preview's own icon on the landing zone, and a line in every shot's menu: the capture opens in macOS's pencil.
- Tags as a filter. A strip under the grid head lists every tag in use with its count — click one to isolate, a second to narrow to both, Show all (or Esc) to come back. A tag chip on any tile does the same. By tag in the sort menu groups the grid by filing.
- The bin is found. Over an image it sits on a dark scrim, so it reads on a light capture too.
- The window keeps up. A capture the watcher names appears at once; it used to wait for the next launch.
- The list view has the landing zone it was missing.
- Security sweep: a custom command's first token must be a plain name or a path before any shell lookup; a plain-
httpendpoint on a remote host is flagged in the AI tab. No secrets, no new logging of screen text; permanent deletes happen only under the Keep tab's own choice.
Install: open the DMG and drag ShotScribe to Applications. Signed, notarized by Apple and stapled; macOS 13 or later. Upgrading keeps every setting and every name.