SlimeCodec Convert — CHANGELOG
===============================

v0.3.1 (2026-04-16)
--------------------
  [NEW] Variable block size (--block-size 4|8)
        - 4x4 blocks for finer ROI granularity (4x spatial resolution)
        - 8x8 remains default — best compression/quality balance
        - 4x4 recommended for text/diagram content or <=1080p
        - GUI: Block Size combo box added
  [NEW] 4x4 matrix operations (mat4x4_mul, frobenius_norm_4x4)
        - Dedicated fixed-size math for 4x4 commutator norm
        - 4x4 Pass 1 is faster than 8x8 (fewer FLOPs per block)
  [NEW] 30-day trial with hardware fingerprint lock
        - Trial begins on first launch (not build date)
        - Locked to the machine where first run
        - 7-day warning before expiration
  [CHANGE] NormMAP default mode changed to 0 (bitmask+XOR)
        - 4K: 3.6MB → 400KB (9x smaller)
        - Mode 1 (uint8-log) available via --normmap-mode 1
  [RESULT] Block size comparison (Adaptive s=0.3, CRF 23):
           test4k 4K:    8x8 -93.8%  vs  4x4 -91.6%  (visual: no diff)
           test3 1080p:  8x8 -29.4%  vs  4x4 -20.9%  (4x4 slightly less color bleed)
           test5 720p:   8x8 -60.4%  vs  4x4 -56.3%  (visual: no diff)
  [RESULT] Xiph.org CC sequences (Quality preset s=0.15, CRF 23):
           crowd_run 1080p:     -53.6%  VMAF 83.30
           park_joy 1080p:      -52.0%  VMAF 86.88
           pedestrian_area:     -57.0%  VMAF 88.29
           rush_hour:           -59.3%  VMAF 85.78
           vidyo1 720p:         -65.0%  VMAF 85.61

v0.3.0 (2026-04-15)
--------------------
  [NEW] Adaptive NormMAP strength (--adaptive, --adaptive-range)
        - Per-block strength derived from d-value
        - High-d blocks (sensitive) get lower strength (protect)
        - Low-d blocks (flat/background) get higher strength (compress)
        - range: 0.0=fixed, 0.5=mild, 1.0=max spread
  [NEW] Temporal adaptation (--temporal)
        - Per-frame strength scaling based on motion intensity
        - High-motion frames protected, low-motion frames compressed more
        - Sigmoid mapping: scale = 2.0 / (1.0 + ratio), clamped [0.5, 1.5]
  [NEW] Auto-tune (--auto-tune)
        - Automatically derive strength and adaptive range from Pass 1
        - Implies --adaptive and --temporal
  [NEW] Interlaced NormMAP scan (--interlaced, --interlace-type)
        - Checkerboard half-scan: only half the blocks computed per frame
        - ~50% faster Pass 1 with minimal quality impact
        - 3 modes: v2 spatial interpolation (default), v3 temporal
          smoothing, v4 progressive decay
  [NEW] NormMAP mode 3: GOP-aggregated bitmask (--normmap-mode 3)
        - 60-frame GOP aggregation, 11MB -> 9KB typical
  [NEW] NormMAP mode 0: XOR delta compression
  [RESULT] test5.mp4 720p30 with adaptive r=0.3 + interlaced v2:
           11.3 MB -> 5.5 MB (-51.3% bitrate)
  [RESULT] test3.mp4 1080p50 with adaptive r=0.67:
           40.9 MB -> 28.2 MB (-29.4% bitrate, VMAF 63)

v0.2.0 (2026-04-14)
--------------------
  [NEW] Windows GUI application (slimecodec-gui.exe)
        - File browser for input/output selection
        - Codec, CRF, strength, keyframe sliders
        - Real-time progress bar during encoding
  [NEW] Keyframe interval control (--keyint)
        - Specify in seconds (e.g. --keyint 2 for HLS)
        - Forces strict keyframe placement (scenecut=0)
        - Works with both H.264 and AV1
  [NEW] Audio passthrough (-c:a copy equivalent)
        - All audio streams are copied without re-encoding
  [FIX] Duration mismatch between input and output
        - Original PTS preserved from input stream
        - Output time_base matches input exactly
        - Packet duration set for correct container metadata
  [CHANGE] Project restructured to lib + bin architecture
        - Shared library (pipeline, normmap, video, qp)
        - Separate CLI and GUI binaries
        - ProgressReporter trait for extensible progress reporting

v0.1.0 (2026-04-14)
--------------------
  [NEW] Initial release
  [NEW] NormMAP commutator norm analysis (8x8 blocks)
  [NEW] ROI QP control via FFmpeg side data
        - Per-macroblock QP offset based on d-values
        - 8x8 NormMAP -> 16x16 macroblock aggregation
  [NEW] H.264 (libx264) and AV1 (libaom) support
  [NEW] Static Linux build (FFmpeg + x264 built in)
  [NEW] Windows build (FFmpeg 7.1 DLLs bundled)
  [NEW] .normmap sidecar export (3 compression modes)
  [RESULT] basketball_shoot.mp4 1080p test:
           CRF 23: 2.7 MB -> 1.4 MB (-48% bitrate)
