# Changelog ## 0.4.14 - 2026-08-17 - Resolved the configured CinemachineBrain from camera tracks on descendant PlayableDirectors, including Cinemachine 3 `OutputCamera` setups, so orchestration Timelines can import AI results without duplicating camera tracks on the parent Timeline. - Made AI preview cloning inactive from construction and disconnected cloned authored Cinemachine tracks and virtual cameras before playback. This prevents the authored Motion Timeline from competing with the generated Shot tracks while preserving the original scene hierarchy. This is an Editor-only hotfix; the bundled Windows worker remains 0.1.9. ## 0.4.13 - 2026-08-16 - Enforced radial distance bounds on the actual float32 camera coordinates, preventing oblique wide-shot plateaus from drifting a few micrometres past their authored safety annulus during publication. - Made a final distance postcondition failure reject only that camera candidate while preserving fail-closed handling for real generator invariants. Rebuilt the self-contained Windows worker as 0.1.9. ## 0.4.12 - 2026-08-16 - Made packaged catalog freshness checks portable across Windows Git checkouts: an exact raw hash remains authoritative, while a byte-for-byte equivalent CRLF checkout is accepted only when LF normalization reproduces the indexed hash. Content changes and Git LFS pointer files still fail closed. - Extended `CWCameraWorker doctor` to validate the packaged training index against its catalog, and pinned the release catalog and training index to LF line endings. Rebuilt the self-contained Windows worker as 0.1.8. ## 0.4.11 - 2026-08-10 - Integrated the verified YAMO dataset refresh without replacing the packaged production reference library or its default models. Dataset revisions now retain distinct runtime identities, provenance, and subject-targeting evidence instead of colliding with their base recordings. - Added fail-closed audio-aligned frame-mask handling across trajectory, sequence, cut-ranker, and cut-reference consumers. Incomplete shots and censored audio tails are excluded rather than silently becoming training or authored-cut supervision. - Hardened exact-audio cut references so independently aligned sources cannot be unioned into spurious double cuts, and expanded transition-only candidate search only when the normal safe pool cannot make both neighbouring edits. A bounded all-fail transition search now stops generation instead of publishing a known-bad edge. - Rebuilt the self-contained Windows worker as 0.1.7 from the checkpointed source with the pinned Python 3.12.13 build environment. The bundled RuntimeData~ library remains the established production baseline; research candidate models and indexes are deliberately not bundled by default. ## 0.4.10 - 2026-08-09 - Replaced the loose first-passing angular limiter with an authored-target minimum-jerk selector. The Arisa regression output keeps all 69 music-shaped cuts while angular jerk P90 falls from about 852 to 235 deg/s^3 and P99 from about 4,455 to 912 deg/s^3. - Made final float32 quaternion tracking authoritative, removed shot-entry pre-echo, added a C2 semantic-focus dead zone, and recorded explicit angular and dynamics fallback shot indices. - Hardened translation rewrites and the final radial clamp so a repair cannot hide or introduce a local acceleration/jerk seam. Intentional dolly and orbit motion remains available. - Baked position and quaternion animation as audited not-a-knot C2 curves instead of piecewise-linear or C1-only curves. The importer verifies C2 seams, 240/480 Hz motion, quaternion continuity, and the post-Unity clip curves, with adaptive key refinement and fail-closed dense C2 fallback. - Resolved the active package through `FileUtil.GetPhysicalPath` so serialized paths to an older `Library/PackageCache` revision can no longer keep running a stale worker after a package update. Valid explicit external paths are kept. - Rebuilt the self-contained Windows worker as 0.1.6 with Python 3.12.13. The clean 647-file build passes `doctor`; camera, time, and shot outputs are byte-identical to source generation for the 12,269-frame regression input. ## 0.4.9 - 2026-08-09 - Restored the authored same-audio cut prior for production generation inputs without admitting the target camera trajectory into the planner or template library. The Arisa regression song now recovers its music-shaped 69-shot cadence, while a silent-tail fallback cut is removed. - Replaced performer-screen-motion penalties with stabilized residual framing diagnostics so expressive dance motion no longer suppresses orbit, drift, lead-room, or authored camera movement. Hard person, distance, step, aim, and dynamics gates remain fail-closed. - Calibrated front-facing safety once over the full performance. Choreography turns can keep a stable stage-front camera without rewarding side or rear placement, while true 180-degree rear candidates remain rejected. - Added a versioned selection-safety contract for selected-shot regeneration, verified exact-audio reference hashes across bundled and project data roots, and deterministically deduplicated identical packaged reference copies. - Added a final-world post-clamp kinematic repair and hard audit. Distance clamping can no longer reintroduce an unbraked reversal after the YAMO deceleration/acceleration pass; all 69 regression shots pass the final post-clamp contract and Shot 66 has zero remaining abrupt reversal events. - Rebuilt the self-contained Windows worker as 0.1.5 with Python 3.12.13 in a disposable, exact-pinned environment with one-thread scientific-library limits, artifact size/file-count guards, and a distribution provenance manifest. The clean worker contains 647 files (267,608,825 bytes), passes `doctor`, and is byte-identical to source generation for camera, time, and shot outputs. ## 0.4.8 - 2026-08-09 - Replaced the unstable frame-local aim controller with a causal, feed-forward angular-velocity path. Static targets now settle without a left/right limit cycle, legal 45/80-degree-per-second pans keep their entry velocity, and abrupt changes are bounded to 90 deg/s, 360 deg/s^2, and 7,200 deg/s^3. - Added C2 position resampling, speed-adaptive C2 distance transitions, and a final distance/step audit after every trajectory transform. The final candidate gate now fails closed on missing data and checks translation jerk, screen-space p99 and one-frame impulses, and the actual post-clamp step. - Calibrated the new dynamics policy against 1,381 runtime-eligible authored shots. The 600 m/s^3 translation maximum applies only to final generated candidates; expressive authored wide/dolly templates remain available for retargeting and soft ranking. - Replaced Unity's piecewise-linear reduced position curves with velocity-aware C1 Hermite curves. Every reduced shot is audited at source times and midpoints for position error, local speed/acceleration/jerk regressions, and meaningful-motion retention; unsafe reductions automatically fall back to exact position keys for that shot only. - Rebuilt the self-contained Windows worker as 0.1.4 with the trajectory module and build-identity snapshot included. The frozen worker doctor and 196-test build suite pass without requiring Python on the artist machine. - On the 12,269-frame Arisa regression input, all 56 shots passed visibility, facing, aim, distance, step, screen-dynamics, and cut-transition checks. Worst translation jerk improved from 641.61 to 247.81 m/s^3 and worst angular jerk from 30,294.84 to 7,146.35 deg/s^3; uncached generation improved from about 124 seconds to 107 seconds. - Unity compiled with zero Camera AI errors and the package EditMode suite passed 121/121. The Balanced importer retained simplified C1 curves for 41 shots and safely selected exact position keys for the 15 shots whose reduced curves exceeded the local motion or 5 mm error contract. ## 0.4.7 - 2026-08-09 - Fixed the incomplete 6D-to-quaternion conversion that replaced every non-positive-trace rotation with a fixed 180-degree roll. This had rejected almost all authored front-camera templates and biased generation toward the actor's back. - Added torso-derived front-facing safety to candidate selection, including median alignment, severe-rear frame ratio, and longest consecutive rear run. - Made missing or non-finite front-facing audit data fail closed and improved all-candidates-rejected diagnostics with per-gate counts. - Invalidated both preparation and candidate caches because corrected template rotations affect both stages. - Rebuilt self-contained Windows worker 0.1.3 with pinned, verified runtime dependencies. The focused worker suite passes 148 tests. - On the 12,269-frame Arisa regression input, front-safety failures improved from 49/56 shots to 0/56; severe rear-facing frames fell from 72.64% to 0.18%, with a maximum per-shot run of 15 frames. ## 0.4.6 - Added a soft front-facing preference so safe candidates do not systematically place the actor's back toward the camera. - Bumped the candidate-cache logic version to invalidate stale orientation candidates. ## 0.4.5 - Rebuilt the frozen worker so portable prepared-template rotation conversion is included in the executable. ## 0.4.4 - Automatically prefers bundled `RuntimeData~`, including Unity Git PackageCache installs, over stale serialized external roots. ## 0.4.3 - Added a self-contained `RuntimeData~` reference bundle containing 263 prepared songs. - Made the packaged worker auto-discover the bundle; raw source audio and a separate CW-AI checkout are no longer required for generation. - Kept generation caches project-local and writable. ## 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.