USAGE: "Usage: ui-capture <url> [options]\n\nCrawl a website and capture full-page screenshots (PNG/WebP/JPEG) and\noptional multi-quality videos for every reachable internal route.\n\nArguments:\n <url> Starting URL to crawl\n\nOptions:\n --output-dir <path> Output directory (default: ./ui-captures)\n --max-depth <n> Maximum crawl depth (default: 2)\n --wait <ms> Per-page wait after networkidle (default: 2000)\n --concurrency <n> Parallel route workers (default: 2)\n --include-subdomains Crawl subdomains of the starting host\n --allowed-hosts <a,b,...> Extra allowed hostnames (comma separated)\n --viewports <spec,spec> Viewport specs as name:WIDTHxHEIGHT\n (default: desktop:1920x1080,tablet:768x1024,mobile:375x667)\n --hide <sel,sel,...> CSS selectors to hide before screenshotting\n --menu-selectors <sel,...> Selectors to click before link discovery\n (this opens menus so links become discoverable;\n it is not a capture-state mechanism — see\n --states for that)\n --states <path> JSON file of named interaction scripts. Each\n named state is performed on a fresh page load\n and yields its own capture set, so a single-route\n app's dialogs and workspaces get captured too.\n --state-filter <a,b,...> Capture only these named states (default: all).\n A state they extend is replayed to reach them,\n and is not captured itself.\n --skip-routes Capture only scripted states, not crawled routes\n --state-timeout <ms> Budget for reaching a state: navigation,\n precondition probe and script. Screenshot and\n video capture are outside it (default: 60000;\n a state may override it with timeoutMs)\n --precondition-timeout <ms> Budget for a state's precondition probe, which\n decides whether the state exists on this build\n at all (default: 10000; a state may override it\n with preconditionTimeoutMs). Raise it for an app\n whose first meaningful frame lands well after\n networkidle, such as a WebGL console — a probe\n that gives up first records the state as skipped\n rather than slow.\n --allow-state-requests Permit request steps, which reach past the UI\n into the app's own backend. Off by default: a\n states file from a colleague should not be able\n to POST to your app because you ran the tool.\n --fail-on-state-error Exit non-zero when any scripted state failed\n --video Capture videos in addition to screenshots\n --video-duration <ms> Video duration when --video (default: 10000)\n --no-interactions Disable scripted scrolling during video\n --color-scheme <scheme> prefers-color-scheme to report: light, dark, or\n no-preference (default: light). A site that\n follows the OS theme renders light under headless\n Chromium, so pass dark to capture its dark face.\n --no-warmup Skip the pre-screenshot warm-up scroll\n (warm-up triggers lazy-load + scroll-reveal\n animations so screenshots capture real content)\n --ffmpeg <path> ffmpeg binary path (default: ffmpeg)\n --launch-args <args> Extra Chromium switches, whitespace separated\n (e.g. to enable an experimental web platform\n feature the captured page depends on)\n --help Show this message\n\nExamples:\n ui-capture https://example.com\n ui-capture https://example.com --video --max-depth 1 --concurrency 4\n ui-capture https://example.com --viewports desktop:1920x1080,mobile:390x844\n ui-capture https://example.com --hide \".cookie-banner,#chat-widget\"\n ui-capture https://example.com --color-scheme dark\n ui-capture https://example.com --launch-args \"--enable-blink-features=CanvasDrawElement\"\n ui-capture http://localhost:5173 --max-depth 0 --states ./ui-capture.states.json\n ui-capture http://localhost:5173 --states ./states.json --state-filter fleet-editor\n" = ...