Capture public HTTP(S) webpages as local PNG, JPEG, or PDF artifacts through Latchshot. Use when the user needs screenshots, website thumbnails, full-page captures, PDFs, QA reports, archives, or social previews. Do not use for private or authenticated pages, raw HTML extraction, scraping, CAPTCHA bypass, arbitrary browser actions, or local-file capture.
Use the bundled dependency-free Node.js client to turn one public webpage URL into a validated local PNG, JPEG, or PDF artifact while keeping the LATCHSHOT_API_KEY out of chat, source, command arguments, and output.
When to invoke
"Capture a screenshot of this public webpage."
"Save a full-page PNG for this URL."
"Create a PDF of a public website."
"Generate a website thumbnail artifact."
"Check my remaining Latchshot render quota."
Prerequisites and context
Require Node.js 20 or newer and network access. Authenticated capture and usage commands read the API key only from LATCHSHOT_API_KEY and send it only to the fixed https://latchshot.fly.dev origin. Never ask the user to paste the key into chat, a command argument, source code, a committed file, or output. Never print or return the key.
Latchshot is a hosted third-party service maintained by this skill's contributor. Keep its use optional and preserve local-browser workflows when the task needs private pages, authenticated pages, or unsupported browser actions.
Request boundaries
Request
Handle with Latchshot?
Rule
Public http:// or https:// page screenshot
Yes
Capture one binary artifact.
PNG, JPEG, or PDF output
Yes
Infer from .png, .jpg, .jpeg, or .pdf, or pass --format.
Private page, intranet, login, cookie, CAPTCHA, signed URL, query secret, or non-web port
No
Reject instead of bypassing.
Raw HTML, DOM extraction, selectors, sessions, arbitrary JavaScript, clicking, typing, scraping, or anti-bot evasion
No
Latchshot is capture-only.
Local file capture
No
It accepts public webpage URLs only.
This includes social-preview captures, but not authenticated/private, private/internal, or private-page access.
Use --allow-query only after confirming the query contains no credential, signature, token, customer data, or other secret.
No-key demo
If LATCHSHOT_API_KEY is missing, use the no-key demo only when a bounded public viewport JPEG fits the request.
The demo is JPEG-only, does not use an account or render quota, allows three attempts per IP address per hour, and accepts only width, height, query confirmation, and explicit overwrite options. The public URL is still sent to Latchshot with the coarse agentskill acquisition label. Treat the result as a proof artifact, not as customer activation or plan signup. For PNG, PDF, full-page, cleanup, or repeat work without a key, direct the user to https://latchshot.fly.dev/integrations.md#agent-skills and stop.
Capture workflow
Confirm the target is a public HTTP or HTTPS page and the output path is user-approved.
Run the client from this skill directory.
Parse the one-line JSON result and confirm ok, output, format, contentType, and bytes.
Inspect the local artifact when the surrounding task requires visual or document verification.
Report the path and render or quota diagnostics without exposing the key.
Best-effort cleanup flags are not bypass tools; treat each cleanup as best-effort only: --block-ads, --block-trackers, --block-chats, --hide-cookie-banners, and --hide-popups. The client refuses to overwrite a file unless --force is explicit. Report render/quota diagnostics only. Run node scripts/latchshot.mjs --help for the exact bounded options.
Usage and failure handling
Read quota without consuming render quota:
node scripts/latchshot.mjs usage
Symptom or code
Response
Validation or authentication failure
Read the structured stderr code and message; do not retry.
demo_limit
Wait for the hourly reset; do not loop or switch identities.
rate_limited
Wait for the reported reset or retry-after boundary.
Render failure
State the failure, preserve any existing output file, and do not substitute another provider silently.
Commercial action requested
Keep upgrade, checkout, payment, implementation request, and plan changes user- and owner-controlled.
The usage command is read-only.
Progressive disclosure and bundled resources
Resource
Use it when
scripts/latchshot.mjs
Running demo, capture, usage, or --help commands.
Output template
## Latchshot capture result
**Status:** captured | demo-captured | blocked
**URL:** `<public URL>`
**Output:** `<local artifact path>`
**Format:** png | jpeg | pdf
### Render result
- `ok`: <true/false>
- `contentType`: <content type>
- `bytes`: <byte count>
- Diagnostics: <quota/reset/render notes with no API key>
### Boundaries checked
- Public HTTP(S): yes | no
- Query reviewed for secrets: yes | not applicable
- Auth/private/CAPTCHA/browser-action request: no | blocked because <reason>
Quality gate
The URL is a public HTTP or HTTPS page and is not private, authenticated, signed, or secret-bearing.
The command reads authenticated credentials only from LATCHSHOT_API_KEY.
The output path is explicit, local, and not overwritten unless --force was intentional.
The JSON result was parsed for ok, output, format, contentType, and bytes.
Rate limits and demo limits were not bypassed by looping or identity switching.
No raw HTML extraction, scraping, CAPTCHA bypass, arbitrary browser action, or commercial action was attempted.
1---2name: latchshot-page-capture-33description: Capture public HTTP(S) webpages as local PNG, JPEG, or PDF artifacts through Latchshot. Use when the user needs screenshots, website thumbnails, full-page captures, PDFs, QA reports, archives, or social previews. Do not use for private or authenticated pages, raw HTML extraction, scraping, CAPTCHA bypass, arbitrary browser actions, or local-file capture.4---56<!-- Generated from harness/github-copilot/plugins/creative-media-tooling/skills/latchshot-page-capture/SKILL.md by harness/claude-code/scripts/convert_from_copilot.py. Edit the source, not this file. -->78# Latchshot page capture910Use the bundled dependency-free Node.js client to turn one public webpage URL into a validated local PNG, JPEG, or PDF artifact while keeping the LATCHSHOT_API_KEY out of chat, source, command arguments, and output.1112## When to invoke1314- "Capture a screenshot of this public webpage."15- "Save a full-page PNG for this URL."16- "Create a PDF of a public website."17- "Generate a website thumbnail artifact."18- "Check my remaining Latchshot render quota."1920## Prerequisites and context2122Require Node.js 20 or newer and network access. Authenticated capture and usage commands read the API key only from `LATCHSHOT_API_KEY` and send it only to the fixed `https://latchshot.fly.dev` origin. Never ask the user to paste the key into chat, a command argument, source code, a committed file, or output. Never print or return the key.2324Latchshot is a hosted third-party service maintained by this skill's contributor. Keep its use optional and preserve local-browser workflows when the task needs private pages, authenticated pages, or unsupported browser actions.2526## Request boundaries2728| Request | Handle with Latchshot? | Rule |29| --- | --- | --- |30| Public `http://` or `https://` page screenshot | Yes | Capture one binary artifact. |31| PNG, JPEG, or PDF output | Yes | Infer from `.png`, `.jpg`, `.jpeg`, or `.pdf`, or pass `--format`. |32| Private page, intranet, login, cookie, CAPTCHA, signed URL, query secret, or non-web port | No | Reject instead of bypassing. |33| Raw HTML, DOM extraction, selectors, sessions, arbitrary JavaScript, clicking, typing, scraping, or anti-bot evasion | No | Latchshot is capture-only. |34| Local file capture | No | It accepts public webpage URLs only. |3536This includes social-preview captures, but not authenticated/private, private/internal, or private-page access.3738Use `--allow-query` only after confirming the query contains no credential, signature, token, customer data, or other secret.3940## No-key demo4142If `LATCHSHOT_API_KEY` is missing, use the no-key demo only when a bounded public viewport JPEG fits the request.4344```bash45node scripts/latchshot.mjs demo \46 --url 'https://example.com' \47 --output './artifacts/example-demo.jpg'48```4950The demo is JPEG-only, does not use an account or render quota, allows three attempts per IP address per hour, and accepts only width, height, query confirmation, and explicit overwrite options. The public URL is still sent to Latchshot with the coarse `agentskill` acquisition label. Treat the result as a proof artifact, not as customer activation or plan signup. For PNG, PDF, full-page, cleanup, or repeat work without a key, direct the user to https://latchshot.fly.dev/integrations.md#agent-skills and stop.5152## Capture workflow53541. Confirm the target is a public HTTP or HTTPS page and the output path is user-approved.552. Run the client from this skill directory.563. Parse the one-line JSON result and confirm `ok`, `output`, `format`, `contentType`, and `bytes`.574. Inspect the local artifact when the surrounding task requires visual or document verification.585. Report the path and render or quota diagnostics without exposing the key.5960Viewport capture:6162```bash63node scripts/latchshot.mjs capture \64 --url 'https://example.com' \65 --output './artifacts/example.png'66```6768Full-page capture with lazy content activation:6970```bash71node scripts/latchshot.mjs capture \72 --url 'https://example.com' \73 --output './artifacts/example-full.png' \74 --full-page \75 --scroll-page76```7778PDF capture:7980```bash81node scripts/latchshot.mjs capture \82 --url 'https://example.com' \83 --output './artifacts/example.pdf' \84 --paper A485```8687Best-effort cleanup flags are not bypass tools; treat each cleanup as best-effort only: `--block-ads`, `--block-trackers`, `--block-chats`, `--hide-cookie-banners`, and `--hide-popups`. The client refuses to overwrite a file unless `--force` is explicit. Report render/quota diagnostics only. Run `node scripts/latchshot.mjs --help` for the exact bounded options.8889## Usage and failure handling9091Read quota without consuming render quota:9293```bash94node scripts/latchshot.mjs usage95```9697| Symptom or code | Response |98| --- | --- |99| Validation or authentication failure | Read the structured stderr code and message; do not retry. |100| `demo_limit` | Wait for the hourly reset; do not loop or switch identities. |101| `rate_limited` | Wait for the reported reset or retry-after boundary. |102| Render failure | State the failure, preserve any existing output file, and do not substitute another provider silently. |103| Commercial action requested | Keep upgrade, checkout, payment, implementation request, and plan changes user- and owner-controlled. |104105The usage command is read-only.106107## Progressive disclosure and bundled resources108109| Resource | Use it when |110| --- | --- |111| `scripts/latchshot.mjs` | Running `demo`, `capture`, `usage`, or `--help` commands. |112113## Output template114115```markdown116## Latchshot capture result117118**Status:** captured | demo-captured | blocked119**URL:** `<public URL>`120**Output:** `<local artifact path>`121**Format:** png | jpeg | pdf122123### Render result124- `ok`: <true/false>125- `contentType`: <content type>126- `bytes`: <byte count>127- Diagnostics: <quota/reset/render notes with no API key>128129### Boundaries checked130- Public HTTP(S): yes | no131- Query reviewed for secrets: yes | not applicable132- Auth/private/CAPTCHA/browser-action request: no | blocked because <reason>133```134135## Quality gate136137- [ ] The URL is a public HTTP or HTTPS page and is not private, authenticated, signed, or secret-bearing.138- [ ] The command reads authenticated credentials only from `LATCHSHOT_API_KEY`.139- [ ] The output path is explicit, local, and not overwritten unless `--force` was intentional.140- [ ] The JSON result was parsed for `ok`, `output`, `format`, `contentType`, and `bytes`.141- [ ] Rate limits and demo limits were not bypassed by looping or identity switching.142- [ ] No raw HTML extraction, scraping, CAPTCHA bypass, arbitrary browser action, or commercial action was attempted.143144## References145146- [Latchshot service origin](https://latchshot.fly.dev)147- [Agent Skills setup documentation](https://latchshot.fly.dev/integrations.md#agent-skills)
Run npx skillmds@latest add paulasilvatech/latchshot-page-capture-3 in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Capture public HTTP(S) webpages as local PNG, JPEG, or PDF artifacts through Latchshot. Use when the user needs screenshots, website thumbnails, full-page captures, PDFs, QA reports, archives, or social previews. Do not use for private or authenticated pages, raw HTML extraction, scraping, CAPTCHA bypass, arbitrary browser actions, or local-file capture. It is listed under Web & Frontend on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
paulasilvatech (@paulasilvatech) published this skill. Their other Agent Skills are listed on their SkillMD profile.