release: 0.16.0 - #104
Merged
Merged
Conversation
Two snapshot bugs, both ours, found by timing each phase of a capture instead of assuming the wait was the camera's physics. - `<fullFrame>` was sent unconditionally. It is a model-specific mode, and on the cameras that implement it, it overrides `<streamType>`: `--stream sub` came back as a full-resolution frame. Measured on a dual-lens child behind a Home Hub 2 — sub went 3840x2160/875KB/9.34s to 896x512/58KB/1.92s, and even `--stream main`, which returns the same 4K frame either way, went 17.1s to 5.2s because the flag routed the capture down a slower, less stable path. - The transport read budget was a flat 10s and bounds a single read, while a snapshot's cmd 109 is one long silence — a sleeping battery camera needs its whole video pipeline up before the first byte. Measured 5.1s for a sub-stream capture and 23s for the 4K child with three channels waking at once, so anything past 10s failed with `tcp read timeout` rather than returning an image. Now 30s. Also adds `events history`: search the event log the device itself recorded (hub/NVR, cmds 516/517/518), a separate store from `events query`, which reads the gateway's in-memory ring of live pushes. Artifacts built external (LAN-only, no P2P) for all 8 platforms; the P2P fingerprint gate reports clean on every one, and checksums/v0.16.0.sha256 comes from the build machine.
reolink-net
approved these changes
Sep 3, 2026
reolink-net
left a comment
Collaborator
There was a problem hiding this comment.
Release sync verified: 8 external artifacts built with the P2P gate clean on each, checksums copied from the build machine, and the packaged binaries tested end to end against a real hub.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release sync for 0.16.0.
Two snapshot bugs, both ours. They were found by timing each phase of a capture
(connect / login / device-produces-image / transfer / logout) instead of
assuming the wait was the camera's physics — the phase that dominated turned
out to be one we were causing.
<fullFrame>was overriding--streamIt is a model-specific mode (the reference SDK documents it as "snap full frame
pic, for sd7", to be used together with the sub stream). The CLI sent
fullFrame=1to every device unconditionally. On a camera that implements theflag that overrides
<streamType>, so asking for the small preview JPEG got youa full-resolution one.
Measured on a dual-lens child behind a Home Hub 2, same camera, otherwise
identical request:
--stream mainis worth a second look: same resolution, same bytes to within0.1%, so the image itself is unchanged — but the flag was routing the capture
down a much slower and far less stable path (three runs: 11.8 / 17.1 / 28.8 s
with it, 4.7 / 5.2 / 7.4 s without). Cameras that never implemented the flag
measured the same either way, which is why only one model ever looked broken —
and it looked like it was ignoring
--streamrather than obeying aninstruction we should not have been sending.
A 10 s read timeout turned slow captures into failed ones
The transport budget bounds a single read, and a snapshot's cmd 109 is one
long silence: a sleeping battery camera brings its whole video pipeline up
before sending the first byte. Measured 5.1 s for a sub-stream capture from a
sleeping child, and 23 s for the 4K child with three channels waking at once —
so anything past 10 s came back as
tcp read timeout after 10sinstead of animage. Raised to 30 s, which covers the wake and stays inside the CLI's own
60 s response budget. Kept as one global value rather than a per-command
argument: VOD download and preview first-frame have the same single-long-wait
shape.
Added
events history— search the event log the device itself recorded (hub / NVR,cmds 516/517/518). Separate store from
events query, which reads thegateway's in-memory ring of live pushes (recent ~500, lost on restart).
Release artifacts
All 8 platforms built external (LAN-only, no P2P); the P2P fingerprint gate
reports
clean (external)on every one.checksums/v0.16.0.sha256is copiedfrom the build machine's
dist/SHA256SUMS, not re-downloaded.Verified end to end with the packaged binaries themselves (both
reolink-cliand
reolink-gatewayfrom the artifact, since the capture path lives in thegateway):
--stream subreturns 896x512 in 2.42 s,--stream mainreturns3840x2160 in 5.34 s.