Changelog
v0.8.0 (unreleased)
Deprecated
Plugin system API (
PluginDiscovery/PluginServer/PluginEndpoint) is deprecated and scheduled for removal in v0.8.0. The platform does not ship the/run/aipc/pluginsdiscovery mechanism; the SDK keeps the imports working for now, emits aDeprecationWarning, and the docs page has been taken offline. Speak up if you depend on it.
Documentation
Fixed the video-stream examples across docs and README: dropped references to
MediaClient(which never shipped), standardized onFdMediaClient; stream IDs corrected fromcam0_main/cam0_subto the device-exposedmain/sub; removed usages of the nonexistentget_stream_info()/get_raw_stream(); corrected theget_encoded_stream()return semantics and the flattenedframe.datamisuse; added API docs forEncodedStreamClient/EncodedFrameFixed missing and misleading imports in the application examples: added
import timeto the multi-model example,import jsonto the GenAI example; droppedfrom grpc import RpcErrorfrom the error-handling example (the SDK raisesRuntimeError); removed unusednumpy/sysimportsSynced the Chinese inference page with the English one: translated the seven Usage sections that had been English-only since v0.3.0 (segmentation, OCR, CLIP image embeddings, CLIP text encoding, depth estimation, runtime postprocess-config update, GenAI) and added the
SegmentationMask/OcrLine/Embedding/DepthMapdata-type entries
v0.7.4 (2026-09-08)
New Features
Convenience-layer hardware routing (sdk-hardware-routing P5):
color.rgb_to_nv12/color.nv12_to_rgbanddraw.draw_detections(NV12 arrays) ride the accel router’s DSP legs by default, degrading to the software impls with accounting when unavailable;Frame.to_jpeg_bytesis hardware-first for keep-fd frames (zero-copy camera-daemonEncodeImageimport) while in-memory frames keep the direct CPU encode so streaming hot loops pay no extra copy or RPC; software legs bind private impls only — the routing public functions cannot re-enter the routerFrame.resize’s DSP fast path now respects the router policy:SOFTWARE_ONLYskips the attempt,HARDWARE_ONLYraises on failure (refusing the silent CPU fallback),PREFER_HARDWAREreports via the newAccelRouter.note_degradation()(plus a typedpolicyproperty; externally reported fallbacks on unregistered ops stay visible inhealth()and fireon_degradation)
Bug Fixes
_encode_jpeg_hwhardcodedfmt="rgb24", so every NV12 keep-fd frame submit was rejected by_resolve_sourceas a format mismatch; frame-like sources now carry their handle’s formatdsp_format’s software leg re-entered the router through the routing public functions (cross-op coupling); it now binds the color impls directlyunified the color legs’
ValueErrorcontract (ndim / declared dims / even-size checks run before any daemon submit — caller errors no longer land in the degradation counters)
v0.7.3 (2026-09-07)
New Features
Hardware-first accel router (
accelmodule):AccelRouter/RoutePolicy/health()degradation accounting +on_degradationhook /get_default_router(); the default router registers DSP legs forresize_nv12/rgb_to_nv12/nv12_to_rgb/encode_jpeg/draw_detectionsplus thenmssoftware legDSP annotation compositing (dsp-offload P1):
DspClient.blend_hwcomposites ARGB32 overlays onto NV12 in place on the DSP;draw.render_overlay_rgbarenders boxes+captions as a minimal straight-alpha canvas reproducing the software raster’s outputAsync DSP jobs (dsp-offload P2): every
*_hwop takeswait=FalsewithPendingDspJobexposingwait()/done()/release();blend_hwzero-copy keep-fd chain (refused by default — a state-dependent fatal path on current firmware);encode_jpeg_hwsrc_buffer_idpassthrough skips the pixel read-back; keep-fd frame sources skip theascontiguousarraypre-copy in the resize/convert legs; polygon and track shapesOverlay annotation:
annotate()/annotate_result()push detections straight to camera-daemon’s renderer over the event busColor conversion and NMS: BT.601 limited-range RGB↔NV12 (numpy path when cv2 is missing); cross-class-aware
postprocess.nms
Bug Fixes
Finished the inference codec refactor: stray
selfin_tensor_to_numpy/_parse_post_resultbroke the respective parse paths; removed the four full method implementations the thin codec delegates silently shadowed; added AST structural meta-tests to catch this class of drift
v0.7.2 (2026-09-03)
Bug Fixes
Stray
selfin the_parse_infer_responsecodec signature: after the 0.7.0 refactor everyinfer()/infer_batch()call raisedTypeError; added a regression test driving a realInferResponse
v0.7.1 (2026-09-03)
Version aligned with
setup.py; no API changes
v0.7.0 (2026-09-02)
New Features
App developer toolkit (developed as 0.6.0, never released separately, shipped with 0.7.0):
Frame.crop()/Frame.resize()/Frame.to_jpeg_bytes()— crop, three resize modes (stretch/letterbox/crop), JPEG encoding; falls back to numpy/PIL when cv2 is missingdrawmodule — detection visualization (draw_boxes/draw_text/draw_detections)recordingmodule — pure-Python TS muxing, HLS segments, event pre-record buffer (TsWriter/HlsWriter/PrerollBuffer), no ffmpeg requiredwebmodule — MJPEG streaming (MjpegServer/MjpegStream/mjpeg_wsgi_app)DeviceClient native autofocus group of 6 methods (
start_oneshot_af/start_zoom_follow/get_autofocus_status/cancel_autofocus/set_af_windows/get_af_measurement)CameraClient imaging/infrared/privacy-mask/OSD/config group of 12 methods (incl. IR preset management,
get_osdsymmetric withset_osd)
Fixed
InferenceClient.subscribe()silently dropping failed frames
Refactoring
Internal layering: extracted the shared
_transportprimitives; splitmediainto frame/encoded/fd_client,dspinto dsp_wire/dsp_format,inferenceinto types/codec/genai. Facades keep every historical import path — zero public API removalsDSP CPU fallback now raises a
UserWarninginstead of a silent log2D-array grayscale inference input emits a
DeprecationWarning(passfmt=explicitly)EncodedStreamClient()default socket path is now/run/aipc/encoded/{stream}.sock(ENCODED_SOCK_DIRenv override; explicit paths still win)
Fixes
Fixed an import crash on Python 3.8/3.9 (
from __future__ import annotationseverywhere)
Other
Added
py.typedmarker to the package; test suite grown to 270 green tests
v0.5.0 (2026-08-20)
Refactoring
Rebrand:
hailo_ipc_sdk→neoruntime_ipc_sdk(breaking, no shim; functional names such as hailort/ne503/aipc are preserved)
Fixes
Fixed dual-layout decoding of
audio_capturevideo-layout headers
Other
CI gained TestPyPI/PyPI trusted-publishing dual release flow
v0.4.0 (2026-07-14)
New Features
DeviceClient — 7 new methods: -
set_lens_limits(zoom_limit, focus_limit)— Set lens axis position limits -oneshot_autofocus(timeout)— One-shot autofocus (composite: enable → wait for convergence → disable) -set_wiegand_out(channel, enable)— Wiegand output control -get_wiegand_out(channel)— Wiegand output state query -rs485_init(baudrate, config)— RS-485 serial initialization -rs485_deinit()— RS-485 serial deinitialization -rs485_tx(data)— RS-485 data transmissionAppClient — 1 new method: -
restart_app(app_id, timeout_seconds)— Restart application (stop + start)
Improvements
Updated API docs with DeviceClient lens limits, Wiegand, and RS-485 examples
Updated API docs with complete AppClient usage examples
Synchronized Chinese and English documentation
v0.3.0 (2026-05-18)
New Features
Added segmentation mask support (
SegmentationMaskwith RLE decoding viato_numpy_mask())Added OCR result support (
OcrLinewith text, confidence, bounding box)Added embedding vector support (
Embeddingfor CLIP and similar models)Added depth map support (
DepthMapwith float32 numpy array)Added CLIP text encoding via
encode_text()— encode text strings to NPU embeddingsAdded runtime postprocess config update via
update_postprocess_config()Added GenAI (LLM/VLM) support: -
genai_create_session()— create LLM or VLM sessions with HEF models -genai_generate()— stream generated tokens with sampling parameters -genai_abort()— abort ongoing generation -genai_destroy_session()— clean up session resourcesAdded LoRA adapter support for GenAI sessions (
lora_nameparameter)Added memory optimization option for GenAI tokenization (
optimize_memory)
Improvements
Enhanced
subscribe()withraw_output_onlyparameter for raw tensor streamingEnhanced
register_model()withmodel_type,model_variant, and explicitinputs/outputsspecsImproved tensor type handling with full dtype mapping (uint8, int8, uint16, int16, float16, float32, int32, uint32)
Bug Fixes
Fixed tensor shape mismatch when output shape does not match data size
Fixed
InferenceResultmissing new result types (masks, ocr, embeddings, depth)
v0.2.0 (2026-03-02)
New Features
Added plugin system support (PluginDiscovery, PluginServer)
Support for plugin capability discovery and gRPC service invocation
Added video stream access (now provided by
FdMediaClient/EncodedStreamClient)Support for raw and encoded video stream retrieval
Improvements
Optimized InferenceClient performance
Improved event bus wildcard matching
Enhanced error handling and logging
Updated protobuf to 4.21.0
Bug Fixes
Fixed memory leak in EventClient subscription
Fixed DeviceClient GPIO control issue
Fixed connection pool issue in multi-threaded environments
v0.1.0 (2025-12-15)
Initial Release
InferenceClient: AI inference client
EventClient: Event bus client
DeviceClient: Device control client
Config: Configuration management
Support for Python 3.8+
gRPC-based communication