@osmo.inc/cli-linux-arm64 0.1.23 → 0.1.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/studio.js +5058 -930
- package/package.json +1 -1
- package/release.json +32 -32
- package/runtime/apps/native/tools/compile.mjs +22 -4
- package/runtime/packages/render-protocol/src/film-catalog.json +2543 -0
- package/runtime/packages/render-protocol/src/film-resources.mjs +91 -0
- package/runtime/packages/render-protocol/src/film-store.node.mjs +220 -0
- package/runtime/packages/scene/scripts/sync-film.mjs +8 -0
- package/runtime/packages/scene/scripts/validate-strict.mjs +14 -4
- package/runtime/packages/scene/scripts/verify-export-resolution.mjs +67 -0
- package/runtime/packages/scene/scripts/verify-film.mjs +66 -0
- package/runtime/packages/scene/src/effect-schemas.d.mts +246 -0
- package/runtime/packages/scene/src/effect-schemas.mjs +136 -0
- package/runtime/packages/scene/src/effects.ts +23 -6
- package/runtime/packages/scene/src/elements.ts +15 -3
- package/runtime/packages/scene/src/evaluate.ts +88 -12
- package/runtime/packages/scene/src/film-catalog.generated.ts +3 -0
- package/runtime/packages/scene/src/film.ts +39 -0
- package/runtime/packages/scene/src/index.ts +6 -2
- package/runtime/packages/scene/src/knob-schema.ts +5 -2
- package/runtime/packages/scene/src/metadata.d.mts +2 -1
- package/runtime/packages/scene/src/metadata.mjs +4 -4
- package/runtime/packages/scene/src/motion-blur.ts +30 -0
- package/src/starter/scene.tsx +1 -1
- package/studio/src/app.css +1 -1
- package/studio/src/app.js +197 -179
- package/studio/src/engine_bg.wasm +0 -0
- package/studio/src/preview-worker.js +33 -0
- package/studio/src/stretch-worklet-Z4ADHTIR.mjs +1 -0
- package/third-party/braw/BlackmagicRawAPI.h +1137 -0
- package/third-party/braw/README.md +7 -0
- package/third-party/cargo/block-buffer@0.10.4/Cargo.toml +32 -0
- package/third-party/cargo/block-buffer@0.10.4/LICENSE-APACHE +201 -0
- package/third-party/cargo/block-buffer@0.10.4/LICENSE-MIT +25 -0
- package/third-party/cargo/cc@1.4.5/Cargo.toml +89 -0
- package/third-party/cargo/cc@1.4.5/LICENSE-APACHE +201 -0
- package/third-party/cargo/cc@1.4.5/LICENSE-MIT +25 -0
- package/third-party/cargo/cpufeatures@0.2.17/Cargo.toml +71 -0
- package/third-party/cargo/cpufeatures@0.2.17/LICENSE-APACHE +201 -0
- package/third-party/cargo/cpufeatures@0.2.17/LICENSE-MIT +25 -0
- package/third-party/cargo/crypto-common@0.1.7/Cargo.toml +62 -0
- package/third-party/cargo/crypto-common@0.1.7/LICENSE-APACHE +201 -0
- package/third-party/cargo/crypto-common@0.1.7/LICENSE-MIT +25 -0
- package/third-party/cargo/digest@0.10.7/Cargo.toml +70 -0
- package/third-party/cargo/digest@0.10.7/LICENSE-APACHE +201 -0
- package/third-party/cargo/digest@0.10.7/LICENSE-MIT +25 -0
- package/third-party/cargo/find-msvc-tools@0.1.12/Cargo.toml +49 -0
- package/third-party/cargo/find-msvc-tools@0.1.12/LICENSE-APACHE +201 -0
- package/third-party/cargo/find-msvc-tools@0.1.12/LICENSE-MIT +25 -0
- package/third-party/cargo/generic-array@0.14.7/Cargo.toml +75 -0
- package/third-party/cargo/generic-array@0.14.7/LICENSE +21 -0
- package/third-party/cargo/sha2@0.10.9/Cargo.toml +90 -0
- package/third-party/cargo/sha2@0.10.9/LICENSE-APACHE +201 -0
- package/third-party/cargo/sha2@0.10.9/LICENSE-MIT +27 -0
- package/third-party/cargo/shlex@2.0.1/Cargo.toml +51 -0
- package/third-party/cargo/shlex@2.0.1/LICENSE-APACHE +13 -0
- package/third-party/cargo/shlex@2.0.1/LICENSE-MIT +21 -0
- package/third-party/cargo/typenum@1.20.1/Cargo.toml +75 -0
- package/third-party/cargo/typenum@1.20.1/LICENSE +1 -0
- package/third-party/cargo/typenum@1.20.1/LICENSE-APACHE +201 -0
- package/third-party/cargo/typenum@1.20.1/LICENSE-MIT +21 -0
- package/third-party/film/camera-COLOUR-LICENSE +11 -0
- package/third-party/film/camera-CONFIG-LICENSE +26 -0
- package/third-party/film/camera-LICENSE +26 -0
- package/third-party/film/camera-metadata.json +344 -0
- package/third-party/film/provenance.json +7 -0
- package/third-party/inventory.json +162 -0
- package/third-party/npm/signalsmith-stretch@1.3.2/package.json +26 -0
- package/third-party/npm/signalsmith-stretch@1.3.2/signalsmith-stretch-1.3.2-LICENSE.txt +21 -0
- package/vendor/osmo-lite +0 -0
- package/vendor/osmo-scene-0.1.0.tgz +0 -0
- package/vendor/platform.json +1 -1
|
@@ -18,17 +18,17 @@ export function readGroupPlayback(props) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/** Optional lane metadata indexed by the same 0–99 numbers as clip.track.
|
|
21
|
-
* @param {unknown} value @returns {Record<number, {label?: string, hidden?: boolean, solo?: boolean, muted?: boolean}>} */
|
|
21
|
+
* @param {unknown} value @returns {Record<number, {label?: string, hidden?: boolean, solo?: boolean, muted?: boolean, motionBlur?: boolean}>} */
|
|
22
22
|
export function readSceneTracks(value) {
|
|
23
23
|
if (value === undefined) return {};
|
|
24
24
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
25
25
|
throw new Error('Scene.tracks: expected an object keyed by track numbers (0–99)');
|
|
26
26
|
return Object.fromEntries(Object.entries(value).map(([key, metadata]) => {
|
|
27
27
|
if (!/^(?:0|[1-9]\d?)$/.test(key)) throw new Error('Scene.tracks: track numbers must be integers from 0 to 99');
|
|
28
|
-
if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata) || Object.keys(metadata).some(key => !['label','hidden','solo','muted'].includes(key)))
|
|
29
|
-
throw new Error(`Scene.tracks.${key}: expected label, hidden, solo or
|
|
28
|
+
if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata) || Object.keys(metadata).some(key => !['label','hidden','solo','muted','motionBlur'].includes(key)))
|
|
29
|
+
throw new Error(`Scene.tracks.${key}: expected label, hidden, solo, muted or motionBlur metadata`);
|
|
30
30
|
const label = readLabel(metadata.label, 1, `Scene.tracks.${key}.label`);
|
|
31
|
-
for (const field of ['hidden','solo','muted'])
|
|
31
|
+
for (const field of ['hidden','solo','muted','motionBlur'])
|
|
32
32
|
if (metadata[field] !== undefined && typeof metadata[field] !== 'boolean')
|
|
33
33
|
throw new Error(`Scene.tracks.${key}.${field}: expected a static boolean`);
|
|
34
34
|
return [key, {...metadata, ...(label === undefined ? {} : {label})}];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Composition-wide temporal supersampling. Angles are fractions of one frame. */
|
|
2
|
+
export interface MotionBlurSettings {
|
|
3
|
+
shutterAngle?: number;
|
|
4
|
+
shutterPhase?: number;
|
|
5
|
+
samples?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ResolvedMotionBlur { shutterAngle: number; shutterPhase: number; samples: number }
|
|
8
|
+
export function resolveMotionBlur(value: unknown): ResolvedMotionBlur | undefined {
|
|
9
|
+
if (value === undefined || value === false) return;
|
|
10
|
+
if (value !== true && (!value || typeof value !== 'object' || Array.isArray(value)))
|
|
11
|
+
throw new Error('Scene.motionBlur must be a boolean or shutter settings');
|
|
12
|
+
const settings = (value === true ? {} : value) as Record<string, unknown>;
|
|
13
|
+
for (const key of Object.keys(settings)) if (!['shutterAngle','shutterPhase','samples'].includes(key))
|
|
14
|
+
throw new Error(`Unknown motionBlur setting: ${key}`);
|
|
15
|
+
const shutterAngle = settings.shutterAngle ?? 180;
|
|
16
|
+
const shutterPhase = settings.shutterPhase ?? -(shutterAngle as number) / 2;
|
|
17
|
+
const samples = settings.samples ?? 16;
|
|
18
|
+
if (typeof shutterAngle !== 'number' || !Number.isFinite(shutterAngle) || shutterAngle < 0 || shutterAngle > 720)
|
|
19
|
+
throw new Error('motionBlur.shutterAngle must be between 0 and 720 degrees');
|
|
20
|
+
if (typeof shutterPhase !== 'number' || !Number.isFinite(shutterPhase) || shutterPhase < -720 || shutterPhase > 720)
|
|
21
|
+
throw new Error('motionBlur.shutterPhase must be between -720 and 720 degrees');
|
|
22
|
+
if (typeof samples !== 'number' || !Number.isInteger(samples) || samples < 2 || samples > 64)
|
|
23
|
+
throw new Error('motionBlur.samples must be an integer between 2 and 64');
|
|
24
|
+
return shutterAngle === 0 ? undefined : {shutterAngle, shutterPhase, samples};
|
|
25
|
+
}
|
|
26
|
+
/** Midpoint quadrature; endpoints hold the first/last valid frame, never wrap. */
|
|
27
|
+
export function shutterFrames(frame: number, totalFrames: number, settings: ResolvedMotionBlur): number[] {
|
|
28
|
+
return Array.from({length: settings.samples}, (_, i) => Math.max(0, Math.min(totalFrames - 1,
|
|
29
|
+
frame + settings.shutterPhase / 360 + (i + 0.5) / settings.samples * settings.shutterAngle / 360)));
|
|
30
|
+
}
|
package/src/starter/scene.tsx
CHANGED
|
@@ -14,7 +14,7 @@ const grade = defineEffect({
|
|
|
14
14
|
},
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
export default <Scene width={1920} height={1080} duration={2.7666666666666666} fps={60} background="#f1ede4"
|
|
17
|
+
export default <Scene stacking="tracks" width={1920} height={1080} duration={2.7666666666666666} fps={60} background="#f1ede4"
|
|
18
18
|
effects={[grade({}), grain({ amount: 0.055 })]}>
|
|
19
19
|
<Group id="osmo-brand" track={0} label="Osmo intro">
|
|
20
20
|
<Logo />
|