frameyard 0.1.0 → 0.3.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 +60 -2
- package/GLOSSARY.md +16 -0
- package/README.md +89 -51
- package/dist/assets/integrations.d.ts.map +1 -1
- package/dist/assets/integrations.js.map +1 -1
- package/dist/assets/process.d.ts.map +1 -1
- package/dist/assets/process.js +2 -2
- package/dist/assets/process.js.map +1 -1
- package/dist/assets/provenance.d.ts.map +1 -1
- package/dist/assets/provenance.js.map +1 -1
- package/dist/assets/transcribe.d.ts.map +1 -1
- package/dist/assets/transcribe.js +4 -1
- package/dist/assets/transcribe.js.map +1 -1
- package/dist/assets/tts.d.ts.map +1 -1
- package/dist/assets/tts.js +2 -4
- package/dist/assets/tts.js.map +1 -1
- package/dist/cli.js +19 -94
- package/dist/cli.js.map +1 -1
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +5 -6
- package/dist/contracts.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +27 -22
- 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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/preview/main.d.ts +2 -0
- package/dist/preview/main.d.ts.map +1 -1
- package/dist/preview/main.js +28 -3
- package/dist/preview/main.js.map +1 -1
- package/dist/renderer/audio.d.ts +5 -1
- package/dist/renderer/audio.d.ts.map +1 -1
- package/dist/renderer/audio.js +5 -2
- package/dist/renderer/audio.js.map +1 -1
- package/dist/renderer/browser.d.ts +1 -0
- package/dist/renderer/browser.d.ts.map +1 -1
- package/dist/renderer/browser.js +8 -2
- package/dist/renderer/browser.js.map +1 -1
- package/dist/renderer/ffmpeg.d.ts.map +1 -1
- package/dist/renderer/ffmpeg.js +3 -1
- package/dist/renderer/ffmpeg.js.map +1 -1
- package/dist/renderer/index.d.ts +5 -0
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/index.js +144 -19
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/transcripts.d.ts.map +1 -1
- package/dist/renderer/transcripts.js +1 -3
- package/dist/renderer/transcripts.js.map +1 -1
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +85 -9
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/media.d.ts +16 -0
- package/dist/runtime/media.d.ts.map +1 -0
- package/dist/runtime/media.js +307 -0
- package/dist/runtime/media.js.map +1 -0
- package/dist/scaffold.d.ts +3 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +179 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js.map +1 -1
- package/dist/transcript.d.ts.map +1 -1
- package/dist/transcript.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/adr/0003-render-browser-frames-offline.md +2 -0
- package/docs/adr/0005-keep-parallel-rendering-opt-in-and-frame-ordered.md +3 -0
- package/docs/adr/0006-seek-embedded-media-from-the-frame-clock.md +9 -0
- package/docs/v0.1-design.md +16 -12
- package/examples/demo/compositions/demo.js +2 -5
- package/package.json +13 -4
- package/skills/frameyard/README.md +35 -0
- package/skills/frameyard/SKILL.md +63 -0
- package/{skill → skills/frameyard}/references/audio-assets.md +3 -3
- package/{skill → skills/frameyard}/references/deterministic-authoring.md +32 -4
- package/{skill → skills/frameyard}/references/failure-recovery.md +6 -3
- package/{skill → skills/frameyard}/references/json-results.md +2 -1
- package/{skill → skills/frameyard}/references/subtitles-karaoke.md +3 -3
- package/{skill → skills/frameyard}/scripts/frameyard.mjs +2 -2
- package/skill/README.md +0 -29
- package/skill/SKILL.md +0 -57
package/dist/scaffold.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { VERSION } from "./version.js";
|
|
2
|
+
const AGENTS_GUIDE = `# AGENTS.md
|
|
3
|
+
|
|
4
|
+
This project produces deterministic, parameterized video with Frameyard. Follow this guide when editing or rendering it.
|
|
5
|
+
|
|
6
|
+
## Project layout
|
|
7
|
+
|
|
8
|
+
- \`video.config.js\` explicitly maps composition IDs to entry modules. There is no directory scanning; a new composition is invisible until it is listed.
|
|
9
|
+
- \`package.json\` pins the CLI version in \`dev\`, \`check\`, \`render\`, and \`still\` scripts. Run \`dev\` with \`npm run dev\` or \`pnpm dev\`; for the others, pass the composition id: \`npm run check -- hello\` (npm) or \`pnpm check hello\` (pnpm).
|
|
10
|
+
- \`compositions/\` contains native JavaScript ES modules. Import bare \`frameyard\` and \`frameyard/runtime\`; the preview server supplies the import map.
|
|
11
|
+
- \`props/\` contains JSON props, merged shallowly over \`defaultProps\` and deep-frozen.
|
|
12
|
+
- \`assets/\` (create it when needed) contains audio, images, fonts, and generated assets.
|
|
13
|
+
|
|
14
|
+
\`width\`, \`height\`, \`fps\`, and \`durationInFrames\` are fixed composition metadata. Do not derive them from props.
|
|
15
|
+
|
|
16
|
+
## Agent workflow
|
|
17
|
+
|
|
18
|
+
1. Read \`video.config.js\`, the composition source, and the props file before changing behavior.
|
|
19
|
+
2. Author the composition or props with native HTML, CSS, SVG, Canvas 2D, WebGL, embedded video, and JavaScript. Do not add a bundling step.
|
|
20
|
+
3. Validate every frame: \`npx frameyard check <id> --json\`. Use \`--props <file>\` to validate a specific props file.
|
|
21
|
+
4. Inspect a representative frame: \`npx frameyard still <id> --frame <n> --out <file.png> --json\`, then view the PNG when the host supports images. State explicitly when visual inspection is not possible.
|
|
22
|
+
5. Render: \`npx frameyard render <id> --props <file> --out <file.mp4> [--concurrency <n>] --json\`.
|
|
23
|
+
6. Report the composition, props, validation result, still path and inspection status, video path, and any failure. Never claim success when \`check\` fails, a still is missing, or a render exits nonzero.
|
|
24
|
+
|
|
25
|
+
## Commands
|
|
26
|
+
|
|
27
|
+
\`\`\`sh
|
|
28
|
+
npx frameyard dev
|
|
29
|
+
npx frameyard doctor --json
|
|
30
|
+
npx frameyard check hello --json
|
|
31
|
+
npx frameyard still hello --frame 42 --out hello-42.png --json
|
|
32
|
+
npx frameyard render hello --props props/hello.json --out hello.mp4 --json
|
|
33
|
+
\`\`\`
|
|
34
|
+
|
|
35
|
+
- Use \`--json\` for non-interactive commands. Parse stdout as the structured result; treat stderr as progress and diagnostics.
|
|
36
|
+
- Use \`--project <dir>\` when running outside the project root.
|
|
37
|
+
- Use \`--concurrency <n>\` for faster local rendering when useful; the default is \`1\` and the maximum is \`16\`. It changes capture scheduling only, not composition behavior or output frame order.
|
|
38
|
+
- \`still\` and \`render\` replace existing outputs only with \`--overwrite\`. Generated assets are replaced only with \`--force\`, and only with user approval.
|
|
39
|
+
|
|
40
|
+
## Determinism rules
|
|
41
|
+
|
|
42
|
+
- A frame may depend only on its integer \`frame\`, immutable \`props\`, and assets loaded before frame production.
|
|
43
|
+
- \`mount()\` may await loading work. \`update({ frame, props })\` is synchronous and seek-safe. \`dispose()\` releases resources.
|
|
44
|
+
- Keep mutable state in module-scope variables, not on \`this\`.
|
|
45
|
+
- Use \`random("stable:key")\` from \`frameyard/runtime\` for randomness.
|
|
46
|
+
- Never use \`Math.random()\`, \`Date.now()\`, \`performance.now()\`, timers, independent \`requestAnimationFrame()\` loops, CSS transitions, or state left from a previously visited frame as animation inputs.
|
|
47
|
+
- CSS \`@keyframes\` and the Web Animations API are valid; the runtime seeks them.
|
|
48
|
+
- Load remote data, fonts, and images during \`mount()\` or before the first frame. Network requests are blocked during capture; a \`fetch()\` from \`update()\` is a bug.
|
|
49
|
+
- Redraw Canvas 2D and WebGL from the current frame. Production pins software WebGL for reproducible pixels.
|
|
50
|
+
- Embedded video must use a local project file in the composition container's light DOM and be created, with its \`data-frameyard-*\` attributes, in \`mount()\`. Let the runtime seek it; do not call \`play()\`, \`pause()\`, or set \`currentTime\` in \`update()\`. Use \`data-frameyard-start\` (frames), \`data-frameyard-trim\` (seconds), optional \`data-frameyard-duration\` (seconds), and optional \`data-frameyard-volume\` (0-1).
|
|
51
|
+
|
|
52
|
+
## Audio and transcripts
|
|
53
|
+
|
|
54
|
+
- Audio clips are placed by composition frames and trimmed by seconds. Frameyard does not time-stretch audio or change composition duration to fit it.
|
|
55
|
+
- An unmuted embedded video contributes its audio track to the same mix; use \`muted\` or \`data-frameyard-audio="off"\` for a visual-only video.
|
|
56
|
+
- Produce speech with \`npx frameyard tts\` and transcripts with \`npx frameyard transcribe\`; never call \`qwen-tts\` or \`whisper-cli\` directly, and never run inference inside \`mount()\` or \`update()\`.
|
|
57
|
+
- Do not overwrite or regenerate generated assets without explicit approval.
|
|
58
|
+
- \`words: true\` requires measured word timings; never interpolate segment timings.
|
|
59
|
+
- Commit \`frameyard.assets.json\` when present; do not edit hashes or manifest entries by hand.
|
|
60
|
+
|
|
61
|
+
The official \`frameyard\` agent skill contains the full host-neutral contract. Install it with \`npx skills add vladiantio/frameyard\` or see the \`skills/frameyard/\` directory in the \`frameyard\` npm package. This file is the project-local summary.
|
|
62
|
+
|
|
63
|
+
This project was scaffolded with frameyard ${VERSION}. \`npx frameyard\` resolves the latest published version; run \`npx frameyard@${VERSION}\` when you need the CLI version that scaffolded the project.
|
|
64
|
+
`;
|
|
65
|
+
const PROJECT_README = `# My Frameyard project
|
|
66
|
+
|
|
67
|
+
Coding agents should read \`AGENTS.md\` for the project rules and the check, still, and render workflow.
|
|
68
|
+
|
|
69
|
+
Start the preview:
|
|
70
|
+
|
|
71
|
+
\`\`\`sh
|
|
72
|
+
npx frameyard dev
|
|
73
|
+
\`\`\`
|
|
74
|
+
|
|
75
|
+
Validate and render:
|
|
76
|
+
|
|
77
|
+
\`\`\`sh
|
|
78
|
+
npx frameyard doctor
|
|
79
|
+
npx frameyard check hello
|
|
80
|
+
npx frameyard render hello --props props/hello.json --out hello.mp4
|
|
81
|
+
\`\`\`
|
|
82
|
+
|
|
83
|
+
Or run the pinned scripts from \`package.json\`:
|
|
84
|
+
|
|
85
|
+
\`\`\`sh
|
|
86
|
+
npm run dev
|
|
87
|
+
npm run check -- hello
|
|
88
|
+
npm run render -- hello --props props/hello.json --out hello.mp4
|
|
89
|
+
npm run still -- hello --frame 42 --out hello-42.png
|
|
90
|
+
\`\`\`
|
|
91
|
+
`;
|
|
92
|
+
const SCAFFOLD_TEMPLATES = {
|
|
93
|
+
"video.config.js": `export default {\n compositions: {\n hello: "./compositions/hello.js",\n },\n};\n`,
|
|
94
|
+
"props/hello.json": `${JSON.stringify({ title: "Hello, Frameyard", accent: "#b8f36b" }, null, 2)}\n`,
|
|
95
|
+
"AGENTS.md": AGENTS_GUIDE,
|
|
96
|
+
"README.md": PROJECT_README,
|
|
97
|
+
"compositions/hello.js": `import { defineComposition } from "frameyard";
|
|
98
|
+
|
|
99
|
+
let title;
|
|
100
|
+
let sweep;
|
|
101
|
+
let glow;
|
|
102
|
+
|
|
103
|
+
export default defineComposition({
|
|
104
|
+
width: 1280,
|
|
105
|
+
height: 720,
|
|
106
|
+
fps: 30,
|
|
107
|
+
durationInFrames: 150,
|
|
108
|
+
defaultProps: { title: "Hello, Frameyard", accent: "#b8f36b" },
|
|
109
|
+
validateProps(props) {
|
|
110
|
+
const errors = [];
|
|
111
|
+
if (typeof props.title !== "string") errors.push("title must be a string");
|
|
112
|
+
if (typeof props.accent !== "string") errors.push("accent must be a string");
|
|
113
|
+
return errors;
|
|
114
|
+
},
|
|
115
|
+
mount({ container, props }) {
|
|
116
|
+
container.style.setProperty("--accent", props.accent);
|
|
117
|
+
container.innerHTML =
|
|
118
|
+
'<style>' +
|
|
119
|
+
'#hello { position: relative; width: 100%; height: 100%; display: grid; place-items: center; overflow: hidden; background: #0b0d10; color: #e8edf3; font-family: Inter, system-ui, sans-serif; }' +
|
|
120
|
+
'#hello h1 { position: relative; margin: 0; font-size: 96px; letter-spacing: -0.04em; }' +
|
|
121
|
+
'#hello p { position: relative; margin: 18px 0 0; color: #8a97a6; font-size: 26px; }' +
|
|
122
|
+
'#glow { position: absolute; width: 520px; height: 520px; border-radius: 50%; background: var(--accent); filter: blur(120px); opacity: 0.16; }' +
|
|
123
|
+
'#sweep { position: absolute; left: 0; bottom: 0; width: 0%; height: 4px; background: var(--accent); }' +
|
|
124
|
+
'</style>' +
|
|
125
|
+
'<div id="hello"><div id="glow"></div><div style="position: relative; text-align: center"><h1 id="title"></h1><p>Deterministic video, authored on the web.</p></div><div id="sweep"></div></div>';
|
|
126
|
+
title = container.querySelector("#title");
|
|
127
|
+
sweep = container.querySelector("#sweep");
|
|
128
|
+
glow = container.querySelector("#glow");
|
|
129
|
+
},
|
|
130
|
+
update({ frame, props }) {
|
|
131
|
+
title.textContent = props.title;
|
|
132
|
+
const intro = Math.min(1, frame / 24);
|
|
133
|
+
title.style.opacity = String(intro);
|
|
134
|
+
title.style.transform = "translateY(" + (1 - intro) * 28 + "px)";
|
|
135
|
+
glow.style.transform =
|
|
136
|
+
"translate(" + Math.sin(frame / 26) * 120 + "px," + Math.cos(frame / 34) * 80 + "px)";
|
|
137
|
+
sweep.style.width = (frame / 149) * 100 + "%";
|
|
138
|
+
},
|
|
139
|
+
dispose() {
|
|
140
|
+
title = undefined;
|
|
141
|
+
sweep = undefined;
|
|
142
|
+
glow = undefined;
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
`,
|
|
146
|
+
};
|
|
147
|
+
// Keep the generated package name valid for npm and pnpm.
|
|
148
|
+
function packageName(projectName) {
|
|
149
|
+
const normalized = projectName
|
|
150
|
+
.toLowerCase()
|
|
151
|
+
.replace(/[^a-z0-9._-]+/g, "-")
|
|
152
|
+
.replace(/^[._-]+|[._-]+$/g, "")
|
|
153
|
+
.slice(0, 214)
|
|
154
|
+
.replace(/[._-]+$/g, "");
|
|
155
|
+
return normalized === "" ? "frameyard-project" : normalized;
|
|
156
|
+
}
|
|
157
|
+
export function scaffoldFiles(projectName) {
|
|
158
|
+
return {
|
|
159
|
+
"package.json": `${JSON.stringify({
|
|
160
|
+
name: packageName(projectName),
|
|
161
|
+
private: true,
|
|
162
|
+
type: "module",
|
|
163
|
+
scripts: {
|
|
164
|
+
dev: `npx --yes frameyard@${VERSION} dev`,
|
|
165
|
+
check: `npx --yes frameyard@${VERSION} check`,
|
|
166
|
+
render: `npx --yes frameyard@${VERSION} render`,
|
|
167
|
+
still: `npx --yes frameyard@${VERSION} still`,
|
|
168
|
+
},
|
|
169
|
+
}, null, 2)}\n`,
|
|
170
|
+
...SCAFFOLD_TEMPLATES,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export const SCAFFOLD_NEXT = [
|
|
174
|
+
"npx frameyard doctor",
|
|
175
|
+
"npx frameyard dev",
|
|
176
|
+
"npx frameyard check hello",
|
|
177
|
+
"npx frameyard render hello --out hello.mp4",
|
|
178
|
+
];
|
|
179
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA6DwB,OAAO,kFAAkF,OAAO;CAC5I,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BtB,CAAC;AAEF,MAAM,kBAAkB,GAA2B;IACjD,iBAAiB,EAAE,wFAAwF;IAC3G,kBAAkB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;IACpG,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,cAAc;IAC3B,uBAAuB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgD1B;CACA,CAAC;AAEF,0DAA0D;AAC1D,SAAS,WAAW,CAAC,WAAmB;IACtC,MAAM,UAAU,GAAG,WAAW;SAC3B,WAAW,EAAE;SACb,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO;QACL,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,CAC/B;YACE,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;YAC9B,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,GAAG,EAAE,uBAAuB,OAAO,MAAM;gBACzC,KAAK,EAAE,uBAAuB,OAAO,QAAQ;gBAC7C,MAAM,EAAE,uBAAuB,OAAO,SAAS;gBAC/C,KAAK,EAAE,uBAAuB,OAAO,QAAQ;aAC9C;SACF,EACD,IAAI,EACJ,CAAC,CACF,IAAI;QACL,GAAG,kBAAkB;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,sBAAsB;IACtB,mBAAmB;IACnB,2BAA2B;IAC3B,4CAA4C;CAC7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA+JD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA+JD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmG9F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|
package/dist/transcript.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,yBAAyB,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,sEAAsE;IACtE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA0DD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,sBAA2B,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,yBAAyB,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,sEAAsE;IACtE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA0DD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,sBAA2B,GAAG,UAAU,CA6DhG;AAYD,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAW9D;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAM9D"}
|
package/dist/transcript.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAwC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAEjC,SAAS,OAAO,CAAC,OAAe;IAC9B,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,KAAa;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,KAAK,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACnD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,KAAK,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;IACjE,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,KAAK,2CAA2C,KAAK,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO;QACL,OAAO;QACP,KAAK;QACL,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,KAAa;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,UAAkC,EAAE;IAClF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,KAAK,yBAAyB,EAAE,CAAC;QACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.3.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.3.0";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
# Render browser frames offline
|
|
2
2
|
|
|
3
3
|
Production rendering will drive pinned Chromium through explicit frame seeks, capture each frame, and encode frames and timeline audio with FFmpeg instead of recording real-time browser playback. This accepts slower sequential rendering in exchange for frame accuracy under load, reproducible visual state, and parity between preview and production composition behavior.
|
|
4
|
+
|
|
5
|
+
ADR 0005 makes this offline capture loop optionally parallel while preserving ordered, frame-accurate encoding; sequential rendering remains the default.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# Keep parallel rendering opt-in and frame-ordered
|
|
2
|
+
|
|
3
|
+
Frameyard will offer parallel frame capture as an explicit `render --concurrency <n>` option, defaulting to one browser session and limiting `n` to 16 to bound browser processes and buffered PNG memory. Each worker loads the same composition, props, and preview server in an independent session; workers seek and capture assigned frames while one ordered writer feeds a single FFmpeg encoder. Bounded lookahead limits buffered PNGs, failures stop further frame work and abort publication, and no partial output is published. This keeps sequential rendering as the predictable default and preserves the determinism contract at the capture boundary: concurrency changes scheduling only, never frame order or visual state. The cost is additional CPU and memory proportional to the requested session count.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Seek embedded media from the frame clock
|
|
2
|
+
|
|
3
|
+
Embedded video and WebGL are supported without giving compositions a second clock. A composition places local `<video>` elements in `mount()`, describes their timeline position with `data-frameyard-*` attributes, and the runtime pauses and seeks them to the frame-derived source time after every synchronous `update()`. The renderer and `check` await that media settle before capturing or advancing.
|
|
4
|
+
|
|
5
|
+
The browser remains the source of truth for video presentation, while production audio stays offline and deterministic: an unmuted video's audio track is inspected and mixed by FFmpeg alongside declarative audio clips. Video elements are silenced in the browser. Live streams, remote media, and sources that cannot be seeked are rejected because they cannot be reproduced from a frame number.
|
|
6
|
+
|
|
7
|
+
WebGL canvases are redrawn from the current frame and captured through the existing screenshot path. Production Chromium pins SwiftShader so WebGL pixels do not vary with the host GPU. The runtime waits two animation frames after a media seek to ensure the decoded video frame and WebGL drawing are composited before capture.
|
|
8
|
+
|
|
9
|
+
`update()` stays synchronous and seek-safe. Media preparation happens during loading, and only the settle step is asynchronous. This preserves the existing lifecycle contract while extending deterministic frame production to embedded video and WebGL.
|
package/docs/v0.1-design.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Status:** Accepted
|
|
4
4
|
**Initial acceptance:** 2026-10-27
|
|
5
|
-
**Last design revision:** 2026-10-
|
|
5
|
+
**Last design revision:** 2026-10-29
|
|
6
6
|
|
|
7
7
|
This document records the decisions confirmed during the initial design sessions. It defines the v0.1 product and architecture baseline; later changes should revise this document explicitly rather than silently broaden the scope.
|
|
8
8
|
|
|
@@ -47,7 +47,9 @@ The only sources of animation state are the integer frame number and immutable p
|
|
|
47
47
|
- Assets, remote data, images, fonts, generated audio, and transcripts are resolved during an explicit loading phase before frame production.
|
|
48
48
|
- Required network access is limited to the loading phase. Network requests are blocked during frame capture.
|
|
49
49
|
- AI model inference is never part of `mount()`, `update()`, or frame production.
|
|
50
|
-
- v0.1 supports DOM, CSS, SVG,
|
|
50
|
+
- v0.1 supports DOM, CSS, SVG, Canvas 2D, WebGL, and frame-seeked embedded video.
|
|
51
|
+
- Embedded video is loaded during the loading phase, paused, and seeked from the frame-derived source time before capture. Its source must be a local, seekable project file. An unmuted embedded video contributes its audio track to the offline mix unless the composition opts out.
|
|
52
|
+
- WebGL 1 and WebGL 2 canvases are redrawn from the current frame and captured through the normal screenshot path. Production sessions pin software WebGL so pixel output does not depend on the host GPU.
|
|
51
53
|
- Composition code is trusted local developer code. Frameyard does not claim to render untrusted compositions safely.
|
|
52
54
|
|
|
53
55
|
### Reproducibility guarantee
|
|
@@ -74,15 +76,15 @@ Production rendering:
|
|
|
74
76
|
|
|
75
77
|
1. Uses a pinned, Playwright-managed Chromium through the Chrome DevTools Protocol.
|
|
76
78
|
2. Seeks explicitly to each requested frame.
|
|
77
|
-
3. Waits for composition readiness.
|
|
79
|
+
3. Waits for composition readiness, embedded media decode, and browser paint.
|
|
78
80
|
4. Captures the frame.
|
|
79
|
-
5. Pipes frames to FFmpeg for encoding and audio muxing.
|
|
81
|
+
5. Pipes frames in timeline order to FFmpeg for encoding and audio muxing.
|
|
80
82
|
|
|
81
|
-
The
|
|
83
|
+
The renderer is sequential by default and has no frame cache. Optional `--concurrency <n>` rendering, with `n` from 1 to 16, opens up to `n` independent browser sessions, each loading the same composition and props from the same preview server. Workers seek and capture assigned frames, while a single ordered writer pipes them to FFmpeg with bounded lookahead. Parallelism therefore changes scheduling only: every frame remains derivable from its integer frame number and immutable props, and output order is unchanged. The default stays at one session for predictable resource use, and the upper bound limits accidental browser-process and memory growth. Simple scenes target real-time preview, but there is no production rendering-speed guarantee; the CLI reports progress, current frame, and elapsed time.
|
|
82
84
|
|
|
83
85
|
## 5. Audio and output
|
|
84
86
|
|
|
85
|
-
Audio is a declarative timeline of clips. Each clip supports a source, start frame, source trim, and volume. Preview synchronizes this timeline in the browser; production mixes it offline with FFmpeg rather than treating live `<audio>` or Web Audio playback as the production source of truth.
|
|
87
|
+
Audio is a declarative timeline of clips. Each clip supports a source, start frame, source trim, and volume. Preview synchronizes this timeline in the browser; production mixes it offline with FFmpeg rather than treating live `<audio>` or Web Audio playback as the production source of truth. Unmuted embedded videos contribute their own audio tracks to the same mix, placed by the video's frame and trim attributes. Muting a video or setting `data-frameyard-audio="off"` keeps it visual-only.
|
|
86
88
|
|
|
87
89
|
Generated speech behaves like any other audio clip. Frameyard does not automatically time-stretch it, change composition duration, or regenerate it to fit. `check` reports clip durations and overrun warnings so users and agents can revise text, timing, or composition deliberately.
|
|
88
90
|
|
|
@@ -94,9 +96,9 @@ A render fails immediately on an uncaught exception, unhandled rejection, requir
|
|
|
94
96
|
|
|
95
97
|
Project and composition commands are:
|
|
96
98
|
|
|
97
|
-
- `init`: scaffold a minimal project
|
|
99
|
+
- `init`: scaffold a minimal project, including an agent guide (`AGENTS.md`) and a private `package.json` with pinned `dev`, `check`, `render`, and `still` scripts
|
|
98
100
|
- `dev`: start the preview
|
|
99
|
-
- `render <composition-id> --props props.json --out video.mp4`: render a composition
|
|
101
|
+
- `render <composition-id> --props props.json --out video.mp4`: render a composition, optionally with `--concurrency <n>` from 1 to 16
|
|
100
102
|
- `check <composition-id>`: validate configuration, props, assets, audio, and transcript requirements, then mount the composition and evaluate every frame without capturing or encoding
|
|
101
103
|
- `still <composition-id> --frame <n>`: capture one requested frame as PNG through the production rendering path
|
|
102
104
|
- `doctor`: inspect core requirements and optional integrations without repairing or downloading anything
|
|
@@ -120,7 +122,7 @@ Frameyard ships an optional, host-neutral agent skill with a `SKILL.md`, support
|
|
|
120
122
|
The skill:
|
|
121
123
|
|
|
122
124
|
- Uses the normal project format, composition API, and CLI available to humans.
|
|
123
|
-
- Does not introduce an agent-only runtime, MCP server, hosted control plane, or
|
|
125
|
+
- Does not introduce an agent-only runtime, MCP server, hosted control plane, or separate rendering API.
|
|
124
126
|
- Triggers for Frameyard authoring and operation rather than claiming to be a general-purpose media-generation skill.
|
|
125
127
|
- Uses Frameyard's audio wrappers instead of invoking `qwen-tts` or `whisper-cli` directly.
|
|
126
128
|
- Includes references for deterministic authoring, audio assets, subtitle and karaoke recipes, JSON command results, and failure recovery.
|
|
@@ -198,10 +200,12 @@ Release documentation must identify the exact `qwentts.cpp` and `whisper.cpp` re
|
|
|
198
200
|
|
|
199
201
|
Tests prioritize public behavior and end-to-end evidence over implementation-only unit coverage:
|
|
200
202
|
|
|
201
|
-
- Sequential, individual,
|
|
203
|
+
- Sequential, individual, random-order, and parallel frame renders produce equivalent images.
|
|
202
204
|
- Determinism checks compare captured pixels or stills; encoded MP4 bytes are not a reproducibility oracle.
|
|
203
205
|
- Preview and renderer use the same runtime.
|
|
204
206
|
- CSS, JavaScript, SVG, and Canvas animations seek correctly.
|
|
207
|
+
- Embedded video frames seek deterministically, including under parallel capture, and their audio appears in the offline mix.
|
|
208
|
+
- WebGL canvases produce deterministic stills and rendered frames under the pinned software renderer.
|
|
205
209
|
- Asset and runtime failures produce nonzero CLI exits.
|
|
206
210
|
- Rendered MP4 files have the expected dimensions, frame count, duration, and audio stream.
|
|
207
211
|
- Golden-frame tests cover representative visual behavior.
|
|
@@ -224,9 +228,9 @@ These are scope boundaries, not permanent rejections:
|
|
|
224
228
|
- React or other UI-framework adapters in the core
|
|
225
229
|
- Public plugin APIs and a broad integration ecosystem
|
|
226
230
|
- Dynamic composition metadata derived from props
|
|
227
|
-
-
|
|
231
|
+
- Live streams, remote media, and other visual sources that cannot be deterministically seeked
|
|
228
232
|
- Dynamic per-frame asset loading or AI inference
|
|
229
|
-
-
|
|
233
|
+
- Frame caches
|
|
230
234
|
- Additional final-video formats, general image-sequence output, and arbitrary FFmpeg argument passthrough
|
|
231
235
|
- Built-in TypeScript transpilation and npm dependency optimization
|
|
232
236
|
- Rendering untrusted compositions
|
|
@@ -64,10 +64,7 @@ function buildSignalPath() {
|
|
|
64
64
|
const points = [];
|
|
65
65
|
for (let index = 0; index <= 120; index += 1) {
|
|
66
66
|
const x = 160 + (index / 120) * 1600;
|
|
67
|
-
const wave =
|
|
68
|
-
Math.sin(index / 7) * 38 +
|
|
69
|
-
Math.sin(index / 17 + 1.4) * 22 +
|
|
70
|
-
(random("signal:" + index) - 0.5) * 12;
|
|
67
|
+
const wave = Math.sin(index / 7) * 38 + Math.sin(index / 17 + 1.4) * 22 + (random("signal:" + index) - 0.5) * 12;
|
|
71
68
|
points.push([x, 535 + wave]);
|
|
72
69
|
}
|
|
73
70
|
const d = points.map(([x, y], index) => (index === 0 ? "M" : "L") + x + " " + y).join(" ");
|
|
@@ -131,7 +128,7 @@ export default defineComposition({
|
|
|
131
128
|
'<div id="copy"><h1 id="title"></h1><p id="subtitle"></p></div>' +
|
|
132
129
|
'<svg id="signal" viewBox="0 0 1920 1080" fill="none" aria-hidden="true">' +
|
|
133
130
|
'<path id="signal-path" stroke="var(--accent)" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" opacity=".82"/>' +
|
|
134
|
-
|
|
131
|
+
"</svg>" +
|
|
135
132
|
'<div id="caption">FRAME <strong id="frame">000</strong> / 899 · SEEK-SAFE CANVAS + SVG + CSS</div>' +
|
|
136
133
|
'<div id="progress-track"><div id="progress"></div></div>' +
|
|
137
134
|
"</div>";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "frameyard",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Local-first, deterministic video composition framework for HTML, CSS, and JavaScript.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"dist",
|
|
44
44
|
"examples",
|
|
45
45
|
"docs",
|
|
46
|
-
"
|
|
46
|
+
"skills",
|
|
47
47
|
"README.md",
|
|
48
48
|
"CHANGELOG.md",
|
|
49
49
|
"GLOSSARY.md"
|
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/node": "26.6.5",
|
|
59
|
+
"oxfmt": "0.75.0",
|
|
60
|
+
"oxlint": "1.90.0",
|
|
59
61
|
"typescript": "5.9.3",
|
|
60
62
|
"vitest": "5.0.5"
|
|
61
63
|
},
|
|
@@ -63,9 +65,16 @@
|
|
|
63
65
|
"build": "tsc -p tsconfig.json",
|
|
64
66
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
65
67
|
"typecheck:test": "tsc -p tsconfig.test.json",
|
|
68
|
+
"check:scripts": "node scripts/check-scripts.mjs",
|
|
69
|
+
"lint": "oxlint",
|
|
70
|
+
"format": "oxfmt",
|
|
71
|
+
"format:check": "oxfmt --check",
|
|
72
|
+
"check:static": "pnpm check:scripts && pnpm lint && pnpm format:check && pnpm typecheck && pnpm typecheck:test",
|
|
73
|
+
"check": "pnpm check:static && pnpm test",
|
|
66
74
|
"test": "pnpm build && vitest run",
|
|
67
|
-
"test:unit": "vitest run test/contracts.test.ts test/random.test.ts test/transcript.test.ts",
|
|
75
|
+
"test:unit": "vitest run test/contracts.test.ts test/docs.test.ts test/random.test.ts test/release.test.ts test/scaffold.test.ts test/transcript.test.ts",
|
|
68
76
|
"bench": "pnpm build && node scripts/bench-render.mjs",
|
|
69
|
-
"set-version": "node scripts/set-version.mjs"
|
|
77
|
+
"set-version": "node scripts/set-version.mjs",
|
|
78
|
+
"verify-release": "node scripts/verify-release.mjs"
|
|
70
79
|
}
|
|
71
80
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Frameyard agent skill
|
|
2
|
+
|
|
3
|
+
This directory is the optional, host-neutral Frameyard agent skill. Its API version matches the npm package version. The npm package includes this directory.
|
|
4
|
+
|
|
5
|
+
## Install or reference
|
|
6
|
+
|
|
7
|
+
Install from the repository with the open agent-skills CLI:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npx skills add vladiantio/frameyard
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The skill lives at `skills/frameyard` in the repository and npm package. Alternatively, copy or symlink the whole `skills/frameyard/` directory into the skill location your agent host uses. Examples:
|
|
14
|
+
|
|
15
|
+
- Claude Code project skills: `.claude/skills/frameyard`
|
|
16
|
+
- Agent hosts that read `.agents/skills`: `.agents/skills/frameyard`
|
|
17
|
+
- Global installations: place it under your host's documented personal skills directory
|
|
18
|
+
|
|
19
|
+
The skill is host-neutral: it uses only the normal `frameyard` project format and CLI. There is no agent-only runtime.
|
|
20
|
+
|
|
21
|
+
Run the CLI with `npx frameyard`. It resolves the latest published version; pin it with `npx frameyard@<version>` or install the package locally when the CLI version must match the skill. When the skill is copied outside the npm package, `scripts/frameyard.mjs` falls back to the `frameyard` command on `PATH`; if that command is unavailable, set `FRAMEYARD_CLI` to an installed CLI path.
|
|
22
|
+
|
|
23
|
+
## Contents
|
|
24
|
+
|
|
25
|
+
- `SKILL.md`: trigger description and operating workflow
|
|
26
|
+
- `references/deterministic-authoring.md`
|
|
27
|
+
- `references/audio-assets.md`
|
|
28
|
+
- `references/subtitles-karaoke.md`
|
|
29
|
+
- `references/json-results.md`
|
|
30
|
+
- `references/failure-recovery.md`
|
|
31
|
+
- `scripts/frameyard.mjs`: thin fallback wrapper for the installed CLI
|
|
32
|
+
|
|
33
|
+
## Version matching
|
|
34
|
+
|
|
35
|
+
`SKILL.md` records `frameyard-api-version`. If `npx frameyard --version` reports a different version, pin the CLI (`npx frameyard@<version>`) to the skill version, or use the skill files shipped inside the installed package. Contract changes are documented in the repository README and design baseline.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frameyard
|
|
3
|
+
description: Create, validate, inspect, and render deterministic Frameyard videos authored with HTML, CSS, and native JavaScript. Use when a user asks to build or operate a Frameyard project, produce parameterized video, add a local TTS or transcription asset through Frameyard's wrappers, or diagnose a Frameyard render. Do not use for general-purpose media generation outside a Frameyard project.
|
|
4
|
+
frameyard-api-version: 0.3.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Frameyard
|
|
8
|
+
|
|
9
|
+
Use Frameyard's public project format and CLI. Do not introduce an agent-only runtime, a hosted service, or direct calls to `qwen-tts` or `whisper-cli`.
|
|
10
|
+
|
|
11
|
+
## First decisions
|
|
12
|
+
|
|
13
|
+
1. Find the project: look for `video.config.js` from the working directory upward, or run `npx frameyard init <directory>` to scaffold one.
|
|
14
|
+
2. Read the composition entry points listed in `video.config.js`. There is no directory scanning.
|
|
15
|
+
3. Read the existing props file and composition source before changing behavior.
|
|
16
|
+
4. If the task needs speech or transcription, confirm that inference is requested or explicitly approved before producing assets.
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
1. **Author** the composition with HTML, CSS, SVG, Canvas 2D, WebGL, embedded video, and native JavaScript ES modules. Keep `width`, `height`, `fps`, and `durationInFrames` fixed. Read [deterministic authoring](references/deterministic-authoring.md).
|
|
21
|
+
2. **Provide props** as JSON. Validate domain-specific requirements with `validateProps()`.
|
|
22
|
+
3. **Produce optional assets** with `npx frameyard tts` and `npx frameyard transcribe`, never with the upstream executables. Read [audio assets](references/audio-assets.md). Do not overwrite or regenerate existing generated assets without permission.
|
|
23
|
+
4. **Validate** with `npx frameyard check <id> --json`. It evaluates every frame, checks audio and declared transcripts, and does not encode.
|
|
24
|
+
5. **Inspect** representative frames with `npx frameyard still <id> --frame <n> --out <file.png> --json`. View the PNGs when the host supports image viewing. If visual inspection is impossible, say so explicitly.
|
|
25
|
+
6. **Render** with `npx frameyard render <id> --out <file.mp4> [--props <file>] [--concurrency <n>] --json`.
|
|
26
|
+
7. **Report** the project path, composition entry, props, generated assets, provenance manifest, validation results, still paths and inspection status, final video path, and any failures.
|
|
27
|
+
|
|
28
|
+
Never claim success when `check` fails, a still is missing, a render exits nonzero, or visual inspection was skipped. A partial or unpublished render is not a successful result.
|
|
29
|
+
|
|
30
|
+
## Command rules
|
|
31
|
+
|
|
32
|
+
- Use `--json` for every non-interactive command. Parse stdout as the structured result; treat stderr as progress and diagnostics.
|
|
33
|
+
- Keep the current output files unless the user explicitly approves replacement. Use `--force` only with that approval.
|
|
34
|
+
- Use `--project <dir>` when not running from the project root.
|
|
35
|
+
- Use `--concurrency <n>` only when faster local rendering is useful; the default is `1` and the maximum is `16`. It changes capture scheduling only, not composition behavior or output frame order.
|
|
36
|
+
- Use `npx frameyard doctor --json` before reporting an environment problem. It inspects without repairing or downloading.
|
|
37
|
+
- Read [JSON results](references/json-results.md) for result and error shapes, and [failure recovery](references/failure-recovery.md) for actionable error codes.
|
|
38
|
+
|
|
39
|
+
## Determinism guardrails
|
|
40
|
+
|
|
41
|
+
- A frame may depend only on its integer `frame`, immutable `props`, and assets loaded before frame production.
|
|
42
|
+
- Use `random("stable:key")` from `frameyard/runtime`; never use `Math.random()`.
|
|
43
|
+
- Never use `Date.now()`, `performance.now()`, timers, independent `requestAnimationFrame` loops, or CSS transitions as animation inputs.
|
|
44
|
+
- Finish remote data, fonts, and image loading during `mount()` or before the first frame. Network requests are blocked during frame capture.
|
|
45
|
+
- Keep `update({ frame, props })` synchronous and seek-safe. Do not carry state between frames.
|
|
46
|
+
- Let the runtime seek embedded `<video>` elements. Do not play, pause, or set `currentTime` in `update()`; use the `data-frameyard-*` attributes described in [deterministic authoring](references/deterministic-authoring.md).
|
|
47
|
+
- Redraw WebGL canvases from the current frame. Production pins software WebGL; do not depend on GPU-specific results or the previous frame's drawing buffer.
|
|
48
|
+
- Do not run model inference inside `mount()`, `update()`, or frame production.
|
|
49
|
+
|
|
50
|
+
## Subtitle and karaoke rule
|
|
51
|
+
|
|
52
|
+
Use canonical transcripts produced by `npx frameyard transcribe`. Convert integer source-relative milliseconds to composition frames with the audio clip's `startFrame`, `trimStart`, and the composition `fps`. Karaoke highlighting requires actual `words` timings; never interpolate segment timings. Read [subtitles and karaoke](references/subtitles-karaoke.md).
|
|
53
|
+
|
|
54
|
+
## CLI invocation
|
|
55
|
+
|
|
56
|
+
Use `npx frameyard` (or an installed `frameyard` binary) directly. `scripts/frameyard.mjs` is a fallback for hosts that cannot resolve package binaries: it prefers the package-local `dist/cli.js`, then the `frameyard` command on `PATH`. When the skill is copied out of the package, set `FRAMEYARD_CLI` to an installed CLI path if that command is unavailable.
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
npx frameyard check <id> --json
|
|
60
|
+
node scripts/frameyard.mjs check <id> --json # fallback
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
When the CLI version differs from `frameyard-api-version`, pin it with `npx frameyard@<version>`.
|
|
@@ -26,7 +26,7 @@ audio: [
|
|
|
26
26
|
Use Frameyard, not `qwen-tts` directly:
|
|
27
27
|
|
|
28
28
|
```sh
|
|
29
|
-
frameyard tts \
|
|
29
|
+
npx frameyard tts \
|
|
30
30
|
--speaker vivian \
|
|
31
31
|
--talker-model models/qwen-talker-1.7b-customvoice-Q8_0.gguf \
|
|
32
32
|
--codec-model models/qwen-tokenizer-12hz-Q8_0.gguf \
|
|
@@ -50,7 +50,7 @@ frameyard tts \
|
|
|
50
50
|
## Local transcription
|
|
51
51
|
|
|
52
52
|
```sh
|
|
53
|
-
frameyard transcribe assets/voice.wav \
|
|
53
|
+
npx frameyard transcribe assets/voice.wav \
|
|
54
54
|
--model models/ggml-base.en.bin \
|
|
55
55
|
--out assets/voice.transcript.json \
|
|
56
56
|
--words \
|
|
@@ -82,5 +82,5 @@ Commit the manifest with the project. It explains how generated inputs were prod
|
|
|
82
82
|
- Do not regenerate or overwrite an existing generated asset without permission.
|
|
83
83
|
- Do not silently switch models, speakers, language, or text.
|
|
84
84
|
- Report the manifest path and the exact asset paths after success.
|
|
85
|
-
- `frameyard doctor` verifies manifest integrity, including artifact, source, model, and derived-export hashes, and optional integration executables; it does not download or repair anything. Pass `--talker-model`, `--codec-model`, or `--model` to inspect model readability and identity before generation.
|
|
85
|
+
- `npx frameyard doctor` verifies manifest integrity, including artifact, source, model, and derived-export hashes, and optional integration executables; it does not download or repair anything. Pass `--talker-model`, `--codec-model`, or `--model` to inspect model readability and identity before generation.
|
|
86
86
|
- Once assets are frozen, checking and rendering do not need the model or inference executable.
|