Skip to main content
Version: 1.x

Public Config Reference

The publicConfig.json file is a JSON file that contains the configuration for the studies that you can run.

The file is usually located in the config directory of the Automator installation, and it is also implicitly stored inside the Surfmeter Lab extension.

Example File​

Here is an example file without content, which you can use as a template for filling out:

{
"$schema": "https://aveq.info/jsonschema/PublicConfigSectionDataV1.json",
"version": 1,
"credentials": {},
"studies": [
// (1)
],
}
  1. This is where you should specify each study. See Study Descriptions for more information.

The $schema property is optional, but it is recommended to include it for better validation in some editors. Now let's go through the different sections of the config file.

Properties​

Root Properties​

These are the root items of the config file.

PropertyValueDescription
version1Internal version. Do not change this!
studiesarray of Study DescriptionsA list of studies
credentialsCredentials (optional)Credentials for individual services
revisionstring (optional)The revision of the config file. Can be a Git hash, a date, or anything else that makes sense for version control.

Study Descriptions​

A study description is an object that describes a study. It has the following properties:

PropertyValueDescription
idstringA unique identifier for the study
typestringThe general type of study, must be one of WEB, VIDEO, SPEEDTEST, or NETWORK
subjectSubjectThe subject of the study (i.e., the specific measurement technology)
paramsStudy ParamsThe parameters for the study
namesStudy Names (optional)Study names (textual descriptions)
nativeNative Study Params (optional)Custom options for native studies

Examples​

This runs a web study using the browser.

{
"id": "STUDY_TOP5_WEBSITES",
"subject": "website",
"type": "WEB",
"params": {
"timeout": 30,
"urls": [ "google.com", "youtube.com", "facebook.com", "amazon.com", "yahoo.com" ]
}
}

Subjects​

The subject keyword defines the specific measurement technology that is used for the study, or, for video, the service that will be called.

The following subjects are supported per type of measurement. Click on the name of the subject to see the parameters that can be configured.

Note

Most video subjects use the shared parameters. The Lightweight Video Player has its own native parameter set. Links take you to the service-specific documentation, which is also available here.

Study Params​

For each type of study and subject, there are different parameters that can be specified in the params object of the study description.

Forcing the video resolution​

Set params.player.forceResolution to request a video height instead of leaving the choice entirely to the player's native adaptive bitrate logic:

{
"params": {
"player": {
"forceResolution": 1080
}
}
}

The supported values are 144, 240, 360, 480, 720, 1080, 1440, and 2160, expressed as the video height in pixels. A single value requests one resolution. A [min, max] tuple requests a permitted range:

{
"params": {
"player": {
"forceResolution": [720, 1080]
}
}
}

Omit forceResolution, or set it to "auto", to leave native automatic resolution switching enabled. Resolution forcing is currently implemented for these subjects:

  • dashjs disables dash.js video ABR and selects an offered rendition within the requested range. If the manifest has no matching rendition, it selects the highest rendition below the requested maximum, or the lowest available rendition when none is below it.

  • facebook selects one fixed quality from Facebook's player menu. A tuple uses its maximum as the target because the player menu cannot express an ABR range. Videos that Facebook does not stream adaptively have no heights in that menu, and for those the setting has no effect.

  • netflix_trailer constrains the trailer rendition ladder. A tuple allows Netflix to adapt among the renditions in the requested range.

  • waiputv restricts the player's adaptive logic to the renditions in the requested range and switches to one of them immediately. If no rendition matches, the setting has no effect.

  • youtube pins a single value or constrains YouTube's adaptive logic to a requested range.

Other video subjects do not currently implement this setting. Available rendition heights also vary by service and video. When an exact height is unavailable, a service may select a nearby lower rendition; the measurement reports the resolution that was actually played.

Standard Video Study Params​
PropertyTypeDescription
credentialsCredentials (optional)The credentials to use when requesting the video
durationnumberThe length of the video to play in seconds
interactiveInteractive (optional)Interactivity parameters for video browsing. These currently apply to reels-based social media platforms, but could be extended to other services in the future. In order to enable interactive mode, you must at least specify the swipeDelay parameter, and point the study "url" attribute to a playlist of videos (e.g., a YouTube shorts channel).
playModestring (one of: embedded, lab_embedded, normal, unknown)The type of video player mode that is used.
playerPlayerParams (optional)The parameters to use when playing the video. Most fields apply to the browser-based players (dash.js/hls.js), but several (autoplay, skipAds, width, height, forceResolution) also apply to the native service players.
statisticsCalculationStatisticsCalculationParams (optional)The parameters to use when calculating statistics
timeoutnumber (optional)The timeout to use when requesting the video
videoChannelTitleVideoDescription, or SrcVideoDescriptionThe description of the video to load
ChannelTitleVideoDescription​

The parameters to use when playing a video from a channel title.

PropertyTypeDescription
channelTitlestringThe title of the channel to play. The list of possible channel titles depends on the service itself. Please ask our support for that list.
contentTypestring (one of: advertisement, feature, lab, live, ...)The type of video content that is played.
Credentials​

The credentials to use when requesting the video

PropertyTypeDescription
passwordstring
usernamestring
Interactive​

Interactivity parameters for video browsing. These currently apply to reels-based social media platforms, but could be extended to other services in the future.

In order to enable interactive mode, you must at least specify the swipeDelay parameter, and point the study "url" attribute to a playlist of videos (e.g., a YouTube shorts channel).

PropertyTypeDescription
maxDurationnumber (optional)Maximum duration of the test. Whereas "duration" in the study parameters refers to the maximum duration of a single video, this one is the maximum duration of the entire study before it is completed. Note that this may make the last video very short. Alternatively, specify "maxNumVideos" which will limit the overall number of tested videos.
maxNumVideosnumber (optional)The total number of videos that will be tested. The study will finish after playing the last video for the amount of the "duration" attribute.
swipeAfterPlaybackOnlyboolean (optional)If true, swipe only after the video playback has started. Otherwise, swiping will be based on a timer that starts when the last swipe has completed. This means that the delay value will be applied after the video starts playing, rather than immediately after the previous swipe. This can be useful to ensure that the user has enough time to watch the video before swiping, especially if there are any loading times before the video starts.
swipeDelayarray of number, or number (optional)Delay after which to swipe to the next video. Can be a single number or a set of delays, where if the number of videos exceeds the number of swipe delays, the last one will be repeated until the study ends. Note that if a video has a shorter duration than the swipe delay for that given video, the study will automatically swipe to the next video after the current one finishes, even if the swipe delay has not yet been reached. E.g.: [5, 2, 2, ...]
PlayerParams​

The parameters to use when playing the video. Most fields apply to the browser-based players (dash.js/hls.js), but several (autoplay, skipAds, width, height, forceResolution) also apply to the native service players.

PropertyTypeDescription
autoplayboolean (optional)Whether the video should start playing automatically
customParamsobject (optional)Custom params to be passed to the dash.js or hls.js player. Please refer to https://cdn.dashjs.org/latest/jsdoc/module-Settings.html for dash.js, and https://github.com/video-dev/hls.js/blob/master/docs/API.md for hls.js.
drmParamsDrmParams (optional)The parameters to use when playing DRM protected video.
forceResolutionarray (tuple: [number, number]), or one of: 1080, 144, 1440, 2160, ... (optional)Force the streamed video resolution instead of leaving it to the player's native adaptive bitrate logic. A single value pins the resolution exactly; a [min, max] tuple caps the ceiling while still allowing adaptation down to min; 'auto' (or omitting the field) keeps native ABR.
heightnumber (optional)The height in pixels of the video element
keepStateboolean (optional)Keep the state that the player remembers from one run to the next, per service, as for a returning viewer. Off by default. Only valid for YouTube at the moment, where this keeps the player's bandwidth estimate (yt-player-bandwidth). Other services ignore this option.
playerVersionstring (optional)Custom version of the player, useful for dash.js to select a specific hosted version.
skipAdsboolean (optional)Whether any ads should be skipped, if possible
widthnumber (optional)The width in pixels of the video element
SrcVideoDescription​

The parameters to use when playing a video from a URL source.

PropertyTypeDescription
contentTypestring (one of: advertisement, feature, lab, live, ...)The type of video content that is played.
srcstringThe URL of the video to play. Note that this depends on the particular service; some services have no permanent video URLs, or the URLs may be dynamically generated, so you should use a channelTitle instead. In case of questions you can ask us for a sample configuration.
StatisticsCalculationParams​

The parameters to use when calculating statistics

PropertyTypeDescription
forceNominalBitrateboolean (optional)Whether to calculate the bitrate of the video using manifest bitrates
DrmParams​

The parameters to use when playing DRM protected video.

PropertyTypeDescription
httpRequestHeadersobject (optional)DRM HTTP Headers
serverUrlstringDRM Server Url
typestring (one of: widevine, playready, clearkey)DRM Type
Lightweight Video Player Study Params​
PropertyTypeDescription
connectTimeoutnumber (optional)Connection timeout in seconds. Default 10.
dashSchedulingThresholdnumber (optional)Buffer level (seconds) below which the DASH profile fetches the next segment. Default 6.
dashTargetBuffernumber (optional)Forward buffer target (seconds) the DASH profile fills up to. Default 18.
devicestring (one of: mobile, pc) (optional)Device identifier reported in the P.1203 metadata. Default "pc".
displaySizestring (optional)Simulated display resolution as "widthxheight" in pixels, used for P.1203 scoring. Default "1920x1080".
durationnumberThe length of the measurement in seconds.
headersobject (optional)Extra HTTP request headers to send with every request.
hlsSchedulingThresholdnumber (optional)Buffer level (seconds) below which the HLS profile fetches the next segment. Default 10.
hlsTargetBuffernumber (optional)Forward buffer target (seconds) the HLS profile fills up to. Default 30.
manifestAttemptsnumber (optional)Number of HTTP attempts for the manifest before giving up. Default 2.
maxBitratenumber (optional)Highest declared video bitrate in bit/s that ABR may select. Audio is not affected.
maxEventLogBytesnumber (optional)Maximum retained request event-log size in bytes. Default 4194304 (4 MiB).
maxExpandedSegmentsnumber (optional)Maximum number of segments expanded from a single timeline. Default 20000.
maxInFlightBodyBytesnumber (optional)Maximum retained response-body memory in bytes. Default 8388608 (8 MiB).
maxManifestBytesnumber (optional)Maximum manifest body size in bytes. Default 2097152 (2 MiB).
maxPlaylistLineBytesnumber (optional)Maximum HLS playlist line length in bytes. Default 16384.
maxResolutionnumber (optional)Highest video height in pixels that ABR may select, for example 1080. Audio is not affected.
maxSegmentBytesnumber (optional)Maximum segment body size in bytes. Default 4194304 (4 MiB).
maxUrlBytesnumber (optional)Maximum URL length in bytes. Default 8192.
maxXmlDepthnumber (optional)Maximum DASH XML nesting depth. Default 64.
minBitratenumber (optional)Lowest declared video bitrate in bit/s that ABR may select. Audio is not affected.
minResolutionnumber (optional)Lowest video height in pixels that ABR may select, for example 480. Audio is not affected.
profileunknown, or string (one of: dash, hls) (optional)ABR compatibility profile to emulate. 'hls' and 'dash' select the latest supported profile for that protocol; a specific versioned profile name may also be passed for reproducibility. Auto-detected from the manifest extension when omitted.
proxystring (optional)HTTP/HTTPS proxy URL to route all requests through.
refererstring (optional)Value for the HTTP Referer header.
renditionstring (optional)Fixed video rendition, which turns off ABR for video: a height such as "720p" (the highest bitrate at that height), "lowest", "highest", or "id:<representation id>". Cannot be combined with the min/max options. The measurement fails at startup if a rendition constraint matches no video rendition.
requestTimeoutnumber (optional)Per-request transfer timeout for manifests and segments, in seconds. Default 30.
resolvearray of string (optional)Fixed addresses for host names, each as "HOST:PORT:ADDR" (as with curl's --resolve), for example "cdn.example.com:443:192.0.2.1". Write an IPv6 address in brackets. TLS and the Host header keep the original host name. Cannot be combined with proxy.
segmentAttemptsnumber (optional)Number of HTTP attempts per segment before giving up. Default 3.
sensitiveHeadersarray of string (optional)Header names whose values must be redacted from the report and diagnostics. Common auth headers (e.g. Authorization, Cookie) are always redacted; list any additional names here.
timeoutnumber (optional)Timeout for the measurement in seconds. This includes the load/playback duration. If a measurement is not finished by this timeout, it will be aborted and marked as failed. Default: Twice the duration.
urlstringThe HLS or DASH manifest, or the progressive MP4 file, to measure. Choose a canonical URL.
viewingDistancestring (optional)Viewing distance reported in the P.1203 metadata. Default "150cm".
Web Study Params​
website​

A web study for one or more websites loaded through the browser.

PropertyTypeDescription
randomizeboolean (optional)randomize the URLs
timeoutnumber (optional)How long in seconds before load is cancelled
urlsarray of stringA list of URLs to load in the study
lighthouse​

A web study for one or more websites loaded with Google Lighthouse. Requires the lighthouse CLI tool. For details, see the Lighthouse specification

PropertyTypeDescription
emulatedFormFactorstring (one of: desktop, mobile, none) (optional)How emulation (useragent, device screen metrics, touch) should be applied. none indicates Lighthouse should leave the host browser as-is
emulatedUserAgentstring (optional)The user agent string that the emulation should use
maxWaitForLoadnumber (optional)The maximum amount of time to wait for a page to load, in ms
randomizeboolean (optional)randomize the URLs
throttlingobject with properties: cpuSlowdownMultiplier, downloadThroughputKbps, requestLatencyMs, rttMs, throughputKbps, uploadThroughputKbps (optional)The network throttling to apply to the run
throttlingEnabledboolean (optional)Whether to enable network throttling
throttlingMethodstring (one of: devtools, provided, simulate) (optional)The method used to throttle the network
timeoutnumber (optional)How long in seconds before load is cancelled
urlsarray of stringA list of URLs to load in the study
Speedtest Study Params​
fastcom​

A speedtest study on fast.com.

PropertyTypeDescription
maxConnectionsnumber (optional)The maximum number of connections to use
maxDurationnumber (optional)Maximum test duration in seconds
measureUploadLatencyboolean (optional)Whether to measure loaded latency
minConnectionsnumber (optional)The minimum number of connections to use
minDurationnumber (optional)Minimum test duration in seconds
nperf​

This subject has no parameters to configure.

Network Study Params​
dns​

A network study implementing the DNS protocol, making one or more DNS queries against a specified host, optionally using a specific nameserver.

If DNS caching is used, this means that the first request will take longer, as the cache is warmed up, and subsequent requests will be faster.

Running a DNS study requires the dig CLI tool, unless the useGetAddrInfo flag is set to true, in which case, the getaddrinfo system call is used via Node.js.

When dig is used, it will make a simple A query by default, and we measure the time for the single request. When using getaddrinfo, an A and AAAA query are made at the same time, and the time to complete both queries is measured.

PropertyTypeDescription
hostarray of string, or stringThe host(s) to query
nameserverstring (optional)The DNS nameserver to use (if unset, will use system default). Not applicable when useGetAddrInfo is true.
parallelboolean (optional)Parallelize DNS lookups across hosts
queryCountnumber (optional)The number of queries to send, default: 1
randomizeboolean (optional)Randomize the order of the hosts
recordTypestring (one of: A, AAAA) (optional)The DNS record type to query with dig. Default: A. Not applicable when useGetAddrInfo is true.
samplenumber (optional)Sample only up to N hosts from the given list
useGetAddrInfoboolean (optional)Use getaddrinfo instead of dig, and make an A and AAAA query at the same time
icmpping​

A network study implementing the ICMP ping protocol. Requires the ping CLI tool.

PropertyTypeDescription
discardFirstPacketboolean (optional)Discard the first packet (e.g. to avoid DNS lookup interfering with)
hostarray of string, or stringThe host(s) to ping
intervalnumber (optional)Interval between pings, in seconds
ipVersionstring (one of: v4, v6) (optional)IP version to use. Default: v4
packetCountnumber (optional)How many packets to send. Default: 10, unless totalTime is specified, which causes the packet count to be adjusted accordingly.
packetSizenumber (optional)Size of each packet, in bytes
parallelboolean (optional)Parallelize the pings across hosts
randomizeboolean (optional)Randomize the order of the hosts
totalTimenumber (optional)Total time to ping for, in seconds. In parallel mode, this is the total time for all parallel pings. In sequential mode, the total time will be split among the hosts (i.e., time per host = totalTime / host count). If packetCount is specified, the test will end after packetCount is reached, or totalTime, whichever comes first.
ooklaspeedtest​

A network study implementing the Ookla Speedtest CLI. Requires the speedtest CLI tool.

PropertyTypeDescription
hoststring (optional)The server via its host's fully qualified domain name
serverstring (optional)The server via its ID
traceroute​

A network study implementing the traceroute CLI. This is based on the Linux (and, where possible, the macOS) traceroute CLI.

PropertyTypeDescription
asLookupboolean (optional)Perform AS path lookups in routing registries and print results directly after the corresponding addresses. Only with GNU traceroute or macOS traceroute.
gatewaystring (optional)Add an IP source routing option to the outgoing packet that tells the network to route the packet through the specified gateway(s). Comma-separate multiple gateways.
hostarray of string, or stringThe host(s) to traceroute to
interfacestring (optional)Specifies the interface through which traceroute should send packets. By default, the interface is selected according to the routing table.
ipVersionstring (one of: v4, v6) (optional)Explicitly force IPv4 or IPv6 traceouting. By default, the program will try to resolve the name given, and choose the appropriate protocol automatically. If resolving a host name returns both IPv4 and IPv6 addresses, traceroute will use IPv4.
maxHopsnumber (optional)Specifies the maximum number of hops (max time-to-live value) traceroute will probe. The default is 30.
parallelboolean (optional)Parallelize the traceroutes across hosts
probeCountnumber (optional)Sets the number of probe packets per hop. The default is 3.
probeIntervalnumber (optional)Minimal time interval between probes (default 0). If the value is more than 10, then it specifies a number in milliseconds, else it is a number of seconds (float point values allowed too). Useful when some routers use rate-limit for icmp messages.
useIcmpboolean (optional)Set to true to explicitly use ICMP (if unset, will default to what traceroute does by default)
useTcpboolean (optional)Set to true to explicitly use TCP (if unset, will default to what traceroute does by default)
waitTimenumber (optional)Set the time (in seconds) to wait for a response to a probe (default 5.0 sec).
httpprober​

A network study implementing the HTTP Prober tool for testing CDN delivery of large static files.

PropertyTypeDescription
abortedReasonstring (optional)Aborted reason if the main CLI call was aborted
disableHeadersboolean (optional)Disable headers in output (default: false)
disableTimingsboolean (optional)Disable timing information collection (default: false)
disabledTestsarray of string (optional)Test types to disable
enabledTestsarray of string (optional)Specific test types to enable (default: all test types)
freshConnectionsboolean (optional)Force fresh TCP/TLS connections for each request to simulate multiple clients (default: false)
hostHeaderstring (optional)Custom Host header value to send with all requests
http2boolean (optional)Whether to use HTTP/2 for protocol testing (default: false)
noRedirectboolean (optional)Do not follow HTTP redirects (default: false)
parallelnumber (optional)Number of parallel requests for error rate and byte range testing (default: 1)
rangestring (optional)Byte range to request for applicable tests (default: "0-1023")
requestsnumber (optional)Number of requests for error rate and byte range testing (default: 10)
timeoutnumber (optional)Timeout for requests in seconds (default: 30)
traceRedirectsboolean (optional)Collect redirect chain details when following redirects (default: false)
urlsarray of string, or stringSingle URL or array of URLs to test
userAgentsarray of string (optional)Custom user agents to test (default: predefined set)
Conferencing Study Params​
googlemeet​

A conferencing study that joins a conference and measures the performance and quality.

PropertyTypeDescription
durationnumberDuration of the study in seconds
modestring (one of: host, join) (optional)The mode of the conference, if host, will attempt to let others join
timeoutobject with properties: joinTimeout, partnerWaitTimeout, webuiLoadTimeout (optional), or number (optional) (optional)Timeout for joining in seconds
urlstringThe URL of the conference to join
microsoftteams​

A conferencing study that joins a conference and measures the performance and quality.

PropertyTypeDescription
durationnumberDuration of the study in seconds
modestring (one of: host, join) (optional)The mode of the conference, if host, will attempt to let others join
timeoutobject with properties: joinTimeout, partnerWaitTimeout, webuiLoadTimeout (optional), or number (optional) (optional)Timeout for joining in seconds
urlstringThe URL of the conference to join

Native Study Params​

These are custom options for native studies. Native studies run on the host operating system — they are not run in the browser.

PropertyTypeDescription
enabledbooleanMust be set to true by user to actively enable this study
cmdPrefixarray of string (optional)Prepend to the native command
cmdSuffixarray of string (optional)Append to the native command
cwdstring (optional)Override the current working directory
envobject (optional)Pass custom environment variables
executablestring (optional)Override the executable for the native measurement

You must set enable to true for a native study to work.

Automator Parmas​

These are custom options for the Automator.

PropertyTypeDescription
enableFullscreenboolean (optional)Enable fullscreen playback for video if possible. This is true by default. Set to false to disable.
Examples​

Always pass enable: true to enable a native study.

{
"id": "STUDY_LIGHTHOUSE",
"type": "WEB",
"subject": "lighthouse",ed": true,
}
}

Study Names​

The study names are used to display the study in the UI. The names are specified in a dictionary, with the language code as the key. The following languages are supported:

LanguageCode
Englishen_US
Germande_DE
Frenchfr_FR

Each object has a short and long key.

To specify the names, you must at least use the en_US key.

Example​

The following example shows the names for a study in English and German:

publicConfig.json
{
// ...
"studies": [
{
"id": "STUDY_WEB",
// ... other params": {
"short": "Web Top 5",
"long": "Test-Queue für 5 der meistbesuchten Websites in den USA"
}
}
}
// ... other studies
]
}

Credentials​

A credentials dictionary is required when measuring a closed-access service such as Netflix. It contains one key for each service, and the value is a dictionary with the username and password for that service.

For a list of possible service keys, see the list of subject values.

Tip

These credentials are likely to be different per device. Use the local config feature to specify different credentials for different devices.

Warning

The credentials are stored in plain text in the publicConfig.json file. Do not commit this file to a public repository. Ideally, change the permissions of the file so that only the user running the Automator can read it, i.e. chmod 600 publicConfig.json.

Example​

publicConfig.json
{
"credentials": {
"netflix": {
"username": "foo@example.com",
"password": "bar"
}
},
"studies": [
// ...
]
}