fragment-tools 0.2.8 → 0.2.10
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/README.md +14 -10
- package/bin/index.js +4 -0
- package/package.json +11 -4
- package/src/cli/build.js +1 -3
- package/src/cli/create.js +55 -6
- package/src/cli/createConfig.js +9 -24
- package/src/cli/createFragmentFile.js +44 -46
- package/src/cli/getEntries.js +13 -5
- package/src/cli/plugins/check-dependencies.js +1 -1
- package/src/cli/plugins/save.js +7 -2
- package/src/cli/run.js +12 -3
- package/src/cli/templates/blank/index.js +4 -4
- package/src/cli/templates/blank/index.ts +15 -0
- package/src/cli/templates/default/index.js +7 -6
- package/src/cli/templates/default/index.ts +20 -0
- package/src/cli/templates/fragment-gl/fragment.fs +1 -1
- package/src/cli/templates/fragment-gl/index.js +3 -3
- package/src/cli/templates/fragment-gl/index.ts +20 -0
- package/src/cli/templates/p5/index.js +6 -6
- package/src/cli/templates/p5/index.ts +14 -0
- package/src/cli/templates/p5-webgl/fragment.fs +2 -4
- package/src/cli/templates/p5-webgl/index.js +9 -15
- package/src/cli/templates/p5-webgl/index.ts +43 -0
- package/src/cli/templates/three-fragment/fragment.fs +1 -1
- package/src/cli/templates/three-fragment/index.js +10 -4
- package/src/cli/templates/three-fragment/index.ts +68 -0
- package/src/cli/templates/three-orthographic/index.js +10 -4
- package/src/cli/templates/three-orthographic/index.ts +29 -0
- package/src/cli/templates/three-perspective/index.js +10 -4
- package/src/cli/templates/three-perspective/index.ts +26 -0
- package/src/cli/utils.js +3 -0
- package/src/client/app/components/HintRecord.svelte +3 -3
- package/src/client/app/hooks.js +5 -5
- package/src/client/app/lib/canvas-recorder/CanvasRecorder.js +3 -1
- package/src/client/app/lib/canvas-recorder/GIFRecorder.js +11 -1
- package/src/client/app/lib/canvas-recorder/MediaBunnyRecorder.js +97 -0
- package/src/client/app/lib/gl/Renderer.js +1 -1
- package/src/client/app/lib/gl/Texture.js +1 -1
- package/src/client/app/lib/gl/index.js +2 -2
- package/src/client/app/modules/AudioAnalyser/Range.svelte +2 -2
- package/src/client/app/modules/AudioAnalyser/Spectrum.svelte +3 -3
- package/src/client/app/modules/Console/ConsoleLine.svelte +13 -13
- package/src/client/app/modules/Console.svelte +6 -4
- package/src/client/app/modules/Exports.svelte +28 -4
- package/src/client/app/renderers/2DRenderer.js +6 -3
- package/src/client/app/renderers/FragmentRenderer.js +39 -2
- package/src/client/app/renderers/P5GLRenderer.js +28 -26
- package/src/client/app/renderers/P5Renderer.js +49 -9
- package/src/client/app/renderers/THREERenderer.js +64 -12
- package/src/client/app/state/exports.svelte.js +40 -2
- package/src/client/app/state/rendering.svelte.js +2 -2
- package/src/client/app/state/utils.svelte.js +9 -2
- package/src/client/app/stores/sketches.js +2 -1
- package/src/client/app/ui/ErrorOverlay.svelte +5 -5
- package/src/client/app/ui/Field.svelte +12 -8
- package/src/client/app/ui/FieldGroup.svelte +5 -5
- package/src/client/app/ui/FieldSection.svelte +8 -8
- package/src/client/app/ui/FieldSpace.svelte +2 -2
- package/src/client/app/ui/FieldTrigger.svelte +6 -6
- package/src/client/app/ui/FloatingParams.svelte +1 -1
- package/src/client/app/ui/LayoutBuild.svelte +1 -1
- package/src/client/app/ui/LayoutComponent.svelte +7 -7
- package/src/client/app/ui/LayoutResizer.svelte +1 -1
- package/src/client/app/ui/LayoutToolbar.svelte +6 -6
- package/src/client/app/ui/Module.svelte +6 -4
- package/src/client/app/ui/ModuleRenderer.svelte +3 -3
- package/src/client/app/ui/OutputRenderer.svelte +4 -1
- package/src/client/app/ui/SketchRenderer.svelte +9 -2
- package/src/client/app/ui/fields/ButtonInput.svelte +11 -11
- package/src/client/app/ui/fields/CheckboxInput.svelte +27 -19
- package/src/client/app/ui/fields/ColorInput.svelte +9 -7
- package/src/client/app/ui/fields/ImageInput.svelte +43 -23
- package/src/client/app/ui/fields/Input.svelte +13 -13
- package/src/client/app/ui/fields/IntervalInput.svelte +11 -14
- package/src/client/app/ui/fields/ListInput.svelte +9 -8
- package/src/client/app/ui/fields/ProgressInput.svelte +9 -9
- package/src/client/app/ui/fields/Select.svelte +13 -12
- package/src/client/app/ui/fields/VectorInput.svelte +1 -1
- package/src/client/app/utils/canvas.utils.js +21 -19
- package/src/client/public/css/global.css +26 -27
- package/src/types/client.d.ts +36 -0
- package/src/types/gl.d.ts +130 -0
- package/src/types/helpers.d.ts +5 -0
- package/src/types/hooks.d.ts +14 -0
- package/src/types/index.d.ts +8 -0
- package/src/types/midi.d.ts +176 -0
- package/src/types/props.d.ts +72 -0
- package/src/types/renderers.d.ts +100 -0
- package/src/types/sketch.d.ts +45 -0
- package/src/types/triggers.d.ts +45 -0
- package/src/types/utils.ts +11 -0
- package/tsconfig.json +38 -0
- package/.prettierignore +0 -4
- package/.prettierrc +0 -25
- package/src/client/app/lib/canvas-recorder/MP4Recorder.js +0 -44
- package/src/client/app/lib/canvas-recorder/WebMRecorder.js +0 -29
- package/src/client/app/lib/canvas-recorder/mp4.js +0 -1654
- package/src/client/app/lib/canvas-recorder/mp4.wasm +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type p5 from 'p5';
|
|
2
|
+
import type * as THREE from 'three';
|
|
3
|
+
import type { Frag } from '@fragment/lib/gl';
|
|
4
|
+
|
|
5
|
+
export type Rendering = '2d' | 'fragment' | 'p5' | 'p5-webgl' | 'three';
|
|
6
|
+
|
|
7
|
+
type Params = Record<string, any>;
|
|
8
|
+
|
|
9
|
+
export type RendererParams = {
|
|
10
|
+
id: number;
|
|
11
|
+
canvas: HTMLCanvasElement;
|
|
12
|
+
container: HTMLElement;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
pixelRatio: number;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type InitParams<P extends Params = Params> = P;
|
|
19
|
+
|
|
20
|
+
type RenderingsMountParams = {
|
|
21
|
+
'2d': { canvas: HTMLCanvasElement; context: CanvasRenderingContext2D };
|
|
22
|
+
fragment: { canvas: HTMLCanvasElement; frag: Frag };
|
|
23
|
+
p5: { canvas: HTMLCanvasElement; p: p5 };
|
|
24
|
+
'p5-webgl': { canvas: HTMLCanvasElement; p: p5 };
|
|
25
|
+
three: {
|
|
26
|
+
canvas: HTMLCanvasElement;
|
|
27
|
+
scene: THREE['Scene'];
|
|
28
|
+
renderer: THREE['WebGLRenderer'];
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type MountParams<R extends Rendering | Params> =
|
|
33
|
+
R extends keyof RenderingsMountParams ? RenderingsMountParams[R] : R;
|
|
34
|
+
|
|
35
|
+
export type MountParams2DRenderer = MountParams<'2d'>;
|
|
36
|
+
export type MountParamsFragmentRenderer = MountParams<'fragment'>;
|
|
37
|
+
export type MountParamsP5Renderer = MountParams<'p5'>;
|
|
38
|
+
export type MountParamsP5GLRenderer = MountParams<'p5-webgl'>;
|
|
39
|
+
export type MountParamsThreeRenderer = MountParams<'three'>;
|
|
40
|
+
|
|
41
|
+
export type RendererInit<P extends Params = InitParams> = (
|
|
42
|
+
params: Pick<RendererParams, 'canvas' | 'width' | 'height' | 'pixelRatio'>,
|
|
43
|
+
) => InitParams<P>;
|
|
44
|
+
|
|
45
|
+
export type RendererOnMountPreview<
|
|
46
|
+
P extends Params = InitParams,
|
|
47
|
+
R extends Rendering | Params = Params,
|
|
48
|
+
> = (
|
|
49
|
+
params: Pick<
|
|
50
|
+
RendererParams,
|
|
51
|
+
'id' | 'canvas' | 'container' | 'width' | 'height' | 'pixelRatio'
|
|
52
|
+
> &
|
|
53
|
+
InitParams<P>,
|
|
54
|
+
) => MountParams<R>;
|
|
55
|
+
|
|
56
|
+
export type RendererOnResizePreview<
|
|
57
|
+
P extends Params = InitParams,
|
|
58
|
+
R extends Rendering | Params = Params,
|
|
59
|
+
> = (
|
|
60
|
+
params: Pick<
|
|
61
|
+
RendererParams,
|
|
62
|
+
'id' | 'canvas' | 'width' | 'height' | 'pixelRatio'
|
|
63
|
+
> &
|
|
64
|
+
InitParams<P> &
|
|
65
|
+
MountParams<R>,
|
|
66
|
+
) => void;
|
|
67
|
+
|
|
68
|
+
export type RendererOnBeforeUpdatePreview<
|
|
69
|
+
P extends Params = InitParams,
|
|
70
|
+
R extends Rendering | Params = Params,
|
|
71
|
+
> = (
|
|
72
|
+
params: Pick<RendererParams, 'id' | 'canvas' | 'container'> &
|
|
73
|
+
InitParams<P> &
|
|
74
|
+
MountParams<R>,
|
|
75
|
+
) => void;
|
|
76
|
+
|
|
77
|
+
export type RendererOnAfterUpdatePreview<
|
|
78
|
+
P extends Params = InitParams,
|
|
79
|
+
R extends Rendering | Params = Params,
|
|
80
|
+
> = (
|
|
81
|
+
params: Pick<RendererParams, 'id' | 'canvas' | 'container'> &
|
|
82
|
+
InitParams<P> &
|
|
83
|
+
MountParams<R>,
|
|
84
|
+
) => void;
|
|
85
|
+
|
|
86
|
+
export type RendererOnDestroyPreview<
|
|
87
|
+
P extends Params = InitParams,
|
|
88
|
+
R extends Rendering | Params = Params,
|
|
89
|
+
> = (
|
|
90
|
+
params: Pick<RendererParams, 'id'> & InitParams<P> & MountParams<R>,
|
|
91
|
+
) => void;
|
|
92
|
+
|
|
93
|
+
export type RendererResize<
|
|
94
|
+
P extends Params = InitParams,
|
|
95
|
+
R extends Rendering | Params = Params,
|
|
96
|
+
> = (
|
|
97
|
+
params: Pick<RendererParams, 'width' | 'height' | 'pixelRatio'> &
|
|
98
|
+
InitParams<P> &
|
|
99
|
+
MountParams<R>,
|
|
100
|
+
) => void;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Props } from './props';
|
|
2
|
+
import type { Rendering, MountParams, RendererParams } from './renderers';
|
|
3
|
+
import type { Frag } from './gl';
|
|
4
|
+
|
|
5
|
+
export type Load<R extends Rendering | object> = (
|
|
6
|
+
params: RendererParams &
|
|
7
|
+
MountParams<R> & {
|
|
8
|
+
publicPath: string;
|
|
9
|
+
},
|
|
10
|
+
) => Promise<void> | void;
|
|
11
|
+
|
|
12
|
+
export type Init<R extends Rendering | object> = (
|
|
13
|
+
params: RendererParams &
|
|
14
|
+
MountParams<R> & {
|
|
15
|
+
publicPath: string;
|
|
16
|
+
},
|
|
17
|
+
) => Promise<void> | void;
|
|
18
|
+
|
|
19
|
+
export type Update<R extends Rendering | object> = (
|
|
20
|
+
params: RendererParams &
|
|
21
|
+
MountParams<R> & {
|
|
22
|
+
time: number;
|
|
23
|
+
deltaTime: number;
|
|
24
|
+
playhead?: number;
|
|
25
|
+
playcount?: number;
|
|
26
|
+
},
|
|
27
|
+
) => void;
|
|
28
|
+
|
|
29
|
+
export type Resize<R extends Rendering | object> = (
|
|
30
|
+
params: RendererParams & MountParams<R>,
|
|
31
|
+
) => void;
|
|
32
|
+
|
|
33
|
+
export type Dispose<R extends Rendering | object> = () => void;
|
|
34
|
+
|
|
35
|
+
export type FilenamePattern = (params: {
|
|
36
|
+
filename: string;
|
|
37
|
+
year: string;
|
|
38
|
+
month: string;
|
|
39
|
+
day: string;
|
|
40
|
+
hours: string;
|
|
41
|
+
minutes: string;
|
|
42
|
+
seconds: string;
|
|
43
|
+
timestamp: string;
|
|
44
|
+
props: Props;
|
|
45
|
+
}) => string;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
declare module '@fragment/triggers' {
|
|
2
|
+
// Mouse
|
|
3
|
+
function onClick(listener: (event: MouseEvent) => void): void;
|
|
4
|
+
function onMouseDown(listener: (event: MouseEvent) => void): void;
|
|
5
|
+
function onMouseUp(listener: (event: MouseEvent) => void): void;
|
|
6
|
+
function onMouseMove(listener: (event: MouseEvent) => void): void;
|
|
7
|
+
|
|
8
|
+
// Keyboard
|
|
9
|
+
function onKeyPress(
|
|
10
|
+
key?: string | string[],
|
|
11
|
+
listener: (event: KeyboardEvent) => void,
|
|
12
|
+
): void;
|
|
13
|
+
function onKeyDown(
|
|
14
|
+
key?: string | string[],
|
|
15
|
+
listener: (event: KeyboardEvent) => void,
|
|
16
|
+
): void;
|
|
17
|
+
function onKeyUp(
|
|
18
|
+
key?: string | string[],
|
|
19
|
+
listener: (event: KeyboardEvent) => void,
|
|
20
|
+
): void;
|
|
21
|
+
|
|
22
|
+
// MIDI
|
|
23
|
+
function onNoteOn(
|
|
24
|
+
note?: MIDI.MIDINote | MIDI.MIDINote[],
|
|
25
|
+
listener: (event: MIDI.MIDIMessageEvent) => void,
|
|
26
|
+
): void;
|
|
27
|
+
function onNoteOff(
|
|
28
|
+
note?: MIDI.MIDINote | MIDI.MIDINote[],
|
|
29
|
+
listener: (event: MIDI.MIDIMessageEvent) => void,
|
|
30
|
+
): void;
|
|
31
|
+
|
|
32
|
+
function onNumberOn(
|
|
33
|
+
noteNumber?: number | number[],
|
|
34
|
+
listener: (event: MIDI.MIDIMessageEvent) => void,
|
|
35
|
+
): void;
|
|
36
|
+
function onNumberOff(
|
|
37
|
+
noteNumber?: number | number[],
|
|
38
|
+
listener: (event: MIDI.MIDIMessageEvent) => void,
|
|
39
|
+
): void;
|
|
40
|
+
|
|
41
|
+
function onControlChange(
|
|
42
|
+
control?: number | number[],
|
|
43
|
+
listener: (event: MIDI.MIDIMessageEvent) => void,
|
|
44
|
+
): void;
|
|
45
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"baseUrl": ".",
|
|
4
|
+
|
|
5
|
+
"target": "ESNext",
|
|
6
|
+
"useDefineForClassFields": true,
|
|
7
|
+
"module": "ESNext",
|
|
8
|
+
"lib": ["ESNext", "DOM", "DOM.Iterable"],
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
|
|
11
|
+
/* Bundler mode */
|
|
12
|
+
"moduleResolution": "bundler",
|
|
13
|
+
"allowImportingTsExtensions": true,
|
|
14
|
+
"isolatedModules": true,
|
|
15
|
+
"esModuleInterop": false,
|
|
16
|
+
"moduleDetection": "force",
|
|
17
|
+
"resolveJsonModule": true,
|
|
18
|
+
"noEmit": true,
|
|
19
|
+
|
|
20
|
+
/* Linting */
|
|
21
|
+
"strict": true,
|
|
22
|
+
"allowJs": true,
|
|
23
|
+
"checkJs": false,
|
|
24
|
+
"noUnusedLocals": true,
|
|
25
|
+
"noUnusedParameters": true,
|
|
26
|
+
"noFallthroughCasesInSwitch": true,
|
|
27
|
+
"noUncheckedSideEffectImports": true,
|
|
28
|
+
"allowSyntheticDefaultImports": true,
|
|
29
|
+
"forceConsistentCasingInFileNames": true,
|
|
30
|
+
|
|
31
|
+
/* Paths */
|
|
32
|
+
"paths": {
|
|
33
|
+
"@fragment/types": ["src/types"],
|
|
34
|
+
"@fragment/types/*": ["src/types/*"],
|
|
35
|
+
"@fragment/*": ["src/client/app/*"]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
package/.prettierignore
DELETED
package/.prettierrc
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"semi": true,
|
|
3
|
-
"tabWidth": 4,
|
|
4
|
-
"useTabs": true,
|
|
5
|
-
"singleQuote": true,
|
|
6
|
-
"printWidth": 80,
|
|
7
|
-
"bracketSpacing": true,
|
|
8
|
-
"trailingComma": "all",
|
|
9
|
-
"plugins": ["prettier-plugin-svelte"],
|
|
10
|
-
"overrides": [
|
|
11
|
-
{
|
|
12
|
-
"files": ["README.md", "packages/*/README.md", "**/package.json"],
|
|
13
|
-
"options": {
|
|
14
|
-
"useTabs": false,
|
|
15
|
-
"tabWidth": 2
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"files": ["docs/**/*.md"],
|
|
20
|
-
"options": {
|
|
21
|
-
"printWidth": 60
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import loadMP4Module, { isWebCodecsSupported } from './mp4.js';
|
|
2
|
-
import CanvasRecorder from './CanvasRecorder';
|
|
3
|
-
|
|
4
|
-
let MP4;
|
|
5
|
-
|
|
6
|
-
class MP4Recorder extends CanvasRecorder {
|
|
7
|
-
static loaded = false;
|
|
8
|
-
static isSupported = true;
|
|
9
|
-
|
|
10
|
-
constructor(canvas, options) {
|
|
11
|
-
super(canvas, options);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
async load() {
|
|
15
|
-
if (!MP4Recorder.loaded) {
|
|
16
|
-
MP4 = await loadMP4Module();
|
|
17
|
-
|
|
18
|
-
MP4Recorder.loaded = true;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
this.encoder = MP4.createWebCodecsEncoder({
|
|
22
|
-
width: this.canvas.width,
|
|
23
|
-
height: this.canvas.height,
|
|
24
|
-
fps: this.framerate,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async tick() {
|
|
29
|
-
const bitmap = await window.createImageBitmap(this.canvas);
|
|
30
|
-
|
|
31
|
-
// Add bitmap to encoder
|
|
32
|
-
await this.encoder.addFrame(bitmap);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async end() {
|
|
36
|
-
const buffer = await this.encoder.end();
|
|
37
|
-
|
|
38
|
-
this.result = new Blob([buffer], { type: 'video/mp4' });
|
|
39
|
-
|
|
40
|
-
super.end();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export default MP4Recorder;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import WebMWriter from 'webm-writer';
|
|
2
|
-
import { map } from '../../utils/math.utils';
|
|
3
|
-
import CanvasRecorder from './CanvasRecorder';
|
|
4
|
-
|
|
5
|
-
class WebMRecorder extends CanvasRecorder {
|
|
6
|
-
start() {
|
|
7
|
-
const quality = map(this.quality, 1, 100, 0, 0.99999);
|
|
8
|
-
|
|
9
|
-
this.writer = new WebMWriter({
|
|
10
|
-
quality,
|
|
11
|
-
frameRate: this.framerate,
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
super.start();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
tick() {
|
|
18
|
-
this.writer.addFrame(this.canvas);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async end() {
|
|
22
|
-
this.result = await this.writer.complete();
|
|
23
|
-
this.writer = null;
|
|
24
|
-
|
|
25
|
-
super.end();
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export default WebMRecorder;
|