frameyard 0.4.0 → 0.6.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.
Files changed (175) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/GLOSSARY.md +156 -24
  3. package/README.md +103 -31
  4. package/dist/cli.js +112 -19
  5. package/dist/cli.js.map +1 -1
  6. package/dist/composition/adapter.d.ts +30 -0
  7. package/dist/composition/adapter.d.ts.map +1 -0
  8. package/dist/composition/adapter.js +2 -0
  9. package/dist/composition/adapter.js.map +1 -0
  10. package/dist/composition/animation.d.ts +19 -0
  11. package/dist/composition/animation.d.ts.map +1 -0
  12. package/dist/composition/animation.js +55 -0
  13. package/dist/composition/animation.js.map +1 -0
  14. package/dist/composition/attributes.d.ts +7 -0
  15. package/dist/composition/attributes.d.ts.map +1 -0
  16. package/dist/composition/attributes.js +24 -0
  17. package/dist/composition/attributes.js.map +1 -0
  18. package/dist/composition/descriptor.d.ts +30 -0
  19. package/dist/composition/descriptor.d.ts.map +1 -0
  20. package/dist/composition/descriptor.js +188 -0
  21. package/dist/composition/descriptor.js.map +1 -0
  22. package/dist/composition/diagnostics.d.ts +12 -0
  23. package/dist/composition/diagnostics.d.ts.map +1 -0
  24. package/dist/composition/diagnostics.js +38 -0
  25. package/dist/composition/diagnostics.js.map +1 -0
  26. package/dist/composition/index.d.ts +12 -0
  27. package/dist/composition/index.d.ts.map +1 -0
  28. package/dist/composition/index.js +7 -0
  29. package/dist/composition/index.js.map +1 -0
  30. package/dist/composition/media.d.ts +27 -0
  31. package/dist/composition/media.d.ts.map +1 -0
  32. package/dist/composition/media.js +162 -0
  33. package/dist/composition/media.js.map +1 -0
  34. package/dist/composition/paths.d.ts +5 -0
  35. package/dist/composition/paths.d.ts.map +1 -0
  36. package/dist/composition/paths.js +16 -0
  37. package/dist/composition/paths.js.map +1 -0
  38. package/dist/composition/transcripts.d.ts +19 -0
  39. package/dist/composition/transcripts.d.ts.map +1 -0
  40. package/dist/composition/transcripts.js +57 -0
  41. package/dist/composition/transcripts.js.map +1 -0
  42. package/dist/composition/walk.d.ts +10 -0
  43. package/dist/composition/walk.d.ts.map +1 -0
  44. package/dist/composition/walk.js +32 -0
  45. package/dist/composition/walk.js.map +1 -0
  46. package/dist/contracts.d.ts +14 -0
  47. package/dist/contracts.d.ts.map +1 -1
  48. package/dist/contracts.js.map +1 -1
  49. package/dist/errors.d.ts +1 -1
  50. package/dist/errors.d.ts.map +1 -1
  51. package/dist/errors.js.map +1 -1
  52. package/dist/html/document-adapter.d.ts +5 -0
  53. package/dist/html/document-adapter.d.ts.map +1 -0
  54. package/dist/html/document-adapter.js +17 -0
  55. package/dist/html/document-adapter.js.map +1 -0
  56. package/dist/html/parse.d.ts +2 -6
  57. package/dist/html/parse.d.ts.map +1 -1
  58. package/dist/html/parse.js.map +1 -1
  59. package/dist/html/validate.d.ts.map +1 -1
  60. package/dist/html/validate.js +92 -375
  61. package/dist/html/validate.js.map +1 -1
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +1 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/preview/main.d.ts.map +1 -1
  67. package/dist/preview/main.js +93 -13
  68. package/dist/preview/main.js.map +1 -1
  69. package/dist/preview/timeline-data.d.ts +85 -0
  70. package/dist/preview/timeline-data.d.ts.map +1 -0
  71. package/dist/preview/timeline-data.js +2 -0
  72. package/dist/preview/timeline-data.js.map +1 -0
  73. package/dist/preview/timeline-host.d.ts +19 -0
  74. package/dist/preview/timeline-host.d.ts.map +1 -0
  75. package/dist/preview/timeline-host.js +297 -0
  76. package/dist/preview/timeline-host.js.map +1 -0
  77. package/dist/preview/timeline-main.d.ts +17 -0
  78. package/dist/preview/timeline-main.d.ts.map +1 -0
  79. package/dist/preview/timeline-main.js +364 -0
  80. package/dist/preview/timeline-main.js.map +1 -0
  81. package/dist/project.d.ts +16 -1
  82. package/dist/project.d.ts.map +1 -1
  83. package/dist/project.js +81 -26
  84. package/dist/project.js.map +1 -1
  85. package/dist/renderer/browser.d.ts +2 -0
  86. package/dist/renderer/browser.d.ts.map +1 -1
  87. package/dist/renderer/browser.js +38 -6
  88. package/dist/renderer/browser.js.map +1 -1
  89. package/dist/renderer/ffmpeg.d.ts +61 -0
  90. package/dist/renderer/ffmpeg.d.ts.map +1 -1
  91. package/dist/renderer/ffmpeg.js +198 -0
  92. package/dist/renderer/ffmpeg.js.map +1 -1
  93. package/dist/renderer/index.d.ts.map +1 -1
  94. package/dist/renderer/index.js +18 -7
  95. package/dist/renderer/index.js.map +1 -1
  96. package/dist/renderer/timeline.d.ts +109 -0
  97. package/dist/renderer/timeline.d.ts.map +1 -0
  98. package/dist/renderer/timeline.js +984 -0
  99. package/dist/renderer/timeline.js.map +1 -0
  100. package/dist/runtime/document-adapter.d.ts +4 -0
  101. package/dist/runtime/document-adapter.d.ts.map +1 -0
  102. package/dist/runtime/document-adapter.js +19 -0
  103. package/dist/runtime/document-adapter.js.map +1 -0
  104. package/dist/runtime/host.d.ts +2 -0
  105. package/dist/runtime/host.d.ts.map +1 -1
  106. package/dist/runtime/host.js +78 -183
  107. package/dist/runtime/host.js.map +1 -1
  108. package/dist/runtime/media.d.ts.map +1 -1
  109. package/dist/runtime/media.js +19 -50
  110. package/dist/runtime/media.js.map +1 -1
  111. package/dist/scaffold.d.ts.map +1 -1
  112. package/dist/scaffold.js +93 -23
  113. package/dist/scaffold.js.map +1 -1
  114. package/dist/server/preview-html.d.ts.map +1 -1
  115. package/dist/server/preview-html.js +15 -1
  116. package/dist/server/preview-html.js.map +1 -1
  117. package/dist/server/server.d.ts.map +1 -1
  118. package/dist/server/server.js +39 -1
  119. package/dist/server/server.js.map +1 -1
  120. package/dist/server/timeline-preview-data.d.ts +4 -0
  121. package/dist/server/timeline-preview-data.d.ts.map +1 -0
  122. package/dist/server/timeline-preview-data.js +97 -0
  123. package/dist/server/timeline-preview-data.js.map +1 -0
  124. package/dist/server/timeline-preview-html.d.ts +4 -0
  125. package/dist/server/timeline-preview-html.d.ts.map +1 -0
  126. package/dist/server/timeline-preview-html.js +227 -0
  127. package/dist/server/timeline-preview-html.js.map +1 -0
  128. package/dist/timeline/plan.d.ts +32 -0
  129. package/dist/timeline/plan.d.ts.map +1 -0
  130. package/dist/timeline/plan.js +68 -0
  131. package/dist/timeline/plan.js.map +1 -0
  132. package/dist/timeline/resolve.d.ts +60 -0
  133. package/dist/timeline/resolve.d.ts.map +1 -0
  134. package/dist/timeline/resolve.js +523 -0
  135. package/dist/timeline/resolve.js.map +1 -0
  136. package/dist/timeline/schema.d.ts +71 -0
  137. package/dist/timeline/schema.d.ts.map +1 -0
  138. package/dist/timeline/schema.js +425 -0
  139. package/dist/timeline/schema.js.map +1 -0
  140. package/dist/version.d.ts +1 -1
  141. package/dist/version.js +1 -1
  142. package/docs/adr/0002-make-frame-and-props-the-only-animation-state.md +2 -0
  143. package/docs/adr/0005-keep-parallel-rendering-opt-in-and-frame-ordered.md +2 -0
  144. package/docs/adr/0006-seek-embedded-media-from-the-frame-clock.md +4 -0
  145. package/docs/adr/0007-make-html-documents-the-composition-unit.md +1 -1
  146. package/docs/adr/0008-share-the-composition-document-grammar.md +18 -0
  147. package/docs/adr/0009-composite-production-frames-in-software.md +37 -0
  148. package/docs/adr/0010-make-timelines-the-render-unit.md +24 -0
  149. package/docs/adr/0011-compose-timeline-frames-in-a-live-browser-host.md +22 -0
  150. package/docs/adr/0012-render-timelines-with-segmented-lossless-clip-intermediates.md +31 -0
  151. package/docs/v0.1-design.md +135 -85
  152. package/examples/demo/README.md +11 -4
  153. package/examples/demo/timelines/demo.timeline.json +12 -0
  154. package/examples/demo/video.config.js +4 -0
  155. package/examples/video/README.md +105 -0
  156. package/examples/video/assets/clip.mp4 +0 -0
  157. package/examples/video/assets/clip.webm +0 -0
  158. package/examples/video/compositions/video-mp4.html +362 -0
  159. package/examples/video/compositions/video-overlay.html +350 -0
  160. package/examples/video/compositions/video.html +362 -0
  161. package/examples/video/props/video-timeline.json +10 -0
  162. package/examples/video/props/video.json +8 -0
  163. package/examples/video/scripts/make-clip.sh +109 -0
  164. package/examples/video/timelines/video-timeline-mp4.timeline.json +44 -0
  165. package/examples/video/timelines/video-timeline.timeline.json +44 -0
  166. package/examples/video/video.config.js +12 -0
  167. package/examples/webgl/README.md +30 -0
  168. package/examples/webgl/compositions/webgl.controller.js +200 -0
  169. package/examples/webgl/compositions/webgl.html +215 -0
  170. package/examples/webgl/props/webgl.json +6 -0
  171. package/examples/webgl/video.config.js +5 -0
  172. package/package.json +4 -2
  173. package/skills/frameyard/SKILL.md +18 -13
  174. package/skills/frameyard/references/json-results.md +2 -2
  175. package/skills/frameyard/references/timelines.md +141 -0
package/CHANGELOG.md CHANGED
@@ -8,6 +8,103 @@ Frameyard uses `0.x` versions until the composition, configuration, CLI,
8
8
  JSON-result, transcript, and skill contracts stabilize. Before `1.0.0`, a
9
9
  contract change may ship in a minor release and is called out explicitly below.
10
10
 
11
+ ## [0.6.0] - 2026-11-01
12
+
13
+ ### Added
14
+
15
+ - JSON timelines with project-fixed format, video/audio tracks, composition,
16
+ media, and nested-timeline clips, source ranges, per-clip props, static
17
+ transforms, audio settings, and derived or overridden duration.
18
+ - Timeline validation: strict schema, references, composition static
19
+ validation, media probing, frame-rate checks, source bounds, overlaps,
20
+ nested cycles, and structured diagnostics.
21
+ - Segmented timeline rendering: Chromium captures composition and
22
+ nested-timeline clips to alpha-preserving FFV1 intermediates; FFmpeg
23
+ composites and encodes segments; segments are concatenated in order; audio
24
+ is mixed once and muxed.
25
+ - Transparent composition capture and nested timeline groups with recursive
26
+ visual, still, check, and audio handling.
27
+ - Timeline preview in `dev`: composition and timeline selectors, program
28
+ monitor, read-only tracks and clips, playhead, playback, frame stepping, and
29
+ one-second jumps with buttons or arrow keys, audio controls, and diagnostics.
30
+ - Timeline visual transforms accept `width`/`height` as an explicit clip box,
31
+ mutually exclusive with `scale`.
32
+ - `render`, `check`, and `still` accept timeline IDs alongside composition
33
+ IDs. Timeline renders add `--workers` and `--scratch`; timeline `--props`
34
+ is a map keyed by composition clip ID.
35
+ - `video.config.js` supports an optional project `format` and explicit
36
+ `timelines` map. `project.json` publishes `format` and `timelines`.
37
+ - Timeline-first `init` scaffold with a composition clip, timeline override
38
+ props, and `main` commands.
39
+ - The video example adds WebM and MP4 timelines that place video clips under a
40
+ transparent HTML overlay.
41
+ - Official skill reference for timelines, clips, tracks, nested timelines,
42
+ props overrides, commands, preview, and determinism.
43
+ - Timeline config, schema, resolution, planning, rendering, preview, and
44
+ runtime preview tests.
45
+
46
+ ### Changed
47
+
48
+ - `render` defaults to `out/<id>.mp4` for timelines and compositions.
49
+ - `check` and `still` use timeline clip capture and composite behavior for
50
+ timeline targets.
51
+ - Timeline audio mixing pads short inputs to the full timeline duration.
52
+ - Timed timeline layers are normalized to the project frame rate before
53
+ compositing.
54
+ - The design baseline, glossary, and architecture decision records describe
55
+ timelines as the render unit and compositions as clip sources.
56
+
57
+ ### Fixed
58
+
59
+ - Composition audio, embedded video audio, and nested timeline audio are
60
+ trimmed and shifted by clip source ranges and groups.
61
+ - Selecting a different composition in the preview picker reloads the iframe
62
+ instead of leaving the previous composition loaded.
63
+
64
+ [0.6.0]: https://github.com/vladiantio/frameyard/compare/v0.5.0...v0.6.0
65
+
66
+ ## [0.5.0] - 2026-10-31
67
+
68
+ ### Added
69
+
70
+ - `examples/webgl/` demonstrates a frame-seeked WebGL shader driven by an
71
+ external controller.
72
+ - `examples/video/` demonstrates two-pass embedded video with the same
73
+ composition rendered from WebM and MP4 sources, plus a script that
74
+ regenerates both clips with FFmpeg.
75
+ - `test/examples.test.ts` captures a still from every bundled example.
76
+ - `pnpm compare-stills <a.png> <b.png>` reports an exact decoded-pixel diff and
77
+ exits nonzero on any difference, for checking determinism at the capture
78
+ boundary.
79
+ - The benchmark adds WebGL and embedded-video fixtures, `--concurrency`, and
80
+ bench-only `--browser-arg`/`--no-browser-arg` A/B runs. `bench/README.md`
81
+ documents the measurement recipe.
82
+
83
+ ### Changed
84
+
85
+ - `render` no longer requires `--out`. The default output is
86
+ `out/<composition-id>.mp4` inside the project root, and scaffolded projects
87
+ ignore `out/` in `.gitignore`.
88
+ - Production capture composites frames in software while WebGL remains on
89
+ SwiftShader, and opens and closes parallel browser sessions concurrently.
90
+ Sequential and `--concurrency 4` renders are substantially faster; capture
91
+ timing and pixels can change for existing projects. Determinism remains at
92
+ the capture boundary for the same pinned runtime and inputs. See
93
+ [ADR 0009](./docs/adr/0009-composite-production-frames-in-software.md).
94
+ - Static validation, the composition host, and preview share one browser-safe
95
+ composition descriptor for metadata, props, controller, animation, media, and
96
+ transcript declarations. This is an internal refactor with no authoring
97
+ contract change.
98
+
99
+ ### Fixed
100
+
101
+ - Embedded video seeks 1 ms past the frame time so millisecond-rounded WebM
102
+ timestamps select the intended source frame.
103
+ - Capture sessions stay hidden until the first seek, so an animated ancestor
104
+ cannot leave the load frame on screen in the captured still.
105
+
106
+ [0.5.0]: https://github.com/vladiantio/frameyard/compare/v0.4.0...v0.5.0
107
+
11
108
  ## [0.4.0] - 2026-10-30
12
109
 
13
110
  ### Breaking
@@ -63,6 +160,10 @@ contract change may ship in a minor release and is called out explicitly below.
63
160
  - Preview loads each composition document in a same-origin iframe; `check`,
64
161
  `still`, and `render` navigate directly to the composition URL. The separate
65
162
  preview-page render path is removed.
163
+ - Static validation and the composition host read metadata, default props,
164
+ controller declarations, animation, media, and transcript rules through one
165
+ browser-safe composition document reader. Controller `src` is project-relative
166
+ in host output; the authoring value is retained as `rawSrc`.
66
167
  - `check` fails fast on static errors without launching Chromium; warnings
67
168
  still allow frame evaluation. Nested `data-fy-repeat` is rejected with a
68
169
  clear diagnostic; nested data uses the controller.
package/GLOSSARY.md CHANGED
@@ -1,23 +1,31 @@
1
1
  # Frameyard
2
2
 
3
- Frameyard is a local-first framework for creating short, parameterized videos with HTML, CSS, and JavaScript. Its domain separates reusable compositions from the fixed inputs and deterministic renders that turn them into videos.
3
+ Frameyard is a local-first framework for creating short, parameterized videos with HTML, CSS, and JavaScript. Its domain separates reusable compositions from the timelines that assemble them into a video, and from the fixed inputs and deterministic renders that turn those timelines into output.
4
4
 
5
5
  ## Language
6
6
 
7
7
  ### Authoring
8
8
 
9
9
  **Project**:
10
- A collection of related compositions and the assets and configuration they share.
10
+ A collection of related compositions, timelines, and the assets and configuration they share.
11
11
  _Avoid_: Video, render
12
12
 
13
+ **Project format**:
14
+ The fixed width, height, and frame rate shared by every timeline in a project.
15
+ _Avoid_: Composition metadata, render options
16
+
13
17
  **Composition**:
14
- A uniquely identified, reusable video definition with fixed dimensions, frame rate, duration in frames, and content parameterized by props.
18
+ A uniquely identified, reusable video source with fixed dimensions, frame rate, duration in frames, and content parameterized by props.
15
19
  _Avoid_: Scene, template, video
16
20
 
17
21
  **Composition metadata**:
18
- The fixed dimensions, frame rate, and duration in frames that define a composition's output contract.
22
+ The fixed dimensions, frame rate, and duration in frames that define a composition's source contract.
19
23
  _Avoid_: Render options, props
20
24
 
25
+ **Composition descriptor**:
26
+ The fixed facts read from an HTML composition before frame production: composition metadata, default props, and the controller declaration. It excludes per-load declarations such as audio clips, transcripts, and animation schedules.
27
+ _Avoid_: Composition config, parsed document
28
+
21
29
  **Composition lifecycle**:
22
30
  The host-driven sequence that loads an HTML composition, seeks it to frames, and releases it.
23
31
  _Avoid_: Render loop, playback lifecycle
@@ -34,6 +42,10 @@ _Avoid_: Build, release
34
42
  A composition whose source is an HTML document.
35
43
  _Avoid_: HTML template, page
36
44
 
45
+ **Transparent composition**:
46
+ A composition that does not paint a background, so a timeline clip can reveal the layers below it.
47
+ _Avoid_: Alpha composition, overlay
48
+
37
49
  **Composition controller**:
38
50
  An optional JavaScript controller, either inline in the composition document or in an external module, that performs per-frame computation an HTML composition's declarative HTML and CSS cannot express.
39
51
  _Avoid_: Composition module, plugin
@@ -51,25 +63,113 @@ An HTML attribute that maps a prop into text, an attribute, a class, or element
51
63
  _Avoid_: Template expression, interpolation
52
64
 
53
65
  **Props**:
54
- The immutable, JSON-serializable inputs supplied to a composition for one render.
66
+ The immutable, JSON-serializable inputs supplied to a composition for one load; a timeline clip can fix the props for its instance of the composition.
55
67
  _Avoid_: Options, settings, mutable state
56
68
 
57
69
  **Asset**:
58
- A local file required by a composition, whether static or generated.
70
+ A local file required by a composition or timeline, whether static or generated.
59
71
  _Avoid_: Resource, media file
60
72
 
73
+ **Timeline**:
74
+ A top-level edit that assembles tracks and clips into one video under the project format, with a duration derived from its clips or explicitly overridden.
75
+ _Avoid_: Sequence, composition, project
76
+
77
+ **Timeline document**:
78
+ The project-local JSON document that declares a timeline's tracks, clips, optional duration, and background.
79
+ _Avoid_: Composition, config
80
+
81
+ **Track**:
82
+ An ordered layer in a timeline. Video tracks composite; audio tracks mix.
83
+ _Avoid_: Channel, lane
84
+
85
+ **Video track**:
86
+ A track whose clips contribute visual layers, ordered from bottom to top.
87
+ _Avoid_: Visual lane
88
+
89
+ **Audio track**:
90
+ A track whose clips are audio-only and contribute additively to the timeline audio mix.
91
+ _Avoid_: Soundtrack
92
+
93
+ **Clip**:
94
+ A placement of a clip source on a track, with a timeline start, source in-point, duration, and presentation settings.
95
+ _Avoid_: Segment, item, block
96
+
97
+ **Clip source**:
98
+ The composition, nested timeline, or local media asset that a clip presents.
99
+ _Avoid_: Media, asset
100
+
101
+ **Composition clip**:
102
+ A clip whose source is a composition, with fixed props for that instance.
103
+ _Avoid_: Composition instance, nested composition
104
+
105
+ **Media clip**:
106
+ A clip whose source is a local video, image, or audio asset.
107
+ _Avoid_: Asset clip, raw clip
108
+
109
+ **Nested timeline clip**:
110
+ A clip whose source is another timeline.
111
+ _Avoid_: Nested sequence, compound clip
112
+
113
+ **Source in-point**:
114
+ The first source frame a clip uses.
115
+ _Avoid_: Trim start, offset
116
+
117
+ **Timeline frame**:
118
+ An integer-addressed position on a timeline's master frame grid.
119
+ _Avoid_: Composition frame, timestamp
120
+
121
+ **Composition frame**:
122
+ An integer-addressed position within a composition; the frame a controller receives.
123
+ _Avoid_: Timeline frame
124
+
125
+ **Timeline duration**:
126
+ The number of timeline frames a timeline produces, derived from its clips or explicitly overridden.
127
+ _Avoid_: Composition duration, length
128
+
129
+ **Timeline background**:
130
+ The optional color behind all layers of a timeline; it is transparent by default and the final video composites it over black.
131
+ _Avoid_: Canvas, backdrop
132
+
133
+ **Fit policy**:
134
+ How a clip source's natural frame is fitted into the project frame or an explicit clip box: contained, covering, or stretched.
135
+ _Avoid_: Resize mode, object-fit
136
+
137
+ **Clip transform**:
138
+ The static size, position, rotation, and opacity applied to a visual clip. Size is either an explicit `width`/`height` box or a `scale` multiplier.
139
+ _Avoid_: Effect, animation
140
+
141
+ **Nested timeline**:
142
+ A timeline used as a clip source inside another timeline.
143
+ _Avoid_: Compound composition
144
+
61
145
  ### Deterministic execution
62
146
 
63
147
  **Frame**:
64
- An integer-addressed position on a composition's timeline.
148
+ An integer-addressed position on a timeline or composition frame range; use timeline frame or composition frame when the distinction matters.
65
149
  _Avoid_: Timestamp, animation tick
66
150
 
151
+ **Active clip**:
152
+ A clip whose timeline range contains the current timeline frame.
153
+ _Avoid_: Visible clip
154
+
155
+ **Clip capture**:
156
+ The pixel frames a composition produces for a timeline clip before the timeline compositor combines layers.
157
+ _Avoid_: Screenshot, render
158
+
159
+ **Timeline composite**:
160
+ The deterministic combination of a timeline's layers into output frames.
161
+ _Avoid_: Browser composite, preview
162
+
163
+ **Render segment**:
164
+ A bounded span of a timeline that is rendered and encoded independently, then joined in timeline order.
165
+ _Avoid_: Chunk, part
166
+
67
167
  **Deterministic execution**:
68
- The rule that a composition's visual state at any frame depends only on that frame, its props, and pre-loaded data and assets.
168
+ The rule that a timeline frame's visual state depends only on that timeline frame, its clip sources and their props, and pre-loaded data and assets; a composition frame depends only on its composition frame, props, and pre-loaded data and assets.
69
169
  _Avoid_: Playback-driven animation
70
170
 
71
171
  **Frame clock**:
72
- The single source of animation time, derived from the current frame and the composition's frame rate.
172
+ The single source of animation time within a composition, derived from its composition frame and frame rate; the preview host or the production segment renderer drives it by seeking each active composition clip.
73
173
  _Avoid_: Wall clock, playback timer
74
174
 
75
175
  **Frame-state variable**:
@@ -77,7 +177,7 @@ A CSS custom property whose value is derived from the current composition frame.
77
177
  _Avoid_: Animation variable, clock variable
78
178
 
79
179
  **Seek safety**:
80
- The property that any frame can be produced correctly without depending on previously produced frames.
180
+ The property that any timeline frame can be produced correctly without depending on previously produced timeline frames, by seeking each active clip to its source frame.
81
181
  _Avoid_: History-dependent updates
82
182
 
83
183
  **Deterministic randomness**:
@@ -85,15 +185,15 @@ Random values derived statelessly from a key so they do not depend on call order
85
185
  _Avoid_: Unseeded randomness
86
186
 
87
187
  **Frame production**:
88
- The phase in which the runtime produces the visual state of a requested frame, without network access or model inference.
188
+ The phase in which the runtime produces the visual state of a requested timeline frame, without network access or model inference.
89
189
  _Avoid_: Real-time playback
90
190
 
91
191
  **Loading phase**:
92
- The phase before frame production when required data and assets become available.
192
+ The phase before frame production when all clip sources, compositions, media, data, and assets become available.
93
193
  _Avoid_: Per-frame fetching
94
194
 
95
195
  **Embedded media**:
96
- A local video file placed in a composition whose presentation time is derived from the composition frame, with optional frame offset and source trim.
196
+ A local video file placed inside a composition whose presentation time is derived from the composition frame, with optional frame offset and source trim.
97
197
  _Avoid_: Live stream, video track
98
198
 
99
199
  **Media settle**:
@@ -106,42 +206,74 @@ _Avoid_: GPU animation, live render
106
206
 
107
207
  ### Audio
108
208
 
109
- **Audio clip**:
110
- An audio source placed on a composition's timeline with a start frame, source trim, and volume.
111
- _Avoid_: Audio track
209
+ **Composition audio clip**:
210
+ An audio source declared inside a composition and placed by composition frames; it joins the timeline mix when the composition is used as a clip.
211
+ _Avoid_: Audio clip, audio track
212
+
213
+ **Timeline audio clip**:
214
+ An audio-only clip placed on a timeline audio track.
215
+ _Avoid_: Audio clip, soundtrack
112
216
 
113
217
  **Audio mix**:
114
- The single offline mix of a composition's audio clips for one render.
218
+ The single offline mix of a timeline's audible clips for one render.
115
219
  _Avoid_: Soundtrack, audio track, final cut
116
220
 
221
+ **Embedded audio**:
222
+ The audio track of an embedded video, contributed to the mix unless the video or clip is muted.
223
+ _Avoid_: Live audio
224
+
117
225
  ### Rendering
118
226
 
119
227
  **Composition host**:
120
228
  The injected runtime that loads an HTML composition, applies its bindings, and exposes its frame clock to preview and render.
121
229
  _Avoid_: Preview runtime, render runtime
122
230
 
231
+ **Timeline host**:
232
+ The preview runtime that loads a timeline, drives a bounded pool of active clip sources, and exposes the timeline frame clock to the preview.
233
+ _Avoid_: Timeline runtime, production renderer, editor
234
+
235
+ **Timeline renderer**:
236
+ The Node-side segmented renderer that captures composition clips, composites and encodes timeline segments, and joins them into one video.
237
+ _Avoid_: Timeline host, browser renderer
238
+
123
239
  **Preview**:
124
- An interactive, frame-accurate inspection of a composition using the same composition behavior as a render.
240
+ An interactive, frame-accurate inspection of a timeline or composition using the same behavior as a render, including a program monitor and a read-only timeline view.
125
241
  _Avoid_: Visual editor
126
242
 
243
+ **Playhead**:
244
+ The current timeline frame in preview.
245
+ _Avoid_: Cursor, scrubber
246
+
247
+ **Program monitor**:
248
+ The preview surface that shows the timeline at the playhead.
249
+ _Avoid_: Stage, canvas
250
+
127
251
  **Check**:
128
- A validation operation that first runs static composition validation, then loads a composition and evaluates every frame without capturing or encoding.
252
+ A validation operation that first runs static validation, then loads a timeline or composition and evaluates every frame without capturing or encoding.
129
253
  _Avoid_: Test render, dry run
130
254
 
131
255
  **Static composition validation**:
132
256
  The Node-side validation of a composition document's metadata, bindings, controller declaration, scripts, and asset references before browser frame production.
133
257
  _Avoid_: Lint, preflight
134
258
 
259
+ **Static timeline validation**:
260
+ The Node-side validation of a timeline document's tracks, clips, references, nested timelines, media, and referenced compositions before browser frame production.
261
+ _Avoid_: Lint, preflight
262
+
135
263
  **Composition diagnostic**:
136
264
  A structured error or warning about a composition's source, metadata, bindings, controller, assets, or frame production, with a stable code and optional source location.
137
265
  _Avoid_: Log message, error string
138
266
 
267
+ **Timeline diagnostic**:
268
+ A structured error or warning about a timeline's source, tracks, clips, references, media, or frame production, with a stable code and optional source location.
269
+ _Avoid_: Log message, error string
270
+
139
271
  **Render**:
140
- The production of one complete video from a composition and a fixed set of props.
272
+ The production of one complete video from a timeline or a standalone composition with fixed inputs.
141
273
  _Avoid_: Recording, export
142
274
 
143
275
  **Render concurrency**:
144
- The optional number of independent browser sessions used to seek and capture frames during a render. Frames are still encoded in timeline order, and concurrency must not change visual state.
276
+ The optional number of independent browser sessions used to seek and capture frames during a composition render; timeline rendering is sequential in 0.6. Frames are still encoded in timeline order, and concurrency must not change visual state.
145
277
  _Avoid_: Parallel composition, out-of-order output
146
278
 
147
279
  **Video**:
@@ -149,11 +281,11 @@ The finished audiovisual output of a successful render.
149
281
  _Avoid_: Composition, project
150
282
 
151
283
  **Still**:
152
- A single frame captured as a PNG through the production rendering path for debugging.
284
+ A single frame captured as a PNG through the production rendering path for a timeline or composition.
153
285
  _Avoid_: Frame export, image sequence
154
286
 
155
287
  **Reproducibility**:
156
- The guarantee that, for the same composition revision, props, assets, and frame under a pinned runtime/browser environment, the visual state is identical. It does not imply identical encoded bytes, even on the same machine; encoded output depends on the encoder and its runtime.
288
+ The guarantee that, for the same timeline or composition revision, props, assets, and frame under a pinned runtime/browser environment, the visual state is identical. It does not imply identical encoded bytes, even on the same machine; encoded output depends on the encoder and its runtime.
157
289
  _Avoid_: Bit-for-bit encoding equality
158
290
 
159
291
  ### Agent operation
@@ -169,7 +301,7 @@ _Avoid_: Agent runtime, MCP server
169
301
  ### Local asset production
170
302
 
171
303
  **Generated asset**:
172
- A frozen local input produced by speech synthesis or transcription before a composition is loaded or rendered.
304
+ A frozen local input produced by speech synthesis or transcription before a timeline or composition is loaded or rendered.
173
305
  _Avoid_: Per-frame generation
174
306
 
175
307
  **Provenance manifest**: