Compare commits

..

14 Commits
v0.1.8 ... main

2450 changed files with 157063 additions and 72765 deletions

4
.gitattributes vendored
View File

@ -1,6 +1,8 @@
*.meta -whitespace *.meta -whitespace
CameraAI~/Tools~/CWCameraWorker/** -diff -whitespace CameraAI~/Tools~/CWCameraWorker/** -text -diff -whitespace
*.exe filter=lfs diff=lfs merge=lfs -text *.exe filter=lfs diff=lfs merge=lfs -text
*.dll filter=lfs diff=lfs merge=lfs -text *.dll filter=lfs diff=lfs merge=lfs -text
*.pyd filter=lfs diff=lfs merge=lfs -text *.pyd filter=lfs diff=lfs merge=lfs -text
CameraAI~/RuntimeData~/DatasetExports/**/*.npz filter=lfs diff=lfs merge=lfs -text CameraAI~/RuntimeData~/DatasetExports/**/*.npz filter=lfs diff=lfs merge=lfs -text
CameraAI~/RuntimeData~/DatasetExports/dataset_catalog.json text eol=lf
CameraAI~/RuntimeData~/reports/training_index.json text eol=lf

View File

@ -1,5 +1,182 @@
# Changelog # 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 ## 0.4.2 - 2026-08-03
- Fixed Unity assembly exclusion caused by duplicate legacy/package script GUIDs. - Fixed Unity assembly exclusion caused by duplicate legacy/package script GUIDs.
@ -203,8 +380,3 @@
- Added Exact, Balanced, and Editable error-bounded curve simplification presets. - Added Exact, Balanced, and Editable error-bounded curve simplification presets.
- Added a content-addressed Hybrid preparation-cache workflow shared across - Added a content-addressed Hybrid preparation-cache workflow shared across
candidate seeds. 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.

View File

@ -7,7 +7,7 @@
- Git 2.14 or newer available on `PATH` - Git 2.14 or newer available on `PATH`
- Git LFS installed before Unity resolves the package - Git LFS installed before Unity resolves the package
The bundled `CWCameraWorker` contains Python 3.10 and its inference The bundled `CWCameraWorker` contains Python 3.12.13 and its inference
dependencies. Do not install Python on an artist workstation for this package. dependencies. Do not install Python on an artist workstation for this package.
The worker is an onedir build: `CWCameraWorker.exe` and its `_internal` folder The worker is an onedir build: `CWCameraWorker.exe` and its `_internal` folder
must remain together. must remain together.
@ -17,7 +17,7 @@ must remain together.
In Unity Package Manager, choose **Add package from git URL** and enter: In Unity Package Manager, choose **Add package from git URL** and enter:
```text ```text
https://kindnick-git.duckdns.org/mingle/streamingle-unity-utilities.git?path=/CameraAI~#v0.1.7 https://kindnick-git.duckdns.org/mingle/streamingle-unity-utilities.git?path=/CameraAI~#v0.1.20
``` ```
The initial package download is large because the frozen Windows worker is The initial package download is large because the frozen Windows worker is
@ -26,7 +26,7 @@ it, remove the package lock entry, and add the package again.
## Reference data ## Reference data
Version 0.1.7 includes a compact, read-only `RuntimeData~` bundle with the Version 0.1.20 includes a compact, read-only `RuntimeData~` bundle with the
263 prepared reference songs, cut policy, and ranker model. An artist 263 prepared reference songs, cut policy, and ranker model. An artist
workstation does not need a separate `CW-AI` checkout or Python installation. workstation does not need a separate `CW-AI` checkout or Python installation.
If a newer access-controlled library is available, it remains an optional If a newer access-controlled library is available, it remains an optional

View File

@ -4169,37 +4169,122 @@ namespace Streamingle.Editor
{ {
var projectRoot = Directory.GetParent(Application.dataPath)?.FullName var projectRoot = Directory.GetParent(Application.dataPath)?.FullName
?? Environment.CurrentDirectory; ?? Environment.CurrentDirectory;
return AICameraCliRunner.ResolveExecutable( return ResolveCliExecutablePath(
ignoreConfigured ? string.Empty : _cliExecutable, ignoreConfigured ? string.Empty : _cliExecutable,
_cwAiRoot, _cwAiRoot,
projectRoot); projectRoot,
ResolvePhysicalPackageRoot());
}
internal static string ResolveCliExecutablePath(
string configuredExecutable,
string cwAiRoot,
string projectRoot,
string packageRoot)
{
var normalizedConfigured = TryGetFullPath(configuredExecutable);
if (!string.IsNullOrWhiteSpace(normalizedConfigured) &&
!IsCameraAiPackageCachePath(normalizedConfigured) &&
File.Exists(normalizedConfigured))
{
// A valid path outside PackageCache was explicitly selected by
// the user and must remain authoritative.
return normalizedConfigured;
}
var normalizedPackageRoot = TryGetFullPath(packageRoot);
if (!string.IsNullOrWhiteSpace(normalizedPackageRoot))
{
var packagedWorker = Path.Combine(
normalizedPackageRoot,
"Tools~",
"CWCameraWorker",
AICameraCliRunner.ExecutableName);
if (File.Exists(packagedWorker))
{
return Path.GetFullPath(packagedWorker);
}
packagedWorker = Path.Combine(
normalizedPackageRoot,
"Tools~",
AICameraCliRunner.ExecutableName);
if (File.Exists(packagedWorker))
{
return Path.GetFullPath(packagedWorker);
}
}
// Never fall back to a serialized worker or data root from an old
// Git package revision merely because Unity has not evicted that
// PackageCache directory yet.
var safeConfigured = IsCameraAiPackageCachePath(configuredExecutable)
? string.Empty
: normalizedConfigured;
var safeCwAiRoot = IsCameraAiPackageCachePath(cwAiRoot)
? string.Empty
: TryGetFullPath(cwAiRoot);
return AICameraCliRunner.ResolveExecutable(
safeConfigured,
safeCwAiRoot,
projectRoot,
normalizedPackageRoot);
} }
internal static string ResolveDefaultCwAiRoot( internal static string ResolveDefaultCwAiRoot(
string projectRoot, string projectRoot,
string configuredRoot) string configuredRoot)
{
return ResolveDefaultCwAiRoot(
projectRoot,
configuredRoot,
ResolvePhysicalPackageRoot());
}
internal static string ResolveDefaultCwAiRoot(
string projectRoot,
string configuredRoot,
string packageRoot)
{ {
var normalizedProjectRoot = string.IsNullOrWhiteSpace(projectRoot) var normalizedProjectRoot = string.IsNullOrWhiteSpace(projectRoot)
? Environment.CurrentDirectory ? Environment.CurrentDirectory
: Path.GetFullPath(projectRoot); : Path.GetFullPath(projectRoot);
var candidates = new[]
var normalizedConfigured = TryGetFullPath(configuredRoot);
if (!string.IsNullOrWhiteSpace(normalizedConfigured) &&
!IsCameraAiPackageCachePath(normalizedConfigured) &&
IsGenerationLibraryRoot(normalizedConfigured))
{
// Preserve a valid repository or data library that the user
// explicitly selected outside Unity's PackageCache.
return normalizedConfigured;
}
var candidates = new List<string>();
var normalizedPackageRoot = TryGetFullPath(packageRoot);
if (!string.IsNullOrWhiteSpace(normalizedPackageRoot))
{
candidates.Add(Path.Combine(
normalizedPackageRoot,
"RuntimeData~"));
}
// This logical package path supports embedded/local packages when
// FileUtil cannot resolve a physical path during early domain load.
candidates.Add(Path.Combine(
normalizedProjectRoot,
"Packages",
"com.mingle.cw-ai",
"RuntimeData~"));
candidates.AddRange(new[]
{ {
configuredRoot,
// Self-contained package install: RuntimeData~ is shipped
// beside the editor scripts, so artists do not need a
// separate CW-AI checkout.
Path.Combine(
normalizedProjectRoot,
"Packages",
"com.mingle.cw-ai",
"RuntimeData~"),
normalizedProjectRoot, normalizedProjectRoot,
Path.Combine( Path.Combine(
Directory.GetParent(normalizedProjectRoot)?.FullName ?? Directory.GetParent(normalizedProjectRoot)?.FullName ??
normalizedProjectRoot, normalizedProjectRoot,
"CW-AI"), "CW-AI"),
Environment.CurrentDirectory Environment.CurrentDirectory
}; });
foreach (var candidate in candidates) foreach (var candidate in candidates)
{ {
@ -4230,6 +4315,50 @@ namespace Streamingle.Editor
"CW-AI"); "CW-AI");
} }
private static string ResolvePhysicalPackageRoot()
{
try
{
return TryGetFullPath(FileUtil.GetPhysicalPath(
"Packages/com.mingle.cw-ai"));
}
catch (Exception)
{
return string.Empty;
}
}
private static bool IsCameraAiPackageCachePath(string candidate)
{
var fullPath = TryGetFullPath(candidate);
if (string.IsNullOrWhiteSpace(fullPath))
{
return false;
}
var normalized = fullPath.Replace('\\', '/');
return normalized.IndexOf(
"/Library/PackageCache/com.mingle.cw-ai@",
StringComparison.OrdinalIgnoreCase) >= 0;
}
private static string TryGetFullPath(string candidate)
{
if (string.IsNullOrWhiteSpace(candidate))
{
return string.Empty;
}
try
{
return Path.GetFullPath(candidate.Trim());
}
catch (Exception)
{
return string.Empty;
}
}
private static string ResolveProjectCacheRoot() private static string ResolveProjectCacheRoot()
{ {
var projectRoot = Directory.GetParent(Application.dataPath)?.FullName var projectRoot = Directory.GetParent(Application.dataPath)?.FullName
@ -4297,26 +4426,32 @@ namespace Streamingle.Editor
currentRoot = string.Empty; currentRoot = string.Empty;
} }
} }
if (string.Equals( var previousRoot = _cwAiRoot;
currentRoot.TrimEnd('\\', '/'), var repairedLibraryRoot = !string.Equals(
resolvedRoot.TrimEnd('\\', '/'), currentRoot.TrimEnd('\\', '/'),
resolvedRoot.TrimEnd('\\', '/'),
StringComparison.OrdinalIgnoreCase);
if (repairedLibraryRoot)
{
_cwAiRoot = resolvedRoot;
AppendLog(
"[library-root-auto-repair] " +
$"{previousRoot} -> {_cwAiRoot}");
}
var previousExecutable = _cliExecutable;
var resolvedExecutable = ResolveCliExecutable();
if (!string.Equals(
TryGetFullPath(previousExecutable),
TryGetFullPath(resolvedExecutable),
StringComparison.OrdinalIgnoreCase)) StringComparison.OrdinalIgnoreCase))
{ {
return false; _cliExecutable = resolvedExecutable;
AppendLog(
"[worker-path-auto-repair] " +
$"{previousExecutable} -> {_cliExecutable}");
} }
return repairedLibraryRoot;
var previousRoot = _cwAiRoot;
_cwAiRoot = resolvedRoot;
if (string.IsNullOrWhiteSpace(_cliExecutable) ||
!File.Exists(_cliExecutable))
{
_cliExecutable = ResolveCliExecutable(true);
}
AppendLog(
"[library-root-auto-repair] " +
$"{previousRoot} -> {_cwAiRoot}");
return true;
} }
private static string ExistingDirectoryOrFallback( private static string ExistingDirectoryOrFallback(

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,10 @@ namespace Streamingle.Editor
private const string MotionDirectorName = "Motion"; private const string MotionDirectorName = "Motion";
private const string SchemaVersion = "1.3"; private const string SchemaVersion = "1.3";
private const string GenerationInputKind = "generation_input"; private const string GenerationInputKind = "generation_input";
internal const string SourceFingerprintSchema =
"cw-ai-camera-source-v2-dependency-hash";
internal const string LegacySourceFingerprintSchema =
"cw-ai-camera-source-v1-semantic";
private const string GenerationInputDirectoryPrefix = private const string GenerationInputDirectoryPrefix =
"GenerationInput_60fps_"; "GenerationInput_60fps_";
@ -490,6 +494,7 @@ namespace Streamingle.Editor
cameraSamplingPolicy = cameraSamplingPolicy =
"Per authored Cinemachine track; muted variants included by batch; " + "Per authored Cinemachine track; muted variants included by batch; " +
"procedural CameraState sampled deterministically; overlaps blended.", "procedural CameraState sampled deterministically; overlaps blended.",
sourceFingerprintSchema = SourceFingerprintSchema,
sourceFingerprint = sourceFingerprint, sourceFingerprint = sourceFingerprint,
discoveredCameraTrackCount = discoveredCameraTrackCount =
songs.Count + skippedCameraTracks.Count, songs.Count + skippedCameraTracks.Count,
@ -1882,6 +1887,34 @@ namespace Streamingle.Editor
} }
internal static string ComputeSceneCameraSourceFingerprint(Scene scene) internal static string ComputeSceneCameraSourceFingerprint(Scene scene)
{
return ComputeSceneCameraSourceFingerprint(
scene,
out _);
}
internal static string ComputeSceneCameraSourceFingerprint(
Scene scene,
out string legacyFingerprint)
{
legacyFingerprint =
ComputeLegacySceneCameraSourceFingerprint(scene);
var dependencyRecords = AssetDatabase
.GetDependencies(scene.path, true)
.Where(IsCameraSourceDependency)
.Select(assetPath =>
assetPath.Replace('\\', '/') + "|" +
AssetDatabase
.GetAssetDependencyHash(assetPath)
.ToString())
.ToArray();
return ComposeSceneCameraSourceFingerprint(
legacyFingerprint,
dependencyRecords);
}
internal static string ComputeLegacySceneCameraSourceFingerprint(
Scene scene)
{ {
var lines = new List<string>(); var lines = new List<string>();
var directors = Resources.FindObjectsOfTypeAll<PlayableDirector>() var directors = Resources.FindObjectsOfTypeAll<PlayableDirector>()
@ -1935,6 +1968,139 @@ namespace Streamingle.Editor
return string.Concat(bytes.Select(item => item.ToString("x2"))); return string.Concat(bytes.Select(item => item.ToString("x2")));
} }
internal static string ComposeSceneCameraSourceFingerprint(
string semanticFingerprint,
IEnumerable<string> dependencyRecords)
{
if (string.IsNullOrWhiteSpace(semanticFingerprint))
{
throw new ArgumentException(
"A semantic source fingerprint is required.",
nameof(semanticFingerprint));
}
var records = (dependencyRecords ?? Array.Empty<string>())
.Where(record => !string.IsNullOrWhiteSpace(record))
.Select(record => record.Trim().Replace('\\', '/'))
.Distinct(StringComparer.Ordinal)
.OrderBy(record => record, StringComparer.Ordinal);
var payload = string.Join(
"\n",
new[]
{
"schema|" + SourceFingerprintSchema,
"semantic|" + semanticFingerprint.Trim()
}.Concat(records.Select(record => "dependency|" + record)));
using var sha256 = SHA256.Create();
var bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(payload));
return string.Concat(bytes.Select(item => item.ToString("x2")));
}
internal static bool TryMatchSceneCameraSourceFingerprint(
string storedSchema,
string storedFingerprint,
string currentStrongFingerprint,
string currentLegacyFingerprint,
out bool legacyFingerprintAccepted,
out string error)
{
legacyFingerprintAccepted = false;
if (string.IsNullOrWhiteSpace(storedFingerprint))
{
error = "The manifest source fingerprint is missing.";
return false;
}
if (string.IsNullOrWhiteSpace(storedSchema) ||
string.Equals(
storedSchema,
LegacySourceFingerprintSchema,
StringComparison.Ordinal))
{
if (!string.Equals(
storedFingerprint,
currentLegacyFingerprint,
StringComparison.Ordinal))
{
error =
"The loaded scene legacy semantic fingerprint does " +
"not match the manifest.";
return false;
}
legacyFingerprintAccepted = true;
error = string.Empty;
return true;
}
if (!string.Equals(
storedSchema,
SourceFingerprintSchema,
StringComparison.Ordinal))
{
error =
$"Unsupported source fingerprint schema '{storedSchema}'.";
return false;
}
if (!string.Equals(
storedFingerprint,
currentStrongFingerprint,
StringComparison.Ordinal))
{
error =
"The loaded scene strong dependency fingerprint does " +
"not match the manifest.";
return false;
}
error = string.Empty;
return true;
}
private static bool IsCameraSourceDependency(string assetPath)
{
if (string.IsNullOrWhiteSpace(assetPath))
{
return false;
}
switch (Path.GetExtension(assetPath).ToLowerInvariant())
{
case ".unity":
case ".playable":
case ".anim":
case ".prefab":
case ".controller":
case ".overridecontroller":
case ".mask":
case ".fbx":
case ".dae":
case ".obj":
case ".blend":
case ".wav":
case ".mp3":
case ".flac":
case ".ogg":
return true;
case ".asset":
var assetType =
AssetDatabase.GetMainAssetTypeAtPath(assetPath);
var fullName = assetType?.FullName ?? string.Empty;
return assetType != null &&
(typeof(TimelineAsset).IsAssignableFrom(assetType) ||
typeof(AnimationClip).IsAssignableFrom(assetType) ||
typeof(RuntimeAnimatorController)
.IsAssignableFrom(assetType) ||
typeof(AvatarMask).IsAssignableFrom(assetType) ||
fullName.StartsWith(
"Unity.Cinemachine.",
StringComparison.Ordinal));
default:
return false;
}
}
internal static bool TryComputeGenerationInputSourceFingerprint( internal static bool TryComputeGenerationInputSourceFingerprint(
PlayableDirector sourceDirector, PlayableDirector sourceDirector,
out string fingerprint, out string fingerprint,
@ -3392,6 +3558,7 @@ namespace Streamingle.Editor
public string rootLayout; public string rootLayout;
public string audioFeatureLayout; public string audioFeatureLayout;
public string cameraSamplingPolicy; public string cameraSamplingPolicy;
public string sourceFingerprintSchema;
public string sourceFingerprint; public string sourceFingerprint;
public int discoveredCameraTrackCount; public int discoveredCameraTrackCount;
public int exportedCameraTrackCount; public int exportedCameraTrackCount;

View File

@ -16,7 +16,7 @@ Cinemachine Track이나 기존 카메라 애니메이션은 필요하지 않으
Unity Package Manager의 `Add package from git URL`에는 다음 주소를 사용할 수 Unity Package Manager의 `Add package from git URL`에는 다음 주소를 사용할 수
있습니다. 있습니다.
`https://kindnick-git.duckdns.org/mingle/streamingle-unity-utilities.git?path=/CameraAI~#v0.1.7` `https://kindnick-git.duckdns.org/mingle/streamingle-unity-utilities.git?path=/CameraAI~#v0.1.20`
배포 패키지에는 Windows x64용 `CWCameraWorker` 폴더 전체가 포함됩니다. 배포 패키지에는 Windows x64용 `CWCameraWorker` 폴더 전체가 포함됩니다.
Python은 따로 설치하지 않아도 되지만, Git 패키지의 대용량 바이너리를 받으려면 Python은 따로 설치하지 않아도 되지만, Git 패키지의 대용량 바이너리를 받으려면
@ -24,10 +24,11 @@ Unity를 열기 전에 Git과 Git LFS를 설치해야 합니다. Worker는 단
아니므로 `CWCameraWorker.exe`와 같은 폴더의 `_internal` 내용을 함께 유지해야 아니므로 `CWCameraWorker.exe`와 같은 폴더의 `_internal` 내용을 함께 유지해야
합니다. 합니다.
카메라 생성에 필요한 사내 참조 카메라·모션 데이터는 권한이 있는 `CW-AI` 카메라 생성에 필요한 준비된 참조 카메라·모션 데이터와 컷 모델은 패키지의
데이터 루트에서 읽습니다. 해당 데이터는 이 유틸리티 패키지에 포함되지 않습니다. 읽기 전용 `RuntimeData~`에 포함됩니다. 별도의 `CW-AI` 체크아웃은 필요하지
다른 PC에서는 `CWAI_ROOT` 환경 변수, Unity 프로젝트 옆의 `CW-AI` 폴더 또는 않습니다. 더 최신의 권한 제어 데이터가 있다면 `CWAI_ROOT` 환경 변수, Unity
생성 창의 `고급 · 진단 > 참조 데이터 루트` 중 하나로 위치를 지정합니다. 프로젝트 옆의 `CW-AI` 폴더 또는 생성 창의
`고급 · 진단 > 참조 데이터 루트`에서 선택적으로 덮어쓸 수 있습니다.
상세 설치 절차는 `Documentation~/EXTERNAL_INSTALLATION.md`를 참고하세요. 상세 설치 절차는 `Documentation~/EXTERNAL_INSTALLATION.md`를 참고하세요.
참조 데이터는 읽기 전용이어도 됩니다. 반복 생성 캐시는 기본적으로 현재 Unity 참조 데이터는 읽기 전용이어도 됩니다. 반복 생성 캐시는 기본적으로 현재 Unity
프로젝트의 `Library/CWAI`에 저장되며, 필요하면 `CWAI_CACHE_ROOT` 환경 변수로 프로젝트의 `Library/CWAI`에 저장되며, 필요하면 `CWAI_CACHE_ROOT` 환경 변수로

View File

@ -91,7 +91,8 @@
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"audioFile": "audio_source.wav", "audioFile": "audio_source.wav",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "fcfdb8705a1f54e443d81058a6d796b3aa77defdf32fdcb244c4a6c8cfdf2ac8"
}, },
{ {
"songName": "밤하늘의 별을", "songName": "밤하늘의 별을",
@ -120,7 +121,8 @@
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"audioFile": "audio_source.wav", "audioFile": "audio_source.wav",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "5c45856ebc36cf245526fb484252a8c831c79ecdfb447094864de321201fb4ba"
}, },
{ {
"songName": "서방님과의러브", "songName": "서방님과의러브",
@ -149,7 +151,8 @@
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"audioFile": "audio_source.mp3", "audioFile": "audio_source.mp3",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "c9785ce3e6d9c81b29ecab48b102b103a0f87d2bdb275f56f0a0d74f216c415b"
}, },
{ {
"songName": "오르트구름", "songName": "오르트구름",
@ -178,7 +181,8 @@
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"audioFile": "audio_source.wav", "audioFile": "audio_source.wav",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "ed88db0a3cec7c7fd157f9a352c9c39dc6ea2f2903b96040bd7448fbde311dbe"
}, },
{ {
"songName": "파도혁명", "songName": "파도혁명",
@ -207,7 +211,8 @@
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"audioFile": "audio_source.wav", "audioFile": "audio_source.wav",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "927a01a0359165d530776f0cd496c1f1bf2dc307e4c5a5e051fc5e5b8dc380f5"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -106,7 +106,8 @@
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"audioFile": "audio_source.mp3", "audioFile": "audio_source.mp3",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "fe7aec63ef44d8618b72d5b1e8ee495a1cbb7055ccaf712b502993f4dd6e2a11"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f64ca5c7a24d3de5c49c87c5b44943fc09bc089a890c63cee65c84bb56a9d054"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dd2e8c14513dd71fca97901d2709ebd64df656b87b4cec171ce3053dc858a5fd"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f64ca5c7a24d3de5c49c87c5b44943fc09bc089a890c63cee65c84bb56a9d054"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "1a846b5ba37a1f70ccdbcaeb2766edbd45047151ed171e1e41cd9ca73c9f5504"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -108,7 +108,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2f16e6489f0bcbb31c180a08f859484b8a785ae5f0edcd7d9ea7e8dd31949252"
}, },
{ {
"songName": "찐찐찐찐찐최_종 - Camera 02 (Cinemachine Track)", "songName": "찐찐찐찐찐최_종 - Camera 02 (Cinemachine Track)",
@ -142,7 +143,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2f16e6489f0bcbb31c180a08f859484b8a785ae5f0edcd7d9ea7e8dd31949252"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2563b7ce20039202767188d1498e5e6da4c234edc67ac2d3e1f8673c29c5c7ad"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "38b893e16779aa4c74afb23ae4bf774c589183147d9b2daada6e01ed9b99070e"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dd2e8c14513dd71fca97901d2709ebd64df656b87b4cec171ce3053dc858a5fd"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "88146db25f8478fecd3e5a757a9485d5576e54c18df792346c74888bb6452db3"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dd2e8c14513dd71fca97901d2709ebd64df656b87b4cec171ce3053dc858a5fd"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "a70f91f681aa4ce6b2a67aa82dda93ebad97c9c4c664e6b81ad8a430766e13a7"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2563b7ce20039202767188d1498e5e6da4c234edc67ac2d3e1f8673c29c5c7ad"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 02 (Cinemachine Track (1))", "songName": "간바레 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 03 (Cinemachine Track (1))", "songName": "간바레 - Camera 03 (Cinemachine Track (1))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 02 (Cinemachine Track (1))", "songName": "간바레 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 03 (Cinemachine Track (1))", "songName": "간바레 - Camera 03 (Cinemachine Track (1))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "3b6cce1f2ca7edba67aa736dae03bb84629b6acd38dd304af647d56a4435b20c"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "0e9ebaf131a7f091af6f3e812fef352ea863aea27a907ad283431a82505d6b98"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f64ca5c7a24d3de5c49c87c5b44943fc09bc089a890c63cee65c84bb56a9d054"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "6f1a9ba1fdd357aaf062a54a3d1c2b51a89f5cc8a510c2a451bb81e6d7d788ae"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "23d62a79fa756f059995a46f32cf1d1d4b7009ee262535fada5078f1f4a6b885"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 02 (Cinemachine Track (1))", "songName": "간바레 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 03 (Cinemachine Track (1))", "songName": "간바레 - Camera 03 (Cinemachine Track (1))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
}, },
{ {
"songName": "모시모시", "songName": "모시모시",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
}, },
{ {
"songName": "모시모시", "songName": "모시모시",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "4d30be4f0782798fe2b6e1f964a34b272227dc2f3cf052e708d01c0b8b44092c"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "39b496e641c61d92b9a753d9c10ec4f62bd7a3880eeb631163aa982499d76754"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "c3f5042d894e2e75e485f95aff3b032aed67f475372b56da40a15477e8813110"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "c3f5042d894e2e75e485f95aff3b032aed67f475372b56da40a15477e8813110"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2563b7ce20039202767188d1498e5e6da4c234edc67ac2d3e1f8673c29c5c7ad"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 02 (Cinemachine Track (1))", "songName": "간바레 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 03 (Cinemachine Track (1))", "songName": "간바레 - Camera 03 (Cinemachine Track (1))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8ffe39bf7e261f2c6cbe3d0efcd3934a731c449ad214137ce58fa7132ac26d09"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -108,7 +108,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "a58325243df8dcb67d95a2c4a0abfefbad56fe0649e4d543e7f8ad96519c5a28"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "3728cc8646511eaab803852668ae7293bf13cf6060f934968ee6971a4a870af1"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "a58325243df8dcb67d95a2c4a0abfefbad56fe0649e4d543e7f8ad96519c5a28"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "21134c4b0a5db0ba365874b537990a59629e26754806db5fabf594297f2c1a8f"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "a58325243df8dcb67d95a2c4a0abfefbad56fe0649e4d543e7f8ad96519c5a28"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "878160795903626fb2296b62b54d5ed6007a8515bfc97f049375c63b08aa6aec"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f64ca5c7a24d3de5c49c87c5b44943fc09bc089a890c63cee65c84bb56a9d054"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "ec3ea7631f181acd4391a9c3f344e877f5d52a151c15293b05fa1b600211912d"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dd2e8c14513dd71fca97901d2709ebd64df656b87b4cec171ce3053dc858a5fd"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f33d7b8c0e53ef05863ab2c4bf7cfd85179fc65538c0a79ba31f9e66a5788197"
}, },
{ {
"songName": "골반통신 - Camera 02 (Cinemachine Track (1))", "songName": "골반통신 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f33d7b8c0e53ef05863ab2c4bf7cfd85179fc65538c0a79ba31f9e66a5788197"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dd2e8c14513dd71fca97901d2709ebd64df656b87b4cec171ce3053dc858a5fd"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "26e338a01816e0a2f91fa01d51db0ab56fe5051242d06618f66ab9db8a5180c6"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2ce378fb3bb7a648c02318b2d541bb1c12ebbd9ea62a006f528c6474106d0594"
}, },
{ {
"songName": "에코챌린지 - Camera 02 (Cinemachine Track) [muted]", "songName": "에코챌린지 - Camera 02 (Cinemachine Track) [muted]",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2ce378fb3bb7a648c02318b2d541bb1c12ebbd9ea62a006f528c6474106d0594"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8d63b00244a21e67c66cc0e60cd0f2cd5c97759bb45d0aa6228683f8012cfbe6"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "18189bd0ed3fc215cfc28751528067242de81d5f60b44de9447da9a09bb6bb9a"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "e9271a7d56330252f3f0691fae567c467bf9702d9b067471c9d56eab71cf77e6"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "ba21343a8003056ddff149c52b876a4e74c0386b5761363bb68e91e437ff9bd4"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "21134c4b0a5db0ba365874b537990a59629e26754806db5fabf594297f2c1a8f"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "21134c4b0a5db0ba365874b537990a59629e26754806db5fabf594297f2c1a8f"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8ae720f39e3639a7e7ab220cfc058b18704f6f42794c2056ac8cd92f0c4b5c4a"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "1a846b5ba37a1f70ccdbcaeb2766edbd45047151ed171e1e41cd9ca73c9f5504"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "b510ab572586558a61b5b55836c8bc0692e4ac48fdf0edeadaf42361156dff09"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f64ca5c7a24d3de5c49c87c5b44943fc09bc089a890c63cee65c84bb56a9d054"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "a9b2463d2132cfb74bdd3b4afceb24a867d0089fde8a603f2e2e5730e3f63eed"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "1a846b5ba37a1f70ccdbcaeb2766edbd45047151ed171e1e41cd9ca73c9f5504"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "ec3ea7631f181acd4391a9c3f344e877f5d52a151c15293b05fa1b600211912d"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "eee74e1d2377d5d4fe070f70c1a182329489f3e4081b83b6b47a705e26d5a30a"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "3728cc8646511eaab803852668ae7293bf13cf6060f934968ee6971a4a870af1"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "1a846b5ba37a1f70ccdbcaeb2766edbd45047151ed171e1e41cd9ca73c9f5504"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "1252b8c4c9617b9d8a53e2c5f08bd5281878fd72ff0d8822b168602563489b1a"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "88146db25f8478fecd3e5a757a9485d5576e54c18df792346c74888bb6452db3"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 02 (Cinemachine Track (1))", "songName": "간바레 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 03 (Cinemachine Track (1))", "songName": "간바레 - Camera 03 (Cinemachine Track (1))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "ce23a6e59a62b7d9a4a8e95b055309dcd50e776774843c0d77a1fd1a181077c2"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "0348fec90213920c6ce7a50f42235892d8890fc415c63924ce9940d6ac15976d"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dbe206e23b87566f1418080ca9c7d1f5d6e5f4ddfd2e348a7489f22c37b56494"
}, },
{ {
"songName": "영물이다", "songName": "영물이다",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "d203dfd34e831296a270826381e16de8e80d93640ad1de1ef0ea597dc5ab055e"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 02 (Cinemachine Track (1))", "songName": "간바레 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 03 (Cinemachine Track (1))", "songName": "간바레 - Camera 03 (Cinemachine Track (1))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "e8b6cbda716d842fd36a27f3f87bdbaf6705ae98aad24572576653ea0ca59ac7"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2fa4a8494a320f9aa28e35c258e5fefd9966cfab14f32ee2c093fdf4bf322004"
}, },
{ {
"songName": "솜주먹 1인 아이돌 수정 4 - Camera 02 (Cinemachine Track)", "songName": "솜주먹 1인 아이돌 수정 4 - Camera 02 (Cinemachine Track)",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "2fa4a8494a320f9aa28e35c258e5fefd9966cfab14f32ee2c093fdf4bf322004"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "1a846b5ba37a1f70ccdbcaeb2766edbd45047151ed171e1e41cd9ca73c9f5504"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 02 (Cinemachine Track (1))", "songName": "간바레 - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
}, },
{ {
"songName": "간바레 - Camera 03 (Cinemachine Track (1))", "songName": "간바레 - Camera 03 (Cinemachine Track (1))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c38a6c8dabc48331f0fe79fd28cd947a8abe38a56dcda659a899e3211c58c35"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8d63b00244a21e67c66cc0e60cd0f2cd5c97759bb45d0aa6228683f8012cfbe6"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "6b80d66f31a95706712754f6f9b4f9f9b617bb8df3d8ebfb53f08aa4dfac2900"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "639bda53142bda2776d0aeab8267fa805956664ed0a6c22efb7ed0984aa64bc9"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "d8f1b2870af9dd0dc84d4cfdde6676222a91fe11bbbbc146b9e4f23cc9f7031f"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "31bab87e2b159093d756afbdee6f6ed949a19b434763599530a877f7cbca1220"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "4c3b91090a7985f54695be7eb3fc57d754a020022aa14ce9b107f09668e583e4"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "e7dc2abeb62a9855cee1c0fcbe6ceef5795e967680180ad82364a7d7942683fe"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -103,7 +103,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "8c5e7a7c47d275081004d81613113569473ecd5953223ff691acf252db82aba9"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "865f7a756f8ab17651e8a42d1aa610d58f8b20818b85a54a3dcca74d2db0933b"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "a8c054acc80a470c50affcdf1860c9c38eb60b530f063a3d8ee38cc4d0dfd082"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "1252b8c4c9617b9d8a53e2c5f08bd5281878fd72ff0d8822b168602563489b1a"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "f64ca5c7a24d3de5c49c87c5b44943fc09bc089a890c63cee65c84bb56a9d054"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dea055a2fd9b84950ed6f325acdb39b2a581c015c4d1c7ee9dd8a24d77248aca"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "ce23a6e59a62b7d9a4a8e95b055309dcd50e776774843c0d77a1fd1a181077c2"
}, },
{ {
"songName": "Two - Camera 02 (Cinemachine Track (1))", "songName": "Two - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "ce23a6e59a62b7d9a4a8e95b055309dcd50e776774843c0d77a1fd1a181077c2"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dc47e19ed622e4e834145f43ca0f60d7fc7837a519d8c655f38f00e2d3fea830"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "5bab7f5f9937ad2dfa5035c62c4ea8760dfed66231f5255092614956159e7f6e"
}, },
{ {
"songName": "AiScReam - Camera 02 (Cinemachine Track (1))", "songName": "AiScReam - Camera 02 (Cinemachine Track (1))",
@ -135,7 +136,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "5bab7f5f9937ad2dfa5035c62c4ea8760dfed66231f5255092614956159e7f6e"
}, },
{ {
"songName": "AiScReam - Camera 03 (Cinemachine Track (2))", "songName": "AiScReam - Camera 03 (Cinemachine Track (2))",
@ -169,7 +171,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "5bab7f5f9937ad2dfa5035c62c4ea8760dfed66231f5255092614956159e7f6e"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

View File

@ -101,7 +101,8 @@
"timeFile": "time.f64", "timeFile": "time.f64",
"shotsFile": "shots.json", "shotsFile": "shots.json",
"previewFile": "preview.csv", "previewFile": "preview.csv",
"preparedFile": "prepared_v1.npz" "preparedFile": "prepared_v1.npz",
"audioFingerprint": "dd2e8c14513dd71fca97901d2709ebd64df656b87b4cec171ce3053dc858a5fd"
} }
], ],
"portablePreparedSchemaVersion": "1" "portablePreparedSchemaVersion": "1"

Some files were not shown because too many files have changed in this diff Show More