Dark image or colored stripes with ZED SDK 5.4.1

After running for 30+ hours, one of our cameras started to return (almost) black images.

ZED SDK 5.4.1, ubuntu 24, CUDA 12.9, Firmware v1523 sensors fw778

We are using the image validity check, and it did not flag this as corrupted frame. Using ZED Explorer to reboot the camera worked, but this should in my opinion be caught be the image validity check. What can be done about this?

Edit:

We also got this image now, also not detected by image validity check:

Hi Mathijs,

Could you please run ZED Diagnostic and provide the output so that we can better understand the situation ?

Regards,

Tristan

Stereolabs Support

Diagnostics output:

ZED_Diagnostic_Results.json (8.5 KB)

Hi,

Thanks, that confirms the key point: two ZED 2i on USB3, which is the model affected by the failure I described.

The camera section is incomplete though. Both cameras were enumerated but never opened, so there are no serial numbers, firmware versions or bandwidth result. That happens when your application holds the cameras, since the SDK needs exclusive access. Please stop it, re-run ZED_Diagnostic -c and send the new JSON. What we mainly need is the sensors firmware version (“IMU Firmware”) per camera. The ISP fixes shipped in 778, so if either camera is below that, updating is the real fix rather than just detecting the condition. Send the version and we will supply the procedure, which is not the same command as the video firmware.

Two things you can already rule out: the cameras are connected directly (the USB 2.0 hub in the report is inside the ZED 2i), and both run at USB3 speed.

Still needed:

  1. Was the left image dark while the right stayed normal?

  2. Your enable_image_validity_check value, and how you test the grab() result.

  3. Next occurrence, before rebooting: Can you please provide a lossless SVO, plus EXPOSURE and GAIN read back per side?

Best regards,

Tristan

I stopped our application, did a reboot of both cameras and the resulting json is not much different.

ZED_Diagnostic_Results.json (8.5 KB)

Seems the ZED_Diagnostic is not producing the correct results?

Firmware of the IMU is 778, I updated both cameras to that. I think you have to trust me on this :grin:

Script used:

import pyzed.sl as sl

for dev in sl.Camera.get_device_list():
    print(f"Serial: {dev.serial_number}")
    print(f"Model: {dev.camera_model}")

    zed = sl.Camera()

    init = sl.InitParameters()
    init.set_from_serial_number(dev.serial_number)

    status = zed.open(init)

    if status == sl.ERROR_CODE.SUCCESS:
        info = zed.get_camera_information()

        print(f"  Camera FW : {info.camera_configuration.firmware_version}")
        print(f"  Sensor FW : {info.sensors_configuration.firmware_version}")

        zed.close()
    else:
        print(f"  Open failed: {status}")

    print()


Output

 python getfw.py
Serial: 37183641
Model: ZED 2i
[2026-08-06 20:07:03 UTC][ZED][INFO] Logging level INFO
[2026-08-06 20:07:04 UTC][ZED][INFO] Using USB input... Switched to default resolution HD720
[2026-08-06 20:07:05 UTC][ZED][INFO] [Init]  Camera successfully opened.
[2026-08-06 20:07:05 UTC][ZED][INFO] [Init]  Camera FW version: 1523
[2026-08-06 20:07:05 UTC][ZED][INFO] [Init]  Video mode: HD720@30
[2026-08-06 20:07:05 UTC][ZED][INFO] [Init]  Serial Number: S/N 37183641
[2026-08-06 20:07:05 UTC][ZED][INFO] [Init]  Depth mode selected: NEURAL. Ensure this mode matches your application's performance and accuracy requirements. See https://www.stereolabs.com/docs/depth-sensing/depth-modes for help.
  Camera FW : 1523
  Sensor FW : 778

Serial: 33220193
Model: ZED 2i
[2026-08-06 20:07:05 UTC][ZED][INFO] Logging level INFO
[2026-08-06 20:07:06 UTC][ZED][INFO] Using USB input... Switched to default resolution HD720
[2026-08-06 20:07:07 UTC][ZED][INFO] [Init]  Camera successfully opened.
[2026-08-06 20:07:07 UTC][ZED][INFO] [Init]  Camera FW version: 1523
[2026-08-06 20:07:07 UTC][ZED][INFO] [Init]  Video mode: HD720@30
[2026-08-06 20:07:07 UTC][ZED][INFO] [Init]  Serial Number: S/N 33220193
[2026-08-06 20:07:07 UTC][ZED][INFO] [Init]  Depth mode selected: NEURAL. Ensure this mode matches your application's performance and accuracy requirements. See https://www.stereolabs.com/docs/depth-sensing/depth-modes for help.
  Camera FW : 1523
  Sensor FW : 778

I will supply point 2 and 3 on the next occurence.

Sorry for the delay, we will get back to you shortly.

I encountered a situation where the image didn’t turn completely black, but it does seem like the auto exposure stopped working.

I recorded an SVO and got this output from my script:

Opening camera S/N 35148173...
[2026-08-13 15:16:41 UTC][ZED][INFO] Logging level INFO
[2026-08-13 15:16:42 UTC][ZED][INFO] [Init]  Camera successfully opened.
[2026-08-13 15:16:42 UTC][ZED][INFO] [Init]  Camera FW version: 1523
[2026-08-13 15:16:42 UTC][ZED][INFO] [Init]  Video mode: HD1080@30
[2026-08-13 15:16:42 UTC][ZED][INFO] [Init]  Serial Number: S/N 35148173
[2026-08-13 15:16:42 UTC][ZED][INFO] [Init]  Depth mode selected: NEURAL. Ensure this mode matches your application's performance and accuracy requirements. See https://www.stereolabs.com/docs/depth-sensing/depth-modes for help.
[2026-08-13 15:16:42 UTC][ZED][INFO] [Init]  Notice: This recording uses SVO version 2, which includes high-frequency IMU data. To revert to legacy SVO mode, set the ZED_SDK_SVO_VERSION environment variable to 1.
Recording from S/N 35148173 to 'neural_lossless_35148173.svo' for 4 seconds...

Time: 0.26s | Frame: 00010 | Exposure: 67 | Gain: 0
Time: 0.60s | Frame: 00020 | Exposure: 67 | Gain: 0
Time: 0.96s | Frame: 00030 | Exposure: 67 | Gain: 0
Time: 1.33s | Frame: 00040 | Exposure: 67 | Gain: 0
Time: 1.67s | Frame: 00050 | Exposure: 67 | Gain: 0
Time: 2.00s | Frame: 00060 | Exposure: 67 | Gain: 0
Time: 2.33s | Frame: 00070 | Exposure: 67 | Gain: 0
Time: 2.67s | Frame: 00080 | Exposure: 67 | Gain: 0
Time: 3.00s | Frame: 00090 | Exposure: 67 | Gain: 0
Time: 3.34s | Frame: 00100 | Exposure: 67 | Gain: 0
Time: 3.67s | Frame: 00110 | Exposure: 67 | Gain: 0

Reached 4.0s limit. Stopping.

Finished. Recorded 119 frames in 4.55 seconds.

Sript used:

Summary
import sys
import time
import pyzed.sl as sl


def main():
    zed = sl.Camera()

    # 1. Initialization Parameters
    init_params = sl.InitParameters()
    init_params.input.set_from_serial_number(35148173)
    init_params.camera_resolution = sl.RESOLUTION.HD1080
    init_params.camera_fps = 30
    init_params.depth_mode = sl.DEPTH_MODE.NEURAL
    init_params.coordinate_units = sl.UNIT.METER

    # Enable image validity check on initialization
    init_params.enable_image_validity_check = True

    # 2. Open Camera
    print("Opening camera S/N 35148173...")
    err = zed.open(init_params)
    if err != sl.ERROR_CODE.SUCCESS:
        print(f"Failed to open camera 35148173: {err}")
        sys.exit(1)

    # 3. Configure Lossless SVO Recording
    output_filepath = "neural_lossless_35148173.svo"
    recording_params = sl.RecordingParameters()
    recording_params.video_filename = output_filepath
    recording_params.compression_mode = sl.SVO_COMPRESSION_MODE.LOSSLESS

    err = zed.enable_recording(recording_params)
    if err != sl.ERROR_CODE.SUCCESS:
        print(f"Failed to enable recording: {err}")
        zed.close()
        sys.exit(1)

    # 4. Runtime Parameters
    runtime_params = sl.RuntimeParameters()

    print(
        f"Recording from S/N 35148173 to '{output_filepath}' for 4 seconds...\n"
    )

    frames_recorded = 0
    start_time = None
    max_duration = 4.0  # seconds

    try:
        while True:
            grab_state = zed.grab(runtime_params)

            if grab_state == sl.ERROR_CODE.SUCCESS:
                if start_time is None:
                    start_time = time.time()

                frames_recorded += 1
                elapsed = time.time() - start_time

                # Query standard settings enums (works in both Auto and Manual modes)
                if frames_recorded % 10 == 0:
                    _, exp_val = zed.get_camera_settings(
                        sl.VIDEO_SETTINGS.EXPOSURE
                    )
                    _, gain_val = zed.get_camera_settings(
                        sl.VIDEO_SETTINGS.GAIN
                    )

                    print(
                        f"Time: {elapsed:.2f}s | Frame: {frames_recorded:05d} | "
                        f"Exposure: {exp_val} | Gain: {gain_val}"
                    )

                if elapsed >= max_duration:
                    print(f"\nReached {max_duration}s limit. Stopping.")
                    break

            else:
                print(
                    f"\n[Warning] Grab failed with code: {grab_state} (Frame drops: {zed.get_frame_drop_count()})"
                )

    except KeyboardInterrupt:
        print("\nRecording stopped by user.")

    # 5. Cleanup
    zed.disable_recording()
    zed.close()
    if start_time:
        print(
            f"\nFinished. Recorded {frames_recorded} frames in {time.time() - start_time:.2f} seconds."
        )


if __name__ == "__main__":
    main()

I will upload the SVO later.

So I just got the problem again on the camera that had this problem originally

Opening camera S/N 35148173...
[2026-08-14 09:32:09 UTC][ZED][INFO] Logging level INFO
[2026-08-14 09:32:10 UTC][ZED][INFO] [Init]  Camera successfully opened.
[2026-08-14 09:32:10 UTC][ZED][INFO] [Init]  Camera FW version: 1523
[2026-08-14 09:32:10 UTC][ZED][INFO] [Init]  Video mode: HD1080@30
[2026-08-14 09:32:10 UTC][ZED][INFO] [Init]  Serial Number: S/N 33220193
[2026-08-14 09:32:10 UTC][ZED][INFO] [Init]  Depth mode selected: NEURAL. Ensure this mode matches your application's performance and accuracy requirements. See https://www.stereolabs.com/docs/depth-sensing/depth-modes for help.
[2026-08-14 09:32:11 UTC][ZED][WARNING] [Init]  Self-calibration was skipped due to low texture or occlusion in the scene. Tracking accuracy may be affected.
[2026-08-14 09:32:11 UTC][ZED][INFO] [Init]  Notice: This recording uses SVO version 2, which includes high-frequency IMU data. To revert to legacy SVO mode, set the ZED_SDK_SVO_VERSION environment variable to 1.
Recording from S/N 33220193 to 'neural_lossless_33220193.svo' for 4 seconds...

Time: 0.25s | Frame: 00010 | Exposure: 100 | Gain: 76
Time: 0.58s | Frame: 00020 | Exposure: 100 | Gain: 76
Time: 0.92s | Frame: 00030 | Exposure: 100 | Gain: 76
Time: 1.25s | Frame: 00040 | Exposure: 100 | Gain: 76
Time: 1.59s | Frame: 00050 | Exposure: 100 | Gain: 76
Time: 1.92s | Frame: 00060 | Exposure: 100 | Gain: 76
Time: 2.26s | Frame: 00070 | Exposure: 100 | Gain: 76
Time: 2.59s | Frame: 00080 | Exposure: 100 | Gain: 76
Time: 2.93s | Frame: 00090 | Exposure: 100 | Gain: 76
Time: 3.26s | Frame: 00100 | Exposure: 100 | Gain: 76
Time: 3.59s | Frame: 00110 | Exposure: 100 | Gain: 76
Time: 3.93s | Frame: 00120 | Exposure: 100 | Gain: 76

Reached 4.0s limit. Stopping.

Finished. Recorded 123 frames in 4.60 seconds.

Link to SVO