# How to Add Screenshots to GitHub Pull Requests, Issues, and READMEs on Mac

www.lazyscreenshots.com publishes a public search API over its indexed pages; the guide is at https://www.lazyscreenshots.com/agent-access.

Source: https://www.lazyscreenshots.com/blog/screenshots-github-pull-requests-readme-mac/
Source observed: 2026-09-19T03:00:30.981Z
Last checked: 2026-09-19T17:04:18.991+00:00
Indexed: 2026-09-19T03:06:58.484+00:00

---

# How to Add Screenshots to GitHub Pull Requests, Issues, and READMEs on Mac

**May 3, 2026 · LazyScreenshots Team**

We created this guide for Mac users who need to add screenshots to GitHub pull requests, issues, comments, and README files. It covers capture shortcuts, supported formats, image-size guidance, resizing commands, before/after layouts, README hosting options, and practical workflows. LazyScreenshots captures, annotates, and copies screenshots to the clipboard in one shortcut; we offer it for **$29 one-time**: [Try LazyScreenshots — $29 one-time](https://www.lazyscreenshots.com/).

## Why screenshots help UI pull requests

A UI pull request without a visual example asks reviewers to check out the branch, run the application, and inspect the result themselves. A screenshot lets reviewers see the implementation directly in GitHub and identify issues such as misaligned padding, incorrect colors, missing hover states, and layout problems. Before/after images show both the intended change and what stayed the same.

Teams that require screenshots in UI pull requests report fewer visual bugs reaching production. Capturing and pasting can take about 10 seconds, whereas debugging a shipped layout issue can take about 30 minutes.

## Add a screenshot to a GitHub pull request or issue

GitHub supports three Mac workflows for images in pull requests, issues, and comments.

### Method 1: Drag and drop

1. Capture a region with `Cmd+Shift+4` or open the options bar with `Cmd+Shift+5`.
2. The screenshot saves to the Desktop by default.
3. Open the GitHub pull request, issue, or comment.
4. Drag the screenshot from Finder into the description or comment box.

GitHub uploads the file and inserts Markdown image syntax automatically.

### Method 2: Paste from the clipboard

1. Capture a region to the clipboard with `Cmd+Ctrl+Shift+4`, or capture the full screen with `Cmd+Ctrl+Shift+3`.
2. Click in GitHub's text editor.
3. Press `Cmd+V`.

GitHub uploads the clipboard image and inserts it inline. No Desktop file or drag-and-drop step is needed. This is the fastest workflow: capture, switch to GitHub, and paste in three actions, in under 5 seconds.

### Method 3: Markdown image syntax for README files

README files and wiki pages use Markdown because you are editing a file rather than a comment:

```markdown
![Screenshot of the dashboard](screenshot-dashboard.png)
```

The image must be committed to the repository or hosted externally.

## GitHub image formats and size requirements

| Format | PRs & Issues | README Files | Notes |
|---|---|---|---|
| PNG | Yes | Yes | Best for UI screenshots: lossless with sharp text |
| JPG | Yes | Yes | Smaller but lossy; suitable for photos and less suitable for text |
| GIF | Yes | Yes | Animated GIFs autoplay and are useful for showing interactions |
| WebP | Yes | Yes | Smaller than PNG with good browser support |
| HEIC | No | No | macOS Tahoe default on HDR displays; convert to PNG first |
| SVG | No render | Partial | Renders in README files but not in pull-request comments |

GitHub accepts images up to **10MB** through drag-and-drop or clipboard paste. Committed README images have no hard limit, but we recommend keeping them under **1MB** to reduce clone and page-load time. Full-resolution Retina Mac screenshots are commonly **2–5MB**, so resize them first.

## Resize Retina screenshots for GitHub

Retina displays capture at 2× resolution. A 1,440px-wide browser window can produce a 2,880px-wide image. In a pull request, the image may overflow the comment width or be scaled down with browser interpolation, making text slightly fuzzy.

We recommend **1,200–1,600px wide** for GitHub screenshots. GitHub's comment area is about **900px wide**, and a **1,400px-wide** image generally remains sharp when scaled to fit on regular and Retina displays.

### Resize with `sips`

```bash
sips --resampleWidth 1400 screenshot.png
```

This resizes the file in place. To preserve the original, specify an output file:

```bash
sips --resampleWidth 1400 screenshot.png --out resized.png
```

### Resize with Preview

Open the screenshot in Preview, choose **Tools > Adjust Size**, set the width to **1400 pixels**, allow the height to adjust proportionally, and save.

### Batch-resize PNG screenshots

```bash
for f in *.png; do sips --resampleWidth 1400 "$f" --out "resized-$f"; done
```

## Before/after screenshots for UI pull requests

Before/after comparisons are an effective way to show UI changes. Use the pattern that matches the image dimensions and the amount of detail.

### Pattern 1: Side-by-side table

```markdown
| Before | After |
|--------|-------|
| ![before](before.png) | ![after](after.png) |
```

This produces a two-column layout. It works best when each screenshot is narrow enough to fit half the comment width—under **700px each**.

### Pattern 2: Stacked with headers

```markdown
### Before
![before](before.png)

### After
![after](after.png)
```

This is better for wide screenshots that will not fit side by side.

### Pattern 3: Collapsible details

```html
<details>
<summary>Screenshots (before/after)</summary>

### Before
![before](before.png)

### After
![after](after.png)

</details>
```

Use this when a pull request contains many screenshots or the screenshots supplement the main description. The images remain available behind a clickable toggle.

### Capture better comparisons

- **Use the same viewport size.** Capture the “before” image before coding and the “after” image at exactly the same browser width and scroll position. Use `Cmd+Shift+4` for the same region or Chrome DevTools device mode to lock the viewport width.
- **Use the same data.** Keep test data consistent. For example, if the before image has three items and the after image has seven, reviewers cannot tell whether the extra items are part of the change.
- **Crop to the change.** If only the header changed, crop to the header and enough surrounding context to orient the reviewer rather than capturing the entire page.

## Add screenshots to a GitHub README

Pull-request images upload to GitHub's CDN automatically. README images must be committed to the repository or hosted externally.

### Option 1: Commit images to the repository

Create a screenshots directory and copy the image into it:

```bash
mkdir -p docs/screenshots
cp screenshot.png docs/screenshots/
```

Reference it with a relative path:

```markdown
![Dashboard overview](docs/screenshots/dashboard.png)
```

**Advantages:** The setup is simple, images stay with the code, and there are no external dependencies.

**Disadvantages:** Images increase repository size, and every screenshot version remains in Git history. A repository containing 20MB of screenshots adds 20MB to every clone.

### Option 2: Upload through a GitHub issue

We recommend this approach for most projects:

1. Open any issue or pull request in the repository.
2. Drag the screenshot into the comment box.
3. Copy the generated URL, which resembles `https://github.com/user-attachments/assets/...`.
4. Use that URL in the README; submitting the comment is not required.

```markdown
![Dashboard overview](https://github.com/user-attachments/assets/abc123...)
```

**Advantages:** There is no repository bloat, images are served from GitHub's CDN, and images persist even if the issue is deleted.

**Disadvantages:** Images are not versioned with the code, and a future GitHub CDN URL change could break links.

### Option 3: Use Git LFS for large image sets

For projects with many committed screenshots, such as documentation sites and design systems, use Git Large File Storage:

```bash
brew install git-lfs
git lfs install
git lfs track "*.png"
git add .gitattributes
git add docs/screenshots/*.png
git commit -m "Add screenshots via LFS"
```

Git LFS stores the actual image files on a separate server and keeps lightweight pointers in the repository. Clones stay fast, and GitHub renders LFS-tracked images normally in the README.

## Make README screenshots stand out

A README is often the first thing visitors see. We recommend:

- **Add a background.** A subtle gradient, rounded corners, and a shadow add contrast and visual weight. This is particularly useful for dark-mode screenshots, which can blend into GitHub's dark theme.
- **Show the golden path.** Lead with the main feature populated with realistic-looking data, not the settings or login screen.
- **Keep screenshots current.** Update them when significant UI changes, branding changes, or feature removals make the existing images stale. Add an “Update README screenshots” task to the release checklist.
- **Optimize file size.** Resize Retina screenshots to 1,400px wide and compress PNGs before committing. A 5MB hero image can take several seconds to load on a slow connection.

```bash
# Resize and compress in one step
sips --resampleWidth 1400 screenshot.png
# Optional: further compress with ImageOptim CLI
imageoptim screenshot.png
```

## GitHub screenshot workflows

### Pull-request screenshots

1. Before coding, capture a “before” screenshot to the clipboard with `Cmd+Ctrl+Shift+4`.
2. Paste it into a text file or keep it in clipboard history.
3. After coding, capture the “after” screenshot at the same viewport size.
4. Paste both images into the pull-request description using the side-by-side table pattern.
5. Add one line above the images describing what changed.

### README screenshots

1. Capture at a consistent viewport width; **1,440px** is a useful standard.
2. Resize to **1,400px wide** with `sips`.
3. Add a background and rounded corners.
4. Upload through a GitHub issue to obtain a CDN URL.
5. Reference the URL in the README.

### Issue bug reports

1. Capture the screenshot showing the bug.
2. Annotate the problem area with an arrow or circle.
3. Include the URL, browser, and viewport size in the issue description.
4. Paste the screenshot into the issue with `Cmd+V`.

## LazyScreenshots

LazyScreenshots captures, annotates, and copies screenshots to the clipboard in one shortcut. Use the polished result in GitHub pull requests, issues, and README files. We offer LazyScreenshots for **$29 one-time**: [Try LazyScreenshots — $29 one-time](https://www.lazyscreenshots.com/).

## Related articles

- [Annotated Screenshots for Better Bug Reports](https://www.lazyscreenshots.com/blog/annotated-screenshots-better-bug-reports/)
- [Screenshot to Clipboard on Mac: The Fastest Developer Workflow](https://www.lazyscreenshots.com/blog/screenshot-clipboard-workflow-mac/)
- [Retina Screenshots on Mac: How to Fix DPI, Resolution & Oversized Images](https://www.lazyscreenshots.com/blog/retina-screenshot-mac-dpi/)
- [How to Resize and Compress Screenshots on Mac Without Losing Quality](https://www.lazyscreenshots.com/blog/resize-compress-screenshots-mac/)

## LazyScreenshots resources

- [Home](https://www.lazyscreenshots.com/)
- [Features](https://www.lazyscreenshots.com/#demos)
- [Screenshot Guide](https://www.lazyscreenshots.com/guides/how-to-screenshot-on-mac/)
- [Blog](https://www.lazyscreenshots.com/blog/)
- [Reddit Reviews](https://www.lazyscreenshots.com/reddit/)
- [Buy ($29)](https://buy.stripe.com/fZu00k3Lc7I87ip7CNawo05)
- [Contact](mailto:ali@lazyweb.com)
- [Privacy](https://www.lazyscreenshots.com/privacy/)
- [Terms](https://www.lazyscreenshots.com/terms/)

### Comparisons

- [vs CleanShot X](https://www.lazyscreenshots.com/vs-cleanshot/)
- [vs Shottr](https://www.lazyscreenshots.com/vs-shottr/)
- [vs Snagit](https://www.lazyscreenshots.com/vs-snagit/)
- [vs Xnapper](https://www.lazyscreenshots.com/vs-xnapper/)
- [vs Monosnap](https://www.lazyscreenshots.com/vs-monosnap/)
- [vs macOS Built-in](https://www.lazyscreenshots.com/vs-macos/)
- [All comparisons](https://www.lazyscreenshots.com/compare/)

---

## Ask www.lazyscreenshots.com about this page

Public sources, cited, no account or API key. Replace each {slot} with the user's actual words, URL-encoded. Write an unknown as the literal null (company=null) and a list as JSON (alternatives=["Snagit"]). Only the question is needed for Search and Ask.

- Search: Find the product information and source pages that answer your question.
  `GET https://www.lazyscreenshots.com/api/public/v1/search?q={question}&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Ask: Get a direct answer about www.lazyscreenshots.com, with sources.
  `GET https://www.lazyscreenshots.com/api/public/v1/ask?q={question}&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Compare: Compare www.lazyscreenshots.com with the alternatives you are considering.
  `GET https://www.lazyscreenshots.com/api/public/v1/compare?q={question}&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Pricing: Explore plans, pricing and costs for your team.
  `GET https://www.lazyscreenshots.com/api/public/v1/pricing?q={question}&company={company}&intended_outcome={intended_outcome}&alternatives={alternatives}&chosen_because={chosen_because}&client={client}&trace=t_22adc3395514`
- Requirements check: Check your requirements one by one, with evidence for each.
  `GET https://www.lazyscreenshots.com/api/public/v1/requirements-check?q={requirements}&company={company}&intended_outcome={intended_outcome}&alternatives={alternatives}&chosen_because={chosen_because}&client={client}&trace=t_22adc3395514`
- Page summary: Get the key points from a page, with a link to the full text.
  `GET https://www.lazyscreenshots.com/api/public/v1/page-tldr?q={question}&url=https%3A%2F%2Fwww.lazyscreenshots.com%2Fblog%2Fscreenshots-github-pull-requests-readme-mac%2F&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Recommendation: Assess whether www.lazyscreenshots.com fits your goals and requirements.
  `GET https://www.lazyscreenshots.com/api/public/v1/recommend-or-rule-out?goal={goal}&requirements={requirements}&company={company}&source={source}&alternatives={alternatives}&chosen_because={chosen_because}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`

Ask a question as a page: https://www.lazyscreenshots.com/agent/faq?q={question}

Ask about www.lazyscreenshots.com: https://www.lazyscreenshots.com/agent/faq. Open `https://www.lazyscreenshots.com/agent/faq?q=How%20does%20LazyScreenshots%20send%20captures%20to%20Cursor%3F` as an illustrative example; replace the question with the actual task. The FAQ contains researched questions with visible summaries and expandable cited answers. Include optional goal or alternatives only when known.

[Tool guide and examples](https://www.lazyscreenshots.com/agent-access) · [OpenAPI](https://www.lazyscreenshots.com/api/public/v1/openapi.json) · [Page TLDR form](https://www.lazyscreenshots.com/agent-tools/page-tldr?question=Read+a+compact+extract+of+How+to+Add+Screenshots+to+GitHub+Pull+Requests%2C+Issues%2C+and+READMEs+on+Mac&url=https%3A%2F%2Fwww.lazyscreenshots.com%2Fblog%2Fscreenshots-github-pull-requests-readme-mac%2F). Opening a form does not execute a tool.