ZED SDK 5.4

Release notes of the ZED SDK 5.4.x series
Open in ClaudeOpen in ChatGPT

Release notes of the ZED SDK 5.4 series. Patch releases are listed newest first. Download links and the full changelog, including ZED Tools and integrations, are available on the ZED SDK 5.4 release page.

What’s New

ZED SDK 5.4 makes the built-in NEURAL depth models noticeably faster: an optimized inference path delivers up to 20% quicker depth inference and ~15% lower GPU load on Jetson Thor, with gains carrying over to Orin and desktop GPUs and the largest wins on heavier pipelines (more cameras, NEURAL PLUS, or concurrent recording), all with outputs unchanged. The release also opens the depth pipeline to custom algorithms through the experimental DEPTH_MODE::CUSTOM: an externally computed disparity or depth map (for example from a custom stereo network) can be fed to the SDK each frame, and the full pipeline (point cloud, spatial mapping, object detection, plane detection) then runs on the ingested data. A companion stereo retrieveTensor overload pre-processes both rectified views in a single fused GPU pass, producing inference-ready tensors that bind directly to frameworks such as TensorRT.

Recording and streaming gain a leaner path. SVO recording and outbound streaming now run entirely from Camera::read(), and stereo rectification is performed on demand, so pure recording or streaming pipelines no longer pay its CPU/GPU cost. A new polling API retrieves encoded H264/H265 packets directly (from incoming, outgoing, or recorded streams) without a second encoding session, and new rectified LEFT_NV12 / RIGHT_NV12 views feed hardware encoders without an extra color conversion.

This release also extends the platform reach with experimental support for ARM desktop systems (SBSA: NVIDIA DGX Spark, GH200, and ARM CUDA servers). A new monotonic MONOTONIC_RAW_CLOCK timestamp option yields timestamps immune to both NTP/PTP step and frequency adjustments, the per-camera lens distortion model is now exposed through LENS_DISTORTION_MODEL, and SLAM GEN_3 reports per-pose confidence. Numerous stability and accuracy fixes round out the release across depth, streaming, calibration, and USB camera handling.

5.4.1

Released: Jul 23, 2026

SDK

General

Features / Improvements
  • Enabled Intra Process Communication (IPC) on Windows.
  • Improved image timestamp accuracy on GMSL cameras (ZED X / ZED X One families): the frame timestamp is now captured in hardware instead of sampled in software, reducing timestamp jitter by ~10× and making it immune to CPU load. Enabled by default; set ZED_SDK_DISABLE_HW_TSC_SOF=1 to restore the previous software-sampled timestamps.
  • DGX Spark (GB10): the 5.4.0 USB camera limitation was traced to a platform kernel (xHCI) issue, fixed in Ubuntu’s upcoming linux-nvidia-7.0 kernel; with it, ZED USB cameras are fully functional on DGX Spark. Until its official rollout, the SBSA installer now offers to install that kernel on affected GB10 systems (interactive installs only).
  • Improved ZED X IMU temperature reading, a valid temperature is now available directly after sl::Camera::open.
Bug Fixes
  • Fixed the IMU camera moving state that was sometimes stuck to MOVING. This was introduced when IMU frequency switched from 400Hz to 200Hz.
  • Fixed Camera::open with an SVO2 file without high-frequency IMU data: the ZED SDK now runs in degraded mode and some modules won’t be available.
  • Improved USB camera recovery after a disconnection. Resolves a case where grab() could freeze during automatic reconnection, prevents a hang when a camera is physically unplugged mid-recovery, and ensures images are correct after the camera comes back online. open_timeout_sec is now correctly applied to the reconnection retry window. This applies to both sync and async recovery workflows defined by sl::InitParameters::async_grab_camera_recovery.
  • Fixed streaming from a Jetson to a Windows receiver, resolving a wire-format incompatibility that stopped a Windows client from decoding a Jetson stream.
  • Fixed effect of sl::InitParameters::open_timeout_sec in sl::Camera::open(): it no longer hangs when a stream has no sender, and now returns after the given timeout instead of freezing.
  • Fixed an issue where rolling SVO recording could produce empty files after the first one.
  • ZED X One 4K: requesting HDR at a resolution that has no HDR sensor mode (only QHD+ and HD1200 have one) is now rejected with a warning instead of leaving the GMSL capture stack unable to reopen the camera (repeated open timeouts until the application restarts).
  • Fixed calibration/configuration file parsing and writing being corrupted by the application’s locale.

SLAM

  • Fixed GEN_3 positional tracking failing to start when IMU fusion was enabled but the source provided no high-frequency IMU data (e.g. SVO v1 files or network streams without full-rate sensor data). When the source still carries an integrated orientation, tracking now runs visual-inertial using it as a rotation-only attitude prior; when no IMU data is available at all, it falls back to pure visual mode instead of never initializing.
  • Fixed excessive positional tracking computation that could push grab() runtime to 300–400 ms.
  • With Area Memory off, tracking now correctly runs as pure visual-inertial odometry (VIO) instead of the previously refined pipeline. Behavior with Area Memory enabled is unchanged.

5.4.0

Released: Jun 18, 2026

SDK

General

Features / Improvements
  • Optimized the NEURAL depth models’ inference path, improving both runtime and load. Depth inference is up to 20% faster and GPU load is reduced by ~15% on Jetson Thor; gains carry over to Orin and desktop GPUs as well, though the magnitude varies by platform. The improvement scales with pipeline load: heavier workloads (more cameras, more demanding models such as NEURAL PLUS, or recording running on top) tend to see the largest gains. For example, 4 cameras running NEURAL depth on Jetson Thor now reach 60 FPS (up from 53). Outputs are unchanged.
  • (Experimental) Added sl::DEPTH_MODE::CUSTOM: feed your own externally computed disparity or depth map (e.g. from a custom stereo network) to the SDK each frame via the new sl::Camera::ingestCustomDepth(), called between Camera::read() and Camera::grab(). The full pipeline then runs on the ingested data (point cloud, spatial mapping, object detection, plane detection, etc.). Disparity or metric depth is accepted at any resolution, in CPU or GPU memory, with an optional confidence map for graded confidence_threshold filtering. Available in the C++, C, Python and C# APIs. As an experimental feature, downstream modules may not be fully robust to arbitrary custom depth/confidence input and can produce unexpected behavior or reduced accuracy.
  • Added a stereo overload of sl::Camera::retrieveTensor(Tensor& left, Tensor& right, const TensorParameters&): both rectified views are pre-processed for inference (resize, color conversion, layout, normalization) in a single fused GPU pass, producing densely packed tensors that can be bound directly as network inputs (e.g. TensorRT). Designed for stereo networks and the new DEPTH_MODE::CUSTOM, usable between read() and grab(). C++ only.
  • Added a new sl::TIMESTAMP_CLOCK::MONOTONIC_RAW_CLOCK value to the process-wide timestamp clock selector, backed by Linux CLOCK_MONOTONIC_RAW. Like MONOTONIC_CLOCK, it is immune to NTP/PTP step adjustments, but it is also not subject to NTP/PTP frequency slewing (adjtimex). Useful when correlating SDK timestamps with free-running hardware counters or with devices that are not time-disciplined by the host. Available in C++, C, Python and C# wrappers. Switch to it before opening any camera with sl::Camera::setTimestampClock(sl::TIMESTAMP_CLOCK::MONOTONIC_RAW_CLOCK).
  • Added a new polling API to retrieve encoded H264/H265 video packets directly from the SDK, without re-encoding. Exposed via sl::Camera::retrieveEncodedStreamPacket(EncodedStreamPacket&, ENCODED_STREAM_SOURCE) and the introspection method sl::Camera::getEncodedStreamsInfo() (also available on sl::CameraOne). Three sources are addressable on a single camera: RECEIVING (incoming network stream when opened with INPUT_TYPE::STREAM), SENDING (outgoing enableStreaming() bitstream, captured before RTP fragmentation), and RECORDING (the SVO encoder output). Each packet is delivered as Annex-B NAL units (SPS/PPS, and VPS for HEVC, inlined in front of every IDR), so writing successive packets to a .h264 / .hevc file produces a self-contained stream playable by any standard player. The tap drops every packet until the first natural IDR arrives, so the first packet returned is always a keyframe; on RECEIVING streams this can mean a wait of up to one GOP (~2 s with the SDK default) before the first packet is available. Common use case: muxing the SDK’s outgoing or recorded stream into a custom container (mp4, mkv, etc.) without paying a second encoding session. Works with H264, H265, H264_LOSSLESS, and H265_LOSSLESS recording modes.
  • SVO recording and outbound streaming now run entirely from sl::Camera::read(), no longer requiring a subsequent sl::Camera::grab() to push a frame.
  • Stereo image rectification is now performed on demand instead of on every frame, eliminating its CPU/GPU cost in pure recording or streaming pipelines where rectified images are never consumed.
  • The raw (unrectified) calibration values are now refined by the self-calibration algorithm. As a result, the values reported at runtime may differ slightly from those in your calibration file. These refined values guarantee a better epipolar constraint.
  • Added rectified NV12 output to sl::Camera::retrieveImage via the new sl::VIEW::LEFT_NV12 and sl::VIEW::RIGHT_NV12 (also available on sl::CameraOne). These return the rectified image directly as NV12 (YUV 4:2:0 semi-planar), so you no longer have to retrieve BGRA and re-convert before feeding a hardware H264/H265 encoder. Unlike the existing LEFT_NV12_UNRECTIFIED (native-resolution, GPU-only zero-copy), the rectified variant supports resizing (even dimensions) and both CPU and GPU memory. Available in the C++, C, Python and C# wrappers.
  • Exposed the lens distortion model used by each camera through a new sl::LENS_DISTORTION_MODEL enum (RAD_TAN, FISHEYE, PINHOLE) and a new CameraParameters::lens_distortion_model field. Raw/unrectified parameters report RAD_TAN or FISHEYE, rectified parameters report PINHOLE, so applications can now tell how the reported intrinsics and distortion coefficients should be interpreted instead of having to guess from the coefficient values. Available for stereo and ZED One cameras across the C++, C, Python and C# APIs.
Bug Fixes
  • Fixed local streaming: a receiver restarted after an unclean disconnect (ctrl-c, crash, container stop) could silently stop receiving frames shortly after. Also fixed a thread-safety issue that could destabilize the sender when receivers join or leave.
  • Fixed H26x streaming on Jetson Nano.
  • Fixed H26x (H264/H265) SVO2 recording and playback on devices without a hardware video encoder, which previously failed.
  • Fixed SVO recording of a ZED One opened from a local stream, which previously failed with an SVO_UNSUPPORTED_COMPRESSION error and could crash. Local streams use an uncompressed transport with no encoded bitstream to copy, so recording now transcodes automatically (as it already did for stereo cameras).
  • Fixed camera exposure and gain being saved as zero in SVO files recorded from a stream (all cameras), and in live ZED One SVO2 recordings.
  • Improved depth confidence accuracy: fixed two sampling bugs in the depth confidence computation. Depth values are unchanged; confidence is now more reliable, and slightly more pixels pass a given confidence threshold.
  • Improved fisheye self-calibration accuracy: fixed an incorrect distortion model that biased the calibration on fisheye cameras.
  • Fixed corruption on the right edge of the depth image in FILL mode at some non-standard resolutions.
  • Fixed retrieveMeasure(MEASURE::NORMALS) occasionally mis-flagging valid normals.
  • Fixed several out-of-bounds GPU memory accesses and a thread-synchronization issue in the depth pipeline, improving stability. Outputs are unchanged.
  • Fixed IMU thermal compensation using an out-of-range or invalid temperature reading, which could corrupt the IMU fusion in VIO.
  • Improved USB camera detection and reopen reliability on Windows. Cameras no longer intermittently fail to be re-detected after a close/reopen cycle, and Camera::getDeviceList() now reads the serial number through a lightweight probe instead of fully opening and streaming each camera; repeated enumeration no longer leaves devices in a bad state.
  • USB cameras already in use are no longer missing from Camera::getDeviceList(): they are now listed as NOT_AVAILABLE with their path and model populated instead of being silently dropped. On Linux, opening a busy camera now correctly reports it as in-use instead of failing with a generic error.
  • Fixed a freeze followed by an automatic camera recovery (reboot) that could occur when rapidly changing manual exposure or gain on USB cameras (e.g. dragging a slider). Unchanged sensor register writes are now skipped, so partial updates can no longer lock up the image sensor.
  • Camera video settings get/set now degrade gracefully when a USB camera becomes unavailable, instead of crashing (Windows) or accepting values against a bogus fallback range (Linux).
  • Fixed leaks of the V4L2 device descriptor on failed Camera::open() attempts on Linux, which could keep the camera busy across retries.
  • Updated udev rules (99-slabs.rules): sensor (HID) access now works when the camera enumerates on a USB controller other than bus 1 (e.g. Jetson AGX Orin), and the i2c rules for ZED-GMSL now cover every i2c adapter regardless of numbering.

SLAM

Features / Improvements
  • Pose confidence is now available when using the GEN_3 algorithm; access it via sl::Pose::pose_confidence to filter or weight tracking results by reliability.
Bug Fixes
  • Fixed POSITIONAL_TRACKING_MODE::GEN_3 failing to start when PositionalTrackingParameters::enable_imu_fusion was set to true.

Platform

  • Added experimental support for ARM desktop platforms (SBSA): NVIDIA DGX Spark, GH200, and ARM CUDA servers. A dedicated installer (ZED_SDK_Ubuntu24_sbsa_cuda13.0_tensorrt10.16_*, TensorRT libraries bundled) provides the desktop feature set on aarch64. Known limitation: Live USB camera support on these platforms is still experimental and may not work reliably; on the NVIDIA DGX Spark systems we’ve tested, ZED USB cameras are currently not functional. Behavior may differ on other GB10-based systems or with future system updates; we’re investigating with the platform vendor. ZED X (GMSL) cameras are not supported. SVO playback and network‑streamed inputs are unaffected.