Skip to content
Euler Docs

Annotation layers

A layer is one class of annotation output: captions, object outlines, hand pose, depth, a 3D scene, and so on. Euler catalogs thirteen, all of them servable. Each one records what it produces, which data kinds can carry it, how it is checked, which export formats carry it, which settings a team can change, and where the review screen shows it.

The catalog is the single source of truth. Pipeline settings renders it, the run and the job queue consult your project’s resolved modes before spending, and GET /v1/projects/{id}/annotation/settings serves it resolved for your project.

Two gates decide whether a layer runs. Applicability comes first and always wins: a layer whose data kind cannot carry it is reported as inapplicable whatever you set. The mode you choose in Pipeline settings decides the rest.

The catalog at a glance

LayerIdGroupRuns as a background jobDefault modeWhere review shows it
Scene captionscaptionslanguagenoin the runcaption band and the language panel
Object detection and masksobject_labelsperceptionnoon demandoutlines painted on the frame; the label workbench
Semantic segmentationsemantic_segmentationperceptionyesoffclass mask over the frame
Monocular depthdepthgeometryyesoffthe Depth tab; the current-depth surface in 3D
Optical flowoptical_flowgeometryyesoffflow measurements on the layer’s row
Hand posehand_poseposeyesin the runskeletons painted on the frame; hand graphs
Full body posebody_poseposeyesoffskeletons painted on the frame
Object trackstrackingperceptionyeson demandoutlines on every tracked frame; object count graph; object centres in 3D
Action segmentssubtaskslanguageyeson demandsub-task lane over the sensor graphs
Event taggingevent_tagginglanguagenoin the runevent band and editor (third-person video)
Dense actionsdense_textlanguageyesin the runaction lane over the sensor graphs and the actions panel
Structured metadatametadatalanguageyesofffilterable fields beside the caption
3D representationthreedgeometryyesoffthe 3D tab; head-motion graphs

“Default mode” is the catalog fallback. The mode in force for your project is resolved from your use case and target profile as well; see settings resolution. Costs are shown per layer in Pipeline settings before you run.

Which data kinds carry which layer

A data kind is derived from what an episode actually contains. Three layers need a capability the data must physically have; the rest apply everywhere except the kinds listed against them.

LayerDoes not apply to
captions, object_labels, semantic_segmentation, depthstate-only
optical_flow, tracking, subtasks, threedstate-only, vision-asset
hand_pose, body_poseeverything except egocentric and third-person video (2D visual human pose proposals)
dense_textdata kinds without the dense-action capability (state-only, vision-asset)
event_taggingeverything except third-person video
metadatanothing

Some layers build on another: tracking needs object_labels, dense_text needs subtasks, and threed needs depth. The settings tile shows the dependency rather than failing at run time.

The layers one by one

Scene captions

One clear sentence per clip, plus object hints and failure notes.

Object detection and masks

Object outlines as polygons from instance masks, with their boxes, against your workspace vocabulary, routed by confidence and per-class quality floors.

Semantic segmentation

Per-pixel class masks over your organised ontology, exported as indexed masks.

Monocular depth

Depth in metres for every pixel of each sampled keyframe, with the camera’s intrinsics estimated.

Optical flow

Dense motion between frames, with forward-backward consistency as the built-in check. Surfaces motion blur and dropped frames.

Hand pose

Twenty one keypoints per hand, left and right, never swapped: handedness is decided once per track.

The review screen paints the skeletons on the clip live; no overlay video is rendered or stored.

Full body pose

Whole-body keypoints for every person in frame.

Object tracks

Each object followed through the clip with its outline on every tracked frame (two a second), consolidated so one object is one track.

Action segments

The clip split into named steps, a verb and a noun per span.

Event tagging

Timestamped point events in your own schema, for third-person video, with the evidence behind each event and a reviewer’s editor on the review screen.

Dense actions

Every action inside each step, second by second: “put down phone” inside “arranging boxes on the desk”, with the acting hand.

Structured metadata

Scene type, environment, lighting, camera motion and task category as filterable fields that become search facets and curation filters.

3D representation

The camera’s path through the whole episode, point clouds of the scene, and experimental 3D hands, in one metric, gravity-aligned frame.

3D hands are a lift of 2D keypoints through estimated depth and are marked experimental: they exist near depth keyframes, not on every frame, and are not yet at training-grade accuracy. See Limits.

How a layer is checked

Every layer carries named checks, and those are what appear as evidence on the episode and in the coverage report. They are identifiers, not formulas: the report shows what was checked and what it found, and a check that could not run reports not_assessable with the reason rather than a made-up number.

curl -fsS -H "Authorization: Bearer $EULER_TOKEN" \
  "$EULER_BASE_URL/v1/projects/$PROJECT/annotation/coverage"

For every layer: how many episodes carry it, how many could, the quality signal the layer measured, the checks behind it, and the last run that produced it. Narrow with ?layer= or ?kind=.

How models are chosen

Every layer resolves its model through one registry, shown in Settings under Tenant, Model defaults; a project can choose its own where a choice is offered (see Models per project). Two rules govern it. No unmeasured swaps: a model is adopted only on evidence from our own benchmark harness. Licence first: a model whose licence does not allow commercial use, or that depends on an asset that does not, is never used on customer work, however well it scores. Perception runs on self-hosted models, so your frames never go to an external labelling service.

How a layer is briefed

Every layer backed by a language or vision model is briefed before it runs with what this class of data physically is, what your workspace exists to do, what the output will train, and your own vocabulary. Every briefing carries the same guardrails: describe only what is present; never invent objects, people, counts, times, distances or outcomes; when unsure, say “not assessable” and why. A missing annotation is recoverable, a confidently invented one is not.

Next