multicheese is a CLI that opens authenticated pages in Google Chrome through Playwright and saves one full-page PNG screenshot per URL.
Current Chrome and Playwright releases do not support safely automating your normal Chrome profile. Instead, multicheese manages its own persistent Chrome profiles under:
- macOS:
~/Library/Application Support/multicheese/profiles/<profile> - Linux:
${XDG_DATA_HOME:-~/.local/share}/multicheese/profiles/<profile> - Windows:
%APPDATA%\\multicheese\\profiles\\<profile>
This keeps authentication working across runs without depending on unsupported remote-debugging flows.
You do not need to close every Chrome window on your laptop. You only need to avoid using the same multicheese profile in two multicheese sessions at the same time.
- macOS, Linux, or Windows
- Node.js 20+
- pnpm
- Google Chrome installed
Install dependencies:
pnpm installBuild the CLI:
pnpm buildInstall it locally:
pnpm install:localThis writes a small launcher script that points at this checkout's built CLI:
- macOS and Linux:
~/.local/bin/multicheese - Windows:
%LOCALAPPDATA%\\multicheese\\bin\\multicheese.cmd
If you move the repo, run pnpm install:local again.
If that directory is on your PATH, the command will be available as:
multicheeseAlternative global install:
pnpm link --globalmulticheese auth open workChrome opens with the managed profile. Log in to the websites you need, then return to the terminal and press Enter. The session data stays on disk for the next run.
List available profiles:
multicheese auth listRun the command from a separate folder, not from the project root.
That folder must contain one file named urls.csv.
The following can also be present:
- zero or more directories named
screenshotsNNN - optional hidden files like
.DS_Storeor.gitkeep
Example:
/tmp/my-job
├── urls.csv
├── screenshots000/
└── screenshots001/
urls.csv must contain one URL per row. It may be headerless or use a single url header:
https://example.com
https://example.com/docsor
url
https://example.com
https://example.com/docsmulticheese run --profile work --workspace /tmp/my-jobOptions:
--profile <name>: managed profile to use--workspace <dir>: job folder to validate and process--wait-ms <ms>: extra time to wait after each page load, default10
Each run creates the next output directory:
- first run:
screenshots000 - second run:
screenshots001 - third run:
screenshots002
Output files are named from the URL and prefixed with the CSV order, for example:
001-example-com.png
002-example-com-docs.png
003-example-com-products-widget-a1b2c3d4.png
Useful commands:
pnpm dev -- auth list
pnpm lint
pnpm format
pnpm format:check
pnpm typecheck
pnpm test