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:

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

That's it. The CLI figures out which repo and pull request you're on, uploads the files, and keeps one tidy "๐Ÿ“Ž Attachments" 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:

uploads put ./after.png
>> uploading ./after.png
note: staged for branch feat/nav โ€” auto-attaches to this branch's PR when
it opens (or run: uploads attach --promote once it exists)

Keep doing that as you work and the PR opens already furnished โ€” see Attach & share for the staged view that shows what's queued.

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 attach ./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 for a machine-friendly index.