Skip to main content
Version: 2.0 (Preview)

Commands and Options

The command reference is generated from Automator's CLI definitions. Use surfmeter <command> --help to see the help for a command in your installed version.

Command Overview​

Options for All Commands​

OptionTypeDescription
--logModeuser, pretty, ldjsonOutput mode: user (friendly terminal output, full log written to a file), pretty (readable log on stdout), ldjson (JSON lines on stdout). Default: user on a terminal, otherwise pretty in development and ldjson in production.
--verbosebooleanShow the full log on the terminal instead of the friendly output (same as --logMode pretty)
--iWantToDangerouslyUseRootbooleanAllow running as root, which is not supported: all files written by the run belong to root, which breaks later runs as the measurement user. For a daemon running as root, set SURFMETER_OPTIONS__I_WANT_TO_DANGEROUSLY_USE_ROOT=1 instead, so its runs get it too. (default: False)

Any option can also be set through an environment variable, which takes priority over all other sources. See Overriding Options via Environment Variables.

Command Reference​

The arguments in angle brackets are required, and the arguments in square brackets are optional.

surfmeter auth register​

Register this client with a Surfmeter server.

surfmeter auth register
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--registrationKey, -rstringRegistration key (case-insensitive). Defaults to SURFMETER_DEFAULT_REGISTRATION_KEY, then to registrationKey in automatorConfig.json
--server, -sstringSurfmeter Server URL, or a shorthand name like "demo-analytics". Defaults to SURFMETER_DEFAULT_SERVER, which is how the Docker image supplies it
--label, -lstringDevice label
--tags, -tstring (repeatable)Tags (repeatable, or comma-separated)

surfmeter auth status​

Show the registration of this client and the installed version. Exit code 0: registered, 2: not registered.

surfmeter auth status
OptionTypeDescription
--jsonbooleanPrint the registration as one JSON object (default: False)
--verifybooleanAlso authenticate against the Surfmeter server. Exit code 0: accepted, 1: the request failed, 2: not registered (default: False)

surfmeter auth label show​

Print the label of this client. Exit code 2: not registered.

surfmeter auth label show
OptionTypeDescription
--jsonbooleanPrint the label as a JSON string, or null (default: False)

surfmeter auth label set​

Replace the label of this client.

surfmeter auth label set <label>

surfmeter auth label clear​

Remove the label of this client.

surfmeter auth label clear

surfmeter auth tags list​

Print the tags of this client, one per line. Exit code 2: not registered.

surfmeter auth tags list
OptionTypeDescription
--jsonbooleanPrint the tags as a JSON array (default: False)

surfmeter auth tags set​

Replace the tags of this client.

surfmeter auth tags set <tags..>

surfmeter auth tags clear​

Remove all tags of this client.

surfmeter auth tags clear

surfmeter auth unregister​

Unregister this client on its server and remove its local identity.

surfmeter auth unregister

surfmeter auth migrate​

Copy the registration of an old Surfmeter Lab extension install into this client.

surfmeter auth migrate
OptionTypeDescription
--legacyInstallDirstringRoot of the old install: the directory with profile/, surfmeter-lab/ and the dist directory of the old automator
--legacyProfileDirstringChrome profile of the old install, if it is not /profile
--legacyExtensionDirstringUnpacked Surfmeter Lab extension of the old install, if it is not /surfmeter-lab
--serverstringSurfmeter Server URL or shorthand name, if it cannot be read from cache.json or the old extension
--jsonbooleanPrint the result as one JSON object (default: False)
--tsvbooleanPrint the result as tab-separated lines, for shell scripts (default: False)
--chromeBinarystringPath to the Chrome for Testing binary (defaults to the environment variable SURFMETER_CHROME_BINARY, or to the one managed by the Playwright registry; see surfmeter browser install)
--globalTimeoutnumberWait for how many seconds before exiting Automator (default: 600)
--globalTimeoutGracePeriodnumberWait for how many seconds after the global timeout before forcefully exiting without sending a report (default: 10)

surfmeter browser install​

Install the browser Surfmeter uses (surfmeter browser install --withDeps).

surfmeter browser install [browser]
OptionTypeDescription
--withDepsbooleanAlso install the OS packages Chrome needs. Runs as root/sudo, so not covered by --dryRun alone; see installDeps. (default: False)
--forcebooleanReinstall even if the browser is already present (default: False)
--dryRunbooleanPrint what would happen (including download URLs) without changing anything (default: False)

surfmeter browser installDeps​

Install only the OS packages the browser needs (normally as root).

surfmeter browser installDeps [browser]
OptionTypeDescription
--dryRunbooleanPrint what would happen (including download URLs) without changing anything (default: False)

surfmeter browser list​

List the browsers in the Playwright registry.

surfmeter browser list
OptionTypeDescription
--jsonbooleanPrint the browsers as a JSON array (default: False)

surfmeter browser uninstall​

Remove the browsers Playwright installed for Surfmeter.

surfmeter browser uninstall

surfmeter browser launch​

Launch Chrome with the Surfmeter extension, as a study does, until it is closed.

surfmeter browser launch [url]
OptionTypeDescription
--profileDirstringPath to a persistent Chrome profile to use and keep (by default, every browser gets a temporary profile that is removed afterwards)
--chromeBinarystringPath to the Chrome for Testing binary (defaults to the environment variable SURFMETER_CHROME_BINARY, or to the one managed by the Playwright registry; see surfmeter browser install)
--additionalExtensionsstring (repeatable)Path to additional extension directories (extracted)
--chromeArgsstring (repeatable)Additional Chrome command line arguments (feature flags will be merged with existing ones). Do not specify the leading '--' for these args.
--noLoadSurfmeterLabbooleanDo not load Surfmeter Lab extension (default: False)
--noClearCookiesbooleanDo not clear cookies when starting Chrome (preserves logins) (default: False)
--noClearCachebooleanDo not clear caches when starting Chrome (default: False)
--noClearSystemDnsbooleanDo not clear the system DNS when starting (default: False)
--noDisableNetworkCachebooleanDo not disable the network cache for individual requests (default: False)
--windowSize, -wstringSet the window size in pixels (WxH), if unset will attempt to maximize window (Non-native studies only)
--userAgent, -ustringOverride the user agent when starting the browser
--noQuicbooleanDo not let Chrome use QUIC/HTTP3. Chrome then uses TCP with HTTP/2 or HTTP/1.1 for every request, which is useful for comparing how a service behaves on either transport, or for networks where UDP is blocked or throttled. (default: False)
--enableGpubooleanEnable GPU support for Chrome (default: False)
--enableSandboxbooleanRun Chrome with its sandbox instead of passing --no-sandbox. Works on a normal Linux install with unprivileged user namespaces, but not as root and not in the Docker image (no SYS_ADMIN capability). Chrome does not start when the sandbox is unavailable, so try it on one machine before enabling it everywhere. (default: False)
--headlessbooleanDeprecated, maps to --display browser-headless for backward compatibility; use --display browser-headless directly instead (default: False)
--displaystringHow Chrome attaches to a display: 'auto' (reuse an existing X server or start one), 'xvfb' (always start a fresh virtual X server), 'browser-headless' (Chrome's built-in headless mode), or an X display spec like ':0' or ':123' (default: auto)
--autoOpenDevtoolsbooleanAutomatically open DevTools for all tabs (default: False)
--logConsoleMessagesbooleanLog the console messages of the page and of extension service workers, such as Surfmeter Lab, at info level instead of debug level (default: False)

surfmeter cache clear​

Clear the Surfmeter cache (.cache.json), keeping registration, config and stored results.

surfmeter cache clear

surfmeter config show​

Print the measurement config, the schedule config, or both, as this automator uses them.

surfmeter config show [target]
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--publicConfigFile, -pstringPath to the public config (measurement config) file, relative to the config directory or absolute
--pathsbooleanPrint only the paths of the files, and whether the last good copy was used
--jsonbooleanPrint one JSON object (default: False)
--showSecretsbooleanDo not mask password fields

surfmeter config set​

Replace a config file with a JSON or JSON5 file, or with stdin for "-".

surfmeter config set <target> <source>
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--localbooleanWrite the .local.json overlay instead of the config file (default: False)
--forcebooleanWrite the file even though the next config update may overwrite it (default: False)

surfmeter config edit​

Edit a config file in $VISUAL or $EDITOR, and install it if it is valid.

surfmeter config edit <target>
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--localbooleanWrite the .local.json overlay instead of the config file (default: False)
--forcebooleanWrite the file even though the next config update may overwrite it (default: False)

surfmeter config update​

Download, validate and install the schedule and measurement configs.

surfmeter config update
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--verifyOnlybooleanDownload and validate the config without installing it. Exit code 0: a valid config is available, 2: the Surfmeter server has no config for this client, 1: the download failed or the config is invalid (default: False)

surfmeter config migrate​

Copy the config files of an old install into the config directory and write the automator config as version 2.

surfmeter config migrate
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--legacyConfigDirstringConfig directory of the old install, e.g. ~/surfmeter/config
--configSourcelocal, serverWhere config updates come from afterwards: "server" (the Surfmeter server) or "local" (none, the files stay as they are). Default: server if the old config downloaded its config from a URL, local otherwise
--overwritebooleanReplace files that already exist in the config directory (default: False)
--relocateOutputbooleanPoint the log, recording and report settings of a version 1 config to the Surfmeter directory, and list the files to move there (default: False)
--dryRunbooleanReport what would be done without writing anything (default: False)
--jsonbooleanPrint the summary as JSON on stdout (default: False)
--tsvbooleanPrint the summary as tab-separated lines on stdout, for shell scripts (default: False)

surfmeter daemon start​

Run the scheduling daemon in the foreground (the default).

surfmeter daemon start
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--socketstringPath of the control socket (default: $SURFMETER_DAEMON_SOCKET or the runtime directory)
--tickIntervalnumberScheduler tick interval in seconds, at most 1 (debugging only)

surfmeter daemon status​

Show the jobs, schedule issues and runs of the running daemon.

surfmeter daemon status
OptionTypeDescription
--socketstringPath of the control socket (default: $SURFMETER_DAEMON_SOCKET or the runtime directory)
--jsonbooleanPrint the raw status as JSON (default: False)
--tsvbooleanPrint the main fields and one line per job as tab-separated values, for shell scripts (default: False)

surfmeter daemon run​

Run a schedule entry now.

surfmeter daemon run <entryId>
OptionTypeDescription
--socketstringPath of the control socket (default: $SURFMETER_DAEMON_SOCKET or the runtime directory)
--jsonbooleanPrint the raw response as JSON (default: False)
--waitbooleanWait for the run to finish and report its outcome (default: False)

surfmeter daemon reload​

Re-read and validate the schedule config.

surfmeter daemon reload
OptionTypeDescription
--socketstringPath of the control socket (default: $SURFMETER_DAEMON_SOCKET or the runtime directory)
--jsonbooleanPrint the raw response as JSON (default: False)

surfmeter daemon ping​

Check that the daemon answers (exit code 2 if it does not).

surfmeter daemon ping
OptionTypeDescription
--socketstringPath of the control socket (default: $SURFMETER_DAEMON_SOCKET or the runtime directory)

surfmeter daemon stop​

Print how to stop the daemon through its supervisor.

surfmeter daemon stop

surfmeter daemon install​

Install, enable and start the daemon as a systemd user service (Linux only).

surfmeter daemon install
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)

surfmeter daemon uninstall​

Stop and remove the systemd user service of the daemon (Linux only).

surfmeter daemon uninstall

surfmeter database flush​

Send stored results that have not reached the server yet.

surfmeter database flush
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--sendTimeoutstringMaximum timeout for sending data in seconds. (default: 15)

surfmeter database list​

Show the stored results (study chains) and whether they were sent.

surfmeter database list
OptionTypeDescription
--jsonbooleanPrint the study chains as a JSON array (default: False)
--staterunning, standalone, unsent, sent, rejectedShow only the study chains in this state

surfmeter profile cleanup​

Remove disposable data (BrowserMetrics, crash dumps, caches) from a persistent Chrome profile kept with --profileDir.

surfmeter profile cleanup
OptionTypeDescription
--profileDirstringPath to the persistent Chrome profile

surfmeter study list​

List the study IDs in the measurement config.

surfmeter study list
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--publicConfigFile, -pstringPath to the public config (measurement config) file, relative to the config directory or absolute
--jsonbooleanPrint the IDs as a JSON array (default: False)

surfmeter study start​

Run one or more studies.

surfmeter study start
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--publicConfigFile, -pstringPath to the public config (measurement config) file, relative to the config directory or absolute
--globalTimeoutnumberWait for how many seconds before exiting Automator (default: 600)
--globalTimeoutGracePeriodnumberWait for how many seconds after the global timeout before forcefully exiting without sending a report (default: 10)
--profileDirstringPath to a persistent Chrome profile to use and keep (by default, every browser gets a temporary profile that is removed afterwards)
--chromeBinarystringPath to the Chrome for Testing binary (defaults to the environment variable SURFMETER_CHROME_BINARY, or to the one managed by the Playwright registry; see surfmeter browser install)
--additionalExtensionsstring (repeatable)Path to additional extension directories (extracted)
--chromeArgsstring (repeatable)Additional Chrome command line arguments (feature flags will be merged with existing ones). Do not specify the leading '--' for these args.
--noLoadSurfmeterLabbooleanDo not load Surfmeter Lab extension (default: False)
--noClearCookiesbooleanDo not clear cookies when starting Chrome (preserves logins) (default: False)
--noClearCachebooleanDo not clear caches when starting Chrome (default: False)
--noClearSystemDnsbooleanDo not clear the system DNS when starting (default: False)
--noDisableNetworkCachebooleanDo not disable the network cache for individual requests (default: False)
--windowSize, -wstringSet the window size in pixels (WxH), if unset will attempt to maximize window (Non-native studies only)
--userAgent, -ustringOverride the user agent when starting the browser
--noQuicbooleanDo not let Chrome use QUIC/HTTP3. Chrome then uses TCP with HTTP/2 or HTTP/1.1 for every request, which is useful for comparing how a service behaves on either transport, or for networks where UDP is blocked or throttled. (default: False)
--enableGpubooleanEnable GPU support for Chrome (default: False)
--enableSandboxbooleanRun Chrome with its sandbox instead of passing --no-sandbox. Works on a normal Linux install with unprivileged user namespaces, but not as root and not in the Docker image (no SYS_ADMIN capability). Chrome does not start when the sandbox is unavailable, so try it on one machine before enabling it everywhere. (default: False)
--headlessbooleanDeprecated, maps to --display browser-headless for backward compatibility; use --display browser-headless directly instead (default: False)
--displaystringHow Chrome attaches to a display: 'auto' (reuse an existing X server or start one), 'xvfb' (always start a fresh virtual X server), 'browser-headless' (Chrome's built-in headless mode), or an X display spec like ':0' or ':123' (default: auto)
--autoOpenDevtoolsbooleanAutomatically open DevTools for all tabs (default: False)
--logConsoleMessagesbooleanLog the console messages of the page and of extension service workers, such as Surfmeter Lab, at info level instead of debug level (default: False)
--noClosebooleanDo not close the browser at the end of a run (default: False)
--noLogNetworkRequestsbooleanDo not record the network requests of browser studies. Video measurements then have no response time and content server statistics, and web measurements no network performance reports. (default: False)
--sendNetworkRequestsbooleanSend the recorded network requests of browser video measurements to the server. Note that this causes a lot of network traffic. (default: False)
--sendNetworkPerformanceReportsbooleanSend a network performance report with each browser web measurement. (default: False)
--sendByteCountReportbooleanSend a byte count report to the server, with the bytes transferred per second and statistics on the throughput (browser video and web studies only). (default: False)
--keepNetworkRequestsbooleanKeep the logged network requests in network-requests/ in the Surfmeter directory instead of deleting them after the study (default: False)
--studyId, -sstring (repeatable)ID of the study (as in the public config). Pass multiple times to start multiple studies
--urlstring (repeatable)URL for an ad-hoc study, as for surfmeter measure (e.g. https://www.wikipedia.org, speedtest://fast.com, traceroute://8.8.8.8; see surfmeter measure --help for all). Cannot be used with studyId or adHocPublicConfig. Pass multiple times to start multiple studies
--standalonebooleanRun Measurement in standalone mode, i.e. it will not connect to the Measurement Server (default: False)
--sendEventBundlesbooleanIf set, collect and include event bundles in the request payload. If not set, skip adding events to bundles. (default: False)
--notes, -nstringNotes
--metadata, -mstringMetadata (JSON-formatted string)
--dynamicMetadatastringPath to a file containing dynamic metadata (JSON5-formatted) to be merged with metadata
--extraHeadersstringExtra HTTP headers to send with each request (JSON-formatted string)
--muted, -qbooleanMute browser audio (e.g. during video playback) (default: False)
--noFullscreenbooleanDo not start the video studies in fullscreen mode
--noFakeMediaFilesbooleanDo not tell Chrome to use the fake media files as camera and microphone input for web conferencing (default: False)
--noGenerateFakeMediaFilesbooleanDo not generate (or re-generate) the fake media files used for web conferencing (default: False)
--reportDirstringSave the report as JSON to the specified directory
--reportFilestringSave the report as JSON to the specified file (will override reportDir if present)
--sequentialbooleanRun studies sequentially instead of in parallel
--startOffsetnumber (repeatable)Offset the start of the study in seconds. Pass multiple times to offset multiple studies by different amounts (default: 0)
--studyTimeout, -tstringMaximum run time of one study in seconds. A study still running then is aborted with the reason studyTimeout; native tools are stopped. (default: 300)
--sendTimeoutstringMaximum timeout for sending data in seconds. (default: 15)
--keepMeasurementDatabooleanKeep the study chain file under data/ after the server accepted it. By default it is deleted after a successful send; a failed send always keeps it. (default: False)
--latencynumberSet latency for emulated network in milliseconds (Chrome-based studies only) (default: 0)
--uploadThroughputnumberSet upload throughput for emulated network in kBit/s. Set to -1 to disable throttling. (Chrome-based studies only) (default: -1)
--downloadThroughputnumberSet download throughput for emulated network in kBit/s. Set to -1 to disable throttling. (Chrome-based studies only) (default: -1)
--enableTcpDumpbooleanCapture the network traffic of the run with tcpdump (needs capture permission, no root) (default: False)
--tcpDumpDirstringSave the .pcap file to this directory (if not set, saved to pcaps/ in the Surfmeter directory)
--enableHarFilebooleanRecord the HTTP traffic of each browser study into a HAR file (without response bodies) (default: False)
--harFileDirstringSave the .har files to this directory (if not set, saved to har-files/ in the Surfmeter directory)
--enableScreenRecordingbooleanRecord the screen during the run with ffmpeg and libx264 (default: False)
--screenRecordingDirstringSave the .mp4 file to this directory (if not set, saved to recordings/ in the Surfmeter directory)
--screenRecordingTargetUrlstringTarget URL for screen recording (if set, will not write to a file)
--ffmpegCrfnumberSet CRF for ffmpeg (lower is better quality, higher is better compression) (default: 23)
--ffmpegFpsnumberSet FPS for ffmpeg (will be inferred from display refresh rate if not set)
--ffmpegPresetultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslowSet preset for ffmpeg (slower is lower file size and higher CPU usage) (default: veryfast)
--flushDbbooleanAfter the study, send results of earlier runs that have not reached the server yet
--flushDbTimeoutnumberTimeout in seconds for sending earlier results after the study (--flushDb) (default: 10)
--adHocPublicConfigstringJSON-formatted public config to use for ad-hoc studies. When set, it will completely override the default public config.
--filterStallingsThresholdnumberThreshold below which stallings will be filtered out in video measurements (in seconds) (default: 0)

surfmeter measure​

Measure a URL: a web page, a video, a speedtest or a network test (surfmeter measure speedtest://fast.com).

surfmeter measure <url>
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--globalTimeoutnumberWait for how many seconds before exiting Automator (default: 600)
--globalTimeoutGracePeriodnumberWait for how many seconds after the global timeout before forcefully exiting without sending a report (default: 10)
--profileDirstringPath to a persistent Chrome profile to use and keep (by default, every browser gets a temporary profile that is removed afterwards)
--chromeBinarystringPath to the Chrome for Testing binary (defaults to the environment variable SURFMETER_CHROME_BINARY, or to the one managed by the Playwright registry; see surfmeter browser install)
--additionalExtensionsstring (repeatable)Path to additional extension directories (extracted)
--chromeArgsstring (repeatable)Additional Chrome command line arguments (feature flags will be merged with existing ones). Do not specify the leading '--' for these args.
--noLoadSurfmeterLabbooleanDo not load Surfmeter Lab extension (default: False)
--noClearCookiesbooleanDo not clear cookies when starting Chrome (preserves logins) (default: False)
--noClearCachebooleanDo not clear caches when starting Chrome (default: False)
--noClearSystemDnsbooleanDo not clear the system DNS when starting (default: False)
--noDisableNetworkCachebooleanDo not disable the network cache for individual requests (default: False)
--windowSize, -wstringSet the window size in pixels (WxH), if unset will attempt to maximize window (Non-native studies only)
--userAgent, -ustringOverride the user agent when starting the browser
--noQuicbooleanDo not let Chrome use QUIC/HTTP3. Chrome then uses TCP with HTTP/2 or HTTP/1.1 for every request, which is useful for comparing how a service behaves on either transport, or for networks where UDP is blocked or throttled. (default: False)
--enableGpubooleanEnable GPU support for Chrome (default: False)
--enableSandboxbooleanRun Chrome with its sandbox instead of passing --no-sandbox. Works on a normal Linux install with unprivileged user namespaces, but not as root and not in the Docker image (no SYS_ADMIN capability). Chrome does not start when the sandbox is unavailable, so try it on one machine before enabling it everywhere. (default: False)
--headlessbooleanDeprecated, maps to --display browser-headless for backward compatibility; use --display browser-headless directly instead (default: False)
--displaystringHow Chrome attaches to a display: 'auto' (reuse an existing X server or start one), 'xvfb' (always start a fresh virtual X server), 'browser-headless' (Chrome's built-in headless mode), or an X display spec like ':0' or ':123' (default: auto)
--autoOpenDevtoolsbooleanAutomatically open DevTools for all tabs (default: False)
--logConsoleMessagesbooleanLog the console messages of the page and of extension service workers, such as Surfmeter Lab, at info level instead of debug level (default: False)
--noClosebooleanDo not close the browser at the end of a run (default: False)
--noLogNetworkRequestsbooleanDo not record the network requests of browser studies. Video measurements then have no response time and content server statistics, and web measurements no network performance reports. (default: False)
--sendNetworkRequestsbooleanSend the recorded network requests of browser video measurements to the server. Note that this causes a lot of network traffic. (default: False)
--sendNetworkPerformanceReportsbooleanSend a network performance report with each browser web measurement. (default: False)
--sendByteCountReportbooleanSend a byte count report to the server, with the bytes transferred per second and statistics on the throughput (browser video and web studies only). (default: False)
--keepNetworkRequestsbooleanKeep the logged network requests in network-requests/ in the Surfmeter directory instead of deleting them after the study (default: False)
--standalonebooleanRun Measurement in standalone mode, i.e. it will not connect to the Measurement Server (default: False)
--sendEventBundlesbooleanIf set, collect and include event bundles in the request payload. If not set, skip adding events to bundles. (default: False)
--notes, -nstringNotes
--metadata, -mstringMetadata (JSON-formatted string)
--dynamicMetadatastringPath to a file containing dynamic metadata (JSON5-formatted) to be merged with metadata
--extraHeadersstringExtra HTTP headers to send with each request (JSON-formatted string)
--muted, -qbooleanMute browser audio (e.g. during video playback) (default: False)
--noFullscreenbooleanDo not start the video studies in fullscreen mode
--reportDirstringSave the report as JSON to the specified directory
--reportFilestringSave the report as JSON to the specified file (will override reportDir if present)
--studyTimeout, -tstringMaximum run time of one study in seconds. A study still running then is aborted with the reason studyTimeout; native tools are stopped. (default: 300)
--sendTimeoutstringMaximum timeout for sending data in seconds. (default: 15)
--keepMeasurementDatabooleanKeep the study chain file under data/ after the server accepted it. By default it is deleted after a successful send; a failed send always keeps it. (default: False)
--latencynumberSet latency for emulated network in milliseconds (Chrome-based studies only) (default: 0)
--uploadThroughputnumberSet upload throughput for emulated network in kBit/s. Set to -1 to disable throttling. (Chrome-based studies only) (default: -1)
--downloadThroughputnumberSet download throughput for emulated network in kBit/s. Set to -1 to disable throttling. (Chrome-based studies only) (default: -1)
--enableTcpDumpbooleanCapture the network traffic of the run with tcpdump (needs capture permission, no root) (default: False)
--tcpDumpDirstringSave the .pcap file to this directory (if not set, saved to pcaps/ in the Surfmeter directory)
--enableHarFilebooleanRecord the HTTP traffic of each browser study into a HAR file (without response bodies) (default: False)
--harFileDirstringSave the .har files to this directory (if not set, saved to har-files/ in the Surfmeter directory)
--enableScreenRecordingbooleanRecord the screen during the run with ffmpeg and libx264 (default: False)
--screenRecordingDirstringSave the .mp4 file to this directory (if not set, saved to recordings/ in the Surfmeter directory)
--screenRecordingTargetUrlstringTarget URL for screen recording (if set, will not write to a file)
--ffmpegCrfnumberSet CRF for ffmpeg (lower is better quality, higher is better compression) (default: 23)
--ffmpegFpsnumberSet FPS for ffmpeg (will be inferred from display refresh rate if not set)
--ffmpegPresetultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslowSet preset for ffmpeg (slower is lower file size and higher CPU usage) (default: veryfast)
--filterStallingsThresholdnumberThreshold below which stallings will be filtered out in video measurements (in seconds) (default: 0)

surfmeter update​

Download and install a new version of Surfmeter (asks first when run in a terminal).

surfmeter update
OptionTypeDescription
--configDirstringDirectory with automatorConfig.json, publicConfig.json and their .local.json overlays (default: config/ in the Surfmeter directory)
--checkbooleanShow which version is available, without installing it. Exit code 0: no newer version, 2: a newer version is available, 1: the check failed (default: False)
--yes, -ybooleanInstall a newer version without asking, also in a terminal (default: False)

Old Command Names​

The command names of Automator 1.x still work, but print a warning. Use the new ones instead:

  • register: surfmeter auth register
  • checkRegistration: surfmeter auth status
  • setLabel: surfmeter auth label set
  • setTags: surfmeter auth tags set
  • unregister: surfmeter auth unregister
  • migrateBrowserExtension: surfmeter auth migrate
  • startStudy: surfmeter study start
  • listStudyIds: surfmeter study list
  • updateConfig: surfmeter config update
  • updateSelf: surfmeter update
  • flushDbToServer: surfmeter database flush
  • cleanupProfile: surfmeter profile cleanup
  • clearCache: surfmeter cache clear
  • migrateConfig: surfmeter config migrate

The commands loadSchedule and clearSchedule print what to use instead, and exit with an error. See Migrating from Automator 1.x.