Overview
Docs
Put screenshots and other media on GitHub PRs, issues, and code reviews with one command.
What it does #
Getting an image into a GitHub comment is easy for a person: you drag it in. For an agent or a script, there is no drag-and-drop. uploads.sh fills that gap: it hosts your file at a stable public URL and posts it to the right place on GitHub for you.
The everyday flow is two commands:
# optimizes each image, then keeps one comment on the PR up to date
>> uploading ./before.png
>> uploading ./after.png
>> attachments comment updatedThat's it. The CLI figures out which repo and pull request you're on, uploads the files, and keeps one managed comment on the PR up to date. Tag a pair with --state before and --state after and they render side by side in that comment — see pair a before and after.
Start before the PR exists #
You don't need a PR open to start uploading — on a branch, it stages automatically:
>> uploading ./after.png note: staged for branch feat/nav — auto-comments to pull request when opened (or run: uploads attach --promote once it exists)
Keep doing that as you work and the PR opens with screenshots already attached — see Attach & share for the staged view that shows what's queued.
Install & sign in #
Install the CLI globally, then sign in once:
uploads login opens a browser so you can approve the sign-in (GitHub or a magic link). You'll need a workspace first — create your own with a linked GitHub account, or get invited to an existing one by an admin. Once you're in, the CLI mints a workspace token and saves it, so you only do this once per machine.
Prefer not to install anything? Every command works as a one-off with npx:
Explore the docs #
Attach & share →
Post files to a PR or issue, get a URL for any file, capture a screenshot, and annotate it.
GitHub App →
Recommended. Comments post as the uploads-sh bot and staged screenshots promote themselves when the PR opens.
Comment config →
Commit .uploads.yml to a repo to control image width, inline caps, and a note on its comment.
Set up your agent →
Install the agent skills and the MCP server so your agent uploads on its own.
Reference →
List, delete, and check usage, plus the things worth knowing before you rely on it.
Plans & limits →
Storage and file-size caps per plan, and how they compare with GitHub's.
Bring your own bucket →
Point a workspace at your own Cloudflare R2 bucket instead of the shared one. In preview.
Agent walkthrough →
A guided setup for getting a coding agent to upload screenshots and video to GitHub.