API Reference
API Reference for the SmartSpectra SDK.
SmartSpectraSDK
Vitals measurement entry point. Owns one processing pipeline and surfaces lifecycle events via on(). Lifecycle methods throw a JS Error on failure with numeric code (a SmartSpectraErrorCode value), message, and boolean retryable properties.
import { SmartSpectraSDK, PixelFormat, decodeMetrics } from '@smartspectra/node-sdk';
const sdk = new SmartSpectraSDK({ apiKey: 'YOUR_KEY' });
sdk.on('metrics', (buf, ts) => console.log(decodeMetrics(buf)));
sdk.useCustomInput();
sdk.start();
sdk.sendFrame(rgbBuf, width, height, stride, PixelFormat.kRGB, timestampUs);
await sdk.destroy();Methods
-
constructor(options?: SmartSpectraOptions) -
start(): voidInitialize and begin a custom-input session.
-
stop(): voidRequest the session to stop. Idempotent.
-
stopAsync(): Promise<void>Async variant of stop() — the native stop blocks until the pipeline drains; prefer this in event-loop-sensitive contexts.
-
reset(): voidRebuild the processing pipeline after kError; source must be reconfigured before next start().
-
waitUntilComplete(timeoutMs?: number): booleanBlock until the session reaches a terminal state (idle or error), or the timeout elapses. Returns true if the session settled, false on timeout.
timeoutMs <= 0(the default) waits indefinitely. Use afteruseFile()+start()to block until end-of-file. -
destroy(): Promise<void>Tear down the session. Idempotent. Await before constructing a replacement session when teardown ordering matters, since native SDK state is process-global.
-
requestInsight(text: string): numberDispatch an on-demand insight prompt; returns the request id. The matching Insight response arrives asynchronously through the
'insight'event with the same id. -
useCustomInput(frameTransform?: FrameTransformValue): thisSelect the custom frame-push input source (push frames via
sendFrame()afterstart()). Returnsthisfor chaining; call beforestart(). -
useCamera(options?: CameraOptions): thisSelect a live camera as the input source. The SDK opens the camera and pumps frames internally on
start()— nosendFrame()needed. Returnsthisfor chaining. Captures in THIS process — for Electron, prefer the renderer SDK'suseMediaStream(). -
useFile(videoPath: string, options?: VideoFileOptions): thisSelect a pre-recorded video file as the input source.
start()begins playback (non-blocking, on SDK worker threads); usewaitUntilComplete()or watch'processingStatus'for the idle transition to detect end-of-file. Returnsthisfor chaining. -
sendFrame( buffer: Uint8Array | Buffer, width: number, height: number, stride: number, pixelFormat: PixelFormatValue, timestampUs: number, ): booleanSubmits a raw video frame. Requires
useCustomInput()+start()first. -
on(event: 'processingStatus', callback: (status: ProcessingStatusValue) => void): thisRegister a callback for a named event. Replaces any previously registered callback for the same event. Returns
thisfor chaining. -
on(event: 'validationStatus', callback: (code: ValidationCodeValue, timestampUs: number, hint: string) => void): this -
on(event: 'metrics', callback: (buf: Buffer, timestampUs: number) => void): this -
on(event: 'accumulatedMetrics', callback: (buf: Buffer, timestampUs: number) => void): this -
on(event: 'insight', callback: (buf: Buffer, requestId: number) => void): this -
on(event: 'error', callback: (code: SmartSpectraErrorCodeValue, message: string, retryable: boolean) => void): this -
on(event: 'frameSentThrough', callback: (sent: boolean, timestampUs: number) => void): this -
on(event: 'videoOutput', callback: (buf: Buffer, width: number, height: number, stride: number, pixelFormat: PixelFormatValue, timestampUs: number) => void): this
Properties
-
static readonly version: stringSDK package version.
-
readonly processingStatus: ProcessingStatusValueCurrent ProcessingStatus integer value.
SmartSpectraOptions
Options passed to the SmartSpectra constructor.
apiKey?: stringAPI key for server-validated auth.
requestedMetrics?: number[]MetricType integer codes. Defaults to breathingMetrics when omitted.
enableAccumulatedOutput?: booleanAlso emit an accumulated metrics packet at the end of each session.
logLevel?: SmartSpectraLogLevelValueVerbosity of SDK logging, applied when the session initializes. Defaults to SmartSpectraLogLevel.kWarning (warnings and errors only).
enableTelemetry?: booleanAggregate SDK telemetry. Defaults to true; set false to opt out.
VideoFileOptions
Playback options for useFile().
timestampsPath?: string | nullPath to a per-frame timestamps file (one timestamp per line).
interframeDelayMs?: numberThrottle between frames in ms; omit/0 = as fast as possible.
startOffsetMs?: numberSeek this far into the file before playback (ms); omit/0 = start.
maxDurationMs?: numberStop after this much content (ms); omit/0 = no limit.
frameTransform?: FrameTransformValueSpatial transform applied to every frame.
CameraOptions
Camera capture options for useCamera().
deviceIndex?: numberCamera device index; omit/0 = default device.
width?: numberCapture width in px; omit/0 = SDK default.
height?: numberCapture height in px; omit/0 = SDK default.
fps?: numberCapture frame rate; omit/0 = SDK default.
frameTransform?: FrameTransformValueSpatial transform applied to every frame.
FrameTransform
Frame transform applied by the SDK to every pushed frame.
readonly kNone: 0readonly kRotate90CW: 1readonly kRotate90CCW: 2readonly kRotate180: 3readonly kMirrorHorizontal: 4readonly kMirrorVertical: 5
PixelFormat
Pixel format of a raw frame buffer passed to sendFrame().
readonly kRGB: 0readonly kBGR: 1readonly kRGBA: 2readonly kBGRA: 3readonly kNV12: 4readonly kNV21: 5readonly kYUYV: 6
ProcessingStatus
Processing lifecycle status. Integer values are stable across SDK versions.
readonly kUninitialized: 0readonly kIdle: 1readonly kStarting: 2readonly kRunning: 3readonly kStopping: 4readonly kError: 5
ValidationCode
Measurement-readiness codes delivered via the 'validationStatus' event.
readonly kOk: 0readonly kNoFaceFound: 1readonly kMultipleFacesFound: 2readonly kFaceNotCentered: 3readonly kFaceSizeOutOfRange: 4readonly kTooDark: 5readonly kTooBright: 6readonly kChestNotVisible: 7readonly kCameraTuning: 10readonly kFrameRateTooLow: 11readonly kExcessiveMotion: 12readonly kFaceTooClose: 13readonly kFaceTooFar: 14readonly kFaceTooHigh: 15readonly kFaceTooLow: 16readonly kFaceNotForward: 17
SmartSpectraErrorCode
Error codes on errors thrown by lifecycle methods and delivered via the 'error' event.
readonly kOk: 0readonly kInvalidState: 1readonly kAuthenticationFailed: 2readonly kConfigurationFailed: 3readonly kCreditExhausted: 4readonly kNetworkError: 5readonly kServerError: 6readonly kInputUnavailable: 7readonly kProcessingFailed: 8readonly kFrameConversionFailed: 9readonly kNonMonotonicTimestamp: 10readonly kTimestampGap: 11
decodeMetrics()
Deserialize a protobuf Metrics buffer from the 'metrics' or 'accumulatedMetrics' events. Returns the decoded message if a class has been registered via setMetricsClass, otherwise the raw Buffer.
export declare function decodeMetrics(buf: Buffer): unknown
setMetricsClass()
Register a protobuf Metrics class exposing deserializeBinary(buf) (google-protobuf) or decode(buf) (protobufjs). decodeMetrics() will use it; otherwise the raw Buffer is returned.
export declare function setMetricsClass(cls: unknown): void
SmartSpectraLogLevel
Verbosity of SDK logging, set via the SmartSpectraSDK logLevel option. Levels are cumulative: a level shows its own messages plus everything more severe.
readonly kDebug: 0readonly kInfo: 1readonly kWarning: 2readonly kError: 3readonly kNone: 4
Headless Testing in CI
Run a full SmartSpectra measurement in CI by feeding a recorded video through the Node.js SDK.
Getting a Good Measurement
Camera setup, lighting, and positioning guidance for accurate SmartSpectra readings, what good vs. bad measurements look like, and how to read the SDK's live validation feedback.