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 one command, on the branch you are already on. No pull request required:
>> 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. When the PR opens, staged files land in one managed comment — via the GitHub App, or the next uploads attach --promote. Tag a pair with --state before and --state after and they render side by side. See Attach & share for what is queued.
Already have a PR open? #
attach is the direct path. The CLI finds the pull request, uploads the files, and keeps one comment up to date:
# optimizes each image, then keeps one comment on the PR up to date
>> uploading ./before.png
>> uploading ./after.png
>> attachments comment updatedSame pairing works here: --state before and --state after render side by side — see pair a before and after.
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.