@warpgogol/forge 0.14.0 → 0.16.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 (48) hide show
  1. package/AGENTS.md +5 -3
  2. package/README.md +58 -5
  3. package/dist/os/adr/frontmatter-io.d.ts +1 -0
  4. package/dist/os/adr/frontmatter-io.d.ts.map +1 -1
  5. package/dist/os/adr/frontmatter-io.js +3 -0
  6. package/dist/os/adr/frontmatter-io.js.map +1 -1
  7. package/dist/os/adr/handlers/validate.d.ts.map +1 -1
  8. package/dist/os/adr/handlers/validate.js +2 -2
  9. package/dist/os/adr/handlers/validate.js.map +1 -1
  10. package/dist/os/core/core.module.d.ts.map +1 -1
  11. package/dist/os/core/core.module.js +9 -0
  12. package/dist/os/core/core.module.js.map +1 -1
  13. package/dist/src/onboarding/create.d.ts.map +1 -1
  14. package/dist/src/onboarding/create.js +5 -2
  15. package/dist/src/onboarding/create.js.map +1 -1
  16. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  17. package/dist/src/onboarding/doctor.js +38 -0
  18. package/dist/src/onboarding/doctor.js.map +1 -1
  19. package/dist/src/onboarding/invariant-engine.d.ts.map +1 -1
  20. package/dist/src/onboarding/invariant-engine.js +14 -7
  21. package/dist/src/onboarding/invariant-engine.js.map +1 -1
  22. package/dist/src/onboarding/scaffold-project.d.ts.map +1 -1
  23. package/dist/src/onboarding/scaffold-project.js +25 -5
  24. package/dist/src/onboarding/scaffold-project.js.map +1 -1
  25. package/dist/src/profiles/profile-schema.d.ts +73 -8
  26. package/dist/src/profiles/profile-schema.d.ts.map +1 -1
  27. package/dist/src/profiles/profile-schema.js +35 -10
  28. package/dist/src/profiles/profile-schema.js.map +1 -1
  29. package/dist/src/profiles/stack-profile.d.ts +26 -2
  30. package/dist/src/profiles/stack-profile.d.ts.map +1 -1
  31. package/dist/src/profiles/stack-profile.js +4 -0
  32. package/dist/src/profiles/stack-profile.js.map +1 -1
  33. package/package.json +1 -1
  34. package/profiles/editframe-templates/composition-agents.md +70 -0
  35. package/profiles/editframe-templates/composition.tsx +33 -0
  36. package/profiles/{editframe-html-templates/composition-agents.md → editframe-templates/html-composition-agents.md} +15 -16
  37. package/profiles/{editframe-html.yaml → editframe.yaml} +170 -56
  38. package/skills/fo/ef-brand-video-generator/SKILL.md +101 -0
  39. package/skills/fo/ef-composition/SKILL.md +147 -0
  40. package/skills/fo/ef-composition-review/SKILL.md +10 -10
  41. package/skills/fo/ef-dev-server/SKILL.md +107 -0
  42. package/skills/fo/ef-editor-gui/SKILL.md +131 -0
  43. package/skills/fo/ef-motion-design/SKILL.md +118 -0
  44. package/skills/fo/ef-onboard/SKILL.md +16 -29
  45. package/skills/fo/ef-render-verify/SKILL.md +2 -2
  46. package/skills/fo/ef-webhooks/SKILL.md +95 -0
  47. package/skills/fo/fo-session-retro/SKILL.md +2 -2
  48. package/profiles/editframe-html-templates/composition.html +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"profile-schema.js","sourceRoot":"","sources":["../../../src/profiles/profile-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile-schema.js","sourceRoot":"","sources":["../../../src/profiles/profile-schema.ts"],"names":[],"mappings":"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"}
@@ -67,12 +67,12 @@ export declare const stackProfileSchema: z.ZodObject<{
67
67
  "filename-pattern": "filename-pattern";
68
68
  "file-contains": "file-contains";
69
69
  "file-not-contains": "file-not-contains";
70
- "html-attribute-pattern": "html-attribute-pattern";
70
+ "attribute-pattern": "attribute-pattern";
71
71
  }>;
72
72
  glob: z.ZodOptional<z.ZodString>;
73
73
  pattern: z.ZodOptional<z.ZodString>;
74
74
  negatedPattern: z.ZodOptional<z.ZodString>;
75
- element: z.ZodOptional<z.ZodString>;
75
+ elements: z.ZodOptional<z.ZodArray<z.ZodString>>;
76
76
  attribute: z.ZodOptional<z.ZodString>;
77
77
  }, z.core.$strip>>;
78
78
  }, z.core.$strip>>>;
@@ -108,6 +108,28 @@ export declare const stackProfileSchema: z.ZodObject<{
108
108
  prefix: z.ZodDefault<z.ZodString>;
109
109
  }, z.core.$strip>>;
110
110
  }, z.core.$strip>>;
111
+ prerequisites: z.ZodOptional<z.ZodArray<z.ZodObject<{
112
+ id: z.ZodString;
113
+ name: z.ZodString;
114
+ check: z.ZodString;
115
+ installHint: z.ZodOptional<z.ZodString>;
116
+ severity: z.ZodDefault<z.ZodEnum<{
117
+ error: "error";
118
+ warning: "warning";
119
+ }>>;
120
+ }, z.core.$strip>>>;
121
+ templates: z.ZodOptional<z.ZodArray<z.ZodObject<{
122
+ id: z.ZodString;
123
+ default: z.ZodOptional<z.ZodBoolean>;
124
+ firstWorkspace: z.ZodObject<{
125
+ path: z.ZodString;
126
+ files: z.ZodArray<z.ZodObject<{
127
+ path: z.ZodString;
128
+ content: z.ZodString;
129
+ }, z.core.$strip>>;
130
+ install: z.ZodDefault<z.ZodArray<z.ZodString>>;
131
+ }, z.core.$strip>;
132
+ }, z.core.$strip>>>;
111
133
  }, z.core.$strip>;
112
134
  export interface ProfileFile {
113
135
  path: string;
@@ -130,6 +152,8 @@ export interface StackProfile extends StackProfileDomainFields {
130
152
  files: ProfileFile[];
131
153
  install: string[];
132
154
  };
155
+ prerequisites?: import("./profile-schema.ts").ProfilePrerequisite[];
156
+ templates?: import("./profile-schema.ts").ProfileTemplate[];
133
157
  }
134
158
  export declare function loadStackProfile(profilePath: string): StackProfile;
135
159
  export declare function listStackProfiles(forgeRoot: string): StackProfile[];
@@ -1 +1 @@
1
- {"version":3,"file":"stack-profile.d.ts","sourceRoot":"","sources":["../../../src/profiles/stack-profile.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAkC,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAMpG,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0C7B,CAAC;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,wBAAwB;IAC5D,MAAM,EAAE,uBAAuB,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,EAAE,WAAW,EAAE,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAMD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAkBlE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAiBnE;AAMD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,IAAI,CAO9F"}
1
+ {"version":3,"file":"stack-profile.d.ts","sourceRoot":"","sources":["../../../src/profiles/stack-profile.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAkC,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAMpG,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8C7B,CAAC;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,wBAAwB;IAC5D,MAAM,EAAE,uBAAuB,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,EAAE,WAAW,EAAE,CAAC;KACtB,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,aAAa,CAAC,EAAE,OAAO,qBAAqB,EAAE,mBAAmB,EAAE,CAAC;IACpE,SAAS,CAAC,EAAE,OAAO,qBAAqB,EAAE,eAAe,EAAE,CAAC;CAC7D;AAMD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAkBlE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAiBnE;AAMD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,IAAI,CAO9F"}
@@ -60,6 +60,10 @@ export const stackProfileSchema = z.object({
60
60
  assets: stackProfileDomainFieldsSchema.shape.assets,
61
61
  // RFC-0680: Release lifecycle declaration
62
62
  release: stackProfileDomainFieldsSchema.shape.release,
63
+ // Prerequisites: system-level dependency checks (e.g. FFmpeg)
64
+ prerequisites: stackProfileDomainFieldsSchema.shape.prerequisites,
65
+ // Templates: multi-template profiles (e.g. React + HTML)
66
+ templates: stackProfileDomainFieldsSchema.shape.templates,
63
67
  });
64
68
  // ---------------------------------------------------------------------------
65
69
  // Loader
@@ -1 +1 @@
1
- {"version":3,"file":"stack-profile.js","sourceRoot":"","sources":["../../../src/profiles/stack-profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack-profile.js","sourceRoot":"","sources":["../../../src/profiles/stack-profile.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warpgogol/forge",
3
- "version": "0.14.0",
3
+ "version": "0.16.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -0,0 +1,70 @@
1
+ # Composition Workspace
2
+
3
+ This workspace contains an Editframe video composition.
4
+
5
+ ## Domain terminology
6
+
7
+ - **Composition** — the artifact this workspace produces (a `.tsx` file using `@editframe/react` components).
8
+ - **Scene** — a structural module within a composition (a `Timegroup` block).
9
+ - **Director** — the operator who creates and renders the composition.
10
+
11
+ ## Quality invariants
12
+
13
+ | ID | Description | Severity |
14
+ | --- | --- | --- |
15
+ | VIDEO-01 | Composition filenames must use kebab-case (lowercase letters, digits, hyphens only). | error |
16
+ | VIDEO-02 | Scene durations must use `contain` fit mode by default to avoid unexpected cropping. Use `cover` or `fill` only when intentionally overriding. | warning |
17
+ | VIDEO-03 | All speech audio elements (`Audio` with speech content) must have corresponding `Captions` components for accessibility. | error |
18
+
19
+ Additional time model invariants (VIDEO-04 through VIDEO-09) may be available. Run `forge doctor` to check the full invariant set enforced by the active profile.
20
+
21
+ ## Time model concepts
22
+
23
+ Editframe compositions use a time model based on `Timegroup` components from `@editframe/react`:
24
+
25
+ - **`TimelineRoot`** — the root container for the composition.
26
+ - **`Timegroup`** — a container that groups scenes and controls timing. The root Timegroup defines the composition's total duration.
27
+ - **`mode`** — timing behavior for children: `sequence` (play one after another), `fixed` (play at absolute offset), `contain` (fit within parent duration), `fit` (scale to fit).
28
+ - **`duration`** — CSS time string (e.g. `5s`, `300ms`, `2.5s`) defining how long the element plays.
29
+ - **`offset`** — CSS time string defining when the element starts relative to its parent.
30
+ - **`fps`** — positive integer defining frames per second (e.g. `30`, `60`).
31
+ - **`loop`** — boolean, only on the root Timegroup. Nested Timegroups should not loop.
32
+
33
+ ## Workflow
34
+
35
+ 1. Create a `.tsx` file with `@editframe/react` components (`TimelineRoot`, `Timegroup`, `Video`, `Audio`, `Text`, `Captions`).
36
+ 2. Run `editframe preview` to preview the composition in the browser.
37
+ 3. Run `ef-composition-review` to review the composition for time model correctness, accessibility, and best practices.
38
+ 4. Run `editframe check` to validate the composition structure.
39
+ 5. Run `editframe render -o dist/<name>.mp4` to produce the final video output.
40
+ 6. Run `ef-render-verify` to verify the render — validation, build, determinism, output inspection.
41
+
42
+ ## Skills
43
+
44
+ - **ef-onboard** — onboard a new project: prerequisites, discovery, scaffold, preview. Trigger: "create a new video project".
45
+ - **ef-composition-review** — review a composition for time model correctness, accessibility, and best practices before rendering. Trigger: "review this composition".
46
+ - **ef-render-verify** — verify a render: validate, build, check determinism, inspect output. Trigger: "render and verify".
47
+ - **ef-composition** — guide creating a new video composition with Editframe React components. Trigger: "create a video composition".
48
+ - **ef-dev-server** — set up and manage the Editframe dev server for live preview. Trigger: "set up editframe dev server".
49
+ - **ef-editor-gui** — configure the Editframe editor GUI for visual composition editing. Trigger: "open editframe editor".
50
+ - **ef-webhooks** — configure Editframe webhooks for render status notifications. Trigger: "set up editframe webhooks".
51
+ - **ef-brand-video-generator** — generate brand video compositions from templates. Trigger: "generate a brand video".
52
+ - **ef-motion-design** — apply motion design patterns to compositions. Trigger: "add motion design".
53
+
54
+ ## External resources
55
+
56
+ - [Editframe llms.txt](https://editframe.com/llms.txt) — machine-readable index of Editframe domain skills
57
+ - [Editframe composition skill](https://editframe.com/skills/composition.md) — full reference for time model, elements, and rendering
58
+ - [Editframe getting started](https://editframe.com/getting-started) — step-by-step guide and agent prompt
59
+
60
+ ## Reference template
61
+
62
+ A sample composition template is available at `editframe-templates/composition.tsx` in the forge profiles directory. Copy it to start a new composition:
63
+
64
+ ```sh
65
+ cp node_modules/@warpgogol/forge/profiles/editframe-templates/composition.tsx compositions/my-new-video/composition.tsx
66
+ ```
67
+
68
+ ## File naming
69
+
70
+ Composition files use kebab-case: `my-video.tsx`, `product-demo.tsx`, `intro-clip.tsx`.
@@ -0,0 +1,33 @@
1
+ /*
2
+ Editframe React composition template
3
+ Copy this file to start a new composition. @editframe/react components:
4
+ - TimelineRoot: root container for the composition
5
+ - Timegroup: groups elements into a timed sequence
6
+ - Video: video source with fit mode (contain, cover, fill)
7
+ - Audio: audio source
8
+ - Text: text overlay with positioning
9
+ - Captions: accessibility captions for speech audio
10
+ Run `editframe preview` to preview, `editframe render` to produce output.
11
+ */
12
+ import { TimelineRoot, Timegroup, Video, Text, Audio, Captions } from "@editframe/react";
13
+
14
+ export default function Composition() {
15
+ return (
16
+ <TimelineRoot>
17
+ <Timegroup duration="10s">
18
+ <Video src="assets/background.mp4" fit="contain" duration="10s" />
19
+ <Text
20
+ text="Your text here"
21
+ x="50%"
22
+ y="50%"
23
+ fontSize="48px"
24
+ color="white"
25
+ textAlign="center"
26
+ duration="5s"
27
+ />
28
+ <Audio src="assets/narration.mp3" />
29
+ <Captions src="assets/captions.vtt" />
30
+ </Timegroup>
31
+ </TimelineRoot>
32
+ );
33
+ }
@@ -1,10 +1,10 @@
1
- # Composition Workspace
1
+ # HTML Composition Workspace
2
2
 
3
- This workspace contains an Editframe video composition.
3
+ This workspace contains an Editframe video composition using HTML web components.
4
4
 
5
5
  ## Domain terminology
6
6
 
7
- - **Composition** — the artifact this workspace produces (an HTML file using Editframe custom elements).
7
+ - **Composition** — the artifact this workspace produces (an `.html` file using Editframe web components).
8
8
  - **Scene** — a structural module within a composition (an `ef-timegroup` block).
9
9
  - **Director** — the operator who creates and renders the composition.
10
10
 
@@ -14,24 +14,25 @@ This workspace contains an Editframe video composition.
14
14
  | --- | --- | --- |
15
15
  | VIDEO-01 | Composition filenames must use kebab-case (lowercase letters, digits, hyphens only). | error |
16
16
  | VIDEO-02 | Scene durations must use `contain` fit mode by default to avoid unexpected cropping. Use `cover` or `fill` only when intentionally overriding. | warning |
17
- | VIDEO-03 | All speech audio elements (`ef-audio` with speech content) must have corresponding `ef-captions` elements for accessibility. | error |
17
+ | VIDEO-03 | All speech audio elements (`ef-audio` with speech content) must have corresponding `ef-captions` components for accessibility. | error |
18
18
 
19
19
  Additional time model invariants (VIDEO-04 through VIDEO-09) may be available. Run `forge doctor` to check the full invariant set enforced by the active profile.
20
20
 
21
21
  ## Time model concepts
22
22
 
23
- Editframe compositions use a time model based on `ef-timegroup` elements:
23
+ Editframe HTML compositions use a time model based on web components:
24
24
 
25
- - **`ef-timegroup`** — a container that groups scenes and controls timing. The root timegroup defines the composition's total duration.
25
+ - **`ef-timeline`** — the root container for the composition.
26
+ - **`ef-timegroup`** — a container that groups scenes and controls timing. The root ef-timegroup defines the composition's total duration.
26
27
  - **`mode`** — timing behavior for children: `sequence` (play one after another), `fixed` (play at absolute offset), `contain` (fit within parent duration), `fit` (scale to fit).
27
28
  - **`duration`** — CSS time string (e.g. `5s`, `300ms`, `2.5s`) defining how long the element plays.
28
29
  - **`offset`** — CSS time string defining when the element starts relative to its parent.
29
30
  - **`fps`** — positive integer defining frames per second (e.g. `30`, `60`).
30
- - **`loop`** — boolean, only on the root timegroup. Nested timegroups should not loop.
31
+ - **`loop`** — boolean, only on the root ef-timegroup. Nested ef-timegroups should not loop.
31
32
 
32
33
  ## Workflow
33
34
 
34
- 1. Create a `.html` file with Editframe custom elements (`ef-timegroup`, `ef-video`, `ef-audio`, `ef-text`, `ef-captions`).
35
+ 1. Create an `.html` file with Editframe web components (`ef-timeline`, `ef-timegroup`, `ef-video`, `ef-audio`, `ef-text`, `ef-captions`).
35
36
  2. Run `editframe preview` to preview the composition in the browser.
36
37
  3. Run `ef-composition-review` to review the composition for time model correctness, accessibility, and best practices.
37
38
  4. Run `editframe check` to validate the composition structure.
@@ -43,6 +44,12 @@ Editframe compositions use a time model based on `ef-timegroup` elements:
43
44
  - **ef-onboard** — onboard a new project: prerequisites, discovery, scaffold, preview. Trigger: "create a new video project".
44
45
  - **ef-composition-review** — review a composition for time model correctness, accessibility, and best practices before rendering. Trigger: "review this composition".
45
46
  - **ef-render-verify** — verify a render: validate, build, check determinism, inspect output. Trigger: "render and verify".
47
+ - **ef-composition** — guide creating a new video composition with Editframe HTML components. Trigger: "create a video composition".
48
+ - **ef-dev-server** — set up and manage the Editframe dev server for live preview. Trigger: "set up editframe dev server".
49
+ - **ef-editor-gui** — configure the Editframe editor GUI for visual composition editing. Trigger: "open editframe editor".
50
+ - **ef-webhooks** — configure Editframe webhooks for render status notifications. Trigger: "set up editframe webhooks".
51
+ - **ef-brand-video-generator** — generate brand video compositions from templates. Trigger: "generate a brand video".
52
+ - **ef-motion-design** — apply motion design patterns to compositions. Trigger: "add motion design".
46
53
 
47
54
  ## External resources
48
55
 
@@ -50,14 +57,6 @@ Editframe compositions use a time model based on `ef-timegroup` elements:
50
57
  - [Editframe composition skill](https://editframe.com/skills/composition.md) — full reference for time model, elements, and rendering
51
58
  - [Editframe getting started](https://editframe.com/getting-started) — step-by-step guide and agent prompt
52
59
 
53
- ## Reference template
54
-
55
- A sample composition template is available at `editframe-html-templates/composition.html` in the forge profiles directory. Copy it to start a new composition:
56
-
57
- ```sh
58
- cp node_modules/@warpgogol/forge/profiles/editframe-html-templates/composition.html compositions/my-new-video/composition.html
59
- ```
60
-
61
60
  ## File naming
62
61
 
63
62
  Composition files use kebab-case: `my-video.html`, `product-demo.html`, `intro-clip.html`.
@@ -1,6 +1,6 @@
1
1
  schema: forge/stack-profile@1
2
- id: editframe-html
3
- displayName: Editframe HTML Video
2
+ id: editframe
3
+ displayName: Editframe Video
4
4
  detect:
5
5
  anyOf:
6
6
  - editframe.config.*
@@ -20,8 +20,8 @@ devServer:
20
20
  artifacts:
21
21
  - id: composition
22
22
  extensions:
23
- - .html
24
23
  - .tsx
24
+ - .html
25
25
  produce:
26
26
  command: editframe render
27
27
  output: dist/{composition}.mp4
@@ -30,6 +30,7 @@ artifacts:
30
30
  determinism:
31
31
  hashable: true
32
32
  inputs:
33
+ - compositions/**/*.tsx
33
34
  - compositions/**/*.html
34
35
  - assets/**
35
36
  assets:
@@ -48,8 +49,29 @@ release:
48
49
  target: local
49
50
  outputDir: release
50
51
  manifestName: release-manifest.json
52
+ prerequisites:
53
+ - id: nodejs
54
+ name: Node.js 18+
55
+ check: node --version
56
+ installHint: "https://nodejs.org/en/download/"
57
+ severity: error
58
+ - id: ffmpeg
59
+ name: FFmpeg
60
+ check: ffmpeg -version
61
+ installHint: "https://ffmpeg.org/download.html"
62
+ severity: error
51
63
  workspaceTypes:
52
64
  - id: composition
65
+ detect:
66
+ glob: "*.tsx"
67
+ contains: TimelineRoot
68
+ packageJsonDep: "@editframe/react"
69
+ skills:
70
+ - ef-onboard
71
+ - ef-composition-review
72
+ - ef-render-verify
73
+ agentsMdTemplate: editframe-templates/composition-agents.md
74
+ - id: html-composition
53
75
  detect:
54
76
  glob: "*.html"
55
77
  contains: ef-timegroup
@@ -58,77 +80,85 @@ workspaceTypes:
58
80
  - ef-onboard
59
81
  - ef-composition-review
60
82
  - ef-render-verify
61
- agentsMdTemplate: editframe-html-templates/composition-agents.md
83
+ agentsMdTemplate: editframe-templates/html-composition-agents.md
62
84
  invariants:
63
85
  - id: VIDEO-01
64
86
  rule: Composition filenames must use kebab-case (lowercase letters, digits, hyphens only)
65
87
  severity: error
66
88
  check:
67
89
  kind: filename-pattern
68
- glob: "compositions/**/*.{html,tsx}"
69
- pattern: "^[a-z0-9-]+\\.(html|tsx)$"
90
+ glob: "compositions/**/*.{tsx,html}"
91
+ pattern: "^[a-z0-9-]+\\.(tsx|html)$"
70
92
  - id: VIDEO-02
71
93
  rule: Scene durations must use contain mode by default to avoid unexpected cropping
72
94
  severity: warning
73
95
  check:
74
96
  kind: file-contains
75
- glob: "compositions/**/*.html"
97
+ glob: "compositions/**/*.{tsx,html}"
76
98
  pattern: contain
77
99
  - id: VIDEO-03
78
- rule: All speech audio elements must have corresponding ef-captions elements for accessibility
100
+ rule: All speech audio elements must have corresponding Captions components for accessibility
79
101
  severity: error
80
102
  check:
81
103
  kind: file-contains
82
- glob: "compositions/**/*.html"
83
- pattern: ef-captions
104
+ glob: "compositions/**/*.{tsx,html}"
105
+ pattern: Captions
84
106
  - id: VIDEO-04
85
- rule: 'Root ef-timegroup must declare duration or use mode="contain" or mode="fit"'
107
+ rule: Root Timegroup must declare duration or use mode="contain" or mode="fit"
86
108
  severity: error
87
109
  check:
88
110
  kind: file-contains
89
- glob: "compositions/**/*.html"
90
- pattern: 'ef-timegroup[^>]*(duration|mode="contain"|mode="fit")[^>]*>'
111
+ glob: "compositions/**/*.{tsx,html}"
112
+ pattern: 'Timegroup[^>]*(duration|mode="contain"|mode="fit")[^>]*>|ef-timegroup[^>]*(duration|mode="contain"|mode="fit")[^>]*>'
91
113
  - id: VIDEO-05
92
114
  rule: All duration values must be valid CSS time strings (e.g. 5s, 500ms, 2.5s)
93
115
  severity: error
94
116
  check:
95
- kind: html-attribute-pattern
96
- glob: "compositions/**/*.html"
97
- element: "ef-timegroup"
117
+ kind: attribute-pattern
118
+ glob: "compositions/**/*.{tsx,html}"
119
+ elements:
120
+ - ef-timegroup
121
+ - Timegroup
98
122
  attribute: "duration"
99
123
  pattern: "^\\d+(\\.\\d+)?(s|ms)$"
100
124
  - id: VIDEO-06
101
125
  rule: "mode attribute must be one of: sequence, fixed, contain, fit"
102
126
  severity: error
103
127
  check:
104
- kind: html-attribute-pattern
105
- glob: "compositions/**/*.html"
106
- element: "ef-timegroup"
128
+ kind: attribute-pattern
129
+ glob: "compositions/**/*.{tsx,html}"
130
+ elements:
131
+ - ef-timegroup
132
+ - Timegroup
107
133
  attribute: "mode"
108
134
  pattern: "^(sequence|fixed|contain|fit)$"
109
135
  - id: VIDEO-07
110
136
  rule: fps must be a positive integer (default 30)
111
137
  severity: warning
112
138
  check:
113
- kind: html-attribute-pattern
114
- glob: "compositions/**/*.html"
115
- element: "ef-timegroup"
139
+ kind: attribute-pattern
140
+ glob: "compositions/**/*.{tsx,html}"
141
+ elements:
142
+ - ef-timegroup
143
+ - Timegroup
116
144
  attribute: "fps"
117
145
  pattern: "^[1-9]\\d*$"
118
146
  - id: VIDEO-08
119
- rule: loop attribute should only be used on the root ef-timegroup (no effect on render for nested groups)
147
+ rule: loop attribute should only be used on the root Timegroup (no effect on render for nested groups)
120
148
  severity: warning
121
149
  check:
122
150
  kind: file-not-contains
123
- glob: "compositions/**/*.html"
124
- negatedPattern: "<ef-timegroup[^>]*loop[^>]*>[\\s\\S]*<ef-timegroup[^>]*loop"
151
+ glob: "compositions/**/*.{tsx,html}"
152
+ negatedPattern: "<(Timegroup|ef-timegroup)[^>]*loop[^>]*>[\\s\\S]*<(Timegroup|ef-timegroup)[^>]*loop"
125
153
  - id: VIDEO-09
126
154
  rule: offset values must be valid CSS time strings (e.g. 0.5s, 3s, 500ms)
127
155
  severity: warning
128
156
  check:
129
- kind: html-attribute-pattern
130
- glob: "compositions/**/*.html"
131
- element: "ef-timegroup"
157
+ kind: attribute-pattern
158
+ glob: "compositions/**/*.{tsx,html}"
159
+ elements:
160
+ - ef-timegroup
161
+ - Timegroup
132
162
  attribute: "offset"
133
163
  pattern: "^\\d+(\\.\\d+)?(s|ms)$"
134
164
  workspace:
@@ -331,34 +361,118 @@ firstWorkspace:
331
361
  "check": "editframe check"
332
362
  }
333
363
  }
334
- - path: composition.html
364
+ - path: composition.tsx
335
365
  content: |
336
- <!--
337
- Editframe HTML composition — my-first-video
338
- This file declares a video composition using Editframe custom elements.
366
+ /*
367
+ Editframe React composition — my-first-video
368
+ This file declares a video composition using @editframe/react components.
339
369
  Run `editframe preview` to preview, `editframe render` to produce output.
340
- -->
341
- <ef-timegroup duration="10s">
342
- <ef-video
343
- src="assets/background.mp4"
344
- fit="contain"
345
- duration="10s"
346
- ></ef-video>
347
- <ef-text
348
- text="Hello, Editframe!"
349
- x="50%"
350
- y="50%"
351
- font-size="48px"
352
- color="white"
353
- text-align="center"
354
- duration="5s"
355
- ></ef-text>
356
- <ef-audio
357
- src="assets/narration.mp3"
358
- ></ef-audio>
359
- <ef-captions
360
- src="assets/captions.vtt"
361
- ></ef-captions>
362
- </ef-timegroup>
370
+ */
371
+ import { TimelineRoot, Timegroup, Video, Text, Audio, Captions } from "@editframe/react";
372
+
373
+ export default function Composition() {
374
+ return (
375
+ <TimelineRoot>
376
+ <Timegroup duration="10s">
377
+ <Video src="assets/background.mp4" fit="contain" duration="10s" />
378
+ <Text
379
+ text="Hello, Editframe!"
380
+ x="50%"
381
+ y="50%"
382
+ fontSize="48px"
383
+ color="white"
384
+ textAlign="center"
385
+ duration="5s"
386
+ />
387
+ <Audio src="assets/narration.mp3" />
388
+ <Captions src="assets/captions.vtt" />
389
+ </Timegroup>
390
+ </TimelineRoot>
391
+ );
392
+ }
363
393
  install:
364
- - pnpm add -D vitest
394
+ - pnpm add -D @editframe/react @editframe/vite-plugin react react-dom typescript @types/react @types/react-dom vite @vitejs/plugin-react tailwindcss @tailwindcss/vite vitest
395
+ templates:
396
+ - id: react
397
+ default: true
398
+ firstWorkspace:
399
+ path: compositions/my-first-video
400
+ files:
401
+ - path: package.json
402
+ content: |
403
+ {
404
+ "name": "my-first-video",
405
+ "version": "0.1.0",
406
+ "private": true,
407
+ "type": "module",
408
+ "scripts": {
409
+ "preview": "editframe preview",
410
+ "render": "editframe render -o dist/my-first-video.mp4",
411
+ "check": "editframe check"
412
+ }
413
+ }
414
+ - path: composition.tsx
415
+ content: |
416
+ /*
417
+ Editframe React composition — my-first-video
418
+ This file declares a video composition using @editframe/react components.
419
+ Run `editframe preview` to preview, `editframe render` to produce output.
420
+ */
421
+ import { TimelineRoot, Timegroup, Video, Text, Audio, Captions } from "@editframe/react";
422
+
423
+ export default function Composition() {
424
+ return (
425
+ <TimelineRoot>
426
+ <Timegroup duration="10s">
427
+ <Video src="assets/background.mp4" fit="contain" duration="10s" />
428
+ <Text
429
+ text="Hello, Editframe!"
430
+ x="50%"
431
+ y="50%"
432
+ fontSize="48px"
433
+ color="white"
434
+ textAlign="center"
435
+ duration="5s"
436
+ />
437
+ <Audio src="assets/narration.mp3" />
438
+ <Captions src="assets/captions.vtt" />
439
+ </Timegroup>
440
+ </TimelineRoot>
441
+ );
442
+ }
443
+ install:
444
+ - pnpm add -D @editframe/react @editframe/vite-plugin react react-dom typescript @types/react @types/react-dom vite @vitejs/plugin-react tailwindcss @tailwindcss/vite vitest
445
+ - id: html
446
+ firstWorkspace:
447
+ path: compositions/my-first-video
448
+ files:
449
+ - path: package.json
450
+ content: |
451
+ {
452
+ "name": "my-first-video",
453
+ "version": "0.1.0",
454
+ "private": true,
455
+ "type": "module",
456
+ "scripts": {
457
+ "preview": "editframe preview",
458
+ "render": "editframe render -o dist/my-first-video.mp4",
459
+ "check": "editframe check"
460
+ }
461
+ }
462
+ - path: index.html
463
+ content: |
464
+ <!--
465
+ Editframe HTML composition — my-first-video
466
+ This file declares a video composition using Editframe web components.
467
+ Run `editframe preview` to preview, `editframe render` to produce output.
468
+ -->
469
+ <ef-timeline duration="10s">
470
+ <ef-timegroup duration="10s" mode="contain">
471
+ <ef-video src="assets/background.mp4" fit="contain" duration="10s"></ef-video>
472
+ <ef-text text="Hello, Editframe!" x="50%" y="50%" font-size="48px" color="white" text-align="center" duration="5s"></ef-text>
473
+ <ef-audio src="assets/narration.mp3"></ef-audio>
474
+ <ef-captions src="assets/captions.vtt"></ef-captions>
475
+ </ef-timegroup>
476
+ </ef-timeline>
477
+ install:
478
+ - pnpm add -D vitest