❝ Nico

Notes

How do I rename Mac screenshots with a local model?

A vision model running on your own Mac can name a screenshot from what is in it. The commands, the prompt that makes the names usable, and what to watch out for.

Pull a vision model with Ollama and have it read each screenshot before you file it. ollama pull qwen2.5vl:3b is a 3.2 GB download; ollama run qwen2.5vl:3b ./shot.png suggest a filename answers in a sentence. Wrap that in a folder watcher and naming stops being your job. Nothing is uploaded.

The steps

  1. Pull a model that can see. A text model cannot do this at all. ollama pull qwen2.5vl:3b to start — it is the smallest of the family and enough for screenshots, which are mostly text and interface.
  2. Test it on one image. Ollama takes the path as an argument: ollama run qwen2.5vl:3b ./shot.png what is in this image?
  3. Constrain the answer, or the names are useless. This is the entire difference between a tidy folder and a worse mess. Ask for exactly what a filename is:
    ollama run qwen2.5vl:3b ./shot.png \
      "Name this screenshot. Lower case, hyphens, no extension,
       at most six words, no dates, no quotes. Reply with the name only."
    A model asked to "describe the image" will hand you a paragraph.
  4. Point a watcher at the folder. Apple's own statement of where to look: "By default, screenshots save to your desktop with the name 'Screen Shot [date] at [time].'" A LaunchAgent with WatchPaths is the no-dependency way to run your script when something lands there.
  5. Rename and move, never overwrite. Keep a date prefix so the folder still sorts chronologically, and if the target name exists already, add a counter rather than replacing anything. A naming script that can lose a file is not worth running.

Which size to pull

TagDownloadReasonable for
qwen2.5vl:3b3.2 GBInterface screenshots, mostly text
qwen2.5vl:7b6.0 GBCharts, dense dashboards
qwen2.5vl:32b21 GBOnly if you have the memory spare

All of them take text and images and carry a 125K context window. Measure the time per image on ten of your own screenshots before pointing anything at a thousand: it depends on the model and the Mac, and anyone quoting you a single number has measured a different machine.

What goes wrong

  • Names that are descriptions. "a-screenshot-of-a-web-browser-showing" is what you get without the constraint in step three.
  • Screenshots of code. A vision model reads the language and the symbol names and often writes a better filename than you would. Screenshots of a mostly-empty dialog are where it has nothing to work with.
  • Two shots of the same screen, thirty seconds apart. They will get names that differ by a word, which is correct and still unhelpful. The date prefix is what separates them.
  • The watcher firing mid-write. A screenshot being written is briefly a partial file. Wait for the size to stop changing before reading it.

Why this one is worth keeping local

Not on principle — on content. A screenshot is whatever was on the screen: an invoice, a dashboard with revenue on it, a DM, somebody else's name and address. The folder is a collection of exactly the things you were careful about elsewhere. The repositories that rank for this question all offer "local Ollama or ChatGPT" as a switch, and for this particular folder the switch has an obvious setting.

Nico's showcased version is this job as a kept tool: it looks at the picture, writes the filename you would have written, moves it — and because Nico drives Ollama as well as the coding CLIs, nothing in the loop needs a network.

← All notes