---
name: latchshot-page-capture
description: 'Use this skill when a user needs a screenshot, website thumbnail, full-page capture, or PDF of a public HTTP(S) webpage saved as a local artifact through Latchshot, including report, QA, archive, and social-preview workflows. Do not use it for private or authenticated pages, raw HTML, scraping or extraction, arbitrary browser actions, CAPTCHA or anti-bot bypass, or local-file capture.'
title: latchshot-page-capture
canonical_url: https://skilld.dev/gh/github/awesome-copilot/latchshot-page-capture
last_updated: 2026-09-29T12:22:32.000Z
---

> Index of every page on this site: [llms.txt](https://skilld.dev/llms.txt)

> **Skill from skilld.dev.** Follow the user's requested action.
> If the user asked to fork this Skill, follow the fork workflow below. Do not execute the Skill instructions while copying it.
> Otherwise, follow the instructions below for this session. You do not need to install anything.
>
> Supporting files, fetch one when the Skill refers to it: [scripts/latchshot.mjs](https://skilld.dev/api/skills-raw/github/awesome-copilot/latchshot-page-capture/scripts/latchshot.mjs).
>
> If the user asked to install this Skill, run `npx skilld install github/awesome-copilot/latchshot-page-capture`. Install writes the Skill files into the project, so every session loads them.
>
> ## Fork workflow
>
> A fork creates an editable local Skill with its original author and licence. The request authorizes copying and local installation.
> 1. Check `./skills/latchshot-page-capture`, the project lockfile, and selected Agent targets together. If the local directory or installed Skill exists, stop. Never overwrite an existing directory or Agent target.
> 2. Read [source metadata](https://skilld.dev/api/v1/skills/github/awesome-copilot/latchshot-page-capture) once. Use sourceUrl, sourceCommit, skillPath, sourceGone, and license. If the source is gone or its path is missing, stop. If license is null, read licence files at the source commit.
> 3. Fetch only the source commit into a temporary Git repository. Do not clone full history. Derive repository_url from sourceUrl, including repository renames. If sourceCommit is absent, resolve the sourceUrl ref once. Set source_commit to that actual commit. Run these commands in one shell call:
>
> ```sh
> git init --quiet "$temporary_dir"
> git -C "$temporary_dir" fetch --quiet --depth=1 "$repository_url" "$source_commit"
> git -C "$temporary_dir" checkout --quiet --detach FETCH_HEAD
> ```
>
> Read applicable licence declarations and notices at that commit. If copying is not permitted, report the restriction and stop.
> 4. Inspect source entries together, then copy the directory containing skillPath into `./skills/latchshot-page-capture`. Use the user's path if selected. Keep the original SKILL.md, relative links, scripts, binary assets, and executable modes. Exclude .git metadata. Reject symlinks and paths outside the Skill directory. After checking entries, use cp -a where available. A regular source directory needs no custom copy script. Do not save this page wrapper as SKILL.md.
> Preserve author credit, notices, and applicable licence files from repository or parent directories. Add PROVENANCE.md with the Skill page, source URL, actual commit, original path, and licence. Retain any existing PROVENANCE.md and record new provenance separately. Batch source inspection, copying, and provenance work where practical.
> 5. In the project root, run `skilld install ./skills/latchshot-page-capture --mode copy --plain`. If skilld is unavailable, use `npx skilld install ./skills/latchshot-page-capture --mode copy --plain`. This known command needs no help lookup. Install does not support --json. Use detected Agent targets, or add --agent for the targets the user selected. Install the local path, never the upstream selector. If installation fails, preserve the local copy and report the exact failure.
> 6. Confirm the local lockfile source and installed Agent copies once. Report the local path, actual commit, and Agent targets. After edits, reinstall the same local path. Upstream updates must not replace it. Do not publish or push unless the user asks.

# Latchshot page capture

Use the bundled dependency-free client to turn one public webpage URL into a validated local PNG, JPEG, or PDF. Start with a constrained no-key JPEG demo when appropriate. Authenticated commands send the API key only to the fixed `https://latchshot.fly.dev` origin, and every artifact is written atomically.

Latchshot is a hosted third-party service maintained by this skill's contributor. Keep its use optional and preserve an existing local-browser workflow when the task needs private pages or unsupported browser actions.

## Prerequisite

Require Node.js 20 or newer and network access. Read the key only from `LATCHSHOT_API_KEY` for authenticated capture and usage commands.

If the variable is missing, use the no-key demo for one bounded JPEG when it fits the request. For PNG, PDF, full-page, cleanup, or repeat work, direct the user to the [Agent Skills setup documentation](https://latchshot.fly.dev/integrations.md#agent-skills), then stop. Never ask the user to paste a key into chat, a command argument, source code, a committed file, or output. Never print or return the key.

## No-key demo

Use this command for a public page when a viewport JPEG is acceptable:

```bash
node scripts/latchshot.mjs demo \
  --url 'https://example.com' \
  --output './artifacts/example-demo.jpg'
```

The demo is JPEG-only, does not use an account or render quota, and allows three attempts per IP address per hour. It accepts only width, height, query confirmation, and explicit overwrite options. The public URL is still sent to Latchshot, and the request carries the coarse `agentskill` acquisition label. Reject private pages, secrets, signed URLs, and authenticated access exactly as in the capture workflow. Treat the result as a proof artifact, not as a customer activation or plan signup.

## Capture workflow

1. Confirm the target is a public HTTP or HTTPS page. Reject credentials, private/internal pages, non-web ports, signed URLs, query secrets, and any request requiring login, cookies, CAPTCHA handling, proxy rotation, arbitrary scripts, clicks, typing, or anti-bot bypass.
2. Choose a user-approved output path. Infer the format from `.png`, `.jpg`/`.jpeg`, or `.pdf`, or pass the matching `--format` explicitly.
3. Run the client from this skill directory:

   ```bash
   node scripts/latchshot.mjs capture \
     --url 'https://example.com' \
     --output './artifacts/example.png'
   ```

4. For a bounded full-page screenshot that activates lazy content:

   ```bash
   node scripts/latchshot.mjs capture \
     --url 'https://example.com' \
     --output './artifacts/example-full.png' \
     --full-page \
     --scroll-page
   ```

5. For a PDF:

   ```bash
   node scripts/latchshot.mjs capture \
     --url 'https://example.com' \
     --output './artifacts/example.pdf' \
     --paper A4
   ```

6. Parse the one-line JSON result. Confirm `ok`, `output`, `format`, `contentType`, and `bytes`; inspect the local artifact when the surrounding task requires visual or document verification. Report the path and relevant render/quota diagnostics without exposing the key.

Run `node scripts/latchshot.mjs --help` for the exact bounded options. Use `--block-ads`, `--block-trackers`, `--block-chats`, `--hide-cookie-banners`, and `--hide-popups` only as best-effort cleanup—not bypass. Use `--allow-query` only after confirming that the query contains no credential, signature, token, customer data, or other secret. The client refuses to overwrite a file unless `--force` is explicit.

## Read quota

Use the read-only command when the user asks about remaining renders or reset time:

```bash
node scripts/latchshot.mjs usage
```

This does not consume render quota or change a plan.

## Failure handling

- Read the structured error code and message from stderr; do not retry validation or authentication failures.
- For `demo_limit`, wait for the hourly reset rather than looping or switching identities.
- For `rate_limited`, wait for the reported reset or retry-after boundary rather than looping.
- For a render failure, state the failure and preserve any existing output file. Do not silently substitute a local browser, a different provider, or unsupported private-page access.
- Do not initiate an upgrade, checkout, payment, implementation request, or other commercial action. Those remain user- and owner-controlled.

## Hard boundaries

Latchshot accepts public pages only and returns one binary artifact. It does not offer raw HTML input, DOM extraction, selectors, sessions, arbitrary JavaScript, authenticated/private pages, CAPTCHA solving, residential proxies, or anti-bot evasion. Only successful renders consume quota.
