Vidtreo

Lenses

Design what Intelligence extracts from your recordings — objective, summary sections, typed fields, scoring rubrics, rules, and visual checks — and manage lens versions safely.

Lenses

A lens is a reusable analysis configuration: it tells Intelligence what to look for in a recording and what shape the answer must have. The same lens produces the same structure for every recording it analyzes, so you can store, compare, and automate on its results.

A lens belongs to your company and can be activated in any of its environments. Every change is versioned, and each analysis records the exact version it used.

Creating and Editing Lenses

Lenses are created and edited in the dashboard with the Designer: open Intelligence → + New lens, or Edit with the Designer on an existing lens. The Designer reads a sample recording (or your description), proposes lenses that fit, and asks a few questions to refine the one you choose. Everything it writes stays editable on the draft board, and drafts are saved automatically.

You can also design, edit, publish, and activate lenses from your AI assistant with the VIDTREO MCP.

This page documents every building block of a lens — what it does, its limits, and how it shows up in the result — so you can design lenses deliberately and read their results with confidence.

Anatomy of a Lens

Building blockIn the DesignerRequiredWhat it controls
ObjectiveGoalYesThe purpose of the analysis
Summary sectionsSummary sectionsNoThe headings of the written summary
FieldsData pointsNoTyped values to extract (findings in the result)
RubricScoringNoCriteria scored with evidence (scorecard in the result)
Trust rulesRules it followsNoHard rules the analysis must follow
ArtifactsWhat each analysis includesNoThe parts of the report shown in the dashboard
InstructionsAsk the DesignerNoExtra guidance on how to interpret the recording
Output languageAsk the Designer (Report language)NoLanguage of every text in the result
Visual checksAsk the Designer (On-screen checks)NoYes/no questions answered from what is seen on screen

Instructions, output language, and visual checks have no form of their own: ask the Designer for them in the conversation (for example, "Write the report in Spanish" or "Check whether a slide is being shared"). They appear in the lens's version history as Instructions, Report language, and On-screen checks.

The configuration keys below (objective, fields, rubric...) are the names used in the lens configuration and in the result. Every result also includes a summary, speakers, chapters, and quality checks, whatever the lens configuration — see the Result reference.

Example

A complete configuration for screening job candidates from a recorded video answer:

{
  "objective": "Evaluate a candidate's recorded answer for a backend engineering role: background, motivation, and fit.",
  "instructions": "The candidate answers a single prompt. Focus on concrete experience and avoid judging accent or appearance.",
  "outputLanguage": "en",
  "summarySections": ["Background", "Motivation", "Concerns"],
  "fields": [
    { "name": "years_of_experience", "type": "number", "description": "Years of professional backend experience the candidate states." },
    { "name": "willing_to_relocate", "type": "boolean", "description": "Whether the candidate says they are willing to relocate." },
    { "name": "english_level", "type": "enum", "description": "Spoken English level shown in the recording.", "enumValues": ["basic", "intermediate", "advanced", "native"] },
    { "name": "tools_mentioned", "type": "array", "itemType": "text", "description": "Languages, databases, and tools the candidate mentions using." },
    { "name": "reads_from_notes", "type": "boolean", "description": "Whether the candidate appears to read from notes or another screen." }
  ],
  "rubric": [
    { "id": "communication", "label": "Communication", "maxScore": 5, "description": "Clear, structured answers with concrete examples." },
    { "id": "technical_depth", "label": "Technical depth", "maxScore": 5, "description": "Explains architecture decisions, trade-offs, and results." }
  ],
  "scale": 10,
  "trustRules": [
    { "id": "no_protected_traits", "description": "Never comment on age, gender, ethnicity, accent, or appearance." }
  ],
  "visualChecks": [
    { "id": "looks_off_screen", "question": "Is the candidate repeatedly looking away from the camera, as if reading?" }
  ]
}

Objective

objective · string · required · up to 4,000 characters

One or two sentences describing what the analysis is for. It frames everything else the lens extracts. A lens with an empty objective cannot be published.

"Qualify inbound sales calls: needs, budget, timeline, and decision makers."

Instructions

instructions · string · optional · up to 8,000 characters

Context and interpretation guidance: who is speaking, what a good answer looks like, domain vocabulary, what to ignore.

Output Language

outputLanguage · "auto" | "en" | "es" · default "auto"

The language of every text value in the result — summary, points, chapters, field values, and rubric feedback. With auto, the result is written in the main language spoken in the recording. Set a fixed language when your downstream systems or reviewers expect one language regardless of what is spoken — for example, English reports for Spanish-language interviews.

The output language is independent of the spoken language. Intelligence transcribes recordings in Spanish and English, including recordings that mix both — see Analyzing a recording manually.

Summary Sections

summarySections · string[] · up to 20 sections · up to 200 characters each

The headings of the written summary. Each section comes back in result.sections[], in the same order, with labeled points that cite their evidence. Sections are semantic: they cover the whole recording, not a time range.

If no sections are configured, the result contains a single Summary section. Duplicate titles are merged.

Fields

fields · array · up to 50 fields

Structured values extracted from the recording. Each field becomes one entry in result.findings[].

PropertyTypeRules
namestringRequired, 1–100 characters, unique within the lens. Use a stable, machine-friendly name such as budget_range — it is the key your code reads
typestringtext, number, boolean, enum, or array
descriptionstringUp to 1,000 characters. What the value means and how to determine it — this is what the analysis reads
enumValuesstring[]For enum fields, and for array fields whose itemType is enum. Up to 50 values of up to 100 characters each
itemTypestringRequired for array fields: text, number, boolean, or enum

How each type is returned:

typeReturned value
textA string
numberA string containing a number, e.g. "6"
booleanA yes/no string in the output language
enumA string, one of enumValues
arrayA list of strings (null when there is nothing to list). With itemType: "enum", every item is one of enumValues

Every value comes with a status (supported, insufficient_evidence, or contradictory) and the evidence behind it. A value that cannot be backed by the recording is returned as null — never guessed. See Reading field values.

Rubric and Scale

rubric · array · up to 30 criteria · scale · number | null

A rubric turns the lens into a scorecard. Each criterion is scored from 0 to its maxScore, with written feedback and the evidence that justifies the score.

PropertyTypeRules
idstringRequired, 1–100 characters, unique within the rubric
labelstringRequired, 1–200 characters. Shown to reviewers
maxScorenumberGreater than 0, up to 1000
descriptionstringOptional, up to 1,000 characters. What earns a high or low score — the more concrete, the more consistent the scoring

scale is optional. When omitted, it is the sum of every maxScore. When set, it must equal that sum (for example, two criteria of 5 require a scale of 10).

How scoring works:

  • The model scores each criterion individually; VIDTREO computes the total. The model never adds up scores.
  • A criterion scored without valid evidence is discarded (score: null, downgraded: true).
  • scorecard.total is only set when every criterion has a score (complete: true). Otherwise it is null, and the run's display score reads incomplete score.
  • When an expected element is absent from the recording (for example, an answer with no conclusion), the criterion is scored low with evidence of the absence rather than skipped.

Trust Rules

trustRules · array · up to 30 rules

Rules the analysis must always follow, written in plain language. Use them for compliance and fairness constraints that must hold for every recording.

PropertyTypeRules
idstringUp to 100 characters
descriptionstringUp to 1,000 characters — the rule itself

"Never comment on age, gender, ethnicity, accent, or appearance." "Do not infer a budget that the customer did not state."

These are applied on top of the rules every analysis already follows: use only what is in the recording, cite evidence for every claim, and answer insufficient_evidence instead of guessing.

Visual Checks

visualChecks · array · up to 20 checks

Yes/no questions answered from what appears on screen: slides, shared screens, the people in frame, the environment.

PropertyTypeRules
idstringLowercase letters, digits, and _, 1–60 characters (^[a-z0-9_]{1,60}$), unique within the lens
questionstringRequired, up to 500 characters

When a lens has at least one visual check and the recording is a video, the analysis adds a vision step: VIDTREO extracts keyframes from the video, skips frames where nothing changes, and reviews the rest. The observations feed the analysis, which can then cite frames (F<n>) as evidence. On recordings with several speakers, frames are also used to help put names to voices (P<n> evidence).

Visual checks are ignored for audio recordings, and the vision step is skipped entirely for lenses without them. Only add visual checks when what is on screen matters — lenses without them complete faster.

To expose a visual answer as a structured value for your integration, pair the check with a boolean field, as the reads_from_notes field and the looks_off_screen check do in the example.

Artifacts

artifacts · array · up to 30 items

The parts of the report each analysis shows in the dashboard — What each analysis includes in the Designer — such as Summary, Findings, Scorecard, Chapters, Key Moments, and Evidence. Add them with Add artifact, or describe your own with Custom artifact. Coverage (support, abstention, and contradiction report) and Manifest (version and run metadata) are always generated.

Artifacts only affect presentation in the dashboard. They do not change what is extracted, and the webhook always delivers the complete result.

Limits

The platform accepts the limits listed in each section above. Lenses written by the Designer are kept within tighter limits that also make good practice:

Building blockPlatform limitDesigner limit
Objective4,000 characters600 characters
Instructions8,000 characters2,000 characters
Summary sections208
Fields (data points)5015
Rubric criteria3010
Trust rules308
Visual checks206

Validation

A lens version must pass these checks before it can be published or used for an analysis:

RuleError
The objective is not emptyThe lens needs an objective.
Every field has a nameEvery field needs a name.
Field names are uniqueThe field "<name>" is defined twice.
Array fields declare itemTypeThe list field "<name>" needs an item type.
Array fields with enum items have valuesThe list field "<name>" has enum items and needs at least one value.
Criterion IDs are uniqueThe criterion "<id>" is defined twice.
Every maxScore is greater than zeroEvery criterion needs a maximum score above zero.
scale equals the sum of maxScoreThe criteria add up to <total>, but the scale is <scale>.
Every visual check has a questionEvery visual check needs a question.
Visual check IDs are uniqueThe visual check "<id>" is defined twice.

Versions

Lenses are versioned so that changing a lens never silently changes past or in-flight results.

Version statusBehavior
draftEditable in place. Cannot be activated
publishedImmutable. Can be activated in environments and used for analyses. To change it, create a new draft
  • Publish (or Publish changes) validates the configuration (see Validation) and makes the version available. When the lens is already active, publishing a new version moves its activations to that version.
  • To go back to an earlier version, open the lens's History tab, select the version, and click Use this version. Use Compare two versions to see exactly what changed between them.
  • A version switch applies to every environment where the lens is active. Analyses already queued or in progress keep the version they started with.
  • Every analysis stores the version it used, and the webhook includes it in data.run.lensVersionId — store it next to the result to know which configuration produced it.

Which version analyzes a recording

  1. When the lens is active in the recording's environment, the activated version — for automatic and manual analyses alike
  2. Otherwise, the latest published version of the lens

A lens with no published version cannot analyze recordings: Publish the lens before analyzing videos with it.

Writing Effective Lenses

  • One lens, one job. A focused lens ("Sales discovery call") produces sharper results than a catch-all. Activate several lenses in the same environment when you need several perspectives — each produces its own run and webhook.
  • Describe fields like you would brief a colleague. The description is what the analysis reads: say what counts, what does not, and in what unit ("Monthly budget in USD as stated by the customer").
  • Prefer enum over free text for anything your code branches on, and validate the value on your side.
  • Make rubric descriptions observable. "Gives at least one concrete example with a measurable result" scores more consistently than "Good answer".
  • Use trust rules for non-negotiables — fairness, compliance, and what must never be inferred.
  • Test with real recordings before activating. Publish the lens without choosing environments, use Analyze a recording on a handful of real recordings, review the evidence in the dashboard, then activate it with auto-analyze.

On this page