Anchored image extraction from a slow-scan-television signal.
POST a presented SSTV audio recording. Get back the decoded image, the audio fingerprint, a Knox anchor, a C2PA-aligned envelope, and an FRE 902(13)/(14)-shape affidavit. The agent does not capture audio on its own — the audio must be presented by the caller (a public WebSDR recording, a customer-controlled SDR capture, or audio the caller owns). Audio bytes are not retained; only the SHA-256 fingerprint and the decoded image are anchored. Phase 1 supports Martin M1.
Closed-loop attribution for radio-band image transmissions.
- Presented audio only. Bonis never opens a microphone, never accesses operator audio devices, never captures audio on its own. The audio must be presented by the caller.
- Audio bytes are not retained. Only the SHA-256 fingerprint and the decoded image hash are anchored. The audio buffer is processed in-memory during the decode and never written to durable storage.
- Defensive only. The agent does not transmit, does not adjudicate authorship of the underlying transmission, does not vouch for any callsign claim, and does not access any third-party radio service or registry.
- Phase 1 = Martin M1. VIS code 0x2C, 320×256 RGB. Other VIS codes are detected, named where canonical (Robot 36, Robot 72, Scottie S1/S2/DX, the PD family, Wraase), and returned as unsupported_mode with the detected hex.
- Honest decode-fail handling. Non-SSTV audio returns no_vis_header. A leader that fails parity is also rejected as noise. Every attempt — successful or not — is anchored, so on-chain history reflects what was presented to the agent.
- C2PA-aligned, not C2PA-replacing. Output envelope is a subset of the C2PA 1.4 spec — compatible at the level a verifier can compare claim hashes to the Knox anchor. Adds Bitcoin-block-header durability on top of any C2PA signer.
Two ways to call. Same primitive.
HTTP REST: POST https://bonissystems.com/api/knox/agents/sstv-decoder. Body is JSON with name, audioBase64, optional audioFormat (wav default or pcm16-mono), sampleRate (required for pcm16-mono), and an optional capture object (source URL, captured-at, operator claim, callsign claim).
MCP server: POST https://bonissystems.com/api/knox/agents/sstv-decoder/mcp. JSON-RPC 2.0 over Streamable HTTP per MCP specification 2025-03-26. Tools: decode_sstv, verify_sstv_decode. Standard methods: initialize, ping, tools/list, tools/call.
Verification: GET https://bonissystems.com/api/knox/verify?hash=<payload_hash>. Public. No authentication. Returns the anchor record, predecessor hash, and the OpenTimestamps proof reference.
Authentication: an auto-seeded public-demo Knox API key is provisioned on first call. No customer account required at the demo tier. Bearer Knox keys are honored on the Authorization header for tier upgrades. Audio payload size limit: ~25 MB base64 (~18 MB raw). Audio duration limit: 180 seconds (Martin M1 full image ≈ 114 seconds).
Knox anchor + C2PA envelope + affidavit. All three from one call.
Knox anchor record
id, hash (SHA-256 payload commitment binding the audio fingerprint, decoded image hash, mode, VIS code, dimensions, and capture-context hashes), previousHash, sequence number, timestamp (UTC), and a verifyUrl at /api/knox/verify?hash=…. The payload hash is rolled into Knox's hourly Merkle aggregation and submitted to the Bitcoin blockchain via OpenTimestamps. Independently verifiable.
Decode result
On success: detected mode (e.g., Martin M1), VIS code + hex, image dimensions (320×256 for Martin M1), the decoded image as a base64 PNG plus its SHA-256, the audio fingerprint SHA-256, and the decode time in milliseconds. On failure: a structured reason (no_vis_header, unsupported_mode, audio_too_long, audio_too_short, audio_format_unsupported, invalid_input) with a human-readable detail.
C2PA-aligned envelope (subset of C2PA 1.4)
A claim block (title, instance ID bound to the Knox anchor, claim_generator metadata, format = image/png), assertions (c2pa.created with digital_source_type=digitalCapture; c2pa.capture with capture method, VIS code, decoded dimensions, and any provided capture context; c2pa.hash.data with the decoded image SHA-256; bonis.audio_source with the audio fingerprint), and a Knox binding. Full C2PA — manifest store, ingredient hashes, signing-cert chain — is deferred to a follow-up build.
FRE 902(13)/(14)-shape affidavit
Plain-English affidavit declaring the recording name, audio fingerprint, detected VIS, decoded mode, image dimensions and hash, anchor identifiers, predecessor hash, sequence, and verify URL. Includes the explicit disclaimer that Bonis Systems does not capture the underlying radio signal, does not retain audio bytes, does not adjudicate authorship, and does not vouch for any callsign claim. Architected to satisfy FRE 902(13) / 902(14) self-authentication — admissibility in any given matter remains a determination of the presiding court.
Anchor what was presented. Don't adjudicate, don't enforce, don't spy.
The agent reads audio that the caller presents and produces an anchored receipt. It does not capture audio, does not retain audio bytes, does not transmit any signal, does not access any third-party radio service or registry without authorization, and does not assign rights in the decoded image. Whether the audio represents a lawful transmission, whether the claimed callsign matches the operator, whether the decoded image represents a true creator's work — these are determinations reserved to lawful authority. Bonis Systems is the evidence layer underneath them, not in place of them.
Closed-loop attribution
The SSTV Decoder is the detection-side mirror of the Bonis Content Provenance Agent. A creator anchors their work at creation time (content-provenance); when that work appears in a radio-band transmission, the SSTV Decoder anchors the detection event and the decoded image hash. If the decoded image hash matches a prior content- provenance anchor, that match is independently verifiable: same SHA-256, two anchored timestamps, one creator-side and one detection- side. No central registry. No trusted intermediary. Both anchors live on the Bitcoin blockchain via OpenTimestamps and survive any individual operator going offline.
Defensive only
The Knox primitive itself is a record-only layer — no actuation, no enforcement, no offensive function. The defensive-only doctrine binds this agent the same way it binds the rest of Bonis AAM. The agent does not undertake any disruption, sabotage, or counter-action against any party. Its surface is limited to: read presented audio, demodulate, anchor, return.