Hardware Selector — methodology
Method version 3.0 · engine: /engines/hardware-selector/ · reads the Selector's own platform profiles and capacity model, the codec decode-ceiling table, the power-mode and PoE registries, and the production-carrier registry (IP67 only).
A quick estimate and a starting point, not a validated configuration. The complete-configuration validator is Hardware Match; every Selector result hands its workload and its pick to Hardware Match so the pick can be checked there.
Contents
1. Purpose, and its relationship to Hardware Match
The Hardware Selector answers one question quickly: for a camera workload described in a few tiles, which platform is a reasonable place to start, at how many nodes? It ranks complete configurations (a platform at the node count it needs) on its own modelled per-node stream capacity.
Transition status: the Selector stays a separate, quick estimator. It is not a thin view over Hardware Match and is not required to agree with it; a difference between the two is not a defect unless the Selector's pick breaks a hard physical limit Hardware Match sees. Hardware Match is the complete-configuration validator — per-node capacity from Camera Stream Capacity, decode, memory, power, thermal and carrier constraints — and its own methodology applies to its results only; nothing on that page describes how the Selector decides.
Every successful result carries scope_disclosure: an estimate_notice, the stated differences from Hardware Match, a hand-off link, the exact Hardware Match request as hardware_match_inputs (cameras, resolution, frame rate, codec, precision, goal, power limit, fanless, ambient, and the Selector's pick as pin), and not_carried — the Selector inputs Hardware Match does not evaluate from the hand-off (scenario, task, latency requirement, compliance).
2. Inputs and what each one does
| Input | Page values | Effect |
|---|---|---|
Task (model) | classification, object detection, segmentation, pose, multi-model | Selects the reference model for the capacity model and the compute-tier filter HF4. |
| Streams | 1–16 | The camera load each configuration must carry; up to 32 cameras and 8 nodes per plan. |
| Resolution | 720p, 1080p, 4K | Capacity model input and decode ceiling row (HF5). |
| Power | ultra-low, low, moderate, high | Power envelope 5 / 15 / 40 / 150 W for HF2. |
| Environment | fanless, active cooled, industrial, mobile robot, edge rack | Fanless applies HF3 and the documented enclosure derate to sustained capacity. |
| Budget sensitivity | lowest cost, balanced, highest performance | Selects the ranking weight table (section 4). |
| Latency | batch, near real-time, real-time critical | Ranking preference on the modelled per-frame latency (section 5). |
| Compliance | none, IP67 | Sourced IP67 check, flag only (section 6). |
| Scenario | six deployment patterns | Informational: labels the summary and flags capability-profile caveats; never changes the ranking (section 7). |
| Ambient temperature | 25 / 35 / 45 / 55 °C | Heuristic thermal screen, warnings only (section 7). |
3. Hard filters HF2–HF11
A platform is removed only by a hard filter. Each elimination carries its reason, and a request with nothing left is answered with NO_ELIGIBLE_PLATFORMS naming the binding constraint.
- HF11 PoE powered-device ceiling: when a PoE standard powers the node, a platform whose lowest supported power preset draws more than the standard delivers is removed (PoE and power-mode registries). Checked first.
- HF2 power envelope: removed when the platform's maximum power exceeds twice the selected envelope.
- HF3 cooling: fanless removes an actively cooled module unless a documented fanless enclosure exists for it; those pass with a sustained-capacity derate.
- HF4 compute floor: removed when the platform's capability tier is more than two tiers below the task's (one tier for generative and language tasks).
- HF5 decode ceiling: removed when the per-node stream count exceeds the published decode ceiling for the codec and resolution.
- HF6 precision: removed when the platform cannot run the requested precision.
- HF7 RT-DETR at INT8 on INT8-only accelerators; HF8 RT-DETR on Hailo; HF10 YOLO12 on the RK3588 NPU: model-support facts.
- HF9 a platform with no neural accelerator cannot run inference.
4. Capacity, ranking and the evidence floor
Each platform's per-node capacity comes from the Selector's own stream model (benchmark rows where they exist, interpolation or cross-platform scaling where they do not), capped by module memory and by the published decode ceiling. The node count is the smallest that carries the load within 8 nodes. Complete configurations are ranked by one weighted score over cost efficiency, deployment simplicity, evidence quality, power efficiency, capacity fit and compute headroom; the default weights are 0.35 / 0.25 / 0.20 / 0.10 / 0.10 / 0, and budget, reliability, minimum-node and vision-language intents select other published tables. The recommendation is the first ranked configuration whose capacity evidence meets the kernel evidence floor (interpolated or better); a configuration ranked above it on modelled capacity only is named as planning-only, never recommended. Accelerator-only configurations (host not costed) are shown separately and never ranked against complete systems.
5. The latency requirement
Targets (planning definitions, class E): real-time critical 33.3 ms per frame, one frame interval at 30 fps; near real-time 100 ms; batch no target, not evaluated. With no latency input the requirement is not evaluated.
Each feasible configuration's modelled per-frame latency is 1000 divided by the modelled single-stream frame rate at batch 1 from the same capacity model that sizes the plan. It is class D: it excludes capture, network and queueing and is not a measured end-to-end latency. Because the evidence is class D, a miss never removes a configuration. The requirement is an ordered ranking preference: with a target set, configurations that meet it rank ahead of those whose latency is unknown, which rank ahead of those that miss it, and the weighted score decides inside each group. Relaxing the requirement therefore never removes a configuration a stricter one accepted.
Every result publishes latency_check: the requirement, the target, the basis, and one row per feasible configuration with its modelled latency and a status — PASS, FAIL, UNKNOWN when the model has no frame rate, NOT APPLICABLE with no target. When no configuration with admissible evidence meets the target, the winner's FAIL is stated in a warning.
6. Compliance
IP67 is a sourced check against the production-carrier registry: a platform is PASS when a registry system for its module carries an IP67 rating that a cited source states, and UNKNOWN when no such system is on record. UNKNOWN is not PASS. The registry records no module as lacking an IP67 option, so the check flags and never removes a configuration; compliance_checks publishes one row per feasible configuration with the evidence behind each PASS.
ATEX and MIL-STD-810 are not modelled: no platform, carrier or enclosure in the registries carries a sourced ATEX or MIL-STD-810 certification. The page no longer offers them, and a request that names either is refused with a validation error on compliance_requirements rather than answered as if the requirement had been checked. Confirm those certifications with the enclosure vendor.
The advisory compliance values the API accepts (NDAA, EU AI Act, HIPAA, NERC CIP, ISO 26262, PCI DSS) produce warnings only; an unknown value is a validation error.
7. Scenario and ambient temperature
Scenario is informational. It labels the summary and flags capability-profile caveats — for example an accelerator whose profile says it is weak for this deployment pattern — and input_effects.deployment_scenario reports the winner's profile fit. It does not change the ranking, the capacity or the cost; Industrial Inspection and Multi-Camera Analytics map to the same profile.
Ambient temperature is a heuristic screen, not a thermal verdict. It produces a warning when a fanless platform exceeds its planning ambient limit or when an estimated junction temperature suggests derating; it does not change capacity, ranking or confidence. Fanless sizing uses the documented enclosure derate, whatever the ambient. For a thermal verdict use the Thermal Feasibility Checker or Hardware Match with an ambient.
8. Evidence limitations
- Per-node capacity is the Selector's own model, not Camera Stream Capacity per candidate; Hardware Match may size the same workload differently.
- Modelled latency is class D and one reference model per task; the real figure depends on the model, runtime and pipeline — measure on the target.
- Hardware costs come from catalog profiles and price rows where wired; gaps are class E until Deployment Cost & TCO prices the configuration.
- The IP67 check reads one registry and covers only systems recorded there; an absent rating means unknown, not unrated.
- The thermal screen is a rule of thumb (planning ambient limit, junction-temperature estimate); it is not a model of any enclosure.
9. Method changelog
| Method | Date | Change |
|---|---|---|
| 3.0 | 2026-09-28 | Breaking: the ATEX and MIL-STD-810 compliance values are removed (no sourced certification facts) and now return a validation error on compliance_requirements, as does any unknown compliance value or latency requirement. The latency requirement is wired as an ordered class D ranking preference with latency_check rows (real-time critical 33.3 ms, near real-time 100 ms, batch not evaluated). IP67 is a sourced check against the production-carrier registry with compliance_checks rows (PASS / UNKNOWN, never removes). Scenario and ambient temperature are published as informational and heuristic in input_effects. The result states it is an estimate and hands Hardware Match the exact inputs with the pick pinned (hardware_match_inputs, not_carried). First methodology page. |
| 2.3 | 2026-09-27 | Last version before this page. The latency, compliance (ATEX, IP67, MIL-STD-810) and scenario controls were accepted and changed nothing in the public result. |
Method changes bump the method version; results carry it in provenance.method_version with the dataset version of the registries the Selector reads.