371 lines
21 KiB
Markdown

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