Hi everyone,
I'm trying to switch electronic image stabilization (EIS / anti-shake) completely ON and OFF through a documented camera API. Enabling it and changing its strength work through ISAPI, but disabling it fails. The camera's own settings page can turn it off.
Camera and connection
What works
This returns HTTP 200 / OK and changes the reported state from OFF to ON. Levels 1, 2 and 3 also work. We verified the values through GET requests and an independently refreshed settings page; we haven't measured physical stabilization performance.
Disabling EIS fails
The same endpoint with this body returns HTTP 403:
Relevant response fields:
We also tried reading the current EIS object, changing only enabled to false, and preserving the existing strength, namespace and formatting. Same error.
The camera's GET response uses xmlns="". To rule out formatting differences, we switched OFF in the web UI, saved that exact raw GET response (false, level 1), enabled EIS again, and replayed the saved OFF XML unchanged. It still returned 403 / notSupport. Replaying the raw ON XML using that same namespace succeeds.
Other calls tried
ONVIF check
We tried SetImagingSettings through POST /onvif/image_service, with the standard ImagingSettings/Extension/ImageStabilization/Mode set to OFF and ForcePersistence=false. It returned HTTP 200 with an empty SetImagingSettingsResponse, but ISAPI readback and the refreshed UI remained ON.
However, this camera's ONVIF Imaging capabilities explicitly report ImageStabilization=false, and both GetOptions and GetImagingSettings omit stabilization. So this isn't evidence that it advertises ONVIF stabilization support.
The web UI can disable it — captured request
Selecting OFF in the settings page sends:
Within params.table.auto.imageEnhancement, the relevant object is:
That is an excerpt, not the full request: the UI also sends the other retained image-enhancement settings and session information. It returns HTTP 200 / result=true. Afterwards, both GET /ISAPI/Image/channels/1/EIS and GET /ISAPI/Image/channels/1 report enabled=false, EISLevel=1.
So the working UI action leaves enable=true in its JSON and selects mode=0, whereas ISAPI rejects enabled=false. We captured this through normal UI operation; we haven't adopted the private web endpoint as our integration API.
Has anyone encountered this or found a documented solution?
At present we don't know whether this is incomplete ISAPI support, a firmware bug, or a missing documented command. The camera was restored to its starting settings after testing.
Thanks!
I'm trying to switch electronic image stabilization (EIS / anti-shake) completely ON and OFF through a documented camera API. Enabling it and changing its strength work through ISAPI, but disabling it fails. The camera's own settings page can turn it off.
Camera and connection
- Reported model/module: UV-ZNH5130
- Reported firmware: v4.2.7, build 20251226
- ISAPI image channel: 1
- HTTP Digest authentication; Content-Type: application/xml
What works
Code:
PUT /ISAPI/Image/channels/1/EIS
XML:
<EIS version="2.0" xmlns="http://www.isapi.org/ver20/XMLSchema">
<enabled>true</enabled>
<EISLevel>1</EISLevel>
</EIS>
Disabling EIS fails
The same endpoint with this body returns HTTP 403:
XML:
<EIS version="2.0" xmlns="http://www.isapi.org/ver20/XMLSchema">
<enabled>false</enabled>
<EISLevel>1</EISLevel>
</EIS>
XML:
<requestURL>/ISAPI/Image/channels/1/EIS</requestURL>
<statusCode>4</statusCode>
<statusString>Invalid Operation</statusString>
<subStatusCode>notSupport</subStatusCode>
We also tried reading the current EIS object, changing only enabled to false, and preserving the existing strength, namespace and formatting. Same error.
The camera's GET response uses xmlns="". To rule out formatting differences, we switched OFF in the web UI, saved that exact raw GET response (false, level 1), enabled EIS again, and replayed the saved OFF XML unchanged. It still returned 403 / notSupport. Replaying the raw ON XML using that same namespace succeeds.
Other calls tried
- PUT /ISAPI/Image/channels/1/EIS with enabled=false and EISLevel omitted: HTTP 403 / notSupport.
- Same endpoint with enabled=false and EISLevel=0: HTTP 403 / notSupport.
- Same endpoint with enabled=true and EISLevel=0: HTTP 403 / notSupport.
- Same endpoint with numeric enabled=0: HTTP 400; statusCode=6, statusString="Invalid XML Content", subStatusCode=badXmlContent.
- Same endpoint with enabled=true, EISLevel=1 and an experimental mode=0 field: HTTP 200 / OK, but EIS remains ON. mode=1 was also accepted without changing the state. These were exploratory fields, not a confirmed ISAPI schema.
- PUT /ISAPI/Image/channels/1 with a partial ImageChannel containing EIS/enabled=false: HTTP 200 / OK, but GET readbacks remain ON for each of the isapi.org, hikvision.com and returned std-cgi namespace variants. A subsequent refreshed UI also remained ON.
- Parent ImageChannel requests using ImageStabilization/enabled=false or stabilizationLevel="off" also returned OK without disabling EIS.
- PUT /ISAPI/Image/channels with an ImageChannellist containing the EIS OFF setting: HTTP 403; statusCode=4, statusString="Invalid Operation", subStatusCode=methodNotAllowed.
- GET /ISAPI/Image/channels/1/EIS/capabilities: HTTP 403; statusCode=4, statusString="Invalid Operation", subStatusCode=invalidOperation.
ONVIF check
We tried SetImagingSettings through POST /onvif/image_service, with the standard ImagingSettings/Extension/ImageStabilization/Mode set to OFF and ForcePersistence=false. It returned HTTP 200 with an empty SetImagingSettingsResponse, but ISAPI readback and the refreshed UI remained ON.
However, this camera's ONVIF Imaging capabilities explicitly report ImageStabilization=false, and both GetOptions and GetImagingSettings omit stabilization. So this isn't evidence that it advertises ONVIF stabilization support.
The web UI can disable it — captured request
Selecting OFF in the settings page sends:
Code:
POST /SDK/UNIV_API
service: videoIn
method: setConfig
channel: 0
scene: auto
JSON:
"imageStabilization": {
"enable": true,
"level": 1,
"levelVal": 1,
"mode": 0
}
So the working UI action leaves enable=true in its JSON and selects mode=0, whereas ISAPI rejects enabled=false. We captured this through normal UI operation; we haven't adopted the private web endpoint as our integration API.
Has anyone encountered this or found a documented solution?
- Is there an official ISAPI equivalent of this OFF mode, perhaps another resource or required field?
- Does the std-cgi namespace / UV-ZNH5130 firmware point to a known OEM API implementation or limitation?
- Has anyone successfully disabled EIS on similar firmware using a manufacturer-documented API or SDK? An exact endpoint, request body or documentation reference would be very helpful.
At present we don't know whether this is incomplete ISAPI support, a firmware bug, or a missing documented command. The camera was restored to its starting settings after testing.
Thanks!
