# Changelog ## 0.4.2 - 2026-08-03 - Fixed Unity assembly exclusion caused by duplicate legacy/package script GUIDs. - Added YAMO-calibrated, angle-aware camera translation kinematics: concentrated direction changes slow before the turn and accelerate afterward, while smooth arcs and naturally eased motion remain untouched. - Applied the kinematic pass exactly once per shot: Orbit reversals are measured in subject-relative space and other motion families in final world space. - Made the braking window C2-continuous at its outer seams, removed cumulative- minimum speed kinks, and rejected any rewrite that introduces an acceleration or jerk regression instead of chasing newly-created seam events. - Added rendered end-to-start transition scoring against the actually selected adjacent cameras, including both neighbours during selected-shot regeneration. - Hard-rejected only perceptible near-duplicate jump cuts and unbridged extreme axis crossings; screen jumps and opposing motion remain soft ranking signals. - Preserved the braking envelope around 40-degree-or-greater direction changes when editable Unity animation curves are simplified. - Bumped the packaged worker to 0.1.2 and invalidated stale candidate caches for the new transition and trajectory policies. ## 0.4.1 - 2026-08-03 - Added the UXML/USS camera-generation workflow with a compact narrow-dock layout, full preflight readiness, result-only refinement/save stages, and a compact status footer. - Fixed stale Unity-project folders being mistaken for a complete CW-AI data library; the window now validates the training index and cut model and automatically repairs the path to a complete sibling library. - Prepared the package for the Streamingle Utilities Git distribution with the frozen Windows x64 `CWCameraWorker` folder under `Tools~`; artist machines no longer need a separate Python installation. - Moved generated preparation and candidate caches out of the reference-data library and into the Unity project's writable `Library/CWAI` directory. An optional `CWAI_CACHE_ROOT` environment variable can override that location. ## 0.4.0 - 2026-08-02 - Replaced the Unity-native generation backends with the packaged `CWCameraWorker.exe` high-quality pipeline. - Added `generate`, `prepare-cache`, `version --json`, and `doctor` CLI contracts with structured progress events and cooperative cancellation. - Split generation-time data preparation from training-only dependencies; the verified Windows onedir worker is 316.54 MiB and requires no separate Python installation on artist workstations. - Kept full-Timeline and selected-shot generation, per-camera AnimationClips, curve simplification, provenance validation, and cut-correction capture in the Unity Editor workflow. - Removed the portable native runtime, exporter, generator implementation, and their dedicated tests. Existing generated results and parity reports remain importable historical artifacts. ## 0.3.5 - 2026-08-02 - Added the Unity-native Portable HQ v1 path: authored trajectory retargeting, global cut dynamic programming, random-forest sequence-beam planning, and multi-candidate safety/quality selection now run as one deterministic generation pipeline. - Materialized `unity_native_portable_hq_v1_arisa_final_pass1` as a 60-shot, 12,269-frame, 60 FPS Timeline. It contains 60 independent cameras, Animators, Animation Tracks, and AnimationClips, with zero runtime LookAt/Tracking bindings and zero template fallbacks. - Preserved hard cuts with zero ease and an intentional 1 microsecond boundary guard. The final run completed in 17.701 seconds; the isolated EditMode suite passed 161/161. - Verified byte-identical output for the same Seed. A different Seed changed the selected authored template in 35% of shots and materially changed 32.8% of frames. Real beat/mel features and the deduplicated weighted duration prior remain explicit parity gaps. - Added the experimental `작업자 카메라 기반 (Unity 내장 · 실험)` backend. It loads a portable JSON/float32 runtime bundle containing 1,381 authored camera templates and retargets them entirely inside Unity without requiring Python at generation time. - Added a content-addressed, hash-validated runtime-bundle exporter and Unity loader. The original preparation cache is trusted only during explicit export; the published runtime bundle contains no pickle or executable serialization. - Verified the initial Unity smoke run on the 12,269-frame input: 51 shots, 51 authored-template shots, zero template fallbacks, and 51 independent camera Animators. At that checkpoint the path did not yet include the high-quality cut planner, candidate retarget/re-score, or complete composition pass; Portable HQ v1 above supersedes that limitation. - Added an explicit Unity cut-correction snapshot workflow. It compares the provenance-bound generated `shots.json` with edited hard-cut clip starts and records ordered `keep/move/add/delete` operations without modifying or saving the Scene or Timeline asset. - Added causal three-shot cut context (duration, music/motion energy, beat proximity), schema-v2 closed-loop ranker training, deterministic bounded history-beam planning, v1 artifact rejection, and complete context trace provenance. The v2 model passes its no-model non-regression gate but does not yet replace the legacy cut path. - Added the 60 FPS data-driven cut planner: broad music/motion candidates, duplicate-aware authored duration prior, exact-audio soft prior, portable listwise ranker, and deterministic global DAG optimization with trace output. - Added high-quality full-generation cut-rhythm controls (Auto/Slow/Normal/Fast), while selected-shot regeneration continues to lock every existing cut. - Added source-audio SHA-256 export so the generator can reuse approved timing evidence for the same recording without copying camera trajectories. - Added a shape-preserving relative-trajectory velocity limiter. The final 67-shot Arisa composite reduced within-shot position spikes over `0.15m/frame` from `12` to `0` (`0.17551m` max to `0.11991m`) while preserving visibility, cut boundaries, every non-selected shot, and baked-aim quality. - Verified the final `12,269`-frame/67-shot/60 FPS preview in Unity with compile `0/0`, related EditMode `65/65`, and no new Console errors after Timeline import. - Added true high-quality selected-shot generation with `--only-shot-index`/`--base-generation`, skipping full-sequence planning and preserving every non-selected camera frame, shot row, cut, and Unity clip. - Added full-compatible materialized composites with base hashes and selected span provenance, plus a separate Seed-independent per-shot candidate cache. - Advanced the next base and Seed only after successful Timeline import, and rejected incompatible Native/stale bases before launching Python. - Added selected-shot ETA/cache reporting and regression coverage for paired CLI arguments, fail-closed base validation, exact preservation, and A -> B sequential regeneration; independent finite/coverage/person/aim/spike gates pass on the final Arisa composites. - Hardened base loading with exact JSON integer/numeric contracts, pre-read payload byte-size checks, and direct non-reparse payload paths. Only `selected_shot_directives.json` is accepted as an output sidecar. - Added best-effort transactional directory publication with validated staging, single-orphan-backup recovery, and fail-closed handling for ambiguous or malformed recovery state. - Preserved the legacy selection string while adding authoritative `materializedShotSeedLineage` and an identical-base-hash reproducibility scope for mixed-Seed composites. - Kept the archived Arisa `2.058s/1.293s` selected-shot benchmark and recorded a separate latest-user-base `2.489s/1.498s` result with `20/20` invariants. Final-source hit revalidation was `1.430752s` total (`0.0006751s` candidate retarget). Python is `215/215` with py_compile/Ruff passing; Unity EditMode is `59/59`, importer validation accepted `12,269` frames/52 shots/60 FPS, and compilation reported `0/0`. ## 0.3.4 - 2026-08-01 - Made Hybrid Seed deterministically select from camera candidates that pass person-safety checks and are visually distinct after final composition. - Kept the same Seed reproducible and made adjacent Seeds select different candidates whenever a shot has at least two safe, distinct candidates. - Limited variation candidates to a bounded score delta from the best safe camera and preserved the full legacy safety-rescue search when needed. - Decoupled the Seed-selected output from the deterministic sequence context, preventing later shots from converging back to the same camera. - Preserved explicit `static` direction and safety constraints; a shot may remain unchanged when only one safe, distinct candidate exists. - Clarified in the generator UI that reapplying an existing result does not generate a new candidate and therefore does not use Seed. - Distinguished full-result Seed state from a single regenerated camera, and no longer reports an applied Seed when Timeline import fails. ## 0.3.3 - 2026-08-01 - Added live generation stages, elapsed time, and a backend-specific ETA range that learns from completed timelines while keeping cache preparation separate. - Bound every generated Cinemachine camera to its own `Animator`, Animation Track, and `.anim` asset so offsets and curves can be edited per camera. - Initialized every per-camera Track Offset from its first generated pose so finite clips preserve world height instead of collapsing toward the floor. - Added Timeline clip, animation asset, and Hierarchy camera selection for regenerating exactly one generated shot while preserving all other shots. - Prevented automatically directed opening shots from becoming static unless the user explicitly requests a static shot or zero motion intensity. - Made preview scope identifiers stable across script recompiles and Editor reloads so selected-camera regeneration keeps resolving the same preview. - Removed each scoped preview asset folder atomically to prevent orphaned clips and duplicate-suffixed Timeline assets after repeated preview rebuilds. ## 0.3.2 - 2026-07-31 - Replaced the development-first generator layout with a Timeline-select and one-click generation workflow. - Hid repository paths, Python, dataset IDs, seeds, caches, and manual import controls under an advanced foldout. - Added localized optional direction controls and result-only per-camera regeneration/final-save actions. - Added a short Korean menu path while retaining the legacy menu entry. - Improved multi-song one-click selection by matching the chosen source Timeline to the freshly exported song manifest. - Added a camera-free generation-input export for Timelines containing only character motion and audio, including frame-aligned RMS/onset features. - Existing Cinemachine tracks are explicitly ignored during generation-input export; the simple workflow no longer exposes a “dataset song” selector. - Allowed Hybrid generation targets outside the training index while keeping the indexed worker-camera reference library split- and leakage-guarded. ## 0.3.1 - 2026-07-31 - Fixed multi-song Hybrid selection by distinguishing 16-hex song IDs from names. - Added explicit source `PlayableDirector` scoping for preview import, removal, and regeneration. - Made Final scene copies own independent Timeline and animation assets. - Made Native safety validation fail closed for missing/non-finite joints. - Rebased non-zero source Timeline time samples while preserving provenance. - Added complete Native seed, global direction, and directives provenance metadata. ## 0.3.0 - 2026-07-31 - Added Python-free `Native Fast` camera generation inside the Unity Editor. - Added learned `Python Hybrid Quality` generation controls and per-shot JSON directions. - Stabilized camera bodies with shot-fixed stage anchors and low-frequency follow. - Added fail-closed character-envelope framing checks and safe distance fallback. - Added per-camera animation clips and selected-shot regeneration with GUID preservation. - Added Exact, Balanced, and Editable error-bounded curve simplification presets. - Added a content-addressed Hybrid preparation-cache workflow shared across candidate seeds. ## 0.4.3 - Added a self-contained `RuntimeData~` reference bundle (263 prepared songs). - The packaged worker auto-discovers the bundle; raw CW-AI source audio and a separate checkout are no longer required for generation. - Generation caches remain project-local and writable. ## 0.4.4 - Automatically prefers bundled `RuntimeData~`, including Unity Git PackageCache installs, over stale serialized external roots.