# Changelog

All notable changes to Pr3tz are documented here.

## [Unreleased]

### Changed
- **Minimum Blender version raised to 5.0** — `bl_info["blender"]` updated to `(5, 0, 0)`.
  Blender 4.x is no longer supported. Drops all legacy compatibility shims:
  - `_get_action_fcurves` now uses the Blender 5 layered Action API only (no `action.fcurves` fallback).
  - Principled BSDF shaders use Blender 5 canonical input names directly:
    `"Specular IOR Level"`, `"Transmission Weight"`, `"Coat Weight"`, `"Coat Roughness"`.
  - Removed `"Specular"` / `"Clearcoat"` / `"Transmission"` key-in-inputs guards.


## [2.0.0] — Current

### Added
- Full modular rewrite: `knot_animation.py` split into 10 focused modules under `knot_animation/`
- 20 built-in shader presets (up from 7 in 1.x)
- Per-knot material overrides — color, roughness, metallic, emission strength
- Per-knot animation rates: spin phase, revolution phase, height pulse, scale oscillation
- Smooth geometry transitions with Linear / Quadratic / Smoothstep easing
- Random playlist generator with configurable min/max ranges for every parameter
- Bake & Export operator with split-file support for distributed render farms (SheepIt)
- Blender 5.0 layered-action API support (`_get_action_fcurves` compatibility helper)
- `FitTimeline` and `FitPlaylist` operators
- Global Reactivity factor for audio-reactive animation
- `preview_resolution` / `render_resolution` split for fast viewport + quality renders
- Camera shake baked to `delta_location` keyframes during export
- Headless `align_matrix` monkey-patch for crash-free command-line rendering

### Changed
- Handler no longer uses `bpy.ops` or reads `bpy.context.space_data` — safe in all execution contexts
- Material cache keyed by preset ID — no rebuilds on every frame

## [1.x] — Single-file era

- `knot_animation.py`: procedural torus knot animation with hardcoded 10-knot config list
- 7 shader presets
- No playlist editor, no transitions, no export
