agentvfx 0.3.4 → 0.3.5
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/LICENSE +201 -171
- package/README.md +5 -13
- package/package.json +2 -2
- package/skills/agentvfx/LICENSE +201 -171
- package/skills/agentvfx/NOTICE +8 -2
- package/skills/agentvfx/SKILL.md +3 -3
- package/skills/agentvfx/engine/core/constants.mjs +1 -1
- package/skills/agentvfx/engine/core/mark.mjs +6 -9
- package/skills/agentvfx/engine/core/palettes.mjs +1 -1
- package/skills/agentvfx/engine/core/schedule.mjs +1 -1
- package/skills/agentvfx/engine/core/templates.mjs +1 -1
- package/skills/agentvfx/engine/core/validate.mjs +3 -3
- package/skills/agentvfx/engine/node/board.mjs +1 -1
- package/skills/agentvfx/engine/node/encode.mjs +1 -1
- package/skills/agentvfx/engine/node/eye.mjs +1 -1
- package/skills/agentvfx/engine/node/footage.mjs +1 -1
- package/skills/agentvfx/engine/node/frame-worker.mjs +1 -1
- package/skills/agentvfx/engine/node/job.mjs +1 -1
- package/skills/agentvfx/engine/node/render.mjs +1 -1
- package/skills/agentvfx/engine/node/stage-capture.mjs +1 -1
- package/skills/agentvfx/engine/node/stage-serve.mjs +1 -1
- package/skills/agentvfx/engine/web/init.js +1 -1
- package/skills/agentvfx/engine/web/prelude.mjs +1 -1
- package/skills/agentvfx/engine/web/render.mjs +2 -2
- package/skills/agentvfx/engine/web/text.mjs +1 -1
- package/skills/agentvfx/references/template-format.md +2 -2
- package/skills/agentvfx/runtime/agentvfx.js +1 -1
- package/skills/agentvfx/scripts/export-web.mjs +7 -5
- package/skills/agentvfx/scripts/make-beat.mjs +1 -1
- package/skills/agentvfx/scripts/vfx.mjs +1 -1
- package/skills/agentvfx/templates/_test/feedback-counter/fx.json +1 -1
- package/skills/agentvfx/templates/_test/gradient/fx.json +1 -1
- package/skills/agentvfx/templates/_test/identity/fx.json +1 -1
- package/skills/agentvfx/templates/_test/strobe/fx.json +1 -1
- package/skills/agentvfx/templates/_test/text-probe/fx.json +1 -1
- package/skills/agentvfx/templates/brutal/_src/boot-log/def.mjs +1 -1
- package/skills/agentvfx/templates/brutal/_src/halftone-field/def.mjs +1 -1
- package/skills/agentvfx/templates/brutal/_src/hud-deck/def.mjs +1 -1
- package/skills/agentvfx/templates/brutal/boot-log/fx.json +1 -1
- package/skills/agentvfx/templates/brutal/collage/fx.json +1 -1
- package/skills/agentvfx/templates/brutal/collage/layout.mjs +1 -1
- package/skills/agentvfx/templates/brutal/halftone-field/fx.json +1 -1
- package/skills/agentvfx/templates/brutal/hud-deck/fx.json +1 -1
- package/skills/agentvfx/templates/brutal/lattice/fx.json +1 -1
- package/skills/agentvfx/templates/glitch/block-glitch/fx.json +1 -1
- package/skills/agentvfx/templates/glitch/pixel-sort/fx.json +1 -1
- package/skills/agentvfx/templates/glitch/rgb-split/fx.json +1 -1
- package/skills/agentvfx/templates/glitch/vhs/fx.json +1 -1
- package/skills/agentvfx/templates/impact/impact-1bit/fx.json +1 -1
- package/skills/agentvfx/templates/impact/impact-invert/fx.json +1 -1
- package/skills/agentvfx/templates/impact/punch-shake/fx.json +1 -1
- package/skills/agentvfx/templates/impact/rgb-hit/fx.json +1 -1
- package/skills/agentvfx/templates/impact/signal-cut/fx.json +1 -1
- package/skills/agentvfx/templates/impact/speedline-burst/fx.json +1 -1
- package/skills/agentvfx/templates/impact/strobe-burst/fx.json +1 -1
- package/skills/agentvfx/templates/light/anamorphic-streak/fx.json +1 -1
- package/skills/agentvfx/templates/light/bloom-glow/fx.json +1 -1
- package/skills/agentvfx/templates/light/god-rays/fx.json +1 -1
- package/skills/agentvfx/templates/light/lens-flare/fx.json +1 -1
- package/skills/agentvfx/templates/light/light-leak/fx.json +1 -1
- package/skills/agentvfx/templates/light/light-stage/fx.json +1 -1
- package/skills/agentvfx/templates/light/light-sweep/fx.json +1 -1
- package/skills/agentvfx/templates/light/neon-saber/fx.json +1 -1
- package/skills/agentvfx/templates/psychedelic/echo-flow/fx.json +1 -1
- package/skills/agentvfx/templates/psychedelic/hologram-scan/fx.json +1 -1
- package/skills/agentvfx/templates/psychedelic/kaleido-fold/fx.json +1 -1
- package/skills/agentvfx/templates/psychedelic/mosh-melt/fx.json +1 -1
- package/skills/agentvfx/templates/psychedelic/sacred/fx.json +1 -1
- package/skills/agentvfx/templates/psychedelic/tidal-bands/fx.json +1 -1
- package/skills/agentvfx/templates/scope/goniometer/fx.json +1 -1
- package/skills/agentvfx/templates/scope/scope-polar/fx.json +1 -1
- package/skills/agentvfx/templates/scope/scope-triggered/fx.json +1 -1
- package/skills/agentvfx/templates/scope/spectrogram-scroll/fx.json +1 -1
- package/skills/agentvfx/templates/scope/xy-phosphor/fx.json +1 -1
- package/skills/agentvfx/templates/spectrum/_src/bars-linear/fx.src.json +1 -1
- package/skills/agentvfx/templates/spectrum/_src/bars-mirror/fx.src.json +1 -1
- package/skills/agentvfx/templates/spectrum/_src/bass-circle/fx.src.json +1 -1
- package/skills/agentvfx/templates/spectrum/_src/label-bars/fx.src.json +1 -1
- package/skills/agentvfx/templates/spectrum/_src/spectrum-particles/fx.src.json +1 -1
- package/skills/agentvfx/templates/spectrum/_src/spectrum-radial/fx.src.json +1 -1
- package/skills/agentvfx/templates/spectrum/_src/waveform-line/fx.src.json +1 -1
- package/skills/agentvfx/templates/spectrum/bars-linear/fx.json +1 -1
- package/skills/agentvfx/templates/spectrum/bars-mirror/fx.json +1 -1
- package/skills/agentvfx/templates/spectrum/bass-circle/fx.json +1 -1
- package/skills/agentvfx/templates/spectrum/label-bars/fx.json +1 -1
- package/skills/agentvfx/templates/spectrum/spectrum-particles/fx.json +1 -1
- package/skills/agentvfx/templates/spectrum/spectrum-radial/fx.json +1 -1
- package/skills/agentvfx/templates/spectrum/waveform-line/fx.json +1 -1
- package/skills/agentvfx/test/concept-collage.test.mjs +1 -1
- package/skills/agentvfx/test/concept-lattice.test.mjs +1 -1
- package/skills/agentvfx/test/concept-signal-cut.test.mjs +1 -1
- package/skills/agentvfx/test/credit.test.mjs +13 -1
- package/skills/agentvfx/test/scope.test.mjs +1 -1
- package/skills/agentvfx/test/web.test.mjs +8 -5
|
@@ -44,7 +44,7 @@ test("collage validates, ships 4 presets incl. release 0.06 and 0.12, and a demo
|
|
|
44
44
|
const rel = (p) => ({ ...Object.fromEntries(tpl.fx.INPUTS.map((i) => [i.NAME, i.DEFAULT])), ...presets[p] }).release;
|
|
45
45
|
const values = Object.keys(presets).map(rel);
|
|
46
46
|
assert.ok(values.includes(0.06) && values.includes(0.12), `release values ${values}`);
|
|
47
|
-
assert.equal(tpl.fx.X_AGENTVFX.spdx, "
|
|
47
|
+
assert.equal(tpl.fx.X_AGENTVFX.spdx, "Apache-2.0");
|
|
48
48
|
assert.ok(tpl.fx.X_AGENTVFX.safeSubstitute);
|
|
49
49
|
for (const d of readdirSync(tpl.dir).filter((f) => f.startsWith("demo-"))) assert.equal(validateScore(JSON.parse(readFileSync(path.join(tpl.dir, d), "utf8")), lib).ok, true);
|
|
50
50
|
});
|
|
@@ -41,7 +41,7 @@ test("lattice validates: every preset and demo, 4 s demos with the shared music"
|
|
|
41
41
|
assert.equal(demo.input.audio, MUSIC);
|
|
42
42
|
assert.ok(existsSync(path.join(ROOT, demo.input.video)));
|
|
43
43
|
}
|
|
44
|
-
assert.equal(tpl.fx.X_AGENTVFX.spdx, "
|
|
44
|
+
assert.equal(tpl.fx.X_AGENTVFX.spdx, "Apache-2.0");
|
|
45
45
|
assert.ok(tpl.fx.X_AGENTVFX.safeSubstitute);
|
|
46
46
|
});
|
|
47
47
|
|
|
@@ -54,7 +54,7 @@ test("signal-cut is declared: family, 3+ presets, strobe class with a safe subst
|
|
|
54
54
|
assert.ok(tpl, "signal-cut is in the library");
|
|
55
55
|
const x = tpl.fx.X_AGENTVFX;
|
|
56
56
|
assert.equal(x.input, "footage");
|
|
57
|
-
assert.equal(x.spdx, "
|
|
57
|
+
assert.equal(x.spdx, "Apache-2.0");
|
|
58
58
|
assert.ok(Object.keys(x.presets).length >= 3);
|
|
59
59
|
assert.equal(x.flash, "strobe");
|
|
60
60
|
assert.equal(x.safeSubstitute.params.fieldCut, 0);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Every render carries the credit line (appreciated, not required): CREDIT.txt next
|
|
2
2
|
// to the film, the MP4 description tag of every film written (the safe variant too), and the gate report the agent
|
|
3
3
|
// reads before reporting.
|
|
4
4
|
import { test } from "node:test";
|
|
@@ -40,3 +40,15 @@ test("every render writes CREDIT.txt, tags each film with the credit and reports
|
|
|
40
40
|
rmSync(dir, { recursive: true, force: true });
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
|
+
|
|
44
|
+
test("licence metadata says Apache-2.0 and the old licence id is gone", async () => {
|
|
45
|
+
const { SPDX_ALLOWED } = await import("../engine/core/validate.mjs");
|
|
46
|
+
const { creditText } = await import("../engine/core/mark.mjs");
|
|
47
|
+
const { readFileSync } = await import("node:fs");
|
|
48
|
+
const repo = new URL("../../../", import.meta.url);
|
|
49
|
+
assert.ok(!SPDX_ALLOWED.includes("LicenseRef-agentvfx"));
|
|
50
|
+
assert.match(creditText(), /Apache-2\.0/u);
|
|
51
|
+
assert.doesNotMatch(creditText(), /requires a credit|PolyForm/u);
|
|
52
|
+
assert.equal(JSON.parse(readFileSync(new URL("package.json", repo), "utf8")).license, "Apache-2.0");
|
|
53
|
+
assert.equal(JSON.parse(readFileSync(new URL(".claude-plugin/plugin.json", repo), "utf8")).license, "Apache-2.0");
|
|
54
|
+
});
|
|
@@ -90,7 +90,7 @@ test("all five templates are valid, licensed, 60 fps, 3+ presets, honest flash a
|
|
|
90
90
|
const x = t.fx.X_AGENTVFX;
|
|
91
91
|
assert.equal(x.family, "scope");
|
|
92
92
|
assert.equal(x.fps, 60);
|
|
93
|
-
assert.equal(x.spdx, "
|
|
93
|
+
assert.equal(x.spdx, "Apache-2.0");
|
|
94
94
|
assert.ok(Object.keys(x.presets).length >= 3, `${id} presets`);
|
|
95
95
|
for (const p of PRESETS) assert.ok(x.presets[p], `${id} lacks the ${p} preset`);
|
|
96
96
|
assert.ok(Array.isArray(x.text) && x.text.length >= 20, `${id} should label its panels with engine text`);
|
|
@@ -258,7 +258,7 @@ test("export-web bundles templates whose shader credits carry links, keeping the
|
|
|
258
258
|
}
|
|
259
259
|
});
|
|
260
260
|
|
|
261
|
-
test("export-web writes
|
|
261
|
+
test("export-web writes LICENSE and NOTICE next to the bundle and keeps the licence notice in the runtime", () => {
|
|
262
262
|
const dir = mkdtempSync(path.join(tmpdir(), "agentvfx-export-"));
|
|
263
263
|
try {
|
|
264
264
|
const result = runExport(["test-gradient", "--out", dir]);
|
|
@@ -266,11 +266,14 @@ test("export-web writes the LICENSE next to the bundle and keeps the licence not
|
|
|
266
266
|
assertNoExternalUrl(dir);
|
|
267
267
|
const license = readFileSync(path.join(dir, "LICENSE"), "utf8");
|
|
268
268
|
assert.equal(license, readFileSync(path.join(root, "LICENSE"), "utf8"), "LICENSE is copied verbatim");
|
|
269
|
-
assert.match(license,
|
|
269
|
+
assert.match(license, /Apache License\s+Version 2\.0, January 2004/u);
|
|
270
|
+
const notice = readFileSync(path.join(dir, "NOTICE"), "utf8");
|
|
271
|
+
assert.equal(notice, readFileSync(path.join(root, "NOTICE"), "utf8"), "NOTICE is copied verbatim");
|
|
272
|
+
assert.match(notice, /^Copyright 2026 Woojin Go/mu);
|
|
270
273
|
const runtime = readFileSync(path.join(dir, "agentvfx.js"), "utf8");
|
|
271
|
-
assert.match(runtime, /^\/\/ agentvfx
|
|
272
|
-
assert.match(runtime, /^\/\/
|
|
273
|
-
assert.match(readFileSync(path.join(dir, "demo.html"), "utf8"), /
|
|
274
|
+
assert.match(runtime, /^\/\/ agentvfx is licensed under the Apache License 2\.0; see LICENSE and NOTICE in this folder/mu);
|
|
275
|
+
assert.match(runtime, /^\/\/ Copyright 2026 Woojin Go \(github\.com\/wjgoarxiv\/agentvfx\)$/mu);
|
|
276
|
+
assert.match(readFileSync(path.join(dir, "demo.html"), "utf8"), /Copyright 2026 Woojin Go/u);
|
|
274
277
|
} finally {
|
|
275
278
|
rmSync(dir, { recursive: true, force: true });
|
|
276
279
|
}
|