Take ten screenshots a day for a month and the Desktop holds 300 files called Screenshot 2026-09-12 at 14.03.22.png. The one you want is the stack trace from last Tuesday, or the booking reference, or the Slack message someone later deleted. The name tells you when you took it, which is the one thing you do not remember.
So you open Quick Look and arrow through thumbnails, or rename screenshots by hand, one at a time. Or you select all and drag them into a folder called old desktop, where they are just as unfindable.
How the flow names each screenshot
When a new screenshot lands on the Desktop, Watchflows reads its text with Apple's Vision framework, hands that text to an AI model that writes a three to six word name, and renames the file to its creation date plus that name: 2026-09-12-slack-deploy-failed-error.png. Then it moves the file to ~/Pictures/Screenshots/. With Apple Intelligence as the model, the image and its text never leave your Mac.
The flow, node by node
Desktop is a Directory Changed trigger on ~/Desktop, Watch Subdirectories off, Event Types Created. Leave Wait for iCloud download on if Desktop and Documents sync to iCloud; the flow then fires once the file is complete on this Mac, not on a placeholder.
Screenshot? is a Condition with two case-insensitive rules joined by AND: fileName starts with Screenshot, and fileType equals Images. Screen recordings are Videos, so they pass by. If your Mac is not in English, or you changed the screenshot name prefix, put your prefix in the first rule.
Extract Text (OCR) reads {{filePath}} with Recognition Level on Accurate. It runs on your Mac with no network and no AI provider, and puts the words on extractedText. Language Correction is on, which suits screenshots of prose; turn it off if you mostly capture code or serial numbers, where dictionary correction mangles the text.
Name it is an AI Prompt node. The prompt asks for a short name that says what the screenshot shows, app or website first, no date, no extension, and the single word screenshot when there is no readable text. Temperature is 0.2, because a file name is not the place for variety. Output Schema requires one string, name, so {{result.name}} is always there for the next node.
Pick Apple Intelligence as the Provider after you import the flow. It is text-only, which is fine because OCR already turned the image into text. Its guided generation constrains the model to your schema as it writes, so the answer is valid by construction, and it costs nothing per call. It needs macOS 26 on an Apple-silicon Mac with Apple Intelligence turned on. Ollama works too if you would rather run a model you picked.
Rename File takes Base Name {{result.name}}.{{fileExtension}} and two Rename Operations: Slugify in kebab-case, then Add Date from the file's created date, ISO format, at the start. The extension is split off before the operations run and put back after, so Slugify never touches .png. Slugify also drops any quotes or stray punctuation the model adds.
Move File sends the renamed file to ~/Pictures/Screenshots/. The trailing slash keeps the new name, and Create Directories makes the folder the first time. Overwrite Existing is off here (Move File's default is on), so two screenshots of the same error land as ...-error.png and ...-error-1.png.
How it behaves in practice
- The file appears a few seconds late. With the floating thumbnail on, macOS writes the screenshot when the thumbnail slides away. It writes a hidden
.Screenshotfile first and renames it; the trigger skips hidden files and treats the rename as a new file, so the flow runs once. - Renaming inside the watched folder does not loop. The rename makes the Desktop report a "new" file under the new name. Watchflows ignores a flow's own file changes for ten seconds, and the new name no longer starts with
Screenshoteither. - No text, no guess. A screenshot of a photo or a diagram has nothing for OCR to read, so the model answers
screenshotand the file becomes2026-09-12-screenshot.png. - Very long screenshots can overflow the model. Apple Intelligence has a small context window, and a full-page capture of a long article can exceed it. The AI Prompt node reports that on its Failure outlet; left unwired, the run fails and the screenshot stays on the Desktop untouched.
- Privacy follows the provider. OCR text from screenshots includes whatever was on screen: messages, account numbers, a password field someone forgot to mask. A local model keeps it on the Mac. A cloud provider receives it.
Rename the 300 screenshots already on your Desktop
The trigger only reacts to new files. For the ones already there, use Folder Sweep: switch the flow on, and Watchflows sees the Desktop is not empty and asks what to do with them.
Choose Preview, or press the eye beside the run button in the canvas toolbar to skip the card. Every file on the Desktop runs through the flow and nothing on disk changes. Screenshots are read and named for real; everything else stops at the Condition. While it works, the canvas shows Previewing Desktop · 147 / 312, and after three files it adds the time left.
The review lists every file before and after. Each screenshot's change reads Move + Rename, with its new name in its new folder. Everything the flow does not touch, the PDFs and folders you keep on the Desktop, sits under Left alone. Read down the names. Where the model got one wrong, uncheck it (Space toggles a row), then Commit, or ⌘↩. Commit makes exactly the checked changes and does not call the model again. A file that changed since the preview is skipped and marked Needs attention.
In the flow's run history the whole sweep is one row, Swept Desktop · 300 files, and that row carries Undo sweep. Renames and moves can both be undone, so if the names are not what you wanted, the Desktop goes back to how it was.
Variations
- Give screenshots their own folder. In the screenshot toolbar (Shift Command 5), Options, Other Location, pick a folder, and point the trigger at it. The Desktop stays clear even before the flow runs.
- Let a vision model look at the picture. With an Ollama vision model, set the AI Prompt node's Image to
{{filePath}}, delete the Extract Text (OCR) node, and change the prompt to ask what the image shows instead of reading its text. It can name a diagram or a photo, and it is slower per file. - Keep them where they are. Delete Move File. The screenshots stay on the Desktop with names you can search for.
Paste this into the Flow Builder to get the same flow:
Watch my Desktop for new screenshots, files whose name starts with Screenshot. Read the text in each with OCR, have AI write a 3 to 6 word file name with the app first using an output schema with a name field, rename the file to its creation date followed by that name in kebab case, and move it to ~/Pictures/Screenshots.