PPROLint

Computed scopes

Scopes whose items PPROLint computes: gaps, outliers, pairs of clips, requirements.

Most rules run on the items of the sequence: its clips, tracks, effects or markers. Some checks need items that are not in the timeline as such: a gap between clips, a clip compared with the median of its track, an audio clip paired with the video clip it plays under, a requirement that is not met. PPROLint computes these items, and a rule names the computation as its scope: in the editor, the Analyzers group of the Scope list; in a rule file, "scope": "<id>".

What stays in the rule is what you decide: the thresholds, the condition, the message, the severity. The same computed scope can serve several rules.

How to use one

  • Start from a built-in rule. Each computed scope below lists the built-in rules using it. Open one in the editor, or copy its file from its page, and change its thresholds and messages.
  • Fields. Each item has the scope's own fields, under its prefix (gap.durationFrames), and the fields of its base scope: a gap has the sequence.* fields, an outlier the clip.*, track.* and sequence.* fields of its clip. A field of type json can only be copied into data.
  • Options. A computed scope reads options of the rule, such as the minimum number of clips to compare. The rule must declare each with the type given below; picking the scope in the editor adds them with placeholder defaults. A json option holds a structured value, described in the option's description.
  • Where reports point. The computed scope chooses each item's target and position: the gap's start, the outlier clip.

scale-outliers

Video clips compared with the median scale of their track or sequence.

PropertyValue
Fieldsoutlier.*, plus the fields of the clip scope (see Fields)
Used byScale outliers
FieldTypeDescription
outlier.valuenumberThe clip's value.
outlier.mediannumberMedian of the population.
outlier.deviationPercentnumberDeviation from the median, in percent of the median. Negative below.
outlier.absDeviationPercentnumberAbsolute deviation, in percent of the median.
outlier.populationKeystring"V1", "A2" for a track population, "sequence" otherwise.
outlier.populationSizenumberClips in the population.
outlier.populationIsTrackbooleanThe population is one track (false: the whole sequence).

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
scopestring"track" compares clips with the other clips on the same track; "sequence" with every eligible clip of the sequence.
minClipsnumberPopulations smaller than this are insufficient data and are not analysed.

speed-outliers

Clips compared with the median speed of their track or sequence.

PropertyValue
Fieldsoutlier.*, plus the fields of the clip scope (see Fields)
Used bySpeed outliers
FieldTypeDescription
outlier.valuenumberThe clip's value.
outlier.mediannumberMedian of the population.
outlier.deviationPercentnumberDeviation from the median, in percent of the median. Negative below.
outlier.absDeviationPercentnumberAbsolute deviation, in percent of the median.
outlier.populationKeystring"V1", "A2" for a track population, "sequence" otherwise.
outlier.populationSizenumberClips in the population.
outlier.populationIsTrackbooleanThe population is one track (false: the whole sequence).

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
scopestring"track" compares clips with the other clips on the same track; "sequence" with every eligible clip of the sequence.
minClipsnumberPopulations smaller than this are insufficient data and are not analysed.

audio-level-outliers

Audio clips compared with the median volume setting of their track or sequence.

PropertyValue
Fieldsoutlier.*, plus the fields of the clip scope (see Fields)
Used byAudio level outliers
FieldTypeDescription
outlier.valuenumberVolume setting in dB.
outlier.mediannumberMedian volume of the population, in dB.
outlier.deviationnumberDifference from the median in dB. Negative when quieter.
outlier.absDeviationnumberAbsolute difference from the median in dB.
outlier.populationKeystring"V1", "A2" for a track population, "sequence" otherwise.
outlier.populationSizenumberClips in the population.
outlier.populationIsTrackbooleanThe population is one track (false: the whole sequence).

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
scopestring"track" compares clips with the other clips on the same track; "sequence" with every eligible clip of the sequence.
minClipsnumberPopulations smaller than this are insufficient data and are not analysed.

duration-outliers

Clips compared with the typical duration of their track or sequence.

PropertyValue
Fieldsoutlier.*, plus the fields of the clip scope (see Fields)
Used byDuration outliers
FieldTypeDescription
outlier.znumberModified z-score of the log duration. Negative when shorter.
outlier.absZnumberAbsolute modified z-score.
outlier.durationTicksnumberClip duration in ticks.
outlier.durationSecondsnumberClip duration in seconds.
outlier.typicalTicksnumberTypical duration of the population (exp of the median log duration), in ticks.
outlier.typicalSecondsnumberTypical duration in seconds.
outlier.populationKeystring"V1", "A2" for a track population, "sequence" otherwise.
outlier.populationSizenumberClips in the population.
outlier.populationIsTrackbooleanThe population is one track (false: the whole sequence).

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
scopestring"track" compares clips with the other clips on the same track; "sequence" with every eligible clip of the sequence.
minClipsnumberPopulations smaller than this are insufficient data and are not analysed.

missing-effects

Clips lacking an effect that other clips of their track or sequence carry.

PropertyValue
Fieldsmissing.*, plus the fields of the clip scope (see Fields)
Used byInconsistent effects
FieldTypeDescription
missing.matchNamestringMatch name of the effect the clip lacks.
missing.displayNamestringDisplay name of that effect, from a clip that has it.
missing.withEffectnumberClips of the population that carry the effect.
missing.prevalencenumberwithEffect / populationSize.
missing.populationKeystring"V1", "A2" for a track population, "sequence" otherwise.
missing.populationSizenumberClips in the population.
missing.populationIsTrackbooleanThe population is one track (false: the whole sequence).

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
scopestring"track" compares clips with the other clips on the same track; "sequence" with every eligible clip of the sequence.
minClipsnumberPopulations smaller than this are insufficient data and are not analysed.

video-gaps

Ranges of the work area where no video clip is visible.

PropertyValue
Fieldsgap.*, plus the fields of the sequence scope (see Fields)
Used byVideo gaps
FieldTypeDescription
gap.startnumberGap start (ticks).
gap.endnumberGap end (ticks).
gap.startTimecodestringGap start as timecode.
gap.endTimecodestringGap end as timecode.
gap.durationTicksnumberDuration in ticks.
gap.durationFramesnumberDuration in whole frames.
gap.durationFramesRoundednumberDuration in frames, one decimal, for messages.
gap.durationSecondsnumberDuration in seconds.
gap.durationIsSecondsbooleanAt least one second long: word it in seconds rather than frames.
gap.kindstring"leading" (touches the work area start), "inner" or "trailing".
gap.hasBeforebooleanA clip ends the coverage before the gap.
gap.beforeNamestringName of the clip before the gap.
gap.beforeTrackstringTrack of the clip before the gap: "V1", "A2".
gap.hasAfterbooleanA clip starts the coverage after the gap.
gap.afterNamestringName of the clip after the gap.
gap.afterTrackstringTrack of the clip after the gap: "V1", "A2".

Reads no options.

audio-gaps

Ranges of the work area where no audio clip is audible.

PropertyValue
Fieldsgap.*, plus the fields of the sequence scope (see Fields)
Used byAudio gaps
FieldTypeDescription
gap.startnumberGap start (ticks).
gap.endnumberGap end (ticks).
gap.startTimecodestringGap start as timecode.
gap.endTimecodestringGap end as timecode.
gap.durationTicksnumberDuration in ticks.
gap.durationFramesnumberDuration in whole frames.
gap.durationFramesRoundednumberDuration in frames, one decimal, for messages.
gap.durationSecondsnumberDuration in seconds.
gap.durationIsSecondsbooleanAt least one second long: word it in seconds rather than frames.
gap.kindstring"leading" (touches the work area start), "inner" or "trailing".
gap.hasBeforebooleanA clip ends the coverage before the gap.
gap.beforeNamestringName of the clip before the gap.
gap.beforeTrackstringTrack of the clip before the gap: "V1", "A2".
gap.hasAfterbooleanA clip starts the coverage after the gap.
gap.afterNamestringName of the clip after the gap.
gap.afterTrackstringTrack of the clip after the gap: "V1", "A2".

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
silenceDbnumberClips whose static volume is at or below this do not count as audio.

av-sync-pairs

Audio clips paired with the overlapping video clip of the same source, with their drift.

PropertyValue
Fieldspair.*, plus the fields of the clip scope (see Fields)
Used byOut-of-sync audio and video
FieldTypeDescription
pair.driftTicksnumberAudio offset from the video's source mapping, in ticks. Positive: the audio is late.
pair.driftFramesnumberDrift in frames, signed.
pair.absDriftFramesnumberAbsolute drift in frames.
pair.absDriftFramesRoundednumberAbsolute drift in frames, one decimal, for messages.
pair.videoNamestringName of the video clip.
pair.videoTrackstringTrack of the video clip: "V1", "A2".
pair.projectItemIdstringShared project item id.

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
kindsstring[]Source kinds compared.

adjustment-layer-edges

Adjustment layer edges inside a clip below, with the offset to the clip's edge.

PropertyValue
Fieldsedge.*, plus the fields of the clip scope (see Fields)
Used byPartial adjustment layer coverage
FieldTypeDescription
edge.sidestring"start" or "end" of the adjustment layer.
edge.timenumberTime of the edge (ticks).
edge.timecodestringTime of the edge as timecode.
edge.offsetTicksnumberDistance to the clip's own edge on that side, in ticks.
edge.offsetFramesnumberOffset in frames.
edge.offsetFramesRoundednumberOffset in frames, one decimal, for messages.
edge.clipNamestringName of the clip below.
edge.clipTrackstringTrack of the clip below: "V1", "A2".

Reads no options.

repeated-footage-pairs

Clips reusing a source range already used by an earlier clip of the same source.

PropertyValue
Fieldsreuse.*, plus the fields of the clip scope (see Fields)
Used byRepeated footage
FieldTypeDescription
reuse.overlapTicksnumberDuration in ticks.
reuse.overlapFramesnumberDuration in whole frames.
reuse.overlapFramesRoundednumberDuration in frames, one decimal, for messages.
reuse.overlapSecondsnumberDuration in seconds.
reuse.overlapIsSecondsbooleanAt least one second long: word it in seconds rather than frames.
reuse.earlierNamestringName of the earlier clip.
reuse.earlierTrackstringTrack of the earlier clip: "V1", "A2".
reuse.earlierStartnumberStart of the earlier clip (ticks).
reuse.earlierTimecodestringStart of the earlier clip as timecode.
reuse.projectItemIdstringShared project item id.

Reads no options.

required-effects

Clips missing an effect the configuration requires on their track.

PropertyValue
Fieldsrequirement.*, plus the fields of the clip scope (see Fields)
Used byRequired effects
FieldTypeDescription
requirement.matchNamestringRequired match name.
requirement.displayNamestringDisplay name of the effect, from a clip that has it, else the match name.
requirement.explanationstringThe requirement's message with a leading space, or empty.
requirement.tracksjsonThe requirement's track references.
requirement.trackTypestring?The requirement's track type.

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
effectsjsonRequirements: { "matchName", "tracks"?: ["V1"], "trackType"?: "video" | "audio", "message"? }. Empty: nothing is required.
ignoreKindsstring[]Source kinds exempt from requirements.

restricted-effects

Clips using an effect the configuration forbids.

PropertyValue
Fieldsrestricted.*, plus the fields of the clip scope (see Fields)
Used byRestricted effects
FieldTypeDescription
restricted.matchNamestringMatch name of the restricted effect.
restricted.displayNamestringDisplay name of the effect on the clip.
restricted.explanationstringThe entry's message with a leading space, or empty.

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
effectsjsonMatch names, or { "matchName", "message"? } to append an explanation. Empty: nothing is restricted.

required-markers

Configured marker requirements the sequence does not meet.

PropertyValue
Fieldsrequirement.*, plus the fields of the sequence scope (see Fields)
Used byRequired markers
FieldTypeDescription
requirement.foundnumberMatching markers found.
requirement.minCountnumberMarkers required.
requirement.pluralCountnumberfound, or 1 when none was found, so the requirement reads in the singular.
requirement.hasTypebooleanThe requirement names a marker type.
requirement.typestring?Required marker type.
requirement.hasNamebooleanThe requirement names a marker name.
requirement.namestring?Required name.
requirement.hasPatternbooleanThe requirement has a name pattern.
requirement.namePatternstring?Required name pattern (regular expression source).
requirement.hasColorbooleanThe requirement has a color index.
requirement.colorIndexnumber?Required color index.
requirement.explanationstringThe requirement's message with a leading space, or empty.
requirement.requirementjsonThe requirement as configured.

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
markersjsonRequirements: { "type"?, "name"?, "namePattern"?, "colorIndex"?, "minCount"? (1), "message"? }; criteria combine with AND. Empty: nothing is required.

required-tracks

Ways the track layout misses the configured requirements.

PropertyValue
Fieldsviolation.*, plus the fields of the sequence scope (see Fields)
Used byRequired tracks
FieldTypeDescription
violation.kindstring"minVideo", "minAudio", "missingVideoName", "missingAudioName", "missingTrack", "wrongName" or "empty".
violation.countnumber?Tracks found (count requirements).
violation.minnumber?Tracks required (count requirements).
violation.namestring?Required name, or the name found for a wrong name.
violation.expectedstring?Expected name (wrong name).
violation.trackRefstring?Track concerned: "V1", "A2".
violation.trackNamestring?Name of the track concerned.
violation.requirementjsonThe requirement as configured.
violation.foundjsonWhat was found, when it is not the requirement itself.

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
minVideoTracksnumberMinimum number of video tracks. 0: not checked.
minAudioTracksnumberMinimum number of audio tracks. 0: not checked.
videoTrackNamesstring[]Names that must exist among video tracks.
audioTrackNamesstring[]Names that must exist among audio tracks.
tracksjsonPer-position requirements: { "ref": "V1", "name"?, "nonEmpty"? }.

sequence-settings

Sequence settings (frame rate, frame size) outside the allowed values.

PropertyValue
Fieldssetting.*, plus the fields of the sequence scope (see Fields)
Used bySequence settings
FieldTypeDescription
setting.kindstring"frameRate" or "frameSize".
setting.frameRatenumberThe sequence frame rate.
setting.frameSizeTextstringThe sequence frame size: "1920×1080".
setting.frameSizesTextstringThe allowed frame sizes, comma separated.
setting.frameRatesjsonAllowed frame rates.
setting.frameSizejsonThe sequence frame size.
setting.frameSizesjsonAllowed frame sizes.

Options it reads, which the rule must declare with these types:

OptionTypeDescription in the built-in rule
frameRatesnumber[]Allowed frame rates. 23.976, 29.97… stand for 24000/1001, 30000/1001… Empty: not checked.
frameSizesjsonAllowed frame sizes: { "width", "height" }. Empty: not checked.

On this page