diff --git a/CHANGELOG.md b/CHANGELOG.md
index a0f63a6..71a334a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,11 +2,11 @@
This file records user-visible changes to `light-ocr`. Published artifact details and immutable hashes remain in [`docs/releases/`](docs/releases/).
-## [0.3.0] - Unreleased
+## [0.3.0] - 2026-07-19
### Added
-- Added an opt-in Direct Core ML provider for the `0.3.0` source candidate. Apple Silicon routes FP16 detection and shorter recognition shapes through the Neural Engine envelope, with wider recognition shapes on the GPU.
+- Added an opt-in Direct Core ML provider. Apple Silicon routes FP16 detection and shorter recognition shapes through the Neural Engine envelope, with wider recognition shapes on the GPU.
- Added experimental macOS 15+ Core ML compatibility on `arm64`. The macOS x64 package remains CPU-only after its release smoke test did not reproduce the locked OCR result through Core ML.
- Added per-provider and per-session execution diagnostics, including configured provider chain, device family, operating system, precision, model/cache identity, qualification identity, a structured Auto creation trace, and `deviceValidated` evidence status.
- Added a self-contained Apple model bundle, deterministic Core ML derivation, offline compiled-model cache, cross-process cache locking, bounded recognition-function caching, and descriptor-driven platform Auto selection.
@@ -43,16 +43,18 @@ This file records user-visible changes to `light-ocr`. Published artifact detail
### Compatibility and evidence
-- The current source candidate defaults to descriptor-driven Auto selection. Explicit providers are strict single-backend requests, and the legacy `sessionFallback: "cpu"` value returns `invalid_argument`.
+- Version `0.3.0` defaults to descriptor-driven Auto selection. Explicit providers are strict single-backend requests, and the legacy `sessionFallback: "cpu"` value returns `invalid_argument`.
- Production bundles use `devicePolicy: "open-macos"` for Apple Silicon: M1–M3 and later Apple Silicon are not blocked by the current evidence list. The npm runtime descriptor does not expose Apple on macOS x64.
- Real-device performance data currently comes from one Apple M4 Max runner. The evidence contract classifies it under the `Apple M4` device family for `deviceValidated`; this is not a claim that every M4 SKU was measured separately. Other Macs report `deviceValidated: false`; experimental compatibility is available, but no performance number is promised until that hardware family is reviewed.
- Heavy model conversion, Compute Plan placement, performance, cache, and lifecycle qualification remain local real-device work. Ordinary CI stays limited to cross-platform builds, contracts, and lightweight tests and does not require paid runners.
-- The macOS arm64 Core ML provider is merged on `main` but is not included in the published `0.2.0` npm packages. The planned `0.3.0` distribution keeps the existing six-package installation shape.
+- The macOS arm64 Core ML provider is included in the published `0.3.0` npm packages. The distribution keeps the existing six-package installation shape; macOS x64 remains CPU-only.
- Native WebGPU compatibility and performance are evidenced on the named NVIDIA/Linux and AMD/Windows systems. Other devices may use the open compatibility path but do not inherit these performance numbers.
- The Linux and Windows qualification reports both passed 164/164 mechanical Gates. Their reviewed report and artifact-set hashes are bound into the production runtime lock, so ordinary `0.3.0` release staging now accepts the exact qualified payloads.
Full evidence and methodology: [Apple device acceleration](docs/apple-device-acceleration.md), [Linux device acceleration](docs/linux-device-acceleration.md), [Windows device acceleration](docs/windows-device-acceleration.md), [implementation status](docs/implementation-status.md), the accepted Apple baseline [`apple-fp16-mixed-20260715.2`](contracts/apple-provider-baselines.json), and the checked-in WebGPU qualification reports.
+See the immutable [npm 0.3.0 release record](docs/releases/npm-0.3.0.md).
+
## [0.2.0] - 2026-07-14
- Added opt-in deterministic `tiled-v1` detection for dense and high-resolution images.
diff --git a/README.md b/README.md
index d088501..3a3e228 100644
--- a/README.md
+++ b/README.md
@@ -16,9 +16,9 @@ English | [简体中文](README.zh-CN.md)
It is made for products where OCR should feel like a local capability: quick to invoke, private by default, and straightforward to embed into an existing image pipeline.
-> **Available on npm:** `@arcships/light-ocr@0.2.0` includes the default PP-OCRv6 Small model, prebuilt native runtimes for all Tier 1 platforms, opt-in tiled detection, and direct in-memory JPEG/PNG input for Node.js. See [Package support](#package-support).
+> **Available on npm:** `@arcships/light-ocr@0.3.0` includes the default PP-OCRv6 Small model, prebuilt native runtimes for all Tier 1 platforms, opt-in tiled detection, direct in-memory JPEG/PNG input, and descriptor-driven hardware acceleration. See [Package support](#package-support).
-> **`0.3.0` acceleration candidate:** macOS arm64 adds Direct Core ML; Linux x64/Vulkan and Windows x64/D3D12 add the official Native WebGPU Plugin EP. The recorded real-device results are **2.30×–2.85×** on Apple M4 Max, **5.70× aggregate P50** on NVIDIA RTX 5060 Ti, and **2.44× aggregate P50** on AMD Radeon 780M. WebGPU ships an FP32 execution profile; Apple uses its separately qualified FP16 route. macOS x64 remains on the CPU provider.
+> **`0.3.0` acceleration:** macOS arm64 adds Direct Core ML; Linux x64/Vulkan and Windows x64/D3D12 add the official Native WebGPU Plugin EP. The recorded real-device results are **2.30×–2.85×** on Apple M4 Max, **5.70× aggregate P50** on NVIDIA RTX 5060 Ti, and **2.44× aggregate P50** on AMD Radeon 780M. WebGPU ships an FP32 execution profile; Apple uses its separately qualified FP16 route. macOS x64 remains on the CPU provider.
## Where light-ocr fits
@@ -43,9 +43,9 @@ Cloud OCR is convenient, but it introduces uploads, network availability, recurr
- **Local by default.** Recognition performs no runtime network access and does not start a child process.
- **Ready for real application pipelines.** It accepts `GRAY8`, `RGB8`, `BGR8`, and `RGBA8` pixel buffers; the Node.js adapter can also decode JPEG and PNG bytes already held in memory.
- **Two deliberate large-image modes.** Bounded/960 remains the fast, memory-conscious default. Opt-in tiled detection preserves more detail for small text and dense 2048-pixel documents while processing one detection tile at a time.
-- **Native Apple acceleration when requested.** On macOS arm64, the `0.3.0` source candidate can route FP16 detection and recognition through Core ML without changing the public OCR result contract.
-- **Qualified Native WebGPU acceleration.** The `0.3.0` candidate packages the official WebGPU Plugin EP and its exact Linux/Vulkan or Windows/D3D12 runtime closure, with hash-verified offline staging and 164/164 real-device Gates on both recorded systems.
-- **A pinned, reproducible model.** The approximately 31 MB PP-OCRv6 Small bundle is integrity-checked and designed to ship with the application instead of downloading on first use.
+- **Native Apple acceleration when requested.** On macOS arm64, `0.3.0` can route FP16 detection and recognition through Core ML without changing the public OCR result contract.
+- **Qualified Native WebGPU acceleration.** Version `0.3.0` packages the official WebGPU Plugin EP and its exact Linux/Vulkan or Windows/D3D12 runtime closure, with hash-verified offline staging and 164/164 real-device Gates on both recorded systems.
+- **A pinned, reproducible model.** The self-contained PP-OCRv6 Small bundle is integrity-checked and designed to ship with the application instead of downloading on first use.
- **Consistent across supported platforms.** The same model and result contract are used on macOS, Linux, and Windows.
- **Built for asynchronous hosts.** The Node-API adapter keeps inference away from the JavaScript thread, with bounded queues, cancellation, and explicit lifecycle control.
- **Open and inspectable.** The project is Apache-2.0 licensed and tests real model behavior, high-resolution memory use, lifecycle safety, and output parity in CI.
@@ -140,7 +140,7 @@ Node.js 22 and 24 are supported on macOS arm64/x64, Linux x64 glibc, and Windows
npm install @arcships/light-ocr
```
-The package installs the matching native runtime and the pinned PP-OCRv6 Small model. It does not download a model at first run or compile native code during `postinstall`. Version 0.2.0 supports both `recognizeEncoded()` and raw-pixel `recognize()`.
+The package installs the matching native runtime and the pinned PP-OCRv6 Small model. It does not download a model at first run or compile native code during `postinstall`. Version 0.3.0 supports both `recognizeEncoded()` and raw-pixel `recognize()`.
```ts
import { createEngine } from "@arcships/light-ocr";
@@ -165,12 +165,10 @@ console.log(rawResult.lines);
await engine.close();
```
-The current source candidate uses a platform runtime descriptor for Auto selection. Explicit Apple and WebGPU remain strict single-provider requests. The following is a maintainer/source-checkout preview, not an `npm install` path for `0.2.0`:
+The published package uses a platform runtime descriptor for Auto selection. Explicit Apple and WebGPU remain strict single-provider requests. On macOS arm64, Apple can be requested directly:
```ts
const engine = await createEngine({
- // Source candidate only; the planned npm 0.3.0 package will resolve it.
- bundlePath: "/absolute/path/to/ppocrv6-small-native-20260719.1",
execution: {
provider: "apple",
precision: "fp16",
@@ -195,7 +193,7 @@ const engine = await createEngine({
});
```
-`cpuPartition: "allow"` and the strict GPU-only profile apply to the Apple provider on Apple Silicon. The `0.3.0` macOS x64 package exposes CPU only. Explicit providers never fall through to CPU; only Auto may advance through its descriptor-locked creation candidates. Published `0.2.0` packages remain CPU-default until the source candidate is released.
+`cpuPartition: "allow"` and the strict GPU-only profile apply to the Apple provider on Apple Silicon. The `0.3.0` macOS x64 package exposes CPU only. Explicit providers never fall through to CPU; only Auto may advance through its descriptor-locked creation candidates. Calling `createEngine()` without `execution` now uses Auto.
See the [Node.js guide](bindings/node/README.md) for the full API, cancellation, queue limits, and lifecycle behavior.
@@ -221,19 +219,19 @@ See [Build and release](docs/build-and-release.md) for platform prerequisites an
| --- | --- | --- |
| C++ core source | Available | macOS arm64/x64, Linux x64 glibc, Windows x64 |
| Node-API adapter source | Available | Node.js 22 and 24 |
-| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | `0.2.0` published | Node.js 22/24 on all Tier 1 platforms |
-| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | `0.2.0` published | Platform-independent required model dependency |
-| Platform native npm packages | `0.2.0` published | macOS arm64/x64, Linux x64 glibc, Windows x64 |
+| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | `0.3.0` published | Node.js 22/24 on all Tier 1 platforms |
+| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | `0.3.0` published | Platform-independent required model dependency |
+| Platform native npm packages | `0.3.0` published | macOS arm64/x64, Linux x64 glibc, Windows x64 |
-The npm distribution installs one facade, one required model package, and the native package matching the host platform. Package contents, versioning, and release gates are documented in [npm packaging](docs/npm-packaging.md); immutable `0.2.0` hashes and validation evidence are recorded in the [release record](docs/releases/npm-0.2.0.md).
+The npm distribution installs one facade, one required model package, and the native package matching the host platform. Package contents, versioning, and release gates are documented in [npm packaging](docs/npm-packaging.md); immutable `0.3.0` hashes and validation evidence are recorded in the [release record](docs/releases/npm-0.3.0.md).
-Direct Core ML acceleration on macOS arm64 is merged on `main` for the `0.3.0` candidate but is not part of the published `0.2.0` package set. Its release keeps the same six-package installation shape; no extra provider package or runtime download is planned.
+Direct Core ML acceleration on macOS arm64 is published in `0.3.0` using the same six-package installation shape; it adds no provider package or runtime download. macOS x64 remains CPU-only.
-PR #11 also carries the Linux x64 and Windows x64 Native WebGPU source candidate. Explicit WebGPU accepts `auto`/`fp32`; Auto also selects FP32. The three required CPU-partition operators are reported and bounded. Both real-device reports passed 164/164 Gates, and their immutable report/artifact hashes are now bound into the production lock for the `0.3.0` release workflow. Published `0.2.0` packages remain unchanged and CPU-only on those platforms.
+Version `0.3.0` publishes Native WebGPU on Linux x64 and Windows x64. Explicit WebGPU accepts `auto`/`fp32`; Auto also selects FP32. The three required CPU-partition operators are reported and bounded. Both real-device reports passed 164/164 Gates, and their immutable report/artifact hashes are bound into the production lock.
## Project status
-`light-ocr` is under active development. Version `0.2.0` publishes the deterministic `tiled-v1` high-resolution mode and bounded in-memory JPEG/PNG decoding in the Node.js adapter without changing the raw-pixel C++ Core boundary. The `0.3.0` source candidate adds descriptor-driven Auto selection, Direct Core ML execution on macOS arm64, and FP32 Native WebGPU execution on Linux x64/Windows x64.
+`light-ocr` is under active development. Version `0.3.0` includes deterministic `tiled-v1`, bounded in-memory JPEG/PNG decoding, descriptor-driven Auto selection, Direct Core ML execution on macOS arm64, and FP32 Native WebGPU execution on Linux x64/Windows x64 without changing the raw-pixel C++ Core boundary.
As a pre-1.0 project, public APIs and package layout may still evolve; the project does not currently promise a stable cross-release C++ ABI.
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 2f78e86..70ccd6a 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -16,9 +16,9 @@
这个项目面向希望把 OCR 做成真正本地能力的产品:随时调用、默认保护隐私,也能自然嵌入现有的图像处理流程。
-> **npm 已可用:**`@arcships/light-ocr@0.2.0` 自带默认 PP-OCRv6 Small 模型和全部 Tier 1 平台的预编译原生运行时,并支持可选 tiled 检测与 Node.js 内存 JPEG/PNG 直接输入。详见[包支持](#包支持)。
+> **npm 已可用:**`@arcships/light-ocr@0.3.0` 自带默认 PP-OCRv6 Small 模型和全部 Tier 1 平台的预编译原生运行时,并支持可选 tiled 检测、Node.js 内存 JPEG/PNG 直接输入和 descriptor 驱动的硬件加速。详见[包支持](#包支持)。
-> **`0.3.0` 加速候选:**macOS arm64 加入 Direct Core ML;Linux x64/Vulkan 与 Windows x64/D3D12 加入官方 Native WebGPU Plugin EP。已记录的真机结果分别为 Apple M4 Max **2.30×–2.85×**、NVIDIA RTX 5060 Ti **聚合 P50 5.70×**、AMD Radeon 780M **聚合 P50 2.44×**。WebGPU 发布 FP32 执行 profile,Apple 使用独立资格验证的 FP16 路径;macOS x64 保持 CPU provider。
+> **`0.3.0` 加速:**macOS arm64 加入 Direct Core ML;Linux x64/Vulkan 与 Windows x64/D3D12 加入官方 Native WebGPU Plugin EP。已记录的真机结果分别为 Apple M4 Max **2.30×–2.85×**、NVIDIA RTX 5060 Ti **聚合 P50 5.70×**、AMD Radeon 780M **聚合 P50 2.44×**。WebGPU 发布 FP32 执行 profile,Apple 使用独立资格验证的 FP16 路径;macOS x64 保持 CPU provider。
## 适合哪些场景
@@ -43,9 +43,9 @@
- **默认本地运行。**识别过程不会访问网络,也不会启动子进程。
- **适合真实应用流程。**直接接收 `GRAY8`、`RGB8`、`BGR8` 和 `RGBA8` 像素;Node.js 适配器也能解码已经在内存中的 JPEG 和 PNG。
- **两种明确的大图策略。**bounded/960 仍是速度和内存优先的默认模式;可选 tiled 检测为小字和密集的 2048 像素文档保留更多细节,并始终逐个处理 detection tile。
-- **按需启用原生 Apple 加速。**在 macOS arm64 上,`0.3.0` 源码候选可以用 Core ML 执行 FP16 detection/recognition,同时保持公共 OCR 结果契约不变。
-- **已完成真机资格验证的 Native WebGPU 加速。**`0.3.0` 候选会打包官方 WebGPU Plugin EP 及其精确的 Linux/Vulkan 或 Windows/D3D12 运行时闭包,支持哈希校验的离线 staging;两台记录设备均通过 164/164 Gate。
-- **模型固定且可复现。**约 31 MB 的 PP-OCRv6 Small bundle 会经过完整性验证,目标是随应用一起安装,而不是首次运行时再下载。
+- **按需启用原生 Apple 加速。**在 macOS arm64 上,`0.3.0` 可以用 Core ML 执行 FP16 detection/recognition,同时保持公共 OCR 结果契约不变。
+- **已完成真机资格验证的 Native WebGPU 加速。**`0.3.0` 会打包官方 WebGPU Plugin EP 及其精确的 Linux/Vulkan 或 Windows/D3D12 运行时闭包,支持哈希校验的离线 staging;两台记录设备均通过 164/164 Gate。
+- **模型固定且可复现。**自包含的 PP-OCRv6 Small bundle 会经过完整性验证,目标是随应用一起安装,而不是首次运行时再下载。
- **跨平台结果一致。**macOS、Linux 和 Windows 使用同一套模型与结果契约。
- **适合异步宿主。**Node-API 适配器不会占用 JavaScript 主线程,并提供有界队列、取消和明确的生命周期控制。
- **开放、可检查。**项目采用 Apache-2.0 协议,并在 CI 中验证真实模型行为、大图内存、生命周期安全和输出对齐。
@@ -140,7 +140,7 @@ Node.js 22 和 24 支持 macOS arm64/x64、Linux x64 glibc 与 Windows x64:
npm install @arcships/light-ocr
```
-安装会自动取得当前平台的原生运行时和固定版本的 PP-OCRv6 Small 模型;首次运行不会再下载模型,`postinstall` 也不会现场编译原生代码。0.2.0 同时支持下面的 `recognizeEncoded()` 和 raw-pixel `recognize()`。
+安装会自动取得当前平台的原生运行时和固定版本的 PP-OCRv6 Small 模型;首次运行不会再下载模型,`postinstall` 也不会现场编译原生代码。0.3.0 同时支持下面的 `recognizeEncoded()` 和 raw-pixel `recognize()`。
```ts
import { createEngine } from "@arcships/light-ocr";
@@ -165,12 +165,10 @@ console.log(rawResult.lines);
await engine.close();
```
-当前源码候选通过平台 runtime descriptor 执行 Auto 选择;显式 Apple 与 WebGPU 都是严格的单 provider 请求。下面是面向维护者/源码 checkout 的 preview,不是 `0.2.0` 的 `npm install` 使用路径:
+已发布 package 通过平台 runtime descriptor 执行 Auto 选择;显式 Apple 与 WebGPU 都是严格的单 provider 请求。在 macOS arm64 上可以直接请求 Apple:
```ts
const engine = await createEngine({
- // 仅源码候选需要;计划中的 npm 0.3.0 package 会自动解析该 payload。
- bundlePath: "/absolute/path/to/ppocrv6-small-native-20260719.1",
execution: {
provider: "apple",
precision: "fp16",
@@ -195,7 +193,7 @@ const engine = await createEngine({
});
```
-`cpuPartition: "allow"` 与 strict GPU-only profile 适用于 Apple Silicon 上的 Apple provider;`0.3.0` macOS x64 package 只暴露 CPU。显式 provider 失败不会转入 CPU,只有 Auto 可以沿 descriptor 锁定的创建候选继续。源码候选发布前,公开的 `0.2.0` package 仍保持 CPU 默认。
+`cpuPartition: "allow"` 与 strict GPU-only profile 适用于 Apple Silicon 上的 Apple provider;`0.3.0` macOS x64 package 只暴露 CPU。显式 provider 失败不会转入 CPU,只有 Auto 可以沿 descriptor 锁定的创建候选继续。不传 `execution` 的 `createEngine()` 现在使用 Auto。
完整 API、取消、队列限制和生命周期行为见 [Node.js 指南](bindings/node/README.md)。
@@ -221,19 +219,19 @@ ctest --preset release
| --- | --- | --- |
| C++ Core 源码 | 可用 | macOS arm64/x64、Linux x64 glibc、Windows x64 |
| Node-API 适配器源码 | 可用 | Node.js 22 和 24 |
-| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | 已发布 `0.2.0` | 全部 Tier 1 平台的 Node.js 22/24 |
-| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | 已发布 `0.2.0` | 与平台无关的必需模型依赖 |
-| 各平台 native npm packages | 已发布 `0.2.0` | macOS arm64/x64、Linux x64 glibc、Windows x64 |
+| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | 已发布 `0.3.0` | 全部 Tier 1 平台的 Node.js 22/24 |
+| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | 已发布 `0.3.0` | 与平台无关的必需模型依赖 |
+| 各平台 native npm packages | 已发布 `0.3.0` | macOS arm64/x64、Linux x64 glibc、Windows x64 |
-npm 分发会安装一个统一入口、一个必需的模型包,以及与当前系统匹配的 native 包。包内容、版本策略和发布门槛见 [npm package 设计](docs/npm-packaging.md);`0.2.0` 的不可变哈希和验证证据见[发布记录](docs/releases/npm-0.2.0.md)。
+npm 分发会安装一个统一入口、一个必需的模型包,以及与当前系统匹配的 native 包。包内容、版本策略和发布门槛见 [npm package 设计](docs/npm-packaging.md);`0.3.0` 的不可变哈希和验证证据见[发布记录](docs/releases/npm-0.3.0.md)。
-macOS arm64 Direct Core ML 加速已经合并到 `main`,目标版本为 `0.3.0`,但尚未进入已发布的 `0.2.0` package set。它会继续复用现有六包安装结构,不计划新增 provider package 或运行时下载。
+macOS arm64 Direct Core ML 加速已经随 `0.3.0` 发布,并复用现有六包安装结构,没有新增 provider package 或运行时下载;macOS x64 保持 CPU-only。
-PR #11 同时包含 Linux x64 与 Windows x64 Native WebGPU 源码候选。显式 WebGPU 接受 `auto/fp32`,Auto 同样选择 FP32;三个必要 CPU partition 算子会被显式报告并限制范围。两份真机报告均已通过 164/164 Gate,其报告与产物的不可变哈希现已绑定进 production lock,供 `0.3.0` 发布流程使用。已发布的 `0.2.0` packages 保持不变,并在这两个平台继续仅使用 CPU。
+`0.3.0` 已在 Linux x64 与 Windows x64 发布 Native WebGPU。显式 WebGPU 接受 `auto/fp32`,Auto 同样选择 FP32;三个必要 CPU partition 算子会被显式报告并限制范围。两份真机报告均已通过 164/164 Gate,其报告与产物的不可变哈希已绑定进 production lock。
## 项目状态
-`light-ocr` 仍在积极开发。`0.2.0` 已发布确定性的 `tiled-v1` 大图模式,以及 Node.js 适配器中受资源限制的内存 JPEG/PNG 解码;C++ Core 的 raw-pixel 边界保持不变。`0.3.0` 源码候选加入 descriptor-driven Auto、macOS arm64 Direct Core ML,以及 Linux x64/Windows x64 FP32 Native WebGPU 执行。
+`light-ocr` 仍在积极开发。`0.3.0` 包含确定性的 `tiled-v1` 大图模式、Node.js 内存 JPEG/PNG 解码、descriptor-driven Auto、macOS arm64 Direct Core ML,以及 Linux x64/Windows x64 FP32 Native WebGPU 执行;C++ Core 的 raw-pixel 边界保持不变。
作为 pre-1.0 项目,公共 API 和 package 布局仍可能调整;项目目前不承诺跨版本稳定的 C++ ABI。
diff --git a/bindings/node/README.md b/bindings/node/README.md
index dccb2c5..7a4cfc8 100644
--- a/bindings/node/README.md
+++ b/bindings/node/README.md
@@ -1,6 +1,6 @@
# light-ocr Node-API adapter
-状态:`@arcships/light-ocr@0.2.0` 已发布;当前 0.3.0 源码候选加入 Apple/Core ML,以及 Linux x64 glibc/Vulkan、Windows x64/D3D12 的 official Native WebGPU Plugin EP 产品实现。WebGPU runtime/npm payload、Auto 与双平台真实设备 Gate 已完成;正式 release lock 仍需在发布前绑定已审阅报告和产物哈希。已发布的 0.2.0 仍为 CPU 默认。
+状态:`@arcships/light-ocr@0.3.0` 已发布并提升为 npm `latest`。默认 `createEngine()` 使用 descriptor-driven Auto;macOS arm64 可用 Apple/Core ML,Linux x64 glibc/Vulkan 与 Windows x64/D3D12 可用 official Native WebGPU Plugin EP,macOS x64 保持 CPU-only。
推荐直接安装公开 package:
@@ -20,7 +20,7 @@ npm install @arcships/light-ocr
- `recognize()` 返回前同步复制本次调用实际需要的像素范围;调用返回后可以立即修改或复用原 Buffer。
- 支持 `AbortSignal` 协作式取消:queued 请求会从队列移除;running 请求立即拒绝 public Promise,但 Core 会安全运行到返回并丢弃结果。
- native addon 只接收现有绝对 bundle 目录。当前源码开发调用显式传 `bundlePath`;发布后的 facade 默认使用随 npm 安装的 model package 路径。
-- 产品 engine 默认报告 `detectionStrategy: 'bounded'`、`detectionMaxSide: 960` 和 `defaultRecognitionBatchSize: 1`。0.2.0 可通过 `detection: {strategy: 'tiled'}` 显式选择 `tiled-v1`;`upstreamExact` 只用于上游对照,单次 `recognize({detectionMaxSide})` 只能继续降低 bounded engine 的 side。
+- 产品 engine 默认报告 `detectionStrategy: 'bounded'`、`detectionMaxSide: 960` 和 `defaultRecognitionBatchSize: 1`。0.3.0 可通过 `detection: {strategy: 'tiled'}` 显式选择 `tiled-v1`;`upstreamExact` 只用于上游对照,单次 `recognize({detectionMaxSide})` 只能继续降低 bounded engine 的 side。
- `createEngine({execution})` 接受 `auto`、`cpu`、`apple` 与已交付平台支持的 `webgpu`。macOS 15+ arm64 默认开放:Apple Silicon interactive 使用 FP16 ANE + 宽文本 FP16 GPU,strict 使用全 GPU;macOS x64 package 保持 CPU-only。WebGPU 使用 ORT Core 1.24.4 + official plugin 0.1.0,Linux 为 Vulkan、Windows 为 D3D12;`0.3.0` 公共 WebGPU profile 只接受 `precision: 'auto' | 'fp32'`,FP16 仅用于 Apple provider。当前 WebGPU 模型需要 `Concat/Gather/Slice` 三类有界 CPU partition,因而 `cpuPartition: 'forbid'` 会稳定 fail-closed。只有 Auto 可在创建期按 descriptor 锁定的 typed failure 继续候选;显式 provider 不回退,旧 `sessionFallback: 'cpu'` 返回 `invalid_argument`。`engine.info.execution.sessions` 报告每个模型的实际 provider chain、precision、adapter、runtime/provider/qualification identity,selection trace 则报告 Auto 的每次创建尝试。
## `0.3.0` 加速证据
diff --git a/docs/implementation-status.md b/docs/implementation-status.md
index 326e094..9ced1a8 100644
--- a/docs/implementation-status.md
+++ b/docs/implementation-status.md
@@ -1,7 +1,7 @@
# C++ Core 与 Node-API 实施状态
更新时间:2026-07-19
-结论:`@arcships/light-ocr@0.2.0` 已发布并提升为 npm `latest`。当前 0.3.0 发布候选已实现 Direct Core ML Apple provider,以及 Linux x64 glibc/Windows x64 official Native WebGPU Plugin EP 的产品 runtime、D112 Auto、自包含 npm payload 与资格工具。Apple M4 已有审阅证据;WebGPU 的 Linux/Windows 真实设备报告均为 164/164 Gate 通过,已审阅报告和产物哈希已绑定 production lock。
+结论:`@arcships/light-ocr@0.3.0` 与五个依赖包已发布,npm `next`/`latest` 均指向 `0.3.0`。该版本交付 Direct Core ML Apple provider、Linux x64 glibc/Windows x64 official Native WebGPU Plugin EP、D112 Auto 与自包含 npm payload;Apple M4、Linux/NVIDIA 与 Windows/AMD 的审阅证据及产物哈希均已进入 production lock。
状态含义:
@@ -17,14 +17,14 @@
| 生产 Core 无 Python、无子进程 | Done | `light_ocr_core` 仅 C++;Python 只在 oracle/generator/report tools;Core 无 process/shell API。 |
| raw-pixel 公共 API、ownership/lifecycle 文档 | Done | `include/light_ocr/*.hpp` 与 [native-api.md](native-api.md)。 |
| detection/geometry/crop/recognition/decode 分层与测试 | Done | 独立源码模块、unit tests、stage probe 和真实模型 integration tests。 |
-| PP-OCRv6 bundle 固定、哈希、许可、离线可用 | Done(0.2.0 published) | `.2` 使用相同受控 ONNX bytes,发布 schema 1.2、`tiled-v1` contract、新 manifest/config/archive hash,并把 minimum Core 提升到 0.2.0;`.1`/schema 1.1 证据保持不变。 |
+| PP-OCRv6 bundle 固定、哈希、许可、离线可用 | Done(0.3.0 published) | 0.3.0 发布 `ppocrv6-small-native-20260719.1`,包含受控 FP32 ONNX、Apple FP16 与内部锁定的 WebGPU 派生工件;公开 WebGPU profile 保持 FP32。 |
| stage 与 final parity | Done | `upstream_exact` 与 `bounded_default` 均为 14/14;候选级 trace 完整;release commit 的 oracle 与四平台 jobs 全绿。 |
| 首 bundle ground-truth quality report | Done(本机) | bounded 默认在 10 个锁定 fixtures 上 10/10 exact、CER `0`;IoU≥0.5 下 detection precision/recall/Hmean 均为 `1.0`。旧 exact 基线仍独立保留。 |
| 相对性能门槛 | Done(参考本机) | bounded 默认:median `0.9824867× ≤ 1.10×`;p95 `1.0139793× ≤ 1.15×`;inference median `0.9961966× ≤ 1.05×`。受控 CI worker 报告仍应保留。 |
| Sanitizer、fuzz、leak、lifecycle、malformed input | Done | 本机 ASan+UBSan、TSan、standalone fuzz、lifecycle 和 malformed model/tensor 已通过;release Core safety job 的 sanitizers、TSan 和 libFuzzer smoke 全绿。 |
| 无 network/shell/cwd/locale 运行依赖 | Done | sterile cwd/minimal env 与 Linux network namespace disabled 测试通过;npm release 另完成已安装 package 的禁网运行。 |
| manifest、hash、licenses、SBOM、parity、benchmark | Done | Release commit 已重新生成并保存四平台 metadata、六个 npm tarballs 的 hashes/integrity、parity、quality 与 benchmark 证据。 |
-| N-API/npm 非本 Core milestone | Done / `0.2.0` published | raw Node-API v8、CJS/ESM、`.d.ts`、内置模型解析、四平台 prebuild、双重背压、AbortSignal 与生命周期均已完成;[npm release run 29340467784](https://github.com/arcships/light-ocr/actions/runs/29340467784) 与 [promotion run 29342178842](https://github.com/arcships/light-ocr/actions/runs/29342178842) 保存六包发布、registry 和禁网证据。 |
+| N-API/npm 非本 Core milestone | Done / `0.3.0` published | raw Node-API v8、CJS/ESM、`.d.ts`、内置模型解析、四平台 prebuild、双重背压、AbortSignal 与生命周期均已完成;[dry-run 29694938140](https://github.com/arcships/light-ocr/actions/runs/29694938140)、[release run 29695763892](https://github.com/arcships/light-ocr/actions/runs/29695763892) 与 [promotion run 29696646354](https://github.com/arcships/light-ocr/actions/runs/29696646354) 保存六包构建、Node 22/24、registry、禁网、integrity 与 dist-tag 证据。 |
| Perf-1A / Apple execution | Done locally / Apple Silicon open compatibility | provider-neutral `InferenceSession` 已加入 Objective-C++ Direct Core ML;公开 union 与 D112 Auto 创建状态机已接线。detector 使用 FP16 range model,recognizer 使用 91-function FP16 MLProgram 和 20 个加权宽度桶;Apple Silicon interactive 为 ANE + 宽文本 GPU,strict 为 GPU。schema 1.1 provider contract、`validatedDeviceFamilies` 与 `deviceValidated` 已实现;显式 provider 严格失败,只有 Auto 可按 typed reason 在创建期继续。哈希锁模型、离线编译缓存、跨进程锁、LRU≤20 与 Node 映射均已完成。M4 有正式证据,其他 Apple Silicon 开放实验兼容;macOS x64 release smoke 未通过 Core ML OCR parity,因此 0.3.0 x64 runtime descriptor 只暴露 CPU。 |
| Perf-2 / Native WebGPU | Production-qualified / two device Gates passed | Linux x64 glibc/Vulkan 与 Windows x64/D3D12 使用 official ORT Core 1.24.4 + WebGPU Plugin EP 0.1.0。NuGet bytes/SHA-512、headers、runtime/plugin/companions、license 和 session options 已锁定;assembler 支持在线取得、离线复装和 exact SDK 校验。C++/Node plugin registration、D112 `webgpu → cpu`、typed/fatal failure、FP32 allow/strict、真实 provider chain、profiling、schema 2 descriptor、sterile loader、self-contained npm staging、license/SBOM 和双平台 CI 已实现。Linux RTX 5060 Ti/Vulkan 与 Windows Radeon 780M/D3D12 报告均为 164/164 Gate 通过、14/14 FP32 字节级质量对齐;聚合 P50 分别加速 5.698× 与 2.436×。已审阅 report/artifact hashes 已绑定 production lock,release configure 仅接受精确匹配的 SDK。 |
| Node.js JPEG/PNG 内存输入 | Done / `0.2.0` published | `recognizeEncoded(Uint8Array)` 在 engine worker 上使用固定 stb revision 解码,保持 Core raw-pixel 边界;格式、尺寸、pixels、临时内存、queue/snapshot budget、AbortSignal 与 `timingUs.decode` 均有四平台 Node 22/24 package 测试。 |
@@ -72,6 +72,6 @@
## 发布结论与后续范围
-`0.2.0` 的四平台 Core、Node.js 22/24 prebuild、六包确定性制品、public registry、provenance、默认 `createEngine()`、显式 tiled 和禁网运行证据已经完成,详见 [npm 0.2.0 发布记录](releases/npm-0.2.0.md)。
+`0.3.0` 的四平台 Core、Node.js 22/24 prebuild、六包制品、public registry、provenance、默认 Auto、显式 Apple/WebGPU、tiled 和禁网运行证据已经完成,详见 [npm 0.3.0 发布记录](releases/npm-0.3.0.md)。
普通 push、PR 和 release workflow 均不运行 benchmark。后续只有 Core/model/ORT/compiler/thread policy/runner class 变化、准备公开新性能数字或调查疑似回归时,才显式重新运行 qualification 并 review 新 baseline。0.1.0 的历史记录与制品保持不变。
diff --git a/docs/npm-packaging.md b/docs/npm-packaging.md
index e5511cc..cf5a48c 100644
--- a/docs/npm-packaging.md
+++ b/docs/npm-packaging.md
@@ -1,6 +1,6 @@
# @arcships/light-ocr npm Package Design
-状态:六包设计与 `0.2.0` lockstep 发布已完成;0.3.0 Apple/WebGPU native superset bundle release candidate 已接入同一流程
+状态:六包设计与 `0.3.0` Apple/WebGPU native superset bundle 已完成 lockstep 发布,并提升为 npm `latest`
更新时间:2026-07-19
Authority:npm 包名、包拆分、依赖关系、内置模型、版本与发布门槛
Node API:[napi-design.md](napi-design.md)
@@ -9,7 +9,7 @@ Decision:[decisions.md](decisions.md) D105
0.2.0 继续使用本文六包 lockstep 规则,并强校验 schema 1.2、`tiled-v1`、新 bundle ID、minimum package version,以及 native package 中 JPEG/PNG decoder 的 license/SBOM identity。额外的类型、四平台基线和发布证据见 [Tiled Detection 技术设计与验收规格](tiled-design-and-acceptance.md)。这些增量不改变已发布 `0.1.0` 的不可变包内容。
-0.3.0 候选不增加第七个包或第二个安装入口。model package 改为
+0.3.0 不增加第七个包或第二个安装入口。model package 使用
`ppocrv6-small-native-20260719.1` 自包含 superset:所有平台继续使用其中的
ONNX FP32 CPU/WebGPU payload;锁定的 WebGPU FP16 variants 仅作为内部可复现工件保留;
macOS 15+ arm64 使用 `open-macos` 策略并可显式请求 Core ML;`validatedDeviceFamilies` 只标记已有真机证据,不阻塞其他 Apple Silicon 的实验兼容。macOS x64 package 保持 CPU-only,因为发布 smoke 未能通过 Intel Core ML OCR parity。
@@ -39,7 +39,7 @@ const engine = await createEngine();
- engine 创建和识别期间不访问网络,不执行 shell,不运行下载脚本,也不读取 cwd 或用户环境变量来寻找模型。
- `bundlePath` 继续作为显式高级覆盖入口,用于开发、测试或私有 bundle;它不是正常使用的前置配置。
-模型会增加 npm 安装流量和磁盘占用,但不会产生安装后的第二次下载。`0.2.0` model tarball 为 26,091,308 bytes,解包后 package 为 31,333,440 bytes;完整 hash 与 registry integrity 见[发布记录](releases/npm-0.2.0.md)。
+模型会增加 npm 安装流量和磁盘占用,但不会产生安装后的第二次下载。`0.3.0` model tarball 为 52,529,117 bytes,解包后 package 为 73,594,252 bytes;完整 hash 与 registry integrity 见[发布记录](releases/npm-0.3.0.md)。
## 2. 包集合与依赖图
@@ -48,7 +48,7 @@ const engine = await createEngine();
| 包 | 类型 | 内容 | 安装关系 |
| --- | --- | --- | --- |
| `@arcships/light-ocr` | facade | CJS、ESM、TypeScript types、平台与模型解析器 | 用户直接安装 |
-| `@arcships/light-ocr-model-ppocrv6-small` | model | 0.2.0 为 CPU bundle;0.3.0 候选为包含同一 FP32 ONNX payload、锁定的内部 WebGPU FP16 派生工件与 Core ML FP16 工件的 `ppocrv6-small-native-20260719.1`、模型 license、可解析 manifest;WebGPU 公共执行 profile 只发布 FP32 | facade 的普通 dependency |
+| `@arcships/light-ocr-model-ppocrv6-small` | model | 0.3.0 包含同一 FP32 ONNX payload、锁定的内部 WebGPU FP16 派生工件与 Core ML FP16 工件的 `ppocrv6-small-native-20260719.1`、模型 license、可解析 manifest;WebGPU 公共执行 profile 只发布 FP32 | facade 的普通 dependency |
| `@arcships/light-ocr-darwin-arm64` | native | arm64 `.node`、ONNX Runtime dylib、licenses、SBOM、hashes | facade 的 optional dependency |
| `@arcships/light-ocr-darwin-x64` | native | x64 `.node`、ONNX Runtime dylib、licenses、SBOM、hashes | facade 的 optional dependency |
| `@arcships/light-ocr-win32-x64` | native | x64 `.node`、`onnxruntime.dll`、licenses、SBOM、hashes | facade 的 optional dependency |
@@ -77,7 +77,7 @@ v1 不提供无模型的 `core`/`lite` 入口,也不允许用户单独拼装 f
```json
{
"name": "@arcships/light-ocr",
- "version": "0.2.0",
+ "version": "0.3.0",
"license": "Apache-2.0",
"type": "commonjs",
"main": "./js/index.cjs",
@@ -93,13 +93,13 @@ v1 不提供无模型的 `core`/`lite` 入口,也不允许用户单独拼装 f
"files": ["js/", "README.md", "LICENSE", "NOTICE"],
"engines": { "node": "^22.0.0 || ^24.0.0" },
"dependencies": {
- "@arcships/light-ocr-model-ppocrv6-small": "0.2.0"
+ "@arcships/light-ocr-model-ppocrv6-small": "0.3.0"
},
"optionalDependencies": {
- "@arcships/light-ocr-darwin-arm64": "0.2.0",
- "@arcships/light-ocr-darwin-x64": "0.2.0",
- "@arcships/light-ocr-linux-x64-gnu": "0.2.0",
- "@arcships/light-ocr-win32-x64": "0.2.0"
+ "@arcships/light-ocr-darwin-arm64": "0.3.0",
+ "@arcships/light-ocr-darwin-x64": "0.3.0",
+ "@arcships/light-ocr-linux-x64-gnu": "0.3.0",
+ "@arcships/light-ocr-win32-x64": "0.3.0"
},
"publishConfig": { "access": "public" }
}
@@ -133,7 +133,7 @@ Facade 同时导出 CJS、ESM 和 `.d.ts`,但两种模块格式共享同一个
```json
{
"name": "@arcships/light-ocr-model-ppocrv6-small",
- "version": "0.2.0",
+ "version": "0.3.0",
"license": "Apache-2.0",
"files": ["bundle/", "README.md", "LICENSE", "NOTICE"],
"exports": {
@@ -156,7 +156,7 @@ Facade 在创建 engine 前读取 manifest,并核对 `bundleId` 是否等于
```json
{
"name": "@arcships/light-ocr-linux-x64-gnu",
- "version": "0.2.0",
+ "version": "0.3.0",
"license": "Apache-2.0",
"main": "./native/light_ocr_node.node",
"exports": { ".": "./native/light_ocr_node.node" },
@@ -263,7 +263,7 @@ dist/npm/
`@arcships` scope 必须已由发布账号或组织控制。scoped package 的发布清单固定 `publishConfig.access: public`,发布流程也显式使用 public access,避免 scope 默认私有策略造成误配置。
-2026-07-14 的 0.1.0 首发证明发布身份控制 `@arcships` scope;同日 0.2.0 workflow 继续以 npm provenance 发布六包,经独立 promotion job 逐包核对 registry integrity 后提升到 `latest`。
+2026-07-14 的 0.1.0 首发证明发布身份控制 `@arcships` scope;同日 0.2.0 workflow 继续以 npm provenance 发布六包。2026-07-19 的 0.3.0 release 在四平台 Node 22/24 与禁网验证后发布六包,并经独立 promotion job 逐包核对 registry integrity 后提升到 `latest`;完整记录见 [npm 0.3.0 发布记录](releases/npm-0.3.0.md)。
相关 npm 官方行为依据:
diff --git a/docs/releases/npm-0.3.0.md b/docs/releases/npm-0.3.0.md
new file mode 100644
index 0000000..0010d13
--- /dev/null
+++ b/docs/releases/npm-0.3.0.md
@@ -0,0 +1,82 @@
+# npm 0.3.0 发布记录
+
+发布日期:2026-07-19
+发布 commit:`7665b15122b9e031c4cca16a528d8739694ec632`
+
+版本:`0.3.0`
+
+协议:Apache-2.0
+
+## 面向使用者的变化
+
+- `createEngine()` 默认从 CPU 改为平台 descriptor 驱动的 Auto:macOS arm64 按 `apple → cpu`,Linux x64 与 Windows x64 按 `webgpu → cpu`,macOS x64 使用 CPU。
+- macOS 15+ arm64 新增 Direct Core ML。Apple provider 使用已验证的 FP16 路径;M4 有正式设备证据,其他 Apple Silicon 走开放兼容路径但不继承性能承诺。
+- Linux x64/Vulkan 与 Windows x64/D3D12 新增 official Native WebGPU Plugin EP。公开 WebGPU precision 只接受 `auto`/`fp32`,并显式限制 `Concat`、`Gather`、`Slice` 的 CPU partition。
+- 六包安装结构不变:一个 facade、一个模型包、四个平台 native 包;安装与首次运行不下载 provider、模型或编译原生代码。
+- `engine.info.execution` 新增 session placement、provider/runtime/qualification identity、adapter、precision、`deviceValidated` 和 Auto creation trace。
+
+## API 与兼容性
+
+- Node.js `ExecutionProvider` 增加 `auto`、`apple`、`webgpu`;C++ enum 增加 `automatic`、`apple`、`webgpu`。
+- 显式 provider 是严格单后端请求,不会静默回退。只有 Auto 可以在创建阶段按 descriptor 锁定的 typed failure 继续下一个候选。
+- 旧 `sessionFallback: "cpu"` 返回 `invalid_argument`;继续使用 `sessionFallback: "error"`,或直接省略让 Auto 管理创建候选。
+- Apple FP16 与 WebGPU FP32 使用不同的资格路径。WebGPU `precision: "fp16"` 不属于 0.3.0 公共 API。
+- macOS x64 发布 smoke 未复现锁定的 Core ML OCR 结果,因此 0.3.0 descriptor 仅暴露 CPU。
+
+## 性能与质量
+
+所有数字都是表中设备上的同机 CPU 对照,不外推到其他设备或 driver。
+
+| Provider 与记录设备 | 已记录的端到端结果 | 质量与 Gate |
+| --- | ---: | --- |
+| Apple/Core ML,Apple M4 Max | `HELLO 123` 2.300×;XFUND 2.851× | 14 fixtures 通过锁定的 CPU parity 阈值 |
+| WebGPU/Vulkan,NVIDIA RTX 5060 Ti | 14-fixture 聚合 P50 5.698×;单项 3.474×–9.299× | 14/14 与 CPU FP32 字节级一致;164/164 Gate |
+| WebGPU/D3D12,AMD Radeon 780M | 14-fixture 聚合 P50 2.436×;单项 1.277×–2.982× | 14/14 与 CPU FP32 字节级一致;164/164 Gate |
+
+Apple 结果对比最多 12 intra-op threads 的 `cpu_fast` profile;`HELLO 123` 与 XFUND 的 warm P50 分别从 19.774/943.627 ms 降至 8.599/331.011 ms,宿主 OCR 进程 CPU time 分别降低 95.91%/97.67%。14 个 fixture 的字符相似度为 99.6484%,detection recall 为 100%,平均 matched IoU 为 99.5508%;这是 CPU parity,不是独立 ground-truth accuracy。
+
+WebGPU 聚合值为锁定 14-fixture corpus 的 `sum(CPU P50) / sum(WebGPU P50)`。两份报告还通过 cold start、native C++、memory、placement、strict rejection 和 repeated-lifecycle Gate;Windows lifecycle 最终比预热后基线低 22.9 MiB。
+
+## 发布与验证证据
+
+- [完整 dry-run 29694938140](https://github.com/arcships/light-ocr/actions/runs/29694938140):四平台构建、Windows 生命周期、确定性模型派生、六包 staging、临时 registry,以及 Node.js 22/24 的八组 package tests 全部成功。
+- [npm release run 29695763892](https://github.com/arcships/light-ocr/actions/runs/29695763892):在相同 commit 上复跑同一 release gate,以 npm 11 + provenance 按依赖优先、facade 最后的顺序把六包发布到 `next`,并完成 registry 与禁网复验。
+- [npm promotion run 29696646354](https://github.com/arcships/light-ocr/actions/runs/29696646354):复用 release artifact,逐包核对公开 registry integrity,再按依赖优先、facade 最后提升到 `latest`。
+- 最终公开查询确认六包的 `next` 与 `latest` 均指向 `0.3.0`。
+
+发布前不重复运行真机 benchmark;reviewed Apple/Linux/Windows qualification 由 production lock 精确绑定。完整 dry-run 必须保留,因为它同时验证四平台可安装产物、默认 Auto OCR、显式 provider、Node 22/24、registry 和禁网边界。
+
+## 不可变制品
+
+以下数据来自 release run 保存的 `release-manifest.json`;manifest SHA-256 为 `d13e31d100b5b2d50b8ba47275714bbf7d2fa8521d77fdd2acb78b70f71a83b0`,`gitRevision` 为发布 commit,registry 的 `dist.integrity` 已逐包复核一致。
+
+| Package | Tarball bytes | Unpacked bytes | SHA-256 |
+| --- | ---: | ---: | --- |
+| `@arcships/light-ocr` | 13,564 | 49,111 | `5204dc33615ec0894a39c8ddc89f67e9d1ea0356a658431eb719bad254ce4fcb` |
+| `@arcships/light-ocr-model-ppocrv6-small` | 52,529,117 | 73,594,252 | `80048aec12f89348ace1ca84b34318ae251a7d0d47057d4fa36833476e0dccd8` |
+| `@arcships/light-ocr-darwin-arm64` | 12,067,180 | 39,987,242 | `8e98b5bf36de7e9cfd17c626a18ecdf6a1134b30eb1da7364a95b500493f6ad0` |
+| `@arcships/light-ocr-darwin-x64` | 13,996,604 | 46,021,373 | `2e0273a0364caaf8dc974ee733aa0eb925dcfc15e441314a3695151b76549550` |
+| `@arcships/light-ocr-linux-x64-gnu` | 16,306,936 | 44,149,803 | `49dd721256567bf65bd279b3767ad6968f7dfad20f81ecec323322d5cc071ae0` |
+| `@arcships/light-ocr-win32-x64` | 19,298,217 | 47,080,383 | `40249eac4280504a30abf32c20e381911749761ccce3c628b2323bd342d34894` |
+
+Registry integrity:
+
+```text
+@arcships/light-ocr
+sha512-rTKUW08XHPxxRpPCxcyk4G4OOv/uPUu0VWVn2nzAs1PqDkLGQAvGdmiGGOrUAoc4CjbZwMcgwQsK+Zws4ARfXA==
+
+@arcships/light-ocr-model-ppocrv6-small
+sha512-vKUzIzsJSb8/nZ7pv9u9hS4lelaPubgmi/kINPMC1aCydBZovTUSV5NpbDkvVq1rmDww2Xg8rPE5ecCQqA1OVQ==
+
+@arcships/light-ocr-darwin-arm64
+sha512-+rKbx8Du6V8t6xjCYLK6vYCdkYezFtxt3cQxfSn/+r6hw5Q8imsqNbyLqM4I7G4twfhKTJUOoadfauBm/hVm3Q==
+
+@arcships/light-ocr-darwin-x64
+sha512-VJh+GeLGiNPIWQ1yOAvHBhPFVNd6GLORrG72Z0alNf79JAUx0RWD9N1phHifHmxcseT6VgXEbK6q/d1rktUjpw==
+
+@arcships/light-ocr-linux-x64-gnu
+sha512-oxvYcvENpdxxfMVoZQWXwoZ1i0DNFkIZoNJR18gAjm6JVK8loq7UzGpeAuvg1uyd89gQqjaWKlRABLP0DQb9wQ==
+
+@arcships/light-ocr-win32-x64
+sha512-1Aih7zeUNfmgLUGwWtJwAQ916QPQjOUS32i8s/v5ijhD38xQRJQ5+WuKiIAstZwsD5RQKxlXxwo6sWMMqv6H8w==
+```