SlimeCodec Convert — Changelog
==============================

v0.3.3-dev (2026-05-06, in progress)
------------------------------------

Major changes
- **Unified codec switch**: new `--output-codec h264|av1` flag.
  - `h264` → libx264 (default, NormMAP ROI fully effective).
  - `av1`  → libsvtav1 (research preview, plain SVT-AV1 — NormMAP ROI
    dispatch via native SVT-AV1 ROI map planned for v0.4).
  - new `--av1-preset` flag (0=slowest/best..13=fastest, default 8).
- **Trial-mode watermark** (always on in v0.3.3 — license activation
  is deferred to v0.4).
  - Burns "SLIMECODEC TRIAL" text + Javatel logo into the Y plane of
    every encoded frame, bottom-right corner, ~5% of short edge.
  - 8x8 bitmap font (uppercase Latin + digits + space/dot/dash/slash),
    self-contained — no external font dependency.
  - Logo: 80x32 pre-rendered grayscale, embedded via include_bytes!.
  - Cannot be removed without re-encoding the output.
- **Trial state hardening (offline-only, no license server yet)**:
  - Multi-anchor: state is now mirrored to a SECOND location
    (`%PROGRAMDATA%\Javatel\SlimeCodec\anchor.dat` on Windows,
    `/var/tmp/.slimecodec_anchor.dat` on Linux) in addition to the
    existing `~/.slimecodec/license_v2.dat`.
  - Cross-check: both anchors must agree on first_install (exact),
    last_seen (within 1 day), usage_count (within 5 runs). Disagreement
    → tampering detected, immediate trial expiration.
  - OS file mtime anchor: max(kernel32.dll mtime, /etc/os-release
    mtime, etc.) is treated as a forward-only floor for "current time".
    Combined with last_seen for rollback detection.
  - Both anchors are rewritten on every successful run.

Compatibility
- Existing v0.3.2 trial state (`license_v2.dat`) is preserved and
  recognized; the secondary anchor will be created on first v0.3.3
  run.
- v1 (`install.dat`) migration path retained.
- Windows build uses the same vcpkg + MSVC pipeline as v0.3.2
  (see BUILD_WINDOWS.md). Bundled DLL list unchanged.
- GUI (slimecodec-gui) builds with `--features gui`.

Deferred to v0.3.4 / v0.4
- Native SVT-AV1 ROI-map-file dispatch when --output-codec=av1
  (currently AV1 path runs plain libsvtav1 without NormMAP ROI).
- License server activation (3-hop Ed25519 flow): cf.
  project_slimecodec_v033_plan.md memory.
- Logo bitmap variants per resolution (currently single 80x32 raw).
- Output metadata `trial-output=1` tag for trial-output identification
  after watermark removal attempts.

Known limitations
- `--output-codec av1` does not yet apply NormMAP bit allocation
  (libsvtav1 FFmpeg wrapper ignores ROI side data). Output is plain
  SVT-AV1; smaller files come from libsvtav1's own efficiency, not
  from NormMAP.
- Watermark scaling is content-aware (5% of short edge) but does not
  inspect content luminance — readability on extreme white/black
  scenes may need manual tuning.

v0.3.2 (2026-05-04)
-------------------
- Keyframe interval bug fix (--keyint kf=1 → 6.07 MB / kf=30 → 5.33 MB).
- Production NormH.264 / NormAV1 site split.
- Trial protection v2: XOR-encrypted state, FNV1a integrity tag,
  HW-derived key, last_seen rollback detection, usage_count cap.

v0.3.1 (2026-05-04)
-------------------
- AVX2 SIMD + std::thread Pass 1 (-40% wall, 4K).
- Auto-tune (rev2 balanced default).
