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:

uploads put ./after.png
>> 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:

uploads attach ./before.png ./after.png
# optimizes each image, then keeps one comment on the PR up to date
>> uploading ./before.png
>> uploading ./after.png
>> attachments comment updated

Same 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:

npm install -g @buildinternet/uploads
uploads login

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:

npx @buildinternet/uploads put ./after.png
uploads doctor # check everything is wired up

Explore the docs #

Looking for deeper material like the REST API, enrollment internals, self-hosting, or operator docs? It all lives in the GitHub repository. Agents can also read /llms.txt (index) or /llms-full.txt (one-file guide).