Skip to content

kiarosama/numera-cha-solver

v0.3.0LicenseRef-Noncommercial-Network-ShareAlike-1.0

Licensed local recognition and explicit human review; native MCP configuration is separate.

Numera CHA-Solver

License: Source available Version: 0.3.0 Language: Rust Rust: 1.99 Targets: Windows Linux macOS Inference: ONNX Runtime Device: CUDA or explicit CPU API: Axum Storage: SQLite Dependencies: Cargo locked Dashboard: local HTML Documentation: English and Persian Support donations

Local perception and accessible human review—not a universal CAPTCHA solver.

Version 0.3.0 adds native MCP, revision-bound manual review and Tauri delivery targets for Windows x64, Linux x64 and Apple Silicon macOS. Release assets are published only after exact-revision GitHub-hosted build/runtime/package validation; authored support alone is not execution evidence. Commit-bound validation. The owner's custom noncommercial network share-alike license is source-available, not GNU AGPL or OSI-approved open source. Unconditional voluntary donations remain permitted.

Historical Windows 0.2.0 passed final verification on 43c272e: 43 native tests and all 16 build/device/browser/package/launcher/rollback stages. That evidence does not certify 0.3.0 or other platforms. Models, task state, configuration and operational logs remain separate from disposable build artifacts. Exact historical evidence.

Available: restricted arithmetic, actual local text-line OCR, typed async SDK, JSON CLI, authenticated loopback API, durable cancellable tasks, model inventory/acquisition/verification and local evidence dashboard. No paid-service hidden fallback, browser stealth, target impersonation or third-party protection bypass.

Start

Download your platform's verified package from GitHub Releases, check SHA256SUMS.txt, then follow the native/desktop guide. New releases use the exact successful hosted artifacts; macOS/Linux binaries are not delivered as chat attachments. Builds and tests for this delivery run only on GitHub-hosted CI. Windows PowerShell7 example:

./bin/numera-cha.exe --device cpu recognize --text "12 * 3 = ?"

Linux/macOS:

./bin/numera-cha --device cpu recognize --text "12 * 3 = ?"
./bin/numera-cha.exe models fetch ppocr-v6-small
./bin/numera-cha.exe recognize --text "12 * 3 = ?"
./run.ps1

Dashboard: http://127.0.0.1:8765. Connect with the locally generated credential in data/api-token.txt; never publish or attach its value. Stop with ./scripts/stop.ps1.

CLI/SDK defaults remain CUDA on Windows/Linux and CPU on macOS; the desktop defaults to its bundled CPU runtime unless explicitly configured. Set NUMERA_DLL_DIRECTORY to compatible CUDA/cuDNN DLLs when selecting CUDA. Hosted runners provide actual CPU evidence, not GPU evidence. Explicit CPU: ./bin/numera-cha.exe --device cpu recognize --image <licensed-image>.

Agent MCP and human review

Start your selected local server with ./bin/numera-cha-solver-mcp.exe serve --port 1583 (on Linux/macOS omit .exe). Configure the same root/port for the bridge. Merge this entry into Claude Desktop's claude_desktop_config.json; preserve existing servers:

{
  "mcpServers": {
    "Numera-CHA-Solver-MCP": {
      "command": "G:\\Program Files\\Portable\\Scripts\\Numera CHA-Solver\\bin\\numera-cha-solver-mcp.exe",
      "args": ["bridge"],
      "env": {
        "NUMERA_ROOT": "G:\\Program Files\\Portable\\Scripts\\Numera CHA-Solver",
        "NUMERA_MCP_PORT": "1583",
        "NUMERA_DEVICE": "cpu"
      }
    }
  }
}

Replace the example installation path with your actual archive location. No token belongs in this public snippet; the bridge reads the owner-protected local credential. Native tools provide licensed local recognition and pending review/status/cancellation. The person corrects/confirms in the local UI; agents cannot confirm or submit to a site, and server_verified stays separate.

Complete MCP configuration, ports and troubleshooting · Portable usage skill · Client packaging. Plugin compatibility and native installation are separate; a manifest alone is not proof a client has been exercised.

SDK

use numera_cha_solver::{config::Settings, sdk::Numera};
use serde_json::json;

#[tokio::main]
async fn main() {
    let sdk = Numera::new(Settings::from_env().expect("valid local configuration"));
    let result = sdk.recognize_value(json!({"kind": "text", "text": "12 * 3"}), None).await;
    println!("{}", serde_json::to_string(&result).expect("result serialization"));
    sdk.close().await;
}

Native interfaces: async recognize(Input, deadline), recognize_value(JSON, deadline), solve, capabilities, models, doctor and close; synchronous metadata-only detect(&Input). CLI and HTTP share this SDK. solve is recognition only, never a browser action or owner acceptance. Explicit subtypes must match the implemented engine (arithmetic or generic_text_line).

Python import compatibility and its synchronous wrapper are intentionally retired by the owner-approved migration. No thin Python production wrapper is provided. recognized never implies server_verified.

CLI and API

Commands: doctor, capabilities, models list|verify|fetch, detect, recognize, solve, serve, benchmark, report. JSON goes to stdout; logs go to stderr and per-run files. Exit 0: success; 2: input/configuration/infrastructure failure; 3: unavailable/abstention; 4: failed recognition. Exit 130 denotes an interrupted non-server command; actual console-signal verification remains separate from ordinary JSON/exit tests.

HTTP: /health/live, /health/ready, /v1/capabilities, /v1/models, /v1/detect, /v1/recognize, /v1/tasks, /v1/tasks/{id}, /v1/tasks/{id}/cancel. Bearer or local same-origin session required for v1; task creation requires Idempotency-Key. Strict JSON input accepts local data, not arbitrary paths/URLs/endpoints. Default queue32, taskbudget120seconds, retrieval TTL24hours (not a physical-purge guarantee). /health/ready returns a timestamped cached integrity snapshot; checking is not model readiness. Recognition overload returns inference_busy.

Evidence and coverage

Real first-party PP-OCRv6small weights read the owned synthetic NUMERA 123 sample on RTX4070Ti. Runtime profiling recorded187CUDA and2CPUshape/support nodes. This proves local model wiring/device execution only—not real CAPTCHA accuracy, multilingual correctness or live acceptance.

IDFamilyDeclared scopeEvidence / blockers
C01Google reCAPTCHA5 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C02Google reCAPTCHA2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C03Cloudflare Turnstile3 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C04Cloudflare challenges3 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C05hCaptcha6 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C06Arkose FunCaptcha6 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C07GeeTest4 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C08AWS WAF2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C09Tencent TCaptcha4 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C10Alibaba CAPTCHA3 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C11NetEase Yidun3 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C12Yandex SmartCaptcha2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C13MTCaptcha2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C14Capy2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C15Lemin Cropped1 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C16KeyCAPTCHA2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C17Friendly Captcha2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C18ALTCHA1 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C19Prosopo Procaptcha2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C20Cutcaptcha1 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C21VK CAPTCHA1 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C22DataDome2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C23HUMAN PerimeterX2 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C24Generic text5 subtype decisionsLimited local building blocks; provider accuracy unverified
C25Generic audio3 subtype decisionsBlocked: model/data/owned lifecycle unavailable
C26Generic spatial9 subtype decisionsBlocked: model/data/owned lifecycle unavailable

Validation · Blockers · Benchmark limits · Upstream decisions

Documentation

Persian quickstart · Architecture · Providers · Models · GPU · Testing · Security

Logs

UTF8 diagnostic files live under logs, resolved from project root. One per execution: <script>_YYYY-MM-DD_HH-mm-ss_UTC.log; UTC entries [timestamp UTC] [LEVEL] [COMPONENT] Message. INFO/WARNING/ERROR/DEBUG supported; --debug enables verbose operational metadata. Logging initialization falls back safely to stderr. Native logs sanitize quoted/nested fields before writing; runtime errors expose stable messages, not raw sensitive exception payloads. Logs rotate at 2 MB with two backups per run; real operational runs are not deleted automatically. Credentials, authorization, cookies, response tokens, signed URLs and raw inputs are not logged. Attach only sanitized relevant logs, never credentials/raw private assets.

Development and hosted CI

Native dependencies are pinned by Cargo.lock; exact ort prerelease is an owner-approved reviewed exception. The three-platform workflow runs on GitHub-hosted runners only by manual dispatch; pushes, pull requests and tags do not start CI. It uses two compiler jobs, one test thread, actual CPU inference, Windows frozen-source/launcher coverage, headless browser review tests and inspected native/desktop packages. Build/cache/temp paths remain job-contained; the old project self-hosted runner is removed. Testing and named limits. No badge substitutes for exact-revision evidence.

Original code uses the custom noncommercial network share-alike license. Third-party weights/dependencies retain their own grants; read licensing boundaries and third-party notices.

Donate

If this project helps you, donations are appreciated.

CurrencyNetworkAddress
Bitcoin (BTC)Bitcoinbc1qmth5m03pu5hujw5xw5jmywam3jj3sqwqupesdt
USDT, BNB, USDC, etc.BEP200x0Bd0BA443a8B9cf15922bf7f0Bb0a4b495fD06Ef
USDT, TRX, USDC, etc.TRC20TWBA3xFTqgZAeAYMxqo85xWnzvty3DcAhw
Ethereum (ETH)ERC200x0Bd0BA443a8B9cf15922bf7f0Bb0a4b495fD06Ef
TONTONUQCN8Umo_OfOWqImZetQsrNStPcmLkMAKajFyiCOhso23NDb
Litecoin (LTC)LTCltc1qntqnnrunadurnw4cshv3qgspywrueyyeyngwuy
Solana (SOL)Solana7B2wkczUjmkDhETwQuknBL8sUsbuV7nErxc317TmQuwR
Polygon (POL)Polygon0x0Bd0BA443a8B9cf15922bf7f0Bb0a4b495fD06Ef