# ZOOMVTOOLS CORE KNOWLEDGE BASE
## OVERVIEW
Reusable core library crate for the motion-analysis and interpolation pipeline. This crate must remain free of `vapoursynth` dependencies; host integrations pass frame-plane slices, strides, and metadata in through the public API.
## STRUCTURE
```
crates/zoomvtools/
├── src/lib.rs # Core crate entry and re-exports
├── src/frame.rs # Host-neutral frame-plane adapters
├── src/analysis.rs # MVAnalysisData serialization and property keys
├── src/util.rs # Pixel trait, CPU gates, math, mask/fps helpers
├── src/util/ # Core utility submodules and tests
├── src/reduce/ # Reduction kernels and tests
├── src/refine/ # Subpel refinement kernels and tests
└── src/... # Core motion-analysis, SIMD, and helper modules
```
## CONVENTIONS
- No `vapoursynth` imports anywhere in this crate.
- Core algorithm modules live directly in this crate; the root plugin re-exports them instead of compiling duplicate sources.
- `frame::FramePlanes` and `frame::FramePlanesMut` are the boundary for host-owned pixel buffers.
- `analysis::MVAnalysisData` owns the serialized vector metadata format; wrapper crates handle clip/property IO.
- Root wrapper-only helpers such as `with_trace(...)` stay in the plugin crate.
## WHERE TO LOOK
| Frame coupling | `src/frame.rs`, `src/mv_frame.rs`, `src/mv_gof.rs`, `src/group_of_planes.rs`, `src/plane_of_blocks.rs` | Core frame seam |
| Metadata changes | `src/analysis.rs` | Keep byte layout compatible |
| SIMD/kernel work | `src/{sad,satd,degrain,reduce,refine,...}` | Runtime dispatch stays in core |
| Core tests | `cargo test -p zoomvtools` | Includes crate-local unit tests |