frameyard 0.8.0 → 0.9.0
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/CHANGELOG.md +110 -14
- package/GLOSSARY.md +112 -2
- package/README.md +302 -265
- package/dist/assets/integrations.d.ts +8 -4
- package/dist/assets/integrations.d.ts.map +1 -1
- package/dist/assets/integrations.js +8 -4
- package/dist/assets/integrations.js.map +1 -1
- package/dist/assets/provenance.d.ts +2 -2
- package/dist/assets/provenance.d.ts.map +1 -1
- package/dist/assets/provenance.js +5 -3
- package/dist/assets/provenance.js.map +1 -1
- package/dist/assets/tts-supertonic.d.ts +28 -0
- package/dist/assets/tts-supertonic.d.ts.map +1 -0
- package/dist/assets/tts-supertonic.js +156 -0
- package/dist/assets/tts-supertonic.js.map +1 -0
- package/dist/assets/tts.d.ts +18 -6
- package/dist/assets/tts.d.ts.map +1 -1
- package/dist/assets/tts.js +219 -97
- package/dist/assets/tts.js.map +1 -1
- package/dist/cli.js +1685 -93
- package/dist/cli.js.map +1 -1
- package/dist/composition/format.d.ts +1 -1
- package/dist/composition/format.d.ts.map +1 -1
- package/dist/composition/format.js +1 -1
- package/dist/composition/format.js.map +1 -1
- package/dist/context.d.ts +82 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +277 -0
- package/dist/context.js.map +1 -0
- package/dist/contracts.d.ts +25 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js.map +1 -1
- package/dist/doctor.d.ts +14 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +166 -7
- package/dist/doctor.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fonts/add.d.ts +41 -0
- package/dist/fonts/add.d.ts.map +1 -0
- package/dist/fonts/add.js +259 -0
- package/dist/fonts/add.js.map +1 -0
- package/dist/fonts/binary.d.ts +4 -0
- package/dist/fonts/binary.d.ts.map +1 -0
- package/dist/fonts/binary.js +21 -0
- package/dist/fonts/binary.js.map +1 -0
- package/dist/fonts/css.d.ts +4 -0
- package/dist/fonts/css.d.ts.map +1 -0
- package/dist/fonts/css.js +50 -0
- package/dist/fonts/css.js.map +1 -0
- package/dist/fonts/fontsource.d.ts +107 -0
- package/dist/fonts/fontsource.d.ts.map +1 -0
- package/dist/fonts/fontsource.js +565 -0
- package/dist/fonts/fontsource.js.map +1 -0
- package/dist/fonts/index.d.ts +11 -0
- package/dist/fonts/index.d.ts.map +1 -0
- package/dist/fonts/index.js +11 -0
- package/dist/fonts/index.js.map +1 -0
- package/dist/fonts/install.d.ts +24 -0
- package/dist/fonts/install.d.ts.map +1 -0
- package/dist/fonts/install.js +145 -0
- package/dist/fonts/install.js.map +1 -0
- package/dist/fonts/manifest.d.ts +21 -0
- package/dist/fonts/manifest.d.ts.map +1 -0
- package/dist/fonts/manifest.js +96 -0
- package/dist/fonts/manifest.js.map +1 -0
- package/dist/fonts/options.d.ts +9 -0
- package/dist/fonts/options.d.ts.map +1 -0
- package/dist/fonts/options.js +66 -0
- package/dist/fonts/options.js.map +1 -0
- package/dist/fonts/schema.d.ts +4 -0
- package/dist/fonts/schema.d.ts.map +1 -0
- package/dist/fonts/schema.js +316 -0
- package/dist/fonts/schema.js.map +1 -0
- package/dist/fonts/summary.d.ts +16 -0
- package/dist/fonts/summary.d.ts.map +1 -0
- package/dist/fonts/summary.js +22 -0
- package/dist/fonts/summary.js.map +1 -0
- package/dist/fonts/types.d.ts +56 -0
- package/dist/fonts/types.d.ts.map +1 -0
- package/dist/fonts/types.js +8 -0
- package/dist/fonts/types.js.map +1 -0
- package/dist/fonts/verify.d.ts +33 -0
- package/dist/fonts/verify.d.ts.map +1 -0
- package/dist/fonts/verify.js +200 -0
- package/dist/fonts/verify.js.map +1 -0
- package/dist/html/validate.d.ts.map +1 -1
- package/dist/html/validate.js +59 -0
- package/dist/html/validate.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts +61 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +325 -0
- package/dist/inspect.js.map +1 -0
- package/dist/lint.d.ts +63 -0
- package/dist/lint.d.ts.map +1 -0
- package/dist/lint.js +265 -0
- package/dist/lint.js.map +1 -0
- package/dist/policy.d.ts +69 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +361 -0
- package/dist/policy.js.map +1 -0
- package/dist/preview/timeline-data.d.ts +17 -69
- package/dist/preview/timeline-data.d.ts.map +1 -1
- package/dist/preview/timeline-host.d.ts.map +1 -1
- package/dist/preview/timeline-host.js +70 -45
- package/dist/preview/timeline-host.js.map +1 -1
- package/dist/preview/timeline-main.d.ts.map +1 -1
- package/dist/preview/timeline-main.js +47 -4
- package/dist/preview/timeline-main.js.map +1 -1
- package/dist/project.d.ts +10 -3
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +20 -17
- package/dist/project.js.map +1 -1
- package/dist/renderer/ffmpeg.d.ts +42 -2
- package/dist/renderer/ffmpeg.d.ts.map +1 -1
- package/dist/renderer/ffmpeg.js +254 -22
- package/dist/renderer/ffmpeg.js.map +1 -1
- package/dist/renderer/index.js +1 -1
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/keyframe-expressions.d.ts +39 -0
- package/dist/renderer/keyframe-expressions.d.ts.map +1 -0
- package/dist/renderer/keyframe-expressions.js +180 -0
- package/dist/renderer/keyframe-expressions.js.map +1 -0
- package/dist/renderer/timeline.d.ts +2 -0
- package/dist/renderer/timeline.d.ts.map +1 -1
- package/dist/renderer/timeline.js +89 -116
- package/dist/renderer/timeline.js.map +1 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/host.js +4 -0
- package/dist/runtime/host.js.map +1 -1
- package/dist/scaffold.d.ts +3 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +48 -320
- package/dist/scaffold.js.map +1 -1
- package/dist/server/composition-html.d.ts +2 -0
- package/dist/server/composition-html.d.ts.map +1 -1
- package/dist/server/composition-html.js +7 -0
- package/dist/server/composition-html.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +31 -1
- package/dist/server/server.js.map +1 -1
- package/dist/server/timeline-preview-data.d.ts.map +1 -1
- package/dist/server/timeline-preview-data.js +12 -34
- package/dist/server/timeline-preview-data.js.map +1 -1
- package/dist/server/timeline-preview-html.d.ts.map +1 -1
- package/dist/server/timeline-preview-html.js +18 -2
- package/dist/server/timeline-preview-html.js.map +1 -1
- package/dist/templates.d.ts +16 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +186 -0
- package/dist/templates.js.map +1 -0
- package/dist/timeline/easing.d.ts +36 -0
- package/dist/timeline/easing.d.ts.map +1 -0
- package/dist/timeline/easing.js +225 -0
- package/dist/timeline/easing.js.map +1 -0
- package/dist/timeline/keyframes.d.ts +23 -0
- package/dist/timeline/keyframes.d.ts.map +1 -0
- package/dist/timeline/keyframes.js +95 -0
- package/dist/timeline/keyframes.js.map +1 -0
- package/dist/timeline/plan.d.ts +6 -12
- package/dist/timeline/plan.d.ts.map +1 -1
- package/dist/timeline/plan.js +17 -30
- package/dist/timeline/plan.js.map +1 -1
- package/dist/timeline/resolve.d.ts +12 -0
- package/dist/timeline/resolve.d.ts.map +1 -1
- package/dist/timeline/resolve.js +105 -9
- package/dist/timeline/resolve.js.map +1 -1
- package/dist/timeline/scene.d.ts +126 -0
- package/dist/timeline/scene.d.ts.map +1 -0
- package/dist/timeline/scene.js +109 -0
- package/dist/timeline/scene.js.map +1 -0
- package/dist/timeline/schema.d.ts +31 -0
- package/dist/timeline/schema.d.ts.map +1 -1
- package/dist/timeline/schema.js +240 -9
- package/dist/timeline/schema.js.map +1 -1
- package/dist/timeline/transitions.d.ts +21 -0
- package/dist/timeline/transitions.d.ts.map +1 -0
- package/dist/timeline/transitions.js +23 -0
- package/dist/timeline/transitions.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/adr/0007-make-html-documents-the-composition-unit.md +1 -1
- package/docs/adr/0010-make-timelines-the-render-unit.md +3 -2
- package/docs/adr/0014-compose-timeline-clips-with-css-blend-modes.md +2 -1
- package/docs/adr/0015-inherit-composition-format-from-the-project.md +2 -2
- package/docs/adr/0016-author-compositions-as-html-fragments.md +1 -1
- package/docs/adr/0018-animate-timeline-clips-with-keyframes.md +35 -0
- package/docs/adr/0019-make-same-track-overlap-the-transition-window.md +36 -0
- package/docs/adr/0020-crossfade-audio-clips-on-audio-tracks.md +27 -0
- package/docs/adr/0021-project-timeline-scenes-once.md +32 -0
- package/docs/adr/0022-gate-heavy-operations-with-a-workspace-resource-policy.md +35 -0
- package/docs/adr/0023-pin-fonts-as-project-assets.md +98 -0
- package/docs/migration-0.4.md +2 -2
- package/docs/preview-testing.md +19 -6
- package/docs/{v0.1-design.md → v0.x-design.md} +55 -30
- package/examples/blend/README.md +3 -3
- package/examples/demo/README.md +2 -2
- package/examples/intro/README.md +71 -0
- package/examples/intro/assets/fonts/figtree/LICENSE.txt +93 -0
- package/examples/intro/assets/fonts/figtree/figtree-latin-wght-normal.woff2 +0 -0
- package/examples/intro/assets/fonts/instrument-serif/LICENSE.txt +93 -0
- package/examples/intro/assets/fonts/instrument-serif/instrument-serif-latin-400-italic.woff2 +0 -0
- package/examples/intro/assets/fonts/space-mono/LICENSE.txt +93 -0
- package/examples/intro/assets/fonts/space-mono/space-mono-latin-400-normal.woff2 +0 -0
- package/examples/intro/assets/fonts/space-mono/space-mono-latin-700-normal.woff2 +0 -0
- package/examples/intro/assets/grain.png +0 -0
- package/examples/intro/assets/score.ogg +0 -0
- package/examples/intro/compositions/brand.html +412 -0
- package/examples/intro/compositions/chrome.controller.js +63 -0
- package/examples/intro/compositions/chrome.html +256 -0
- package/examples/intro/compositions/lattice.controller.js +148 -0
- package/examples/intro/compositions/lattice.html +308 -0
- package/examples/intro/compositions/opening.html +504 -0
- package/examples/intro/compositions/studio.html +930 -0
- package/examples/intro/compositions/theme.css +218 -0
- package/examples/intro/fy.config.js +13 -0
- package/examples/intro/fy.fonts.json +100 -0
- package/examples/intro/scripts/make-grain.mjs +79 -0
- package/examples/intro/scripts/make-score.mjs +702 -0
- package/examples/intro/timelines/intro.timeline.json +60 -0
- package/examples/keyframes/README.md +76 -0
- package/examples/keyframes/compositions/backdrop.html +60 -0
- package/examples/keyframes/compositions/card.html +99 -0
- package/examples/keyframes/fy.config.js +10 -0
- package/examples/keyframes/timelines/keyframes.timeline.json +60 -0
- package/examples/nested/README.md +112 -0
- package/examples/nested/assets/pulse.wav +0 -0
- package/examples/nested/compositions/backdrop.html +84 -0
- package/examples/nested/compositions/card.html +275 -0
- package/examples/nested/compositions/overlay.html +307 -0
- package/examples/nested/fy.config.js +13 -0
- package/examples/nested/scripts/make-pulse.sh +20 -0
- package/examples/nested/timelines/chapter-a.timeline.json +39 -0
- package/examples/nested/timelines/chapter-b.timeline.json +39 -0
- package/examples/nested/timelines/nested-reel.timeline.json +52 -0
- package/examples/static/README.md +2 -2
- package/examples/transitions/README.md +128 -0
- package/examples/transitions/assets/alpha.wav +0 -0
- package/examples/transitions/assets/beta.wav +0 -0
- package/examples/transitions/assets/gamma.wav +0 -0
- package/examples/transitions/compositions/alpha.html +56 -0
- package/examples/transitions/compositions/beta.html +56 -0
- package/examples/transitions/compositions/gamma.html +56 -0
- package/examples/transitions/fy.config.js +12 -0
- package/examples/transitions/timelines/audio-crossfade.timeline.json +44 -0
- package/examples/transitions/timelines/transitions.timeline.json +31 -0
- package/examples/video/README.md +4 -4
- package/examples/webgl/README.md +1 -1
- package/package.json +12 -5
- package/scaffolds/init/AGENTS.md +131 -0
- package/scaffolds/init/README.md +56 -0
- package/scaffolds/init/compositions/hello.html +79 -0
- package/scaffolds/init/fy.config.js +9 -0
- package/scaffolds/init/gitignore.template +1 -0
- package/scaffolds/init/package.json +11 -0
- package/scaffolds/init/props/hello.json +4 -0
- package/scaffolds/init/props/main.json +6 -0
- package/scaffolds/init/timelines/main.timeline.json +20 -0
- package/scaffolds/local-models/LOCAL-MODELS.md +77 -0
- package/scaffolds/local-models/fy.policy.json +5 -0
- package/scaffolds/local-models/opencode/opencode.jsonc +17 -0
- package/scaffolds/local-models/pi/APPEND_SYSTEM.md +21 -0
- package/scaffolds/local-models/pi/sandbox.json +15 -0
- package/scaffolds/local-models/pi/settings.json +15 -0
- package/skills/frameyard/README.md +1 -0
- package/skills/frameyard/SKILL.md +59 -61
- package/skills/frameyard/references/audio-assets.md +32 -3
- package/skills/frameyard/references/common-mistakes.md +53 -2
- package/skills/frameyard/references/deterministic-authoring.md +10 -3
- package/skills/frameyard/references/diagnostics.md +31 -1
- package/skills/frameyard/references/failure-recovery.md +32 -6
- package/skills/frameyard/references/fonts.md +132 -0
- package/skills/frameyard/references/json-results.md +119 -6
- package/skills/frameyard/references/quick-reference.md +222 -0
- package/skills/frameyard/references/timelines.md +97 -7
- /package/examples/blend/{video.config.js → fy.config.js} +0 -0
- /package/examples/demo/{video.config.js → fy.config.js} +0 -0
- /package/examples/static/{video.config.js → fy.config.js} +0 -0
- /package/examples/video/{video.config.js → fy.config.js} +0 -0
- /package/examples/webgl/{video.config.js → fy.config.js} +0 -0
package/dist/timeline/schema.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assertJsonSerializable, isPlainObject, } from "../contracts.js";
|
|
2
|
+
import { EASING_GRAMMAR, parseEasing } from "./easing.js";
|
|
2
3
|
/** CSS blend modes that FFmpeg can reproduce with matching semantics. */
|
|
3
4
|
export const BLEND_MODES = [
|
|
4
5
|
"normal",
|
|
@@ -16,6 +17,18 @@ export const BLEND_MODES = [
|
|
|
16
17
|
];
|
|
17
18
|
/** CSS blend modes that require cross-channel math and are not supported yet. */
|
|
18
19
|
export const UNSUPPORTED_BLEND_MODES = ["hue", "saturation", "color", "luminosity"];
|
|
20
|
+
/** The presentation defaults applied when a visual clip omits a transform. */
|
|
21
|
+
export const DEFAULT_TIMELINE_TRANSFORM = Object.freeze({
|
|
22
|
+
fit: "contain",
|
|
23
|
+
x: 0,
|
|
24
|
+
y: 0,
|
|
25
|
+
scale: 1,
|
|
26
|
+
rotation: 0,
|
|
27
|
+
opacity: 1,
|
|
28
|
+
});
|
|
29
|
+
export const KEYFRAME_CHANNELS = ["x", "y", "scale", "rotation", "opacity"];
|
|
30
|
+
/** Transition kinds that both preview and production can reproduce exactly. */
|
|
31
|
+
export const TRANSITION_KINDS = ["dissolve", "crossfade"];
|
|
19
32
|
const ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
20
33
|
const SCHEME = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;
|
|
21
34
|
function isNonEmptyString(value) {
|
|
@@ -50,7 +63,7 @@ function makeDiagnostic(context, severity, code, message, path, details = {}) {
|
|
|
50
63
|
return { severity, code, message, details: merged };
|
|
51
64
|
}
|
|
52
65
|
function parseTransform(value, path, add) {
|
|
53
|
-
const defaults = {
|
|
66
|
+
const defaults = { ...DEFAULT_TIMELINE_TRANSFORM };
|
|
54
67
|
if (!isPlainObject(value)) {
|
|
55
68
|
add("TIMELINE_CLIP_INVALID", "Clip transform must be an object.", path);
|
|
56
69
|
return defaults;
|
|
@@ -111,6 +124,103 @@ function parseTransform(value, path, add) {
|
|
|
111
124
|
}
|
|
112
125
|
return transform;
|
|
113
126
|
}
|
|
127
|
+
function parseKeyframes(value, path, add, transform) {
|
|
128
|
+
if (!isPlainObject(value)) {
|
|
129
|
+
add("TIMELINE_CLIP_INVALID", "Clip keyframes must be an object.", path);
|
|
130
|
+
return {};
|
|
131
|
+
}
|
|
132
|
+
for (const key of unknownKeys(value, KEYFRAME_CHANNELS)) {
|
|
133
|
+
add("TIMELINE_CLIP_INVALID", `Unknown clip keyframes channel "${key}".`, jsonPath(path, key));
|
|
134
|
+
}
|
|
135
|
+
if (Object.keys(value).length === 0) {
|
|
136
|
+
add("TIMELINE_CLIP_INVALID", "Clip keyframes must declare at least one channel.", path);
|
|
137
|
+
return {};
|
|
138
|
+
}
|
|
139
|
+
const transformObject = isPlainObject(transform) ? transform : undefined;
|
|
140
|
+
const explicitTransformKeys = new Set(transformObject ? Object.keys(transformObject) : []);
|
|
141
|
+
const hasTransformBox = transformObject?.width !== undefined && transformObject?.height !== undefined;
|
|
142
|
+
const keyframes = {};
|
|
143
|
+
for (const channel of KEYFRAME_CHANNELS) {
|
|
144
|
+
const rawTrack = value[channel];
|
|
145
|
+
if (rawTrack === undefined) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const channelPath = jsonPath(path, channel);
|
|
149
|
+
if (explicitTransformKeys.has(channel)) {
|
|
150
|
+
add("TIMELINE_CLIP_INVALID", `Clip keyframes.${channel} cannot be combined with transform.${channel}.`, channelPath);
|
|
151
|
+
}
|
|
152
|
+
if (channel === "scale" && hasTransformBox) {
|
|
153
|
+
add("TIMELINE_CLIP_INVALID", "Clip keyframes.scale cannot be combined with transform.width and transform.height.", channelPath);
|
|
154
|
+
}
|
|
155
|
+
if (!Array.isArray(rawTrack)) {
|
|
156
|
+
add("TIMELINE_CLIP_INVALID", `Clip keyframes.${channel} must be an array.`, channelPath);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (rawTrack.length < 2) {
|
|
160
|
+
add("TIMELINE_CLIP_INVALID", `Clip keyframes.${channel} must declare at least two keyframes.`, channelPath);
|
|
161
|
+
}
|
|
162
|
+
const track = [];
|
|
163
|
+
let previousFrame = -1;
|
|
164
|
+
for (const [index, rawKey] of rawTrack.entries()) {
|
|
165
|
+
const keyPath = jsonPath(channelPath, index);
|
|
166
|
+
if (!isPlainObject(rawKey)) {
|
|
167
|
+
add("TIMELINE_CLIP_INVALID", "Keyframe must be an object.", keyPath);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
for (const key of unknownKeys(rawKey, ["frame", "value", "easing"])) {
|
|
171
|
+
add("TIMELINE_CLIP_INVALID", `Unknown keyframe field "${key}".`, jsonPath(keyPath, key));
|
|
172
|
+
}
|
|
173
|
+
const frame = rawKey.frame;
|
|
174
|
+
const frameValid = isInteger(frame) && frame >= 0;
|
|
175
|
+
if (!frameValid) {
|
|
176
|
+
add("TIMELINE_CLIP_INVALID", "Keyframe frame must be a non-negative integer.", jsonPath(keyPath, "frame"));
|
|
177
|
+
}
|
|
178
|
+
else if (frame <= previousFrame) {
|
|
179
|
+
add("TIMELINE_CLIP_INVALID", `Keyframe frames in keyframes.${channel} must be strictly increasing.`, jsonPath(keyPath, "frame"));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
previousFrame = frame;
|
|
183
|
+
}
|
|
184
|
+
const keyValue = rawKey.value;
|
|
185
|
+
let numericValue;
|
|
186
|
+
if (!isFiniteNumber(keyValue)) {
|
|
187
|
+
add("TIMELINE_CLIP_INVALID", "Keyframe value must be a finite number.", jsonPath(keyPath, "value"));
|
|
188
|
+
}
|
|
189
|
+
else if (channel === "scale" && keyValue < 0) {
|
|
190
|
+
add("TIMELINE_CLIP_INVALID", "Keyframe scale must be zero or greater.", jsonPath(keyPath, "value"));
|
|
191
|
+
}
|
|
192
|
+
else if (channel === "opacity" && (keyValue < 0 || keyValue > 1)) {
|
|
193
|
+
add("TIMELINE_CLIP_INVALID", "Keyframe opacity must be between 0 and 1.", jsonPath(keyPath, "value"));
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
numericValue = keyValue;
|
|
197
|
+
}
|
|
198
|
+
let easing;
|
|
199
|
+
if (rawKey.easing !== undefined) {
|
|
200
|
+
if (typeof rawKey.easing !== "string" || rawKey.easing.trim().length === 0) {
|
|
201
|
+
add("TIMELINE_CLIP_INVALID", "Keyframe easing must be a non-empty string.", jsonPath(keyPath, "easing"));
|
|
202
|
+
}
|
|
203
|
+
else if (parseEasing(rawKey.easing) === null) {
|
|
204
|
+
add("TIMELINE_CLIP_INVALID", `Keyframe easing "${rawKey.easing}" is not supported. Use ${EASING_GRAMMAR}.`, jsonPath(keyPath, "easing"), { value: rawKey.easing, suggestion: `Use ${EASING_GRAMMAR}.` });
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
easing = rawKey.easing.trim();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (frameValid && numericValue !== undefined) {
|
|
211
|
+
track.push({
|
|
212
|
+
frame,
|
|
213
|
+
value: numericValue,
|
|
214
|
+
...(easing !== undefined ? { easing } : {}),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (track.length > 0) {
|
|
219
|
+
keyframes[channel] = track;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return keyframes;
|
|
223
|
+
}
|
|
114
224
|
function parseAudio(value, path, add) {
|
|
115
225
|
const defaults = { muted: false, gain: 1 };
|
|
116
226
|
if (!isPlainObject(value)) {
|
|
@@ -173,6 +283,87 @@ function isVisualSource(source) {
|
|
|
173
283
|
function isAudioBearingSource(source) {
|
|
174
284
|
return source.kind !== "image";
|
|
175
285
|
}
|
|
286
|
+
function parseTransitions(value, path, add) {
|
|
287
|
+
if (!Array.isArray(value)) {
|
|
288
|
+
add("TIMELINE_TRANSITION_INVALID", "Timeline transitions must be an array.", path);
|
|
289
|
+
return [];
|
|
290
|
+
}
|
|
291
|
+
const transitions = [];
|
|
292
|
+
const fromIds = new Set();
|
|
293
|
+
const toIds = new Set();
|
|
294
|
+
const pairs = new Set();
|
|
295
|
+
for (const [index, raw] of value.entries()) {
|
|
296
|
+
const entryPath = jsonPath(path, index);
|
|
297
|
+
if (!isPlainObject(raw)) {
|
|
298
|
+
add("TIMELINE_TRANSITION_INVALID", "Transition must be an object.", entryPath);
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
for (const key of unknownKeys(raw, ["from", "to", "kind", "easing"])) {
|
|
302
|
+
add("TIMELINE_TRANSITION_INVALID", `Unknown transition field "${key}".`, jsonPath(entryPath, key));
|
|
303
|
+
}
|
|
304
|
+
const fromValid = isNonEmptyString(raw.from) && ID_PATTERN.test(raw.from);
|
|
305
|
+
const toValid = isNonEmptyString(raw.to) && ID_PATTERN.test(raw.to);
|
|
306
|
+
const details = {
|
|
307
|
+
...(isNonEmptyString(raw.from) ? { from: raw.from } : {}),
|
|
308
|
+
...(isNonEmptyString(raw.to) ? { to: raw.to } : {}),
|
|
309
|
+
};
|
|
310
|
+
if (!fromValid) {
|
|
311
|
+
add("TIMELINE_TRANSITION_INVALID", "Transition from must be a valid clip id.", jsonPath(entryPath, "from"), details);
|
|
312
|
+
}
|
|
313
|
+
if (!toValid) {
|
|
314
|
+
add("TIMELINE_TRANSITION_INVALID", "Transition to must be a valid clip id.", jsonPath(entryPath, "to"), details);
|
|
315
|
+
}
|
|
316
|
+
let kind;
|
|
317
|
+
if (raw.kind !== undefined) {
|
|
318
|
+
if (typeof raw.kind !== "string" || !TRANSITION_KINDS.includes(raw.kind)) {
|
|
319
|
+
add("TIMELINE_TRANSITION_KIND", `Transition kind must be one of: ${TRANSITION_KINDS.join(", ")}.`, jsonPath(entryPath, "kind"), { ...details, ...(typeof raw.kind === "string" ? { value: raw.kind } : {}) });
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
kind = raw.kind;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
add("TIMELINE_TRANSITION_KIND", "Transition kind is required.", jsonPath(entryPath, "kind"), details);
|
|
327
|
+
}
|
|
328
|
+
let easing;
|
|
329
|
+
if (raw.easing !== undefined) {
|
|
330
|
+
if (typeof raw.easing !== "string" || raw.easing.trim().length === 0) {
|
|
331
|
+
add("TIMELINE_TRANSITION_INVALID", "Transition easing must be a non-empty string.", jsonPath(entryPath, "easing"), details);
|
|
332
|
+
}
|
|
333
|
+
else if (parseEasing(raw.easing) === null) {
|
|
334
|
+
add("TIMELINE_TRANSITION_INVALID", `Transition easing "${raw.easing}" is not supported. Use ${EASING_GRAMMAR}.`, jsonPath(entryPath, "easing"), { ...details, value: raw.easing, suggestion: `Use ${EASING_GRAMMAR}.` });
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
easing = raw.easing.trim();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
if (!fromValid || !toValid) {
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
const from = raw.from;
|
|
344
|
+
const to = raw.to;
|
|
345
|
+
if (pairs.has(`${from}\u0000${to}`)) {
|
|
346
|
+
add("TIMELINE_TRANSITION_DUPLICATE", `Transition from "${from}" to "${to}" is declared more than once.`, entryPath, { ...details, suggestion: "Declare each clip pair once." });
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (fromIds.has(from)) {
|
|
350
|
+
add("TIMELINE_TRANSITION_DUPLICATE", `Clip "${from}" is already the source of another transition.`, jsonPath(entryPath, "from"), { ...details, suggestion: "A clip can transition into at most one other clip." });
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
if (toIds.has(to)) {
|
|
354
|
+
add("TIMELINE_TRANSITION_DUPLICATE", `Clip "${to}" is already the target of another transition.`, jsonPath(entryPath, "to"), { ...details, suggestion: "A clip can be transitioned into at most once." });
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
fromIds.add(from);
|
|
358
|
+
toIds.add(to);
|
|
359
|
+
pairs.add(`${from}\u0000${to}`);
|
|
360
|
+
if (kind === undefined) {
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
transitions.push({ from, to, kind, ...(easing !== undefined ? { easing } : {}) });
|
|
364
|
+
}
|
|
365
|
+
return transitions;
|
|
366
|
+
}
|
|
176
367
|
/** Parses and normalizes a timeline JSON document without touching the filesystem. */
|
|
177
368
|
export function parseTimelineDocument(value, context = {}) {
|
|
178
369
|
const diagnostics = [];
|
|
@@ -183,7 +374,15 @@ export function parseTimelineDocument(value, context = {}) {
|
|
|
183
374
|
add("TIMELINE_INVALID", "Timeline document must be a JSON object.", "$");
|
|
184
375
|
return { timeline: null, diagnostics };
|
|
185
376
|
}
|
|
186
|
-
for (const key of unknownKeys(value, [
|
|
377
|
+
for (const key of unknownKeys(value, [
|
|
378
|
+
"version",
|
|
379
|
+
"name",
|
|
380
|
+
"durationInFrames",
|
|
381
|
+
"background",
|
|
382
|
+
"tracks",
|
|
383
|
+
"clips",
|
|
384
|
+
"transitions",
|
|
385
|
+
])) {
|
|
187
386
|
add("TIMELINE_INVALID", `Unknown timeline field "${key}".`, jsonPath("$", key));
|
|
188
387
|
}
|
|
189
388
|
if (value.version !== 1) {
|
|
@@ -287,6 +486,7 @@ export function parseTimelineDocument(value, context = {}) {
|
|
|
287
486
|
"sourceIn",
|
|
288
487
|
"props",
|
|
289
488
|
"transform",
|
|
489
|
+
"keyframes",
|
|
290
490
|
"blend",
|
|
291
491
|
"audio",
|
|
292
492
|
])) {
|
|
@@ -368,7 +568,18 @@ export function parseTimelineDocument(value, context = {}) {
|
|
|
368
568
|
}
|
|
369
569
|
}
|
|
370
570
|
else if (visual) {
|
|
371
|
-
transform = {
|
|
571
|
+
transform = { ...DEFAULT_TIMELINE_TRANSFORM };
|
|
572
|
+
}
|
|
573
|
+
let keyframes;
|
|
574
|
+
if (rawClip.keyframes !== undefined) {
|
|
575
|
+
if (!visual) {
|
|
576
|
+
add("TIMELINE_CLIP_INVALID", "keyframes is only valid on visual clips.", jsonPath(path, "keyframes"), clipDetails);
|
|
577
|
+
}
|
|
578
|
+
else {
|
|
579
|
+
keyframes = parseKeyframes(rawClip.keyframes, jsonPath(path, "keyframes"), (code, message, errorPath, errorDetails) => {
|
|
580
|
+
add(code, message, errorPath, { ...clipDetails, ...errorDetails });
|
|
581
|
+
}, rawClip.transform);
|
|
582
|
+
}
|
|
372
583
|
}
|
|
373
584
|
let blend;
|
|
374
585
|
if (rawClip.blend !== undefined) {
|
|
@@ -428,19 +639,38 @@ export function parseTimelineDocument(value, context = {}) {
|
|
|
428
639
|
sourceIn,
|
|
429
640
|
...(props !== undefined ? { props } : {}),
|
|
430
641
|
...(transform !== undefined ? { transform } : {}),
|
|
642
|
+
...(keyframes !== undefined ? { keyframes } : {}),
|
|
431
643
|
...(blend !== undefined ? { blend } : {}),
|
|
432
644
|
...(audio !== undefined ? { audio } : {}),
|
|
433
645
|
});
|
|
434
646
|
}
|
|
647
|
+
const transitions = value.transitions === undefined ? [] : parseTransitions(value.transitions, "$.transitions", add);
|
|
648
|
+
const declaredPairs = new Set();
|
|
649
|
+
for (const transition of transitions) {
|
|
650
|
+
declaredPairs.add(`${transition.from}\u0000${transition.to}`);
|
|
651
|
+
declaredPairs.add(`${transition.to}\u0000${transition.from}`);
|
|
652
|
+
}
|
|
435
653
|
for (const track of tracks) {
|
|
436
654
|
const trackClips = clips
|
|
437
655
|
.filter((clip) => clip.track === track.id && clip.duration !== undefined)
|
|
438
|
-
.sort((left, right) => left.start - right.start
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
const
|
|
442
|
-
|
|
443
|
-
|
|
656
|
+
.sort((left, right) => left.start - right.start ||
|
|
657
|
+
left.start + left.duration - (right.start + right.duration));
|
|
658
|
+
for (let index = 0; index < trackClips.length; index += 1) {
|
|
659
|
+
const previous = trackClips[index];
|
|
660
|
+
const previousEnd = previous.start + previous.duration;
|
|
661
|
+
for (let next = index + 1; next < trackClips.length; next += 1) {
|
|
662
|
+
const current = trackClips[next];
|
|
663
|
+
if (current.start >= previousEnd) {
|
|
664
|
+
break;
|
|
665
|
+
}
|
|
666
|
+
if (declaredPairs.has(`${previous.id}\u0000${current.id}`)) {
|
|
667
|
+
continue;
|
|
668
|
+
}
|
|
669
|
+
add("TIMELINE_CLIP_OVERLAP", `Clip "${current.id}" overlaps "${previous.id}" on track "${track.id}".`, `$.clips[${clips.indexOf(current)}]`, {
|
|
670
|
+
track: track.id,
|
|
671
|
+
clip: current.id,
|
|
672
|
+
suggestion: "No two clips on one track may overlap without a declared transition.",
|
|
673
|
+
});
|
|
444
674
|
}
|
|
445
675
|
}
|
|
446
676
|
}
|
|
@@ -468,6 +698,7 @@ export function parseTimelineDocument(value, context = {}) {
|
|
|
468
698
|
...(typeof value.background === "string" ? { background: value.background } : {}),
|
|
469
699
|
tracks,
|
|
470
700
|
clips,
|
|
701
|
+
transitions,
|
|
471
702
|
},
|
|
472
703
|
diagnostics,
|
|
473
704
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/timeline/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/timeline/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** The overlap window of one transition, in absolute timeline frames. */
|
|
2
|
+
export interface TransitionWindow {
|
|
3
|
+
/** Inclusive first timeline frame. */
|
|
4
|
+
start: number;
|
|
5
|
+
/** Exclusive last timeline frame. */
|
|
6
|
+
end: number;
|
|
7
|
+
/** CSS timing function applied to the progress. Defaults to `linear`. */
|
|
8
|
+
easing?: string;
|
|
9
|
+
}
|
|
10
|
+
export type TransitionRole = "in" | "out";
|
|
11
|
+
/**
|
|
12
|
+
* Eased 0..1 progress of a transition at an absolute timeline frame. Frames
|
|
13
|
+
* outside the window clamp to 0 or 1, so segment boundaries never change values.
|
|
14
|
+
*/
|
|
15
|
+
export declare function transitionProgress(window: TransitionWindow, frame: number): number;
|
|
16
|
+
/**
|
|
17
|
+
* Equal-power gain for one side of a transition at an absolute timeline frame.
|
|
18
|
+
* The incoming clip ramps as `sqrt(t)`; the outgoing as `sqrt(1 - t)`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function transitionGain(window: TransitionWindow, frame: number, role: TransitionRole): number;
|
|
21
|
+
//# sourceMappingURL=transitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../src/timeline/transitions.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,KAAK,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,MAAM,CAIpG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { easeProgress, easingFor } from "./easing.js";
|
|
2
|
+
/**
|
|
3
|
+
* Eased 0..1 progress of a transition at an absolute timeline frame. Frames
|
|
4
|
+
* outside the window clamp to 0 or 1, so segment boundaries never change values.
|
|
5
|
+
*/
|
|
6
|
+
export function transitionProgress(window, frame) {
|
|
7
|
+
const length = window.end - window.start;
|
|
8
|
+
if (length <= 0) {
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
const raw = (frame - window.start) / length;
|
|
12
|
+
return easeProgress(easingFor(window.easing), Math.max(0, Math.min(1, raw)));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Equal-power gain for one side of a transition at an absolute timeline frame.
|
|
16
|
+
* The incoming clip ramps as `sqrt(t)`; the outgoing as `sqrt(1 - t)`.
|
|
17
|
+
*/
|
|
18
|
+
export function transitionGain(window, frame, role) {
|
|
19
|
+
const progress = transitionProgress(window, frame);
|
|
20
|
+
const value = role === "in" ? progress : 1 - progress;
|
|
21
|
+
return Math.sqrt(Math.max(0, Math.min(1, value)));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=transitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../src/timeline/transitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AActD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAwB,EAAE,KAAa;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAC5C,OAAO,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAwB,EAAE,KAAa,EAAE,IAAoB;IAC1F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.9.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.
|
|
1
|
+
export const VERSION = "0.9.0";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -11,7 +11,7 @@ Frameyard compositions will be declarative HTML documents rather than JavaScript
|
|
|
11
11
|
- **Pure no-JavaScript HTML/CSS.** Rejected because Canvas 2D and WebGL would become impossible without a new declarative drawing language, contradicting the existing visual-source contract.
|
|
12
12
|
- **HTML fragment injected into the preview container.** Rejected because relative asset URLs, document styles, and `<head>` content would need rewriting or scoping, making preview and render behavior fragile.
|
|
13
13
|
- **Add HTML as an alternative authoring format.** Rejected because two public composition models double the documentation, tests, and agent-skill surface; the repository is pre-1.0 and can make a clean breaking change.
|
|
14
|
-
- **Keep metadata and audio in `
|
|
14
|
+
- **Keep metadata and audio in `fy.config.js`.** Rejected because it splits a composition across files and makes the HTML document less portable.
|
|
15
15
|
- **External-only controllers.** Rejected because it forces a second file for small, single-use compositions, which is worse for agent authoring and review; inline source keeps those compositions self-contained while external modules remain available for reuse, tests, and complex logic.
|
|
16
16
|
- **Browser-only validation.** Rejected because agents would pay a Chromium launch for source-level mistakes and would not get line and column locations; the server already parses composition HTML for host injection, script rejection, and inline-controller extraction.
|
|
17
17
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Status:** Accepted
|
|
4
4
|
**Date:** 2026-10-31
|
|
5
|
+
**Amended by:** [ADR-0018](0018-animate-timeline-clips-with-keyframes.md) (timeline clip keyframes)
|
|
5
6
|
|
|
6
7
|
Frameyard will render timelines as its primary output unit. A timeline is a project-local JSON document with a project-fixed width, height, and frame rate, ordered video and audio tracks, and clips sourced from HTML compositions, local media, or other timelines. A composition remains the reusable HTML authoring unit and becomes a clip source whose source range and props are fixed by each clip. Standalone composition renders remain supported on the existing direct path.
|
|
7
8
|
|
|
@@ -15,10 +16,10 @@ Frameyard will render timelines as its primary output unit. A timeline is a proj
|
|
|
15
16
|
|
|
16
17
|
## Consequences
|
|
17
18
|
|
|
18
|
-
- `
|
|
19
|
+
- `fy.config.js` gains an optional project `format` and an explicit `timelines` map. IDs are unique across compositions and timelines so `render <id>`, `check <id>`, and `still <id>` stay unambiguous.
|
|
19
20
|
- A composition used in a timeline must share the project frame rate exactly; a different size is fitted and transformed by the clip.
|
|
20
21
|
- Timeline duration is derived from the last clip end, with an optional override. A timeline with no clips is invalid; an audio-only timeline is valid and renders black video with audio.
|
|
21
22
|
- Nested timelines are visual and audio sources, are cycle-checked, and do not accept prop overrides for their internal compositions in 0.6.
|
|
22
|
-
- Timeline clips use static fit, position, scale, rotation, and opacity. Transitions,
|
|
23
|
+
- Timeline clips use static fit, position, scale, rotation, and opacity by default; clip keyframes are added by ADR 0018. Transitions, effects, track solo/hidden, and audio fades are deferred.
|
|
23
24
|
- Composition rendering keeps its existing result schema; timeline rendering returns a new timeline result schema.
|
|
24
25
|
- The design baseline, glossary, agent skill, scaffold, examples, and tests gain timeline language; existing composition projects remain valid without migration.
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
**Status:** Accepted
|
|
4
4
|
**Date:** 2026-11-03
|
|
5
|
+
**Amended by:** [ADR-0018](0018-animate-timeline-clips-with-keyframes.md) (clip keyframes; blend modes remain static)
|
|
5
6
|
|
|
6
7
|
Visual timeline clips may declare a static `blend` mode. The mode is a CSS `mix-blend-mode` value and composites the clip against the accumulated backdrop of all lower layers and the timeline background. The clip's source alpha gates the blend: transparent pixels leave the backdrop unchanged. The supported modes are `normal`, `multiply`, `screen`, `overlay`, `darken`, `lighten`, `color-dodge`, `color-burn`, `hard-light`, `soft-light`, `difference`, and `exclusion`. `hue`, `saturation`, `color`, and `luminosity` require cross-channel math and are rejected at validation. `blend` is a top-level clip field, omitted means `normal`, and the timeline document stays at version 1.
|
|
7
8
|
|
|
8
|
-
Preview applies `mix-blend-mode` to the clip's DOM wrapper. Production applies FFmpeg's `blend` filter with the source alpha mask, then composites the blended result source-over. Chromium/CSS is the reference; FFmpeg is an approximation. The existing guarantee remains: parity is at clip capture, not at the final encoded pixel. Blend modes are static; there are no
|
|
9
|
+
Preview applies `mix-blend-mode` to the clip's DOM wrapper. Production applies FFmpeg's `blend` filter with the source alpha mask, then composites the blended result source-over. Chromium/CSS is the reference; FFmpeg is an approximation. The existing guarantee remains: parity is at clip capture, not at the final encoded pixel. Blend modes are static; there are no animated blend modes.
|
|
9
10
|
|
|
10
11
|
## Context
|
|
11
12
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
**Status:** Accepted. Amends [ADR-0007](./0007-make-html-documents-the-composition-unit.md) and [ADR-0010](./0010-make-timelines-the-render-unit.md).
|
|
4
4
|
**Date:** 2026-11-03
|
|
5
5
|
|
|
6
|
-
`<fy-composition>` will keep `duration-in-frames` required but make `width`, `height`, and `fps` optional. A composition that omits any of them inherits the value from the single project `format` in `
|
|
6
|
+
`<fy-composition>` will keep `duration-in-frames` required but make `width`, `height`, and `fps` optional. A composition that omits any of them inherits the value from the single project `format` in `fy.config.js`; a declared value always wins. Declaring `width` without `height` (or the reverse) remains an error. A composition that declares its full format keeps working unchanged, including in composition-only projects that have no `format`.
|
|
7
7
|
|
|
8
8
|
The unit of reuse moves from "a file with fixed output pixels" to "a source that composes at whatever the project or timeline provides". The same composition can therefore appear in a 1080p timeline and a vertical timeline without editing the file or duplicating attributes that the project already fixes. Timelines do not gain their own format: `ResolvedTimeline.format` is already `project.format`, so timeline and standalone inheritance are the same resolution.
|
|
9
9
|
|
|
@@ -21,7 +21,7 @@ The unit of reuse moves from "a file with fixed output pixels" to "a source that
|
|
|
21
21
|
- Declared metadata is distinct from resolved metadata. `CompositionDescriptor.metadata` exposes `{ format: DeclaredFormat; durationInFrames }`, and `CompositionSourceInfo` carries the resolved `metadata` plus `declaredFormat`. `CompositionMetadata`, `window.__fy.metadata`, and render results keep exposing resolved numbers only.
|
|
22
22
|
- The preview server injects the project format as a `data-fy="format"` JSON block marked `data-fy-host`. The browser host reads it to resolve the same values the Node-side validator used; the existing static-vs-runtime metadata equality check therefore still holds.
|
|
23
23
|
- The composition route and `project.json` resolve metadata in the server. `project.json` keeps exposing resolved metadata, or `null` when the document is invalid or the format cannot be resolved.
|
|
24
|
-
- Rendering a composition that omits format values in a project without `format` fails with `COMPOSITION_FORMAT_UNRESOLVED`, a context error rather than a document diagnostic. The message names both fixes: declare the attributes or add `format` to `
|
|
24
|
+
- Rendering a composition that omits format values in a project without `format` fails with `COMPOSITION_FORMAT_UNRESOLVED`, a context error rather than a document diagnostic. The message names both fixes: declare the attributes or add `format` to `fy.config.js`.
|
|
25
25
|
- A declared `fps` that differs from the project format remains `TIMELINE_FPS_MISMATCH`. The check compares the declared fps, not the resolved one, so inheritance never hides a real mismatch. Width and height keep the existing fit behavior with no mismatch error.
|
|
26
26
|
- The resolved format is part of the immutable frame environment, alongside props and loaded assets. Layouts that use viewport units become format-dependent by design; preview and production use the same resolved values.
|
|
27
27
|
- The scaffold keeps declaring an explicit format as the safe teaching default. `examples/blend/compositions/backdrop.html` demonstrates inheritance.
|
|
@@ -11,7 +11,7 @@ Frameyard 0.8 makes a composition a partial HTML fragment instead of a full HTML
|
|
|
11
11
|
- **Accept both documents and fragments.** Rejected because two authoring shapes double validation, diagnostics, documentation, and agent examples for a pre-1.0 breaking release.
|
|
12
12
|
- **Inject a fragment into the preview container without a document.** Rejected for the reasons in ADR-0007: relative asset URLs, document styles, and head content would need rewriting. Serving a generated document at the real composition URL avoids that problem.
|
|
13
13
|
- **Generate full documents at build time.** Rejected because Frameyard has no build step and the preview server already renders composition entries per request.
|
|
14
|
-
- **Let projects configure the document head.** Rejected because the author goal is to stop managing the head; a configuration surface would recreate the problem in `
|
|
14
|
+
- **Let projects configure the document head.** Rejected because the author goal is to stop managing the head; a configuration surface would recreate the problem in `fy.config.js`.
|
|
15
15
|
|
|
16
16
|
## Decision
|
|
17
17
|
|