Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Capture or repair reliable full-page screenshots for lazy-loaded, scroll-animated, Framer, WebGL/canvas, or reveal-heavy web pages. Use when full-page screenshots are blank, gray, white, sparse, show a tiny content strip, disagree with a working scroll video, or when article evidence/section crops must be derived from a trustworthy full-page image.
.claude/skills/mengto-stitched-full-page-capture/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -23% | 0% |
Use settled viewport screenshots instead of trusting one-shot browser fullPage captures. This is especially important for Framer pages and other lazy/scroll-animated sites where the MP4 can look correct while the tall screenshot is mostly blank.
fullPage screenshot.Reject a full-page candidate when it has blank/gray/white bands, very low visual content, missing lazy-loaded sections, an extremely narrow content column, or obvious disagreement with the scroll video.
For daily UI inspiration articles, use the helper script from this skill directory when available:
bashnode <skills-root>/stitched-full-page-capture/scripts/stitch_full_page_capture.mjs \ --manifest articles/YYYY-MM-DD-ui-inspiration-capture/manifest.json
The script:
items[].pageUrl, fullPageImage, and sectionImages;fullPageImage;manifest.json with fullPageCaptureMethod: "stitchedViewportScreenshots", viewport, step, segment count, and corrected crop coordinates.Useful options:
bash--item 4 # repair only item 4, 1-based --viewport 1440x1100 # default --step 950 # default; use less than viewport height for overlap --wait 2000 # ms to wait after each scroll stop --quality 3 # ffmpeg JPEG quality, lower is better
After capture or repair:
sips -g pixelWidth -g pixelHeight full-page/*.jpg reports expected wide/tall dimensions.bashgit diff --check -- articles/YYYY-MM-DD-ui-inspiration-capture/content.md articles/YYYY-MM-DD-ui-inspiration-capture/manifest.json node scripts/check-ui-inspiration-duplicates.mjs articles/YYYY-MM-DD-ui-inspiration-capture/manifest.json for f in articles/YYYY-MM-DD-ui-inspiration-capture/videos/*.mp4; do ffprobe -v error "$f" >/dev/null; done
fullPage screenshots can still be saved as comparison candidates, but do not use them as source of truth unless they visually match the stitched capture.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-14 | pass→pass | 11,835 | 1,703 | -86% | 1 | 1 | 0% | 2,056 | 1,104 | -46% | 0 | 0 | — |
case-01 | fail→fail | 5,158 | 54,671 | +960% | 1 | 1 | 0% | 350 | 1,128 | +222% | 0 | 0 | — |
case-02 | fail→fail | 4,204 | 26,119 | +521% | 1 | 1 | 0% | 271 | 1,062 | +292% | 0 | 0 | — |
case-03 | fail→pass | 17,922 | 15,916 | -11% | 1 | 1 | 0% | 3,530 | 3,737 | +6% | 0 | 0 | — |
case-04 | fail→pass | 6,952 | 2,645 | -62% | 1 | 1 | 0% | 1,543 | 1,341 | -13% | 0 | 0 | — |
case-05 | pass→pass | 4,907 | 17,673 | +260% | 1 | 1 | 0% | 1,006 | 1,191 | +18% | 0 | 0 | — |
case-06 | fail→pass | 8,186 | 3,104 | -62% | 1 | 1 | 0% | 1,325 | 1,464 | +10% | 0 | 0 | — |
case-07 | pass→pass | 8,374 | 4,229 | -49% | 1 | 1 | 0% | 1,436 | 1,609 | +12% | 0 | 0 | — |
case-08 | pass→pass | 9,492 | 2,659 | -72% | 1 | 1 | 0% | 1,305 | 1,313 | +1% | 0 | 0 | — |
case-09 | fail→pass | 5,410 | 1,547 | -71% | 1 | 1 | 0% | 971 | 1,082 | +11% | 0 | 0 | — |
case-10 | pass→pass | 54,506 | 8,115 | -85% | 1 | 1 | 0% | 2,615 | 2,319 | -11% | 0 | 0 | — |
case-11 | fail→pass | 8,535 | 2,487 | -71% | 1 | 1 | 0% | 1,607 | 1,242 | -23% | 0 | 0 | — |
case-12 | pass→pass | 5,673 | 2,531 | -55% | 1 | 1 | 0% | 1,272 | 1,248 | -2% | 0 | 0 | — |
case-13 | pass→pass | 44,643 | 2,165 | -95% | 1 | 1 | 0% | 994 | 1,228 | +24% | 0 | 0 | — |
case-15 | fail→pass | 11,989 | 6,514 | -46% | 1 | 1 | 0% | 1,963 | 2,038 | +4% | 0 | 0 | — |
case-16 | fail→pass | 6,337 | 3,277 | -48% | 1 | 1 | 0% | 1,468 | 1,340 | -9% | 0 | 0 | — |
case-17 | pass→pass | 3,912 | 2,149 | -45% | 1 | 1 | 0% | 874 | 1,259 | +44% | 0 | 0 | — |
case-18 | pass→pass | 11,952 | 2,528 | -79% | 1 | 1 | 0% | 2,021 | 1,286 | -36% | 0 | 0 | — |
case-19 | pass→pass | 10,688 | 7,654 | -28% | 1 | 1 | 0% | 1,802 | 2,005 | +11% | 0 | 0 | — |
case-20 | pass→pass | 10,789 | 7,765 | -28% | 1 | 1 | 0% | 2,168 | 2,365 | +9% | 0 | 0 | — |
case-21 | pass→pass | 10,199 | 11,706 | +15% | 1 | 1 | 0% | 1,935 | 3,055 | +58% | 0 | 0 | — |
case-22 | pass→pass | 7,389 | 4,855 | -34% | 1 | 1 | 0% | 1,387 | 1,622 | +17% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.