Skip to main content

pub.layers.media

Media source records for the full carrier superset: audio, video, image, document, signal (EEG, MEG, iEEG, fNIRS, EMG, ECG, EDA, respiration, gaze, mouse and key logging), motion (motion capture, articulography), and volume (fMRI, structural MRI, DWI, PET). Modality-specific metadata is factored into composable object types so that multimodal media can carry all relevant technical metadata: audioInfo, videoInfo, documentInfo, imageInfo, signalInfo, eyeTrackingInfo, motionInfo, volumeInfo, and their supporting types. Domain-specific metadata (recording conditions, speaker demographics, consent, quality assessment) is handled through the open featureMap with documented key conventions.

kind names the carrier only. The instrument-level modality (eeg, fmri, speech-audio, and the rest) lives on signalInfo.modalityUri, whose nodes reach their carrier node by parentTypeRef; this is the same modality node set that judgment.defs#recordingMethod.methodUri and catalog.defs#contentSummary.modalityUri resolve to, so a recording, the experiment that produced it, and the catalogue entry advertising it join on one vocabulary. A signal, motion, or volume medium is a stream of an acquisition session: sessionRef and stream place it on the session clock, and sync states how it aligns to that clock.

Types

audioInfo

NSID: pub.layers.media.defs#audioInfo Type: Object

Composable audio metadata. Attach to any media record representing audio content: standalone audio files, audio tracks in video, etc.

FieldTypeDescription
sampleRateintegerAudio sample rate in Hz (e.g., 8000, 16000, 22050, 44100, 48000).
channelsintegerNumber of audio channels.
bitDepthintegerAudio bit depth (e.g., 16, 24, 32).
codecstringAudio codec identifier (e.g., 'pcm_s16le', 'aac', 'opus', 'flac').
bitRateintegerAudio bitrate in bits per second.
bitRateModestringBitrate mode. Known values: cbr (constant), vbr (variable).
numberOfSamplesintegerTotal number of audio samples. Enables sample-accurate alignment (Praat, ELAN, forced alignment tools).
speakerCountintegerNumber of distinct speakers (for spoken language data).
transcriptRefat-uriAT-URI of a pub.layers.expression.expression containing the transcript.
segmentationRefat-uriAT-URI of a pub.layers.segmentation.segmentation record structuring the transcript.

videoInfo

NSID: pub.layers.media.defs#videoInfo Type: Object

Composable video metadata. Attach to any media record representing video content.

FieldTypeDescription
widthintegerWidth in pixels.
heightintegerHeight in pixels.
frameRateintegerFrame rate scaled by 100 (e.g., 2997 = 29.97fps). Avoids floats.
codecstringVideo codec identifier (e.g., 'h264', 'h265', 'vp9', 'av1', 'prores').
aspectRatiostringDisplay aspect ratio (e.g., '16:9', '4:3', '1:1').
colorSpacestringColor space. Known values: rgb, yuv420, yuv422, yuv444, grayscale
bitRateintegerVideo bitrate in bits per second.
scanTypestringScan type. Known values: progressive, interlaced. Affects frame extraction for annotation.

documentInfo

NSID: pub.layers.media.defs#documentInfo Type: Object

Composable document/image metadata. Attach to any media record representing scanned documents, manuscripts, printed text, or other page-based media for OCR/HTR annotation workflows.

FieldTypeDescription
dpiintegerScanning resolution in dots per inch (300+ recommended for OCR).
colorModestringScan color mode. Known values: color, grayscale, bitonal
pageCountintegerNumber of pages in the document.
scriptSystemstringWriting system (ISO 15924 codes: 'Latn', 'Arab', 'Deva', 'Hans', 'Hant', 'Cyrl', 'Grek', etc.).
writingDirectionUriat-uriAT-URI of the writing-direction definition node (a writing-direction typeDef under layers-core.ontology.layers.pub). Refines writingDirection; never replaces it.
writingDirectionstringPrimary text direction slug (fallback when writingDirectionUri unavailable). Known values: ltr, rtl, ttb, boustrophedon, custom
ocrEnginestringOCR/HTR engine identifier (e.g., 'tesseract-5.3', 'transkribus', 'abbyy', 'google-vision').

imageInfo

NSID: pub.layers.media.defs#imageInfo Type: Object

Still-image metadata, with a paired colour-space vocabulary.

FieldTypeDescription
widthintegerWidth in pixels.
heightintegerHeight in pixels.
bitDepthintegerBit depth per channel.
dpiintegerResolution in dots per inch, when the image derives from a physical original.
colorSpaceUriat-uriAT-URI of the colour space definition node.
colorSpacestringColour space slug (fallback when colorSpaceUri unavailable). Known values: srgb, adobe-rgb, display-p3, rec2020, cmyk, grayscale, bitonal, custom
codecstringImage codec identifier (jpeg, png, webp, jp2, tiff-lzw). Wire-format code, exempt from pairing.
orientationintegerEXIF orientation tag.
captureDevicerefCamera or scanner. Ref: pub.layers.defs#deviceInfo

signalInfo

NSID: pub.layers.media.defs#signalInfo Type: Object

Sampled time-series metadata: the metadata layer over EEG, MEG, iEEG, fNIRS, EMG, ECG, EDA, respiration, gaze, and key/mouse logging. Carries the BIDS electrophysiology sidecar fields as typed properties, plus the per-channel and per-sensor tables inline. Required: modality, samplingFrequencyMilliHz.

FieldTypeDescription
modalityUriat-uriAT-URI of the modality definition node (a modality typeDef under layers-core.ontology.layers.pub, or a graphNode). The SAME node set as judgment.defs#recordingMethod.methodUri and catalog.defs#contentSummary.modalityUri; each node reaches its carrier by parentTypeRef, so media.kindUri is the parent rather than a synonym. Refines modality.
modalitystringModality slug (fallback). Known values: eeg, meg, ieeg, ecog, fmri, fnirs, eye-tracking, pupillometry, emg, ecg, skin-conductance, respiration, mouse-tracking, keystroke, motion-capture, articulography, custom
formatUri / formatat-uri / stringContainer format a reader must open (mimeType names the wire type). Known values: edf, edf-plus, bdf, fif, eeglab-set, brainvision, nwb, nix, snirf, asc, edf-eyelink, c3d, trc, bvh, tsv, csv, custom
samplingFrequencyMilliHzintegerNominal sampling frequency in millihertz (2048 Hz = 2048000). BIDS SamplingFrequency, required in the EEG/MEG/iEEG/NIRS sidecars; NWB ElectricalSeries.rate.
channelCountintegerTotal recorded channels. BIDS EEGChannelCount/MEGChannelCount/NIRSChannelCount.
numberOfSamplesintegerTotal samples per channel. With samplingFrequencyMilliHz this makes defs#signalSpan sample anchoring exact.
recordingDurationNanosintegerBIDS RecordingDuration (seconds upstream).
recordingTypeUri / recordingTypeat-uri / stringRecording continuity. BIDS RecordingType. Known values: continuous, epoched, discontinuous.
epochLengthNanosintegerBIDS EpochLength. Absent for continuous recordings.
epochCountintegerNumber of epochs, for epoched recordings.
powerLineFrequencyMilliHzintegerMains frequency (50000 or 60000). BIDS PowerLineFrequency, required in every electrophysiology sidecar.
referenceSchemeUri / referenceSchemeat-uri / stringReferencing scheme. BIDS EEGReference/iEEGReference (free text upstream). Known values include single-electrode, linked-mastoids, average, rest, bipolar, laplacian, intracranial-common, not-applicable, custom.
referenceSensorrefThe reference electrode, as an objectRef whose objectId names a sensors[] uuid. Ref: pub.layers.defs#objectRef
groundSensorrefThe ground electrode. BIDS EEGGround/iEEGGround. Ref: pub.layers.defs#objectRef
referenceDescriptionstringFree-text reference detail for schemes the slug vocabulary cannot express.
placementSchemeUri / placementSchemeat-uri / stringElectrode or sensor placement. BIDS EEGPlacementScheme. Known values include 10-20, 10-10, biosemi-64, egi-hydrocel-256, neuromag-306, subdural-grid, depth-electrode, custom.
filterStatusUri / filterStatusat-uri / stringWhether filters is a complete account. Separates none-applied from not-reported, which BIDS conflates via n/a. Known values: as-listed, none-applied, not-reported.
filtersarrayFilters in application order. Carries BIDS HardwareFilters/SoftwareFilters as a typed list. Array of ref: #filterSpec
channelsarrayPer-channel table in acquisition order. BIDS channels.tsv. Inline, because a montage is one logical object and getRepo bulk export is unmetered. Array of ref: #signalChannel
sensorsarrayPhysical sensor geometry. BIDS electrodes.tsv/optodes.tsv plus NWB electrodes. Separate from channels because the two are not in bijection. Array of ref: #sensorSpec
coordinateSystemrefFrame in which sensors coordinates are expressed. BIDS coordsystem.json. Ref: #coordinateSystem
devicerefAcquisition hardware. BIDS Manufacturer/ManufacturersModelName; NWB Device. Ref: pub.layers.defs#deviceInfo
eventChannelrefThe trigger or stimulus-code channel, as an objectRef into channels. Ref: pub.layers.defs#objectRef
eventCodesarrayTrigger codes and their meanings. Grounding each code through a typeDef lets two labs' code 12 be recognized as the same condition or as different ones. Array of ref: #eventCode
eventLayerRefat-uriAT-URI of a pub.layers.annotation.annotationLayer of kind tier holding the decoded event stream. Where BIDS events.tsv lands.
headCircumferenceNanometresintegerBIDS HeadCircumference. On the recording, because it is measured at acquisition.
dewarPositionUri / dewarPositionat-uri / stringMEG dewar position. BIDS DewarPosition, required in the MEG sidecar. Known values: upright, supine, degrees-45, custom.
digitizedLandmarks, digitizedHeadPoints, continuousHeadLocalizationbooleanBIDS MEG sidecar flags.
maxMovementNanometresintegerBIDS MaxMovement.
associatedEmptyRoomRefat-uriAT-URI of a media.media holding the empty-room noise recording. BIDS AssociatedEmptyRoom.
sourceOptodeCount, detectorOptodeCountintegerBIDS NIRSSourceOptodeCount/NIRSDetectorOptodeCount, required in the NIRS sidecar.
cogAtlasRefrefCognitive Atlas term for the task. BIDS CogAtlasID. Use source cognitive-atlas. Ref: pub.layers.defs#knowledgeRef
featuresrefOpen-ended features. Ref: pub.layers.defs#featureMap

signalChannel

NSID: pub.layers.media.defs#signalChannel Type: Object

One row of the per-channel table. Required: uuid, name, type. The uuid is required because anchors, reference declarations, and sync declarations point at channels; a name or positional index silently mis-addresses when a republished recording drops two bad channels.

FieldTypeDescription
uuidrefStable identifier for this channel within this record. The target of signalSpan.channels[]. Ref: pub.layers.defs#uuid
namestringChannel name exactly as in the raw file (Cz, MEG0113, S1-D1-760, gaze_x).
typeUriat-uriAT-URI of the channel type definition node (channel-type typeDef). The authoritative field: the union of the BIDS EEG/MEG/iEEG/NIRS/Motion keyword sets already runs to roughly sixty terms and grows with each extension proposal.
typestringChannel type slug (fallback), uppercase as BIDS spells them. Known values include EEG, REF, EOG, ECG, EMG, PUPIL, EYEGAZE, TRIG, MEGMAG, MEGGRADPLANAR, SEEG, ECOG, NIRSCWHBO, ACCEL, GYRO, CUSTOM.
unitUri / unitat-uri / stringPhysical unit of this channel's samples. BIDS channels.tsv units, required. Known values include volt, microvolt, tesla, femtotesla, microsiemens, pixel, microdegree, arbitrary, not-applicable, custom.
samplingFrequencyMilliHzintegerPer-channel rate when it differs from the recording's nominal rate.
lowCutoffMilliHz / highCutoffMilliHzintegerPer-channel high-pass and low-pass cutoffs. BIDS channels.tsv low_cutoff/high_cutoff, required for iEEG.
notchMilliHzintegerBIDS channels.tsv notch.
statusUri / statusat-uri / stringChannel quality. BIDS channels.tsv status. Known values: good, bad, interpolated, not-reported.
statusDescriptionstringWhy the channel is bad or interpolated.
referenceChannelrefPer-channel reference for bipolar and mixed intracranial montages. Ref: pub.layers.defs#objectRef
sensorrefThe sensors entry this channel reads from (how a channel acquires a position without duplicating coordinates). Ref: pub.layers.defs#objectRef
sourceSensor / detectorSensorrefEmitting and receiving optode for NIRS. BIDS NIRS channels.tsv source/detector, required columns. Ref: pub.layers.defs#objectRef
wavelengthPicometresintegerNominal wavelength (760 nm = 760000). BIDS NIRS wavelength_nominal.
grouprefElectrode group, shaft, grid, or tracking system this channel belongs to. NWB ElectrodeGroup; BIDS Motion tracksys. Ref: pub.layers.defs#objectRef
descriptionstringFree-text note.
featuresrefPer-channel features. Ref: pub.layers.defs#featureMap

sensorSpec

NSID: pub.layers.media.defs#sensorSpec Type: Object

Physical sensor geometry: an electrode, contact, coil, optode, marker, or landmark. Required: uuid, name, type. The uuid is required because channels, anchors, and spatial regions point at sensors. Coordinates are signed integers in nanometres.

FieldTypeDescription
uuidrefStable identifier within this record. The target of signalSpan.sensors[]. Ref: pub.layers.defs#uuid
namestringSensor name exactly as in the raw file.
typeUri / typeat-uri / stringSensor type. BIDS optodes.tsv type. Known values: electrode, depth-contact, grid-contact, strip-contact, magnetometer, gradiometer, reference-coil, head-position-coil, source, detector, marker, imu, camera, fiducial, anatomical-landmark, head-point, custom.
xNanometres / yNanometres / zNanometresintegerSigned X/Y/Z. BIDS electrodes.tsv/optodes.tsv coordinates; NWB electrodes.x.
impedanceMilliOhmintegerBIDS electrodes.tsv impedance; NWB electrodes.imp.
contactAreaSquareMicrometresintegerBIDS iEEG electrodes.tsv size, required. Load-bearing for current-density interpretation.
materialUri / materialat-uri / stringElectrode material. BIDS electrodes.tsv material (free text upstream, where Ag/AgCl has three predictable spellings). Known values: ag-agcl, platinum, platinum-iridium, gold, tin, stainless-steel, silicon, custom.
hemisphereUri / hemisphereat-uri / stringHemisphere. BIDS iEEG electrodes.tsv hemisphere. Known values: left, right, midline, not-reported.
grouprefElectrode group or shaft. NWB ElectrodeGroup. Ref: pub.layers.defs#objectRef
anatomyRefrefGrounded anatomical localization; use source uberon. For iEEG this inherits the participant's identifiability declaration. Ref: pub.layers.defs#knowledgeRef
descriptionstringFree-text note.
featuresrefPer-sensor features. Ref: pub.layers.defs#featureMap

coordinateSystem

NSID: pub.layers.media.defs#coordinateSystem Type: Object

The frame in which sensors coordinates are expressed. BIDS coordsystem.json. Required: system. Values must agree with pub.layers.defs#spatialEntity.crs.

FieldTypeDescription
systemUri / systemat-uri / stringCoordinate system. Covers the BIDS EEG/MEG/iEEG lists plus the stereotaxic spaces for volumetric data. Known values include captrak, ctf-head, elekta-neuromag-head, acpc, scanner-ras, mni152-nlin-2009c, talairach, fsaverage, voxel-index, pixel, custom.
unitUri / unitat-uri / stringUnit of the stored integer coordinates. Known values: nanometre, micrometre, pixel, voxel, per-mille-normalized.
spatialAxesUri / spatialAxesat-uri / stringDirection code naming the positive direction of X, Y, Z. BIDS Motion SpatialAxes. A consumer that cannot resolve it must not assume a default. Known values: RAS, LAS, RAI, LPS, ARS, ALS, FRU, FLU, custom.
referenceImageRefat-uriAT-URI of a media.media of kind volume or image this frame is defined against. BIDS IntendedFor.
fiducialsarrayNamed landmark points defining the frame. BIDS FiducialsCoordinates. Array of ref: #namedPoint
descriptionstringFree-text note.

namedPoint

NSID: pub.layers.media.defs#namedPoint Type: Object

A named landmark point in a coordinate frame. Required: name.

FieldTypeDescription
nameUri / nameat-uri / stringLandmark. Known values: nasion, lpa, rpa, inion, ac, pc, vertex, custom.
x / y / zintegerSigned coordinates in the enclosing system's unit.

filterSpec

NSID: pub.layers.media.defs#filterSpec Type: Object

One filter stage. Required: type.

FieldTypeDescription
stageUri / stageat-uri / stringWhere the filter was applied. Distinguishes BIDS HardwareFilters from SoftwareFilters. Known values: hardware, software, unknown.
typeUri / typeat-uri / stringFilter type. Known values: highpass, lowpass, bandpass, bandstop, notch, detrend, resample, rereference, ica, ssp, regression, custom.
lowCutoffMilliHz / highCutoffMilliHz / centreMilliHz / bandwidthMilliHzintegerCutoffs, centre, and bandwidth in millihertz.
orderintegerFilter order.
designUri / designat-uri / stringFilter design. Known values: butterworth, chebyshev-1, chebyshev-2, elliptic, bessel, fir-windowed, fir-least-squares, custom.
directionUri / directionat-uri / stringWhether the filter introduces phase shift. Load-bearing for any latency claim about an ERP. Known values: causal, zero-phase, unknown.
componentsRemovedintegerFor ica and ssp.
softwarerefSoftware that applied the filter. Ref: pub.layers.defs#reproducibilityInfo
descriptionstringFree-text note.

eventCode

NSID: pub.layers.media.defs#eventCode Type: Object

A trigger code and its meaning. Required: code.

FieldTypeDescription
codeintegerInteger value written on the trigger channel.
channelrefThe channel this code appears on, when the recording has several trigger lines. Ref: pub.layers.defs#objectRef
labelstringCondition label as the experimenter spells it.
typeUriat-uriAT-URI of the condition or event-type definition node, typically a pub.layers.ontology.typeDef.
knowledgeRefrefExternal grounding, for instance a HED tag (source hed) or a Cognitive Atlas concept. Ref: pub.layers.defs#knowledgeRef
descriptionstringFree-text note.

eyeTrackingInfo

NSID: pub.layers.media.defs#eyeTrackingInfo Type: Object

Eye-tracking specifics, carried alongside signal. Maps the BIDS eye-tracking sidecar.

FieldTypeDescription
recordedEyeUri / recordedEyeat-uri / stringWhich eye was recorded. BIDS RecordedEye, required. Known values: left, right, both, cyclopean.
sampleCoordinateSystemUri / sampleCoordinateSystemat-uri / stringWhat the x and y samples mean. BIDS SampleCoordinateSystem, required. gaze-on-screen is the value that makes presentationSpec.screen mandatory. Known values: gaze-on-screen, eye-in-head, gaze-in-world, custom.
sampleCoordinateUnitUri / sampleCoordinateUnitat-uri / stringUnit of the gaze samples. BIDS SampleCoordinateUnits. Known values: pixel, nanometre, microdegree, per-mille-normalized.
methodUri / methodat-uri / stringTracking method. BIDS EyeTrackingMethod. Known values: p-cr, dpi, eog, video-oculography, scleral-search-coil, custom.
pupilFitMethodUri / pupilFitMethodat-uri / stringBIDS PupilFitMethod. Known values: ellipse, centroid, custom.
calibrationTypeUri / calibrationTypeat-uri / stringBIDS CalibrationType. Known values: h3, hv5, hv9, hv13, none, custom.
calibrationCount / calibrationPositionCountintegerBIDS CalibrationCount/CalibrationPosition.
averageCalibrationErrorMicrodegrees / maximalCalibrationErrorMicrodegreesintegerBIDS AverageCalibrationError/MaximalCalibrationError.
trackerDistanceNanometresintegerBIDS EyeTrackerDistance.
eventDetectionUri / eventDetectionat-uri / stringAlgorithm used to derive fixations and saccades. Absent means the trace is raw. Known values: velocity-threshold, dispersion-threshold, eyelink-parser, engbert-kliegl, none, custom.
devicerefEye-tracking hardware. Ref: pub.layers.defs#deviceInfo

motionInfo

NSID: pub.layers.media.defs#motionInfo Type: Object

Motion-capture and articulography metadata, carried alongside signal. The skeleton or marker set is where joint identity, order, and topology are defined, which is why no pose anchor is needed: the channels carry the numbers, this carries their meaning.

FieldTypeDescription
trackingSystemrefThe run or session stream grouping this system, as an objectRef. BIDS Motion tracksys. Ref: pub.layers.defs#objectRef
formatUri / formatat-uri / stringContainer format. Known values: c3d, bvh, trc, fbx, tsv, csv, custom.
trackedPointCountintegerNumber of tracked points, markers, or joints.
rotationRuleUri / rotationRuleat-uri / stringBIDS Motion RotationRule. Known values: right-hand, left-hand.
rotationOrderUri / rotationOrderat-uri / stringBIDS Motion RotationOrder. Known values: xyz, xzy, yxz, yzx, zxy, zyx, quaternion.
skeletonUri / skeletonat-uri / stringSkeleton or marker-set. Known values: coco-17, openpose-body25, openpose-135, mediapipe-holistic, mediapipe-hand-21, smpl, smplx, vicon-plug-in-gait, xsens-mvn, ema-tongue-jaw-lips, c3d-custom, custom.
coordinateSystemrefCarries spatialAxes; a motion stream must not define a second axis vocabulary. Ref: #coordinateSystem
devicerefMotion-capture hardware. Ref: pub.layers.defs#deviceInfo

volumeInfo

NSID: pub.layers.media.defs#volumeInfo Type: Object

Volumetric imaging metadata (fMRI, structural MRI, DWI, PET). Required: volumeKind.

FieldTypeDescription
volumeKindUri / volumeKindat-uri / stringVolume kind. BIDS suffix plus datatype. Known values: bold, anatomical-t1, anatomical-t2, dwi, fieldmap, perfusion, mask, statistical-map, parcellation, custom.
formatUri / formatat-uri / stringContainer format. Known values: nifti-1, nifti-2, cifti-2, gifti, dicom, mgz, minc, custom.
repetitionTimeNanos / echoTimeNanosintegerBIDS RepetitionTime/EchoTime.
flipAngleMicrodegreesintegerBIDS FlipAngle.
volumeCountintegerVolumes in the run. Bounds defs#signalSpan.volumeIndexEnd.
dimX / dimY / dimZintegerVoxel grid extent.
voxelSizeXNanometres / voxelSizeYNanometres / voxelSizeZNanometresintegerVoxel edge length in nanometres.
sliceTimingNanosarrayPer-slice acquisition offsets within one TR. BIDS SliceTiming. Array of integer.
sliceEncodingDirection / phaseEncodingDirectionstringBIDS SliceEncodingDirection/PhaseEncodingDirection. Wire-format codes.
coordinateSystemrefStereotaxic frame the voxel grid is expressed against. Ref: #coordinateSystem
devicerefScanner hardware. Ref: pub.layers.defs#deviceInfo

syncInfo

NSID: pub.layers.media.defs#syncInfo Type: Object

How this stream aligns to its session's shared time base. Required: sessionRef. Resolves against acquisition.session and signalChannel.uuid.

FieldTypeDescription
sessionRefat-uriAT-URI of the pub.layers.acquisition.session whose clock this stream is expressed against.
offsetNanosintegerSigned offset from session time zero to this stream's first sample. Negative when the stream began before the origin (BIDS StartTime permits it).
clockSourceUri / clockSourceat-uri / stringHow alignment was established. A hardware trigger and a clapperboard differ by three orders of magnitude. Known values: session-master, shared-trigger, ltc-timecode, clapperboard, audio-cross-correlation, ptp, ntp, manual, unsynchronized, unknown.
syncChannelrefThe channel carrying the shared sync signal, when clockSource is shared-trigger. Ref: pub.layers.defs#objectRef
driftPartsPerBillionintegerSigned measured drift against the session master.
syncUncertaintyNanosintegerWorst-case alignment error. Bounds how finely a cross-stream anchor may honestly be read.

media

NSID: pub.layers.media.media Type: Record

A media source record (audio, video, image, or document) that can be referenced by expressions and annotations. Modality-specific metadata lives in composable audioInfo/videoInfo/documentInfo objects.

FieldTypeDescription
kindUriat-uriAT-URI of the media kind definition node (a media-kind typeDef under layers-core.ontology.layers.pub). Names the carrier; the instrument-level modality is named by signalInfo.modalityUri, whose nodes reach their carrier node by parentTypeRef. Community-expandable via knowledge graph.
kindstringMedia kind slug (fallback). Names the carrier only. Known values: audio, video, image, document, signal, motion, volume, custom
titlestringMedia title.
descriptionstringDescription of the media.
blobblobThe media blob. Signal, motion, and volume containers (EDF, BDF, FIF, EEGLAB SET, BrainVision, SNIRF, NWB, NIfTI, ASC, C3D, TRC) travel as application/octet-stream or application/x-hdf5, with the concrete container named by the relevant info block's format field. Content above maxSize must use externalUri.
externalUriuriURI for externally hosted media.
mimeTypestringMIME type of the carried bytes.
durationMsintegerDuration in milliseconds (for audio/video).
durationNanosintegerDuration in nanoseconds; authoritative over durationMs where both are present. Milliseconds round away whole samples at 2048 Hz and above.
fileSizeBytesintegerFile size in bytes.
parentMediaRefat-uriAT-URI of the parent media record this excerpt/clip was extracted from. Expresses excerpt-of, never synchronization.
startOffsetMsintegerOffset in milliseconds where this excerpt starts within the parent media. Used with parentMediaRef.
audiorefAudio-specific metadata. Ref: pub.layers.media.defs#audioInfo
videorefVideo-specific metadata. Ref: pub.layers.media.defs#videoInfo
documentrefDocument-specific metadata. Ref: pub.layers.media.defs#documentInfo
imagerefStill-image metadata. Ref: pub.layers.media.defs#imageInfo
signalrefSampled time-series metadata (EEG, MEG, iEEG, fNIRS, EMG, ECG, EDA, respiration, gaze, mouse and key logging). Ref: pub.layers.media.defs#signalInfo
eyeTrackingrefEye-tracking specifics, carried alongside signal. A nested block rather than an eighth carrier kind, because BIDS types eye-tracking as a physiological recording. Ref: pub.layers.media.defs#eyeTrackingInfo
motionrefMotion-capture and articulography metadata, carried alongside signal. Ref: pub.layers.media.defs#motionInfo
volumerefVolumetric imaging metadata. Ref: pub.layers.media.defs#volumeInfo
contentDigestrefHash over the referenced bytes. The only integrity guarantee available for externalUri carriage, and therefore expected whenever externalUri is used without a blob. Ref: pub.layers.defs#contentDigest
sessionRefat-uriAT-URI of the pub.layers.acquisition.session this medium is a stream of. Every stream of one synchronized recording carries the same sessionRef.
streamrefThe session stream this medium fills, as an objectRef whose recordRef is sessionRef and whose objectId is the stream's uuid. Ref: pub.layers.defs#objectRef
syncrefHow this stream aligns to its session's shared time base. Ref: pub.layers.media.defs#syncInfo
participantRefsarrayAT-URIs of the pub.layers.acquisition.participant records this recording captures. On the record rather than inside four sibling info blocks. Array of at-uri
accessrefConditions under which the bytes may be obtained. Distinct from licensing (what may be done with them) and consent (the person they came from); all three must hold. Ref: pub.layers.defs#accessCondition
languagesarrayBCP-47 language tags this record covers. Empty when language is unspecified or unknown. Array of string (item max 32). No array-level cap.
languageRefsarrayStructured language references, for varieties a BCP-47 tag cannot name. Array of ref: pub.layers.defs#languageRef
knowledgeRefsarrayKnowledge graph references. Array of ref: pub.layers.defs#knowledgeRef
licensingrefDistribution licensing terms governing this media (supports dual/multi/component licensing). Canonical license for the media; the consent.license feature, when present, records per-clip consent terms. Ref: pub.layers.defs#licensing
eprintRefsarrayEprint records (papers/preprints) describing or associated with this media. Array of at-uri (max 64)
metadatarefProvenance: who created/uploaded this media record. Ref: pub.layers.defs#annotationMetadata
featuresrefOpen-ended features (see Feature Key Conventions below). Ref: pub.layers.defs#featureMap
createdAtdatetimeRecord creation timestamp.

Feature Key Conventions

The features field on media records is a featureMap, an open key-value store for domain-specific metadata that does not warrant dedicated schema fields. All feature values are strings (per the feature type definition); consumers parse typed values based on key semantics. The keys below are conventions, not requirements. Applications should use these keys when applicable to enable cross-corpus interoperability.

Recording & Equipment

KeyDescription
recording.dateISO 8601 date of the recording session.
recording.locationPlace name or address where the recording was made.
recording.coordinatesGPS coordinates (latitude, longitude).
recording.environmentRecording environment: studio, field, lab, classroom, telephone, broadcast, home, outdoor
recording.microphoneMicrophone model (e.g., 'Sennheiser HMD 414', 'DPA 4006').
recording.microphoneTypeMicrophone type: condenser, dynamic, electret, lavalier, headset, array, contact
recording.microphonePlacementMicrophone placement: close-talk, far-field, head-mounted, lapel, tabletop
recording.equipmentRecording device or interface model.
recording.softwareRecording software used.
recording.noiseLevelAmbient noise characterization.
recording.roomAcousticsRoom acoustics description (RT60, treatment, dimensions).

Speaker/Participant Metadata

Speaker metadata uses the pattern speaker.{id}.* where {id} is a speaker identifier (e.g., speaker.SPK01.age). For single-speaker recordings, use speaker.0.*.

KeyDescription
speaker.{id}.ageAge or age range at time of recording.
speaker.{id}.genderGender of the speaker.
speaker.{id}.L1Native language (BCP-47 tag).
speaker.{id}.L2Second language(s), comma-separated BCP-47 tags.
speaker.{id}.dialectRegional dialect or variety.
speaker.{id}.educationEducation level.
speaker.{id}.roleRole in the recording: interviewer, interviewee, narrator, subject, caller, callee, target-child, mother, father, examiner
speaker.{id}.channelAssignmentWhich audio channel this speaker is on (e.g., '0', '1', 'left', 'right').
speaker.{id}.voiceCharacteristicsPitch range, speaking rate, voice quality notes.
speaker.{id}.ethnicityEthnic or racial background (following corpus conventions).
speaker.{id}.birthDateISO 8601 date of birth.
speaker.{id}.handednessDominant hand (for sign language): left, right, ambidextrous
speaker.{id}.hearingStatusHearing status (for sign language): deaf, hard-of-hearing, hearing, coda
speaker.{id}.ageOfAcquisitionAge at which sign language was acquired.

Audio Quality Assessment

KeyDescription
quality.snrDbSignal-to-noise ratio in decibels (string-encoded integer, e.g., '42').
quality.pesqPESQ score (string-encoded integer scaled by 100, e.g., '350' = 3.50).
quality.polqaPOLQA score (string-encoded integer scaled by 100).
quality.stoiShort-Time Objective Intelligibility (string-encoded integer 0-1000, e.g., '950' = 0.95).
quality.clippingDetectedWhether audio clipping was detected: true or false.
quality.silenceRatioProportion of recording that is silence (string-encoded integer 0-1000, e.g., '150' = 15%).
quality.ratingSubjective quality rating: poor, fair, good, excellent

Multi-Stream Synchronization

KeyDescription
sync.timeOriginMsTime offset in ms for aligning this media to a master clock, cf. ELAN TIME_ORIGIN (string-encoded integer).
sync.clockDriftPpmClock drift in parts per million relative to master (string-encoded integer).
sync.syncMethodSynchronization method: timecode, clap, genlock, ntp, ptp, software, audio-sync
sync.masterMediaRefAT-URI of the master media record in a multi-stream setup.
sync.precisionTemporal precision of synchronization (e.g., 'under 1ms', 'under 15ms').
KeyDescription
consent.typeConsent type: informed, community, blanket, oral, written
consent.scopePermitted uses: research, education, public, commercial, archive-only
consent.anonymizationLevelAnonymization applied: none, pseudonymized, face-blurred, voice-altered, fully-anonymized
consent.restrictionsFree-text access restrictions or conditions.
consent.irbIRB/ethics committee approval identifier.
consent.culturalProtocolCultural sensitivity notes (CARE principles, indigenous data sovereignty).
consent.licensePer-clip consent terms (e.g., 'CC-BY-4.0', 'CC-BY-NC-SA-4.0'). The top-level licensing field is the canonical distribution license for the media; use this key only to record consent-scoped terms that differ from it.

Format Conversion Provenance

KeyDescription
conversion.sourceFormatOriginal file format before conversion.
conversion.sourceCodecOriginal codec before conversion.
conversion.sourceBitRateOriginal bitrate before conversion.
conversion.toolConversion tool used (e.g., 'ffmpeg 6.1', 'sox 14.4').
conversion.dateISO 8601 date of conversion.
conversion.losslessWhether the conversion was lossless: true or false.
conversion.generationsNumber of compression generations/re-encodings (string-encoded integer).

Sign Language Video

KeyDescription
signing.cameraAngleCamera angle relative to signer: frontal, side, overhead, three-quarter
signing.cameraCountNumber of cameras in the recording setup (string-encoded integer).
signing.cameraPositionCamera position description (e.g., 'frontal at chest height, 2m distance').
signing.signerPositionWhere the signer is positioned relative to the camera.
signing.signingSpaceApproximate dimensions of the captured signing space.
signing.backgroundTypeBackground description: solid-black, blue-screen, green-screen, natural
signing.glossConventionGlossing convention used (e.g., 'hamburg-notation', 'id-glosses').
signing.interactionTypeInteraction type: monologue, dialogue, group, elicitation

Fieldwork & Language Documentation

KeyDescription
fieldwork.elicitationTypeElicitation method: narrative, conversation, wordlist, paradigm, picture-task, retelling, interview
fieldwork.archiveIdArchive identifier (PARADISEC, ELAR, AILLA, etc.).
fieldwork.archiveCollectionCollection within the archive.
fieldwork.endangermentLevelLanguage endangerment: safe, vulnerable, endangered, severely-endangered, critically-endangered
fieldwork.communityNameSpeaker community name.
fieldwork.genreDiscourse genre: narrative, dialogue, procedural, oratory, singing, formulaic, ludic

Clinical Speech

KeyDescription
clinical.diagnosisClinical diagnosis relevant to speech (e.g., 'aphasia', 'dysarthria', 'stuttering', 'ASD').
clinical.severitySeverity level of the condition.
clinical.taskTypeClinical task: reading, spontaneous, repetition, picture-naming, sentence-completion, diadochokinesis
clinical.assessmentToolStandardized assessment used (e.g., 'WAB-R', 'BNT', 'ADOS-2').
clinical.treatmentPhaseTreatment phase: pre-treatment, during-treatment, post-treatment, follow-up

Multimodal Sensor References

KeyDescription
mocap.fileRefURI or AT-URI of associated motion capture data.
mocap.formatMotion capture format: bvh, c3d, fbx, trc
mocap.frameRateMotion capture sampling rate in Hz (string-encoded integer).
mocap.systemMotion capture system name (e.g., 'OptiTrack', 'Vicon', 'Xsens').
eyetracking.fileRefURI or AT-URI of associated eye-tracking data.
eyetracking.sampleRateEye-tracking sampling rate in Hz (string-encoded integer).
eyetracking.deviceEye-tracking hardware (e.g., 'Tobii Pro Spectrum', 'EyeLink 1000').
depth.sensorTypeDepth sensor type: structured-light, time-of-flight, stereo
depth.resolutionDepth stream resolution (e.g., '640x480').

Accessibility

KeyDescription
accessibility.hasCaptionsWhether captions/subtitles are available: true or false.
accessibility.captionFormatCaption format: webvtt, srt, ttml, cea-608, cea-708
accessibility.captionLanguageBCP-47 tag of caption language.
accessibility.hasAudioDescriptionWhether an audio description track is present: true or false.
accessibility.hasSignLanguageInterpretationWhether sign language interpretation is present: true or false.
accessibility.signLanguageTypeSign language used for interpretation (BCP-47 sign language subtag).
accessibility.hazardsAccessibility hazards: flashing, motion-simulation, sound, none

What Does NOT Belong on Media Records

Several categories of metadata are better placed on other Layers record types:

  • Segmentation (VAD, IPUs, breath groups, turn boundaries) → pub.layers.annotation layers on the expression, with subkind values like vad, ipu, breath-group, turn-boundary, diarization
  • Derived acoustic measurements (pitch tracks, formant tracks, spectrograms, intensity contours) → pub.layers.annotation layers with appropriate subkind (e.g., pitch, formant, intensity, spectrogram)
  • Analysis parameters (Praat settings, window size, step size, frequency range) → annotationMetadata.features on the annotation layer that contains the derived measurements
  • Corpus-level statistics (total hours, speaker count, language distribution) → pub.layers.corpus features
  • Temporal alignment (millisecond/frame/sample alignment of annotations to media) → handled by pub.layers.defs#temporalSpan and pub.layers.defs#anchor

XRPC Queries

getMedia

NSID: pub.layers.media.getMedia

Retrieve a single media record by AT-URI.

ParameterTypeDescription
uriat-uri (required)The AT-URI of the media record.

Output: { uri: at-uri, cid: cid, value: media } (the media record wrapped with its uri and cid).

listMedia

NSID: pub.layers.media.listMedia

List media records in a repository with pagination.

ParameterTypeDescription
repoat-identifier (required)The DID or handle of the repository.
kindstringFilter by media kind slug (maxLength 128).
limitintegerMaximum number of records to return (1-100, default 50).
cursorstringPagination cursor from previous response.

Output: { records: { uri, cid, value: media }[], cursor?: string }