383 lines
22 KiB
Markdown

# 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.