A macOS menu bar app that uploads images and copies the link to your clipboard.
Pinup is written in Go, with its windows drawn by MyGo's native UI.
- Upload by dropping files on the menu bar icon, or with global shortcuts for the clipboard and for screenshots.
- Copy links as Markdown, a plain URL or an HTML
<img>tag. - Upload to any S3-compatible bucket or HTTP upload API, and switch between as many hosts as you add.
- Convert images to JPEG or HEIC, and strip location data before upload.
- Browse, search and re-copy past uploads in History.
- Script uploads from Shortcuts, Raycast or the shell with
pinup://URLs.
- macOS 14 or later
- Go 1.27 or later
Download the disk image for your Mac, Apple silicon (arm64) or Intel (amd64), from the latest release, and drag Pinup to Applications. Pinup checks for a new version once a day and installs it when you agree; Check for Updates… in the menu checks now.
To build it yourself:
go tool mygo build
open build/darwin-arm64/Pinup.appMyGo builds and ad-hoc signs Pinup.app, and a disk image beside it. A copy you build doesn't update itself.
On first launch, add a host in Settings > Hosts and press Test Upload to check it.
When a batch finishes, its links go to the clipboard, one per line. Open past uploads with Menu > Show History (⌘Y). Both shortcuts can be changed in Settings.
See Usage for retries, failed uploads, History actions and where Pinup stores its data.
A host is a named place uploads go. You add hosts in Settings, each from one of two providers, and pick one in Settings > Hosts or the menu's Upload To:
- S3-compatible storage, such as AWS S3, Cloudflare R2, Aliyun OSS, Tencent COS and MinIO
- Custom HTTP API, where you set the request and where to find the link in the response
See Hosts for every field, with example setups.
open "pinup://upload-clipboard"
open "pinup://screenshot"
open "pinup://upload?path=~/Desktop/shot.png" # repeat path= for more files
open "pinup://retry" # retry failed uploads
open "pinup://history"
open "pinup://settings/hosts" # or general, shortcutsgo test ./... # run the tests, each in a temporary folder
scripts/dev.sh # run with live reload, with data of its ownSee Development for launch flags, environment variables, the project layout and how releases are made.


