docs/LENS.md

Lens metadata — Cooke /i class

Every camera, body and satellite, emits frame-accurate lens data next to picture. Interchange is Cooke /i (and /i3 shading/distortion maps). ARRI LDS and ZEISS eXtended Data are cousins; we normalize to one sidecar.

Product ground already says the record path carries “lens” in the sidecar (web3d-space MODES.md). This file says what that is.

What /i actually is

Cooke /i Technology: electronics in the lens, absolute encoders, no init dance. Pins in the PL mount (12 o’clock) and/or an external /i port on the barrel. License to speak it is €1/year for manufacturers.

Per frame, up to 285 fps:

FieldWhy we want it
Manufacturer, type, serialContinuity, which glass
Focal length (true, not the barrel number)Intrinsics, matchmove
Focus distanceDoF, VFX, AD notes
T-stopExposure, DoF
Zoom position / normalized zoomZooms
Near / far focus, hyperfocalScripty / AD
Horizontal FOVCoverage / splat-readiness
Entrance pupilNodal / virtual camera
/i3 shading + distortion mapsPost; not every frame — file once per lens+setting

Metric or imperial, camera’s choice; we store SI in the sidecar.

Transport (each camera)

Picture is HEVC. Lens data is a second stream, 1:1 with encoder timecode, same as pose. It is not in the 80 Mbps HEVC budget.

lens /i pins or /i port
        │
        ├─ body: PL contacts or barrel port → UART/USB on Thor
        │
        └─ sat:  barrel port → /i-to-Ethernet bridge (e.g. Ambient Lockit+
                 TCP 3001 YAML or 3002 raw /i3)
                 OR camera embeds /i in SDI VANC / ONVIF metadata
                          │
                          ▼
              Thor writes JSONL sidecar next to the HEVC
              {camera_id, tcode, ...fields}

Do not rely on the scripty typing T-stop. If a camera cannot speak /i, LDS, XD, or EF electronic iris+focus, it is a bring-up stub, not a hero sat.

Shopping implication

Cheap PoE boxes with P-iris counts are not /i. Satellites that must send Cooke-class data need cine glass (/i, LDS, or XD) plus a reader, or a cinema camera that already muxes /i into its files.

Body: PL or LPL with /i+LDS pins, or EF with electronic metadata as a fallback (focal + iris + focus, no entrance pupil).

Sidecar (record)

One JSONL line per sample, timecode-locked to that camera’s HEVC:

{"cam":"A","tc":"01:02:03:04","make":"Cooke","model":"S7/i 32","sn":"…",
 "fl_mm":31.7,"focus_m":2.13,"t":2.8,"zoom_n":null,
 "near_m":1.9,"far_m":2.4,"hyper_m":12.1,"hfov_deg":39.4,"ep_mm":87.0}

Maps (/i3 distortion, shading) live as files on the NAS keyed by make/model/sn, referenced from the sidecar, not dumped per frame.

Still open

  • Reader hardware on the Thor carrier (PL contacts vs barrel-only)
  • Lockit+ vs in-camera /i vs EF for bring-up
  • Whether we store /i3 maps at slate time or from a lens library