A macOS menu bar app that watches your screenshot folder, tells you when a new one lands, and lets you drag it anywhere without opening Finder.
Named after Screenie — abandoned years ago, x86-only. This is a from-scratch rebuild for Apple Silicon.
- Menu bar indicator — pulses when a new screenshot lands, clears when you use it or after 30 seconds.
- Drag from the menu bar — press the icon and drag; the newest screenshot comes with your cursor as a copy.
- Gallery — click the icon for a Spotlight-style panel, newest first, grouped by day.
- OCR search — Vision OCR indexes the text inside screenshots (Korean, English, Japanese), since screenshot filenames are useless for search.
- Folders — watch any folder, switch between several, and set where macOS saves screenshots.
- Stays out of the way — indexing throttles on battery, pauses in Low Power Mode, and backs off when the machine gets hot.
macOS 14 or later, Apple Silicon only (arm64, no Rosetta fallback).
SwiftPM plus a Makefile, no Xcode project. Command Line Tools are enough.
make runmake build— compile onlymake bundle— assembledist/Sukurini.appmake sign— bundle and ad-hoc signmake run— sign, then launchmake install— install to/Applicationsmake logs— stream the app's unified logsmake clean— remove build output
Launch at login requires the app to live in /Applications or ~/Applications, so run make install first.
Ad-hoc signing is the default. Its identity changes on every rebuild, so macOS treats each build as a different app — resetting folder permissions and orphaning the login item. To avoid that, create a self-signed certificate in Keychain Access and build with it:
make install IDENTITY="Your Certificate Name"- Almost no dependencies. AppKit, Vision, system SQLite; SwiftUI only for the settings window.
libwebpis the one exception — ImageIO can decode WebP but has never been able to encode it. - WebP conversion is opt-in and verified. Lossless, ~60–70% smaller. The display's ICC profile is carried across with the mux API (macOS embeds the monitor profile in every capture, never sRGB), and each file is decoded back and compared pixel by pixel before the original is touched.
- Conversion happens before publish. The store withholds the PNG at both admission points, so the menu bar ripples once and a drag payload can never point at a file about to be deleted.
- Copy as PNG covers apps that still reject WebP (Google Docs, Figma) — same pixels, ICC profile, and filename, ~20 ms and cached. The pasteboard carries both the file and the bitmap.
- Folder watching uses a debounced kqueue
DispatchSourcewith a directory diff, not Spotlight queries, so it catches anything that appears in the folder. - Search uses FTS5 with the
trigramtokenizer andLIKE.MATCHcan't handle queries shorter than three characters, and two-character Korean searches are the common case. - The OCR index survives restarts. Text is committed per file, so interrupting the initial pass costs nothing.
Apache License 2.0 — see LICENSE. Forks are welcome, but must keep the copyright notice, state what they changed, and reproduce NOTICE wherever they show third-party notices. The name "Sukurini" is not covered by the license.
Suhun Han (@ssut)