Scryshot is a desktop application for crawling websites and building browsable offline mirrors.
Unlike simpler download tools that work best on static sites, Scryshot is designed to deal with modern JavaScript-heavy pages, builder-generated layouts, client-side navigation, and interactive widgets. Its goal is to produce local copies that are not only saved, but still usable when opened outside the live web.
Many mirroring tools are good at downloading files, but struggle when a website:
- renders content through JavaScript
- uses buttons instead of normal links
- loads pages through AJAX or SPA-style navigation
- rewrites the DOM after load
- depends on runtime-generated assets and routes
Scryshot focuses on that gap. It combines browser automation, interactive discovery, asset rewriting, and offline-safe page generation to preserve as much navigability as possible in the mirrored output.
- Crawls a site from a configurable starting URL
- Discovers pages through normal links and interactive controls
- Mirrors HTML pages and static assets to a local folder
- Rewrites asset references for local browsing
- Tries to convert JavaScript-driven navigation into local mirror-safe links
- Supports different interactive discovery profiles for speed vs coverage
- Provides desktop controls for project setup, test runs, history cleanup, and output browsing
Scryshot does not rely only on <a href> links. It can probe interactive UI elements such as buttons, custom widgets, and JavaScript-driven controls to discover pages that would otherwise be invisible to a traditional crawler.
When a page is captured, Scryshot rewrites mirrored output so that it can be browsed locally more reliably. This includes local asset mapping, link normalization, redirect handling, and mirror-oriented page generation.
Scryshot uses Playwright and Crawlee to inspect the live page, observe runtime behavior, and capture signals that classic HTML-only crawlers miss. This makes it better suited to builder-based or SPA-like websites.
The application includes a desktop UI for:
- project management
- crawl execution
- test runs against a single page
- progress monitoring
- mirror launching and folder browsing
- run history inspection
At a high level, Scryshot follows this flow:
- Open a page in a real browser context
- Wait for the page to stabilize enough for analysis
- Discover candidate links and interactive controls
- Probe interactive elements on a safe page clone
- Infer navigable destinations from browser, DOM, and network signals
- Capture a mirror-ready snapshot of the page
- Rewrite links and assets for local browsing
- Save the mirrored output and enqueue new pages
- Electron
- React
- TypeScript
- Playwright
- Crawlee
- better-sqlite3
- Tailwind CSS
- i18next
app/- main Electron applicationtests/- test project and automated verificationscripts/- support scriptsCHANGELOG.md- project changelogScryshot.slnx- Visual Studio solution entry point
- Node.js
- npm
- Windows is currently the primary development environment
cd app
npm installcd tests
npm installcd app
npm run devcd app
npm run typecheckcd tests
npm testScryshot is actively evolving and already supports:
- project-based crawling
- offline mirror output
- interactive discovery modes
- test-run workflows for single-page debugging
- improving support for JavaScript-driven navigation
The project is especially focused on improving mirror quality for sites that rely heavily on runtime rendering and non-semantic navigation.
See CHANGELOG.md for notable changes.
MIT