From 68877f51fb7785bfd99e7428cb202444497813fa Mon Sep 17 00:00:00 2001 From: b Date: Sun, 12 Oct 2025 16:25:45 +1100 Subject: [PATCH 1/6] fix: allow rk3588s in RKNN detector (#20440) --- frigate/detectors/plugins/rknn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frigate/detectors/plugins/rknn.py b/frigate/detectors/plugins/rknn.py index 70186824b..4cef1c0ce 100644 --- a/frigate/detectors/plugins/rknn.py +++ b/frigate/detectors/plugins/rknn.py @@ -19,7 +19,7 @@ logger = logging.getLogger(__name__) DETECTOR_KEY = "rknn" -supported_socs = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588"] +supported_socs = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588", "rk3588s"] supported_models = { ModelTypeEnum.yologeneric: "^frigate-fp16-yolov9-[cemst]$", From a7042a7c0bf5b12588c8d247d36f16e1a9bc6934 Mon Sep 17 00:00:00 2001 From: Brian H Date: Sun, 1 Feb 2026 17:38:21 +1100 Subject: [PATCH 2/6] fix: add rk3588s support with model mapping to rk3588 - Add rk3588s to SUPPORTED_RK_SOCS list - Map rk3588s to rk3588 for model downloads (models are compatible) - Update documentation to include rk3588s in supported SoCs - Addresses feedback from blakeblackshear/frigate#20441 --- docs/docs/configuration/object_detectors.md | 2 +- docs/docs/frigate/hardware.md | 1 + frigate/const.py | 2 +- frigate/detectors/plugins/rknn.py | 5 ++++- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/docs/configuration/object_detectors.md b/docs/docs/configuration/object_detectors.md index d4a7f5566..4b0ebaa2d 100644 --- a/docs/docs/configuration/object_detectors.md +++ b/docs/docs/configuration/object_detectors.md @@ -1352,7 +1352,7 @@ To convert a onnx model to the rknn format using the [rknn-toolkit2](https://git This is an example configuration file that you need to adjust to your specific onnx model: ```yaml -soc: ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588"] +soc: ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588", "rk3588s"] quantization: false output_name: "{input_basename}" diff --git a/docs/docs/frigate/hardware.md b/docs/docs/frigate/hardware.md index 48ab2c647..9c31a8c92 100644 --- a/docs/docs/frigate/hardware.md +++ b/docs/docs/frigate/hardware.md @@ -273,6 +273,7 @@ Frigate supports hardware video processing on all Rockchip boards. However, hard - RK3568 - RK3576 - RK3588 +- RK3588S | Name | YOLOv9 Inference Time | YOLO-NAS Inference Time | YOLOx Inference Time | | -------------- | --------------------- | --------------------------- | ----------------------- | diff --git a/frigate/const.py b/frigate/const.py index 41c24f087..8c708c912 100644 --- a/frigate/const.py +++ b/frigate/const.py @@ -78,7 +78,7 @@ FFMPEG_HWACCEL_AMF = "preset-amd-amf" FFMPEG_HVC1_ARGS = ["-tag:v", "hvc1"] # RKNN constants -SUPPORTED_RK_SOCS = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588"] +SUPPORTED_RK_SOCS = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588", "rk3588s"] # Regex constants diff --git a/frigate/detectors/plugins/rknn.py b/frigate/detectors/plugins/rknn.py index 3f350e2ef..c77ca577b 100644 --- a/frigate/detectors/plugins/rknn.py +++ b/frigate/detectors/plugins/rknn.py @@ -91,6 +91,9 @@ class Rknn(DetectionApi): def parse_model_input(self, model_path, soc): model_props = {} + + # Map rk3588s to rk3588 for model compatibility + model_soc = "rk3588" if soc == "rk3588s" else soc # find out if user provides his own model # user provided models should be a path and contain a "/" @@ -148,7 +151,7 @@ class Rknn(DetectionApi): model_props["model_type"] = model_type if model_matched: - model_props["filename"] = model_path + f"-{soc}-v2.3.2-2.rknn" + model_props["filename"] = model_path + f"-{model_soc}-v2.3.2-2.rknn" model_props["path"] = model_cache_dir + model_props["filename"] From 6f18ea8fde77f1dc3bf3de6cc179a15151de51ff Mon Sep 17 00:00:00 2001 From: Brian H Date: Sun, 1 Feb 2026 18:15:04 +1100 Subject: [PATCH 3/6] fix: remove trailing whitespace for ruff format check --- frigate/detectors/plugins/rknn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frigate/detectors/plugins/rknn.py b/frigate/detectors/plugins/rknn.py index c77ca577b..63060ee36 100644 --- a/frigate/detectors/plugins/rknn.py +++ b/frigate/detectors/plugins/rknn.py @@ -91,7 +91,7 @@ class Rknn(DetectionApi): def parse_model_input(self, model_path, soc): model_props = {} - + # Map rk3588s to rk3588 for model compatibility model_soc = "rk3588" if soc == "rk3588s" else soc From 8f99733638bd6a70d6d1aea1f73449dfca6d9dd4 Mon Sep 17 00:00:00 2001 From: Brian H Date: Sun, 1 Feb 2026 18:21:47 +1100 Subject: [PATCH 4/6] ci: add Rockchip build workflow for fork - Builds and publishes to ghcr.io/elasticdotventures/frigate - Triggers on push to dev and fix-rk3588s-support branches - Can be manually triggered via workflow_dispatch - Tags: {sha}-rk and latest-rk --- .github/workflows/build-rk.yml | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .github/workflows/build-rk.yml diff --git a/.github/workflows/build-rk.yml b/.github/workflows/build-rk.yml new file mode 100644 index 000000000..c0dfad247 --- /dev/null +++ b/.github/workflows/build-rk.yml @@ -0,0 +1,66 @@ +name: Build Rockchip + +on: + workflow_dispatch: + push: + branches: + - dev + - fix-rk3588s-support + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + +jobs: + rockchip_build: + runs-on: ubuntu-latest + name: Build Rockchip Image + permissions: + contents: read + packages: write + steps: + - name: Check out code + uses: actions/checkout@v4 + + - id: lowercaseRepo + uses: ASzc/change-string-case-action@v6 + with: + string: ${{ github.repository }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create version file + run: make version + + - name: Create short sha + id: sha + run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT + + - name: Build and push Rockchip image + uses: docker/bake-action@v5 + with: + push: true + targets: rk + files: docker/rockchip/rk.hcl + set: | + rk.tags=ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ steps.sha.outputs.SHORT_SHA }}-rk + rk.tags=ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:latest-rk + *.cache-from=type=gha + *.cache-to=type=gha,mode=max + + - name: Show image tags + run: | + echo "Images published:" + echo " ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ steps.sha.outputs.SHORT_SHA }}-rk" + echo " ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:latest-rk" From 075ea3305ce39619ef21143f487d56db2a1a9f85 Mon Sep 17 00:00:00 2001 From: Brian Horakh <35611074+elasticdotventures@users.noreply.github.com> Date: Mon, 2 Feb 2026 19:49:58 +1100 Subject: [PATCH 5/6] Update frigate/detectors/plugins/rknn.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- frigate/detectors/plugins/rknn.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/frigate/detectors/plugins/rknn.py b/frigate/detectors/plugins/rknn.py index 63060ee36..8e3da00f2 100644 --- a/frigate/detectors/plugins/rknn.py +++ b/frigate/detectors/plugins/rknn.py @@ -19,8 +19,6 @@ logger = logging.getLogger(__name__) DETECTOR_KEY = "rknn" -supported_socs = ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588", "rk3588s"] - supported_models = { ModelTypeEnum.yologeneric: "^frigate-fp16-yolov9-[cemst]$", ModelTypeEnum.yolonas: "^deci-fp16-yolonas_[sml]$", From ab59fdf570185c2fcbda6c5c88d6aa05cde7a2c5 Mon Sep 17 00:00:00 2001 From: Brian H Date: Mon, 2 Feb 2026 19:58:13 +1100 Subject: [PATCH 6/6] fix: clean up duplicate SoC list and fix RKNN converter for rk3588s - Remove unused supported_socs variable in rknn.py that duplicated the SUPPORTED_RK_SOCS constant from frigate.const - Add rk3588s to rk3588 mapping in rknn_converter.py to ensure custom ONNX model conversion works on RK3588S devices Co-Authored-By: Claude Opus 4.5 --- frigate/util/rknn_converter.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frigate/util/rknn_converter.py b/frigate/util/rknn_converter.py index f7ebbf5e6..fdc7e51dd 100644 --- a/frigate/util/rknn_converter.py +++ b/frigate/util/rknn_converter.py @@ -189,13 +189,16 @@ def convert_onnx_to_rknn( logger.debug("Could not determine SoC type") return False + # Map rk3588s to rk3588 for RKNN toolkit compatibility + target_soc = "rk3588" if soc == "rk3588s" else soc + # Get model config for the specified type if model_type not in MODEL_TYPE_CONFIGS: logger.debug(f"Unsupported model type: {model_type}") return False config = MODEL_TYPE_CONFIGS[model_type].copy() - config["target_platform"] = soc + config["target_platform"] = target_soc # RKNN toolkit requires .onnx extension, create temporary copy if needed temp_onnx_path = None