Repository navigation
NEAT Core 0.6.0
Neat Library v0.6.0
Neat Library v0.6.0 moves Neat to Platform 3.0.0 and its DMA-BUF runtime. It adds hardware video encoding, USB camera input, LiDAR and BEV perception nodes, oriented box decoding for YOLOv8, YOLO11 and YOLO26, detailed model benchmarking, board telemetry, PCIe GenAI APIs, and offline installers.
Important: v0.6.0 requires Platform 3.0.0 (Palette SDK 3.0.0.0, DevKit software 3.0.0). Native applications and plugins must be rebuilt against the v0.6.0 headers and
libsima_neat.so.6. Python applications should reinstall the matching PyNeat package. Applications that pass outputs from one model graph into another graph's EV74 stage must now call.cvu()on them first; see Breaking changes and migration.
Highlights
Hardware video encoding and sending
nodes::SimaEncodeencodes raw frames to H.264, H.265, or MJPEG, configured throughSimaEncodeOptions(#936, #943).VideoSendersends all three codecs over RTP/UDP:VideoSenderOptions::FromRaw()encodes raw frames andVideoSenderOptions::Passthrough()forwards already-encoded video (#937).- An RTSP source can feed a decoder and a passthrough
VideoSenderin one pipeline without a realtime link (#986). - PyNeat exposes
SimaEncodeOptions,nodes.sima_encode,VideoSenderOptions.from_raw, andVideoSenderOptions.passthrough.
USB cameras
nodes::UsbCameraInputopens a USB (UVC) MJPEG camera by a stable USB ID fromusb_camera_ids(), andusb_camera_info()reports how its frames decode (#1174).- 4:2:2 MJPEG webcams decode to NV16, and models accept NV16 input directly through
PreprocessColorFormat::NV16(#1161). - Unsupported camera resolutions or pixel formats fail with
gstreamer.camera_configuration_unsupported, which names the camera and the requested format (#974).
LiDAR and BEV perception
SimaVoxelize, SimaPillarScatter, SimaBEVPoolPlan, and SimaBEVPool provide the point-cloud and bird's-eye-view stages for BEVFusion and PointPillars pipelines, on A65 or EV74 (#1212). SimaBEVPoolPlan runs on A65 only.
Oriented bounding boxes
BoxDecodeType::YoloV26Obbdecodes native YOLO26 OBB models (#1142).BoxDecodeType::YoloV8Obbdecodes YOLOv8 and YOLO11 OBB models with rotated NMS (#1173).- PyNeat reads both with
decode_obb(). - YOLOX segmentation and pose decoding from v0.5.0 is available again on Platform 3.0.0.
Model benchmarking and execution plans
Model::benchmark()reports p50, p95, and p99 latency, per-core CPU use, and board telemetry (#1080, #1073).- Each measured pass runs for at least
BenchmarkOptions::min_duration_ms, 10 seconds by default; set it to 0 for count-only timing (#1086). BenchmarkOptions::inputsbenchmarks with your own tensors instead of synthetic input (#1159).- Advanced:
include_mla_layer_statsandinclude_mla_stage_statsadd MLA layer and stage latencies. They needmla-rtand an otherwise idle DevKit (#1082, #1117). BenchmarkReport::save()writes the report as YAML, or JSON for a.jsonpath (#1082).Model::execution_plan()shows, without running the model, where each step runs (A65, EV74, or MLA), its kernel and settings, and each tensor's shape, type, and quantization (#1070).
Board telemetry
TelemetryMonitor records board telemetry from Sentinel between start() and stop(), including CPU, EV74 memory, and estimated power (#1103, #1131, #1153). Benchmark power figures also come from Sentinel. Power values are estimates (#1237).
GenAI
- PCIe hosts can run LLM, VLM, and Whisper speech recognition on a Modalix card through
pcie::genai::GenAIModelin C++ andpyneatpcie.genai.GenAIModelin Python (#1019). - gpt-oss mixture-of-experts models run on the DevKit, and
GenerationRequest::reasoning_effortselectslow,medium, orhighreasoning (#924). - Prompts longer than the model context return HTTP 400
context_length_exceededinstead of an empty success, and token-limited responses reportfinish_reason: length(#1252).
Installation
- Offline installer bundles install Core on the SDK or DevKit without downloading packages during installation:
sima-cli neat install core/offline@v0.6.0 --download-only, then./install.sh(#1155). - PCIe hosts have an offline installer with preflight checks and automatic SSH setup (#1135, #1207).
- Existing Python environments are kept and checked;
--recreate-venvrebuilds one (#1175). neat statusreports PCIe host and attached card software (#1164), and shows the code-server password and correct URLs in the SDK (#1107).
Important fixes
- Native EV74 firmware stays active after a reboot. Previously the first Neat request after a reboot hung for 5 seconds and later runs failed until the firmware was reactivated (#1203).
- Applications that keep an output while pulling the next one no longer stall; YOLOv8n throughput rose from 58 to about 459 FPS in that pattern (#1182).
- Zero-copy buffer stalls log a named warning instead of stopping the stream silently (#1229, #1253).
OutputOptions.drop=trueis honored, so live graphs no longer time out when outputs back up (#1209).- Models whose tensor order differs from the executable port order prepare correctly and return outputs in the right order (#955).
- Batched models and YOLO26n batch-four postprocessing work again (#1200, #1221).
Model::build()without a seed input starts correctly, and seeded models accept larger frames withininput_max_*(#1232, #1024).benchmark()works with dynamic-image models (#1109).- Native INT32 ArgMax outputs report the correct type, and stateful models with shared cache tensors no longer hit slot limits (#1136).
- Child graphs keep their parent's
graph_options, which fixes routed RF-DETR and BoxDecode metadata (#1128). - Closed graphs and Python node wrappers no longer leak (#1140).
- Containers sharing a model extraction folder no longer overwrite each other's files (#1199).
- Model Compiler 3.0 models with a single unnamed I/O section load (#1053).
- PCIe source-driven throughput is no longer capped near 360 FPS for YOLOv8n (#1130), and PCIe co-processing reads non-dense card outputs at the correct offsets (#993).
MetoakDepthworks on Platform 3.0.0 (#1187).- PyNeat installs on boards without
python3-venv(#1061), and works with numpy 2 (#1036). FORCE_INSTALLand-fbypass the installer's platform check and reach EV74 firmware activation (#1089, #1091).- A failed Sentinel installation no longer stops a Core installation (#1096).
sima-cli neat install coreinstalls from a fresh bundle copy, which fixes the "manifest differs from complete DEB set" failure (#1239).
Breaking changes and migration
Move to Platform 3.0.0
Core runs on Platform 3.0.0 with one DMA-BUF execution plan per model (#877). Internals is no longer used. Core now runs through Scheduler, which coordinates Runner, Kernels, and Codecs; GenAI continues to use LLiMa (#1095). Install Core with its matching runtime set, as described under Compatibility.
Call .cvu() before passing outputs to another graph's EV74 stage
To reduce CMA use, outputs of steps that run only on the MLA or A65 are now allocated in DMS memory instead of CMA. EV74 can read only CMA, so passing such an output directly into a separately built graph whose first step runs on EV74 now fails with EV74 requires admitted CMA or contiguous camera memory. Core cannot choose the right memory across separately built graphs; it places memory automatically only within one graph.
Applications that chain models, such as an encoder feeding a decoder, must call Tensor::cvu() (PyNeat tensor.cvu()) on the output first. It returns a tensor already in EV74 memory unchanged and copies any other tensor. ZeroCopy keeps the producer's memory and does not make it readable by EV74. .cvu() copies only the selected tensor into independent memory, which fixes tensor span exceeds runtime segment errors in these handoffs (#1245).
Rebuild native applications
The C++ ABI moves from 5 to 6 (libsima_neat.so.6). Tensor, GenAI, graph-link, benchmark, TessSpec, and SimaArgMaxOptions layouts changed. The Cast, CastTess, Quant, QuantTess, Tess, and Preproc option layouts now match Core's internal layouts (#1250). Rebuild C++ applications, plugins, and Python extensions against the v0.6.0 headers. Do not link ABI 5 binaries to the ABI 6 library.
These headers were removed: gst/ProcessMlaRuntimeConfig.h, gst/SimaPreparedRuntimeAbi.h, and neat/PreparedRuntimeBridge.h. gst/SimaaiGstErrors.h is now provided by Scheduler at the same include path.
Copy Owned outputs to the device before reuse
OutputMemory::Owned outputs, and Auto outputs that take the copy path, are now independent system-memory copies on the CPU instead of CVU buffers (#1236, #1243). Call Tensor::to() before pushing such an output directly into a device input such as Preproc, Quant, Tess, or a model. Tensor::cpu() no longer copies; use clone() for a copy.
RTSP drops late packets by default
drop_on_latency now defaults to true in nodes::RTSPInput, RtspEncodedInputOptions, RtspDecodedInputOptions, and pyneat.nodes.rtsp_input (#1234). Live pipelines keep moving, but H.264 and H.265 can show artifacts until the next keyframe. Set drop_on_latency to false for recorded or lossless streams.
Benchmark timing and power
Benchmark passes now last at least 10 seconds by default (#1086). Set min_duration_ms = 0 to restore count-only timing. PowerMonitor, enable_board_power(), the I2C power helpers, the boolean benchmark() overloads, and the plugin-latency options are deprecated; power comes from Sentinel.
BoxDecode options
BoxDecode requires a positive top-K, and retired non-default options raise an error instead of silently using legacy execution (#1095).
Deprecated video output groups
H264RtpUdpFromRaw and H264RtpUdpFromEncoded are deprecated. Use VideoSender with VideoSenderOptions::FromRaw() or VideoSenderOptions::Passthrough().
Local source builds
build.sh installs the Scheduler package set under deps/scheduler and only LLiMa into the SDK sysroot (#1126, #1166). Pass local builds with --scheduler PATH and --llima PATH, or --no-llima. The NEAT_KERNELS_*, NEAT_RUNNER_*, NEAT_SCHEDULER_*, and NEAT_CODECS_* variables now stop the build; to test a Kernels, Runner, or Codecs change, build Scheduler against it and pass that folder. See the build and dependency guide.
Known issues
- Decoder buffer-pool starvation can still stop a stream without an error (#1267).
- Installation can fail Scheduler admission when the install folder contains older
.debfiles (#1240). SimaArgMaxapplies a non-zero input view offset twice (#1211).- Two MIPI camera pipelines run at about 23–24 FPS each (#1113).
Model::execution_plan()omits BoxDecode settings (#1256).- There is no supported uninstall or rollback for Core (#1242).
Install
Install or update Neat Library with:
sima-cli neat install core@v0.6.0To download only the PyNeat wheel:
sima-cli neat install core@v0.6.0 -t pyneatTo prepare an offline installation:
sima-cli neat install core/offline@v0.6.0 --download-onlyCompatibility
- Core package version: 0.6.0.
- Compatible Platform release: 3.0.0 (Palette SDK 3.0.0.0, DevKit software 3.0.0).
- Public C++ ABI: 6.
- Runtime: Scheduler v0.6.0, with its matching Runner, Kernels, and Codecs, and LLiMa v0.6.0.
Contributors
@manuel-roldan, @Onat-Inak, @shanguangzai, @florianvoss-commit, @nicholasxu-wq, @dotimothy, @naik24, @karimguirguis-sima, @Yukkta-Seelam
Full Changelog: v0.5.0...v0.6.0