scrnshot

ShareX for the Mac. Capture, optimize, upload to a server you own, and the share URL lands on your clipboard. One universal binary, no cloud account.

Role
Author & maintainer
Stack
Go, macOS, CLI, TUI
Source
https://github.com/prasul/scrnshot

Highlights

  • Pluggable destinations in one config file: FTP, FTPS, SFTP, S3-compatible (R2, B2, Wasabi, MinIO), or any HTTP endpoint, chosen per capture with `-dest`
  • S3 signing is AWS Signature V4 written against the Go standard library, no AWS SDK, so the binary stays small
  • The interactive menu uses raw terminal mode and ANSI instead of a TUI framework, no tview or tcell pulled in
  • Video transcoding runs on macOS's built-in `avconvert`, so ffmpeg is not required
  • Universal binary that runs native on Intel and Apple Silicon, released tag-driven through GoReleaser

On Windows, everybody who shares screenshots reaches for the same tool. You press a key, drag a box around part of the screen, and by the time you let go the image has uploaded and the link is already on your clipboard. That tool is ShareX, and it is one of those small utilities that quietly reshapes how you work once it is there.

The Mac has no free equivalent that uploads to a server you actually own. The good options want you to sign up for their cloud and park your images on their infrastructure. I did not want a cloud account. I wanted the ShareX loop, pointed at my own box. So I built it.

What it is

A capture, optimize, upload pipeline for macOS. Take a screenshot or hand it a screen recording, scrnshot shrinks the file, uploads it to a destination you control, renames it to something unguessable, and copies the share URL to your clipboard. It ships as a single universal binary that runs natively on both Intel and Apple Silicon, which matters to me because my daily machine is an Intel iMac and half the Go tooling world has quietly forgotten those exist.

Your server, whatever shape it takes

The part I am happiest with is that scrnshot does not care where “your own server” lives. One config file describes named destinations, and you pick one per capture. It speaks FTP, FTPS, SFTP, S3-compatible storage like Cloudflare R2, Backblaze B2, Wasabi and MinIO, or any plain HTTP endpoint that hands back a URL. Point it at a VPS you already pay for, or an object-storage bucket, and it just works.

Fewer dependencies, on purpose

There is a habit that runs through all my tools, and scrnshot is where it shows most clearly: if a feature can avoid a heavy dependency, it should. Three decisions came out of that.

The S3 uploader implements AWS Signature V4 by hand, using only the Go standard library. Importing the official AWS SDK would have been faster to write and would have doubled the size of the binary for one signing function. So I wrote the signature.

Video transcoding uses avconvert, which already ships inside macOS, so the recommended path needs no ffmpeg at all. You record with the built-in Cmd-Shift-5 recorder and hand scrnshot the file. An optional ffmpeg recorder is still there for people who want it, but nobody has to install anything.

The interactive menu is built on raw terminal mode and ANSI escape codes rather than a TUI framework. No tview, no tcell. It is a little more work to write, and it keeps the binary lean and dependency-free, which for a tool you install with a single curl is the whole point.

How it started, how it is going

It began life as a small SFTP uploader for my own screenshots. The GitHub description still says exactly that, which is now a quiet lie, because the thing grew. It is on its fourth release, has a real tag-driven build pipeline, and does considerably more than move a file over SSH. The earlier shape is still in the repository if you go looking, the original old-main and old-tui files are sitting right next to the current ones, which is the closest a codebase gets to keeping baby photos.

It is not a big project and it will never be famous. It is the tool I reach for several times a day, it does one loop extremely well, and it belongs entirely to me. Some of the best software you ever write is the kind only you will use.