Skip to content

Build interoperable full-motion-video systems

stanag4609 is an MIT-licensed, pure-Python toolkit for recorded and live STANAG 4609 motion imagery, MISB KLV metadata, synchronized audio, and ST 0903 VMTI detections.

It is designed for systems that must inspect, validate, transform, enrich, remultiplex, visualize, or fan out FMV without hiding timing or wire behavior. The dependency-free core works on arbitrary stream chunks; codec and inference runtimes stay behind optional adapters.

Current maturity

The library is production-ready for the documented complete profiles while its public API remains pre-1.0. This is not a claim of universal STANAG certification or complete STANAG 4609/MISP, ST 0601.19, ST 0903.6, or ST 1001.1 conformance. Start with the production-readiness audit, conformance matrix, and known limitations.

Standards support at a glance

“Complete” below means the edition's software-verifiable requirements are source-bound, implemented, and exercised by automated tests. It does not claim that software can prove a producer's physical measurements, security decisions, or geospatial truth, and it is not third-party certification.

Status Standards and profiles
Complete software-verifiable profile MISB ST 0102.12 Security; ST 0107.5 KLV baseline; ST 0806.4 RVT; ST 0902.8 Minimum Metadata; ST 1002.3 Range Imagery; ST 1010.3 SDCC-FLP; ST 1201.5 IMAP; ST 1204.3 MIIS Core IDs; ST 1206.1 SAR; ST 1303.2 MDAP; ST 1402.2 MPEG-TS metadata carriage; ST 1601.2 Geo-Registration; ST 1602.2 Composite Imaging; ST 1607.2 Segment/Amend
Substantial, intentionally partial NATO STANAG 4609 Ed. 5 / MISP-2019.1 overall profile; MISB ST 0601.19 (every active root item is typed, but remaining producer-truth semantics prevent a whole-standard claim); ST 0603.5 MISP time; ST 0604.6 embedded timestamps; ST 0804.4 RTP/RTCP transport; ST 0903.6 VMTI, tracks, masks, chips, and AI vocabulary; ST 1001.1 common audio; ST 1202.3 image transformations; SMPTE ST 336:2017 KLV subset; SMPTE RP 217:2001 TS branch; common H.222.0/H.262/AVC/HEVC profiles
Future or separate profiles MISB ST 0801 / ST 1107 photogrammetry; native elementary-stream RTP and RTSP; complete MXF/SDI profiles; native GStreamer element; whole-MPTS rewriting; additional uncommon codecs

See the requirement-level conformance matrix, edition and source inventory, and known limitations for the exact boundary behind each label.

  • Inspect an FMV stream


    Install the package, parse KLV incrementally, and reconstruct sparse Report-on-Change metadata.

    Quickstart

  • Transform KLV in transit


    Pass, drop, replace, or inject metadata while preserving video, audio, and other elementary streams.

    Live pipeline

  • Bring your own AI


    Correlate frames, compose sequential and parallel inference stages, and encode detections as standards-native VMTI.

    AI sidecars

  • Build a viewer


    Use the bundled player or consume the synchronized timeline and GeoJSON APIs in a custom web client.

    Web clients

  • Connect downstream tools


    Export GeoJSON or ArcGIS-compatible CSV, or preserve the standards-native MPEG-TS and KLV streams for another FMV consumer.

    Ecosystem interoperability

Install for development

git clone git@github.com:trane293/stanag4609.git
cd stanag4609
python -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev,docs]'

The published core will have no required third-party Python dependencies. Optional extras add documentation, codec, and model-runtime integrations only when an application selects them.

Choose a path

Goal Start here
Decode and validate KLV Quickstart
Diagnose an FMV file Verify and debug FMV
Edit metadata without transcoding media Live transform pipeline
Add detections from YOLO, ONNX, Triton, or custom code AI and VMTI sidecars
Create a browser interface Web clients
Use FFmpeg or GStreamer around the core FFmpeg and GStreamer
Export parallel geospatial streams GeoJSON and ecosystem interoperability
Look up classes, functions, and signatures Python API reference
Audit protocol coverage Conformance

Design promises

  • Preserve unknown wire data so a partial decoder is not a destructive one.
  • Keep live memory and latency bounded through explicit limits and backpressure.
  • Treat timing, discontinuities, malformed input, and rollover as public behavior.
  • Keep model runtimes, codecs, user interfaces, and network frameworks outside the dependency-free protocol core.
  • Make every conformance claim traceable to a named standard edition and test.