@norskvideo/norsk-studio-built-ins 1.11.6 → 1.12.0-2025-01-28-397642d6
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 +16 -0
- package/client/info.js +1402 -782
- package/client/output.whep/styles.css +9 -0
- package/client/style.css +520 -858
- package/lib/info.js +4 -8
- package/lib/info.js.map +1 -1
- package/lib/input.rtmp/info.js +2 -1
- package/lib/input.rtmp/info.js.map +1 -1
- package/lib/input.rtmp/runtime.d.ts +24 -5
- package/lib/input.rtmp/runtime.js +166 -60
- package/lib/input.rtmp/runtime.js.map +1 -1
- package/lib/input.rtmp/summary-view.d.ts +3 -5
- package/lib/input.rtmp/summary-view.js +26 -6
- package/lib/input.rtmp/summary-view.js.map +1 -1
- package/lib/input.rtmp/types.d.ts +133 -0
- package/lib/input.rtmp/types.js +3 -0
- package/lib/input.rtmp/types.js.map +1 -0
- package/lib/input.rtmp/types.yaml +99 -0
- package/lib/input.silence/info.js +3 -2
- package/lib/input.silence/info.js.map +1 -1
- package/lib/input.srt-caller/info.js +6 -5
- package/lib/input.srt-caller/info.js.map +1 -1
- package/lib/input.srt-caller/runtime.d.ts +1 -1
- package/lib/input.srt-listener/info.js +14 -6
- package/lib/input.srt-listener/info.js.map +1 -1
- package/lib/input.srt-listener/runtime.d.ts +42 -6
- package/lib/input.srt-listener/runtime.js +237 -57
- package/lib/input.srt-listener/runtime.js.map +1 -1
- package/lib/input.srt-listener/summary-view.d.ts +3 -5
- package/lib/input.srt-listener/summary-view.js +81 -5
- package/lib/input.srt-listener/summary-view.js.map +1 -1
- package/lib/input.srt-listener/types.d.ts +193 -0
- package/lib/input.srt-listener/types.js +3 -0
- package/lib/input.srt-listener/types.js.map +1 -0
- package/lib/input.srt-listener/types.yaml +145 -0
- package/lib/input.udp-ts/info.d.ts +1 -1
- package/lib/input.udp-ts/info.js +5 -4
- package/lib/input.udp-ts/info.js.map +1 -1
- package/lib/input.udp-ts/runtime.d.ts +1 -1
- package/lib/input.videoTestCard/info.d.ts +1 -1
- package/lib/input.videoTestCard/info.js +14 -4
- package/lib/input.videoTestCard/info.js.map +1 -1
- package/lib/output.autoCmaf/info.d.ts +2 -2
- package/lib/output.autoCmaf/info.js +65 -7
- package/lib/output.autoCmaf/info.js.map +1 -1
- package/lib/output.autoCmaf/runtime.d.ts +29 -9
- package/lib/output.autoCmaf/runtime.js +198 -60
- package/lib/output.autoCmaf/runtime.js.map +1 -1
- package/lib/output.autoCmaf/summary.js +26 -1
- package/lib/output.autoCmaf/summary.js.map +1 -1
- package/lib/output.autoCmaf/types.d.ts +101 -0
- package/lib/output.autoCmaf/types.js +3 -0
- package/lib/output.autoCmaf/types.js.map +1 -0
- package/lib/output.autoCmaf/types.yaml +28 -0
- package/lib/output.preview/info.js +5 -2
- package/lib/output.preview/info.js.map +1 -1
- package/lib/output.preview/inline-view.d.ts +2 -4
- package/lib/output.preview/inline-view.js +41 -7
- package/lib/output.preview/inline-view.js.map +1 -1
- package/lib/output.preview/runtime.d.ts +5 -3
- package/lib/output.preview/runtime.js +29 -18
- package/lib/output.preview/runtime.js.map +1 -1
- package/lib/output.rtmp/info.js +1 -0
- package/lib/output.rtmp/info.js.map +1 -1
- package/lib/output.rtmp/inline-view.js +2 -2
- package/lib/output.rtmp/runtime.d.ts +2 -2
- package/lib/output.rtmp/runtime.js.map +1 -1
- package/lib/output.srt/info.d.ts +2 -2
- package/lib/output.srt/info.js +26 -5
- package/lib/output.srt/info.js.map +1 -1
- package/lib/output.srt/runtime.d.ts +30 -5
- package/lib/output.srt/runtime.js +139 -5
- package/lib/output.srt/runtime.js.map +1 -1
- package/lib/output.srt/types.d.ts +101 -0
- package/lib/output.srt/types.js +3 -0
- package/lib/output.srt/types.js.map +1 -0
- package/lib/output.srt/types.yaml +31 -0
- package/lib/output.statistics/info.js +1 -0
- package/lib/output.statistics/info.js.map +1 -1
- package/lib/output.statistics/inline-view.js +3 -2
- package/lib/output.statistics/inline-view.js.map +1 -1
- package/lib/output.statistics/runtime.d.ts +1 -1
- package/lib/output.statistics/runtime.js.map +1 -1
- package/lib/output.udpTs/info.d.ts +1 -1
- package/lib/output.udpTs/info.js +4 -3
- package/lib/output.udpTs/info.js.map +1 -1
- package/lib/output.udpTs/runtime.d.ts +1 -1
- package/lib/output.whep/info.d.ts +2 -2
- package/lib/output.whep/info.js +50 -1
- package/lib/output.whep/info.js.map +1 -1
- package/lib/output.whep/inline-view.d.ts +4 -0
- package/lib/output.whep/inline-view.js +57 -0
- package/lib/output.whep/inline-view.js.map +1 -0
- package/lib/output.whep/runtime.d.ts +27 -5
- package/lib/output.whep/runtime.js +64 -13
- package/lib/output.whep/runtime.js.map +1 -1
- package/lib/output.whep/types.d.ts +101 -0
- package/lib/output.whep/types.js +3 -0
- package/lib/output.whep/types.js.map +1 -0
- package/lib/output.whep/types.yaml +30 -0
- package/lib/processor.browserOverlay/info.d.ts +2 -2
- package/lib/processor.browserOverlay/info.js +56 -2
- package/lib/processor.browserOverlay/info.js.map +1 -1
- package/lib/processor.browserOverlay/inline-view.d.ts +6 -0
- package/lib/processor.browserOverlay/inline-view.js +8 -0
- package/lib/processor.browserOverlay/inline-view.js.map +1 -0
- package/lib/processor.browserOverlay/runtime.d.ts +40 -6
- package/lib/processor.browserOverlay/runtime.js +151 -23
- package/lib/processor.browserOverlay/runtime.js.map +1 -1
- package/lib/processor.browserOverlay/summary-view.d.ts +4 -0
- package/lib/processor.browserOverlay/summary-view.js +27 -0
- package/lib/processor.browserOverlay/summary-view.js.map +1 -0
- package/lib/processor.browserOverlay/types.d.ts +174 -0
- package/lib/processor.browserOverlay/types.js +3 -0
- package/lib/processor.browserOverlay/types.js.map +1 -0
- package/lib/processor.browserOverlay/types.yaml +65 -0
- package/lib/processor.cascadingSwitch/info.js +4 -3
- package/lib/processor.cascadingSwitch/info.js.map +1 -1
- package/lib/processor.cascadingSwitch/inline-view.js +3 -3
- package/lib/processor.cascadingSwitch/runtime.d.ts +1 -1
- package/lib/processor.cascadingSwitch/runtime.js +2 -2
- package/lib/processor.cascadingSwitch/runtime.js.map +1 -1
- package/lib/processor.fixedLadder/codec-editor.js +1 -1
- package/lib/processor.fixedLadder/codec-editor.js.map +1 -1
- package/lib/processor.fixedLadder/codec-view.js +1 -1
- package/lib/processor.fixedLadder/codec-view.js.map +1 -1
- package/lib/processor.fixedLadder/info.js +4 -2
- package/lib/processor.fixedLadder/info.js.map +1 -1
- package/lib/processor.fixedLadder/rung-view.js +1 -1
- package/lib/processor.fixedLadder/rung-view.js.map +1 -1
- package/lib/processor.onscreenGraphic/image-selection.d.ts +9 -0
- package/lib/{processor.dynamicBug/bug-selection.js → processor.onscreenGraphic/image-selection.js} +10 -10
- package/lib/processor.onscreenGraphic/image-selection.js.map +1 -0
- package/lib/processor.onscreenGraphic/info.d.ts +3 -0
- package/lib/{processor.dynamicBug → processor.onscreenGraphic}/info.js +23 -16
- package/lib/processor.onscreenGraphic/info.js.map +1 -0
- package/lib/processor.onscreenGraphic/runtime.d.ts +91 -0
- package/lib/processor.onscreenGraphic/runtime.js +503 -0
- package/lib/processor.onscreenGraphic/runtime.js.map +1 -0
- package/lib/processor.onscreenGraphic/summary-view.d.ts +4 -0
- package/lib/processor.onscreenGraphic/summary-view.js +343 -0
- package/lib/processor.onscreenGraphic/summary-view.js.map +1 -0
- package/lib/processor.onscreenGraphic/types.d.ts +271 -0
- package/lib/processor.onscreenGraphic/types.js +3 -0
- package/lib/processor.onscreenGraphic/types.js.map +1 -0
- package/lib/processor.onscreenGraphic/types.yaml +211 -0
- package/lib/processor.streamKeyOverride/info.d.ts +3 -0
- package/lib/processor.streamKeyOverride/info.js +150 -0
- package/lib/processor.streamKeyOverride/info.js.map +1 -0
- package/lib/processor.streamKeyOverride/runtime.d.ts +54 -0
- package/lib/processor.streamKeyOverride/runtime.js +226 -0
- package/lib/processor.streamKeyOverride/runtime.js.map +1 -0
- package/lib/shared/drm/axinom.d.ts +2 -0
- package/lib/shared/drm/axinom.js +120 -0
- package/lib/shared/drm/axinom.js.map +1 -0
- package/lib/shared/drm/cpix.d.ts +24 -0
- package/lib/shared/drm/cpix.js +97 -0
- package/lib/shared/drm/cpix.js.map +1 -0
- package/lib/shared/drm/ezdrm.d.ts +2 -0
- package/lib/shared/drm/ezdrm.js +26 -0
- package/lib/shared/drm/ezdrm.js.map +1 -0
- package/lib/shared/srt-socket-options.js +6 -6
- package/lib/shared/srt-socket-options.js.map +1 -1
- package/lib/test/auto-cmaf.js +25 -17
- package/lib/test/auto-cmaf.js.map +1 -1
- package/lib/test/browser-overlay.js +1 -0
- package/lib/test/browser-overlay.js.map +1 -1
- package/lib/test/{dynamic-bug.js → onscreen-graphic.js} +139 -106
- package/lib/test/onscreen-graphic.js.map +1 -0
- package/lib/test/preview.js +3 -3
- package/lib/test/preview.js.map +1 -1
- package/lib/test/rtmp-input.js +6 -3
- package/lib/test/rtmp-input.js.map +1 -1
- package/lib/test/srt-input-caller.js +5 -5
- package/lib/test/srt-input-caller.js.map +1 -1
- package/lib/test/srt-input-listener.js +99 -18
- package/lib/test/srt-input-listener.js.map +1 -1
- package/lib/test/srt-output.js +2 -2
- package/lib/test/srt-output.js.map +1 -1
- package/lib/test/udp-output.js +2 -2
- package/lib/test/udp-output.js.map +1 -1
- package/lib/test/udp-ts-input.js +2 -2
- package/lib/test/udp-ts-input.js.map +1 -1
- package/lib/test/whep-output.js +8 -2
- package/lib/test/whep-output.js.map +1 -1
- package/lib/{util.latency → util.stats.latency}/info.js +2 -1
- package/lib/util.stats.latency/info.js.map +1 -0
- package/lib/util.stats.latency/inline-view.js.map +1 -0
- package/lib/{util.latency → util.stats.latency}/runtime.d.ts +1 -1
- package/lib/{util.latency → util.stats.latency}/runtime.js +2 -2
- package/lib/util.stats.latency/runtime.js.map +1 -0
- package/lib/util.stats.latency/source-node-selection.js.map +1 -0
- package/package.json +12 -5
- package/lib/processor.dynamicBug/bug-selection.d.ts +0 -9
- package/lib/processor.dynamicBug/bug-selection.js.map +0 -1
- package/lib/processor.dynamicBug/info.d.ts +0 -3
- package/lib/processor.dynamicBug/info.js.map +0 -1
- package/lib/processor.dynamicBug/runtime.d.ts +0 -64
- package/lib/processor.dynamicBug/runtime.js +0 -297
- package/lib/processor.dynamicBug/runtime.js.map +0 -1
- package/lib/processor.dynamicBug/summary-view.d.ts +0 -4
- package/lib/processor.dynamicBug/summary-view.js +0 -60
- package/lib/processor.dynamicBug/summary-view.js.map +0 -1
- package/lib/processor.whisper-transcribe/info.d.ts +0 -3
- package/lib/processor.whisper-transcribe/info.js +0 -43
- package/lib/processor.whisper-transcribe/info.js.map +0 -1
- package/lib/processor.whisper-transcribe/runtime.d.ts +0 -29
- package/lib/processor.whisper-transcribe/runtime.js +0 -83
- package/lib/processor.whisper-transcribe/runtime.js.map +0 -1
- package/lib/test/dynamic-bug.js.map +0 -1
- package/lib/util.latency/info.js.map +0 -1
- package/lib/util.latency/inline-view.js.map +0 -1
- package/lib/util.latency/runtime.js.map +0 -1
- package/lib/util.latency/source-node-selection.js.map +0 -1
- package/lib/util.ma35d/info.d.ts +0 -3
- package/lib/util.ma35d/info.js +0 -78
- package/lib/util.ma35d/info.js.map +0 -1
- package/lib/util.ma35d/inline-view.d.ts +0 -6
- package/lib/util.ma35d/inline-view.js +0 -76
- package/lib/util.ma35d/inline-view.js.map +0 -1
- package/lib/util.ma35d/runtime.d.ts +0 -21
- package/lib/util.ma35d/runtime.js +0 -49
- package/lib/util.ma35d/runtime.js.map +0 -1
- package/lib/util.timestamps/info.d.ts +0 -5
- package/lib/util.timestamps/info.js +0 -86
- package/lib/util.timestamps/info.js.map +0 -1
- package/lib/util.timestamps/inline-view.d.ts +0 -6
- package/lib/util.timestamps/inline-view.js +0 -94
- package/lib/util.timestamps/inline-view.js.map +0 -1
- package/lib/util.timestamps/runtime.d.ts +0 -29
- package/lib/util.timestamps/runtime.js +0 -40
- package/lib/util.timestamps/runtime.js.map +0 -1
- /package/lib/test/{dynamic-bug.d.ts → onscreen-graphic.d.ts} +0 -0
- /package/lib/{util.latency → util.stats.latency}/info.d.ts +0 -0
- /package/lib/{util.latency → util.stats.latency}/inline-view.d.ts +0 -0
- /package/lib/{util.latency → util.stats.latency}/inline-view.js +0 -0
- /package/lib/{util.latency → util.stats.latency}/source-node-selection.d.ts +0 -0
- /package/lib/{util.latency → util.stats.latency}/source-node-selection.js +0 -0
package/package.json
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
{
|
2
2
|
"name": "@norskvideo/norsk-studio-built-ins",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.12.0-2025-01-28-397642d6",
|
4
4
|
"description": "",
|
5
5
|
"scripts": {
|
6
6
|
"clean": "rm -rf lib",
|
7
|
-
"
|
7
|
+
"types": "make",
|
8
|
+
"build": "npm run types && npx studio-wrap-infos src/ && npx npm-run-all build:* && rm -rf build",
|
8
9
|
"build:server": "npx tsc",
|
9
10
|
"build:client": "npx tsc -p tsconfig-client.json && npx studio-bundle build/info.js client/info.js",
|
10
|
-
"build:
|
11
|
+
"build:css": "rsync --mkpath -v -r --include '*/' --include '*.css' --exclude '*' src/ client/",
|
12
|
+
"build:types": "rsync --mkpath -v -r --include '*/' --include 'types.yaml' --exclude '*' src/ lib/",
|
11
13
|
"build:tailwind": "npx tailwindcss -i src/shared/tailwind.css -o client/style.css",
|
12
14
|
"build:eslint": "npx eslint src",
|
13
15
|
"test": "LOG_LEVEL=${LOG_LEVEL:-error} NODE_ENV=test mocha --no-parallel --jobs=0 --timeout 120000 --recursive lib/test"
|
@@ -19,13 +21,15 @@
|
|
19
21
|
],
|
20
22
|
"license": "MIT",
|
21
23
|
"dependencies": {
|
22
|
-
"@norskvideo/norsk-sdk": "^1.0.
|
23
|
-
"@norskvideo/norsk-studio": "^1.
|
24
|
+
"@norskvideo/norsk-sdk": "^1.0.399-2025-01-28-7195a061",
|
25
|
+
"@norskvideo/norsk-studio": "^1.20.1-2025-01-28-d7ddc822",
|
24
26
|
"@norskvideo/webrtc-client": "^0.1.2",
|
25
27
|
"body-parser": "^1.20.2",
|
26
28
|
"cors": "^2.8.5",
|
27
29
|
"express": "^4.18.2",
|
28
30
|
"express-ws": "^5.0.2",
|
31
|
+
"json-refs": "^3.0.15",
|
32
|
+
"jsonwebtoken": "^9.0.2",
|
29
33
|
"multer": "^1.4.5-lts.1"
|
30
34
|
},
|
31
35
|
"main": "lib/index.js",
|
@@ -35,6 +39,7 @@
|
|
35
39
|
"@types/express": "^4.17.20",
|
36
40
|
"@types/express-ws": "^3.0.3",
|
37
41
|
"@types/hls-parser": "^0.8.7",
|
42
|
+
"@types/jsonwebtoken": "^9.0.6",
|
38
43
|
"@types/mocha": "^10.0.6",
|
39
44
|
"@types/multer": "^1.4.11",
|
40
45
|
"@types/node-fetch": "^2.6.9",
|
@@ -53,6 +58,8 @@
|
|
53
58
|
"mocha": "^10.4.0",
|
54
59
|
"node-fetch": "^2.7.0",
|
55
60
|
"npm-run-all": "^4.1.5",
|
61
|
+
"openapi-types": "^12.1.3",
|
62
|
+
"openapi-typescript": "^7.3.0",
|
56
63
|
"puppeteer": "^21.5.2",
|
57
64
|
"react": "^18.3.0",
|
58
65
|
"tailwindcss": "^3.4.1",
|
@@ -1,9 +0,0 @@
|
|
1
|
-
import type { DynamicBugConfig } from "./runtime";
|
2
|
-
type BugSelectionProps = {
|
3
|
-
defaultValue?: string;
|
4
|
-
id: string;
|
5
|
-
onChanged: (value: string) => void;
|
6
|
-
latest: Partial<DynamicBugConfig>;
|
7
|
-
};
|
8
|
-
declare function BugSelection(props: BugSelectionProps): import("react/jsx-runtime").JSX.Element;
|
9
|
-
export default BugSelection;
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"bug-selection.js","sourceRoot":"","sources":["../../src/processor.dynamicBug/bug-selection.tsx"],"names":[],"mappings":";;;AAAA,iCAAyD;AAUzD,SAAS,YAAY,CAAC,KAAwB;IAC5C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAE7C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAA;YAClE,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAc,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,IAAI,KAAK,CAAC,YAAY;oBACpB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAA;QACD,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAW,EAAE,CAAC,CAAC;IAE/C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,wDAAoB,CAAA;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,6DAAyB,CAAA;IAClC,CAAC;IAED,OAAO,0CACL,oCAAQ,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,aACrI,mCAAoB,KAAK,EAAC,EAAE,qBAAhB,OAAO,CAAsB,EACxC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACjB,OAAO,mCAAgB,KAAK,EAAE,CAAC,YAAG,CAAC,IAAf,CAAC,CAAwB,CAAA;gBAC/C,CAAC,CAAC,IACK,GACL,CAAA;IAGN,SAAS,UAAU,CAAC,CAAiC;QACnD,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,kBAAe,YAAY,CAAC"}
|
@@ -1,3 +0,0 @@
|
|
1
|
-
import type Registration from "@norskvideo/norsk-studio/lib/extension/registration";
|
2
|
-
import type { DynamicBugCommand, DynamicBugConfig, DynamicBugEvent, DynamicBugState } from "./runtime";
|
3
|
-
export default function ({ defineComponent, Video }: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<DynamicBugConfig, DynamicBugState, DynamicBugCommand, DynamicBugEvent>;
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.dynamicBug/info.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,4BAyEC;AA7ED,uEAA+E;AAC/E,kDAA0B;AAG1B,mBAAwB,EACtB,eAAe,EACf,KAAK,EACQ;IACb,MAAM,YAAY,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,mDAAQ,iBAAiB,GAAC,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,mDAAQ,gBAAgB,GAAC,CAAC,CAAC;IAErE,OAAO,eAAe,CAAwE;QAC5F,UAAU,EAAE,sBAAsB;QAClC,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE;YAEZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,KAAK;aACb;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,KAAK;aACb;SACF;QACD,eAAe,EAAE,UAAS,GAAG;YAC3B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM;aAC1C,CAAA;QACH,CAAC;QACD,OAAO,EAAE;YACP,OAAO,EAAE,WAAW;YACpB,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EACpB,CAAC;YACF,WAAW,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;gBACzB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;gBACvB,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,aAAa;wBAChB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;oBAC3E;wBACE,iBAAiB,CAAC,MAAM,CAAC,CAAA;gBAE7B,CAAC;YACH,CAAC;SACF;QACD,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,QAAQ,EAAE,IAAA,0BAAiB,GAAE;aAC9B;YACD,IAAI,EAAE;gBACJ,UAAU,EAAE;oBACV,IAAI,EAAE,iDAAiD;oBACvD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,YAAY;qBACxB;iBACF;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,2CAA2C;oBACjD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,IAAI;wBACd,OAAO,EAAE;4BACP,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;4BACzC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;4BAC3C,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE;4BAC/C,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE;yBAClD;qBACF;iBACF;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAQ;IACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC"}
|
@@ -1,64 +0,0 @@
|
|
1
|
-
import { ComposePart, FileImageInputNode, Norsk, VideoComposeNode, VideoStreamMetadata } from '@norskvideo/norsk-sdk';
|
2
|
-
import { CreatedMediaNode, OnCreated, RelatedMediaNodes, RuntimeUpdates, ServerComponentDefinition, StudioNodeSubscriptionSource, StudioRuntime } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
|
3
|
-
import { HardwareAccelerationType } from '@norskvideo/norsk-studio/lib/shared/config';
|
4
|
-
import { Router } from 'express';
|
5
|
-
import { ContextPromiseControl } from '@norskvideo/norsk-studio/lib/runtime/util';
|
6
|
-
export type DynamicBugPosition = "topleft" | "topright" | "bottomleft" | "bottomright";
|
7
|
-
export type DynamicBugConfig = {
|
8
|
-
__global: {
|
9
|
-
hardware?: HardwareAccelerationType;
|
10
|
-
dataDir?: string;
|
11
|
-
};
|
12
|
-
id: string;
|
13
|
-
displayName: string;
|
14
|
-
defaultBug?: string;
|
15
|
-
defaultPosition?: DynamicBugPosition;
|
16
|
-
};
|
17
|
-
export type DynamicBugState = {
|
18
|
-
activeBug?: {
|
19
|
-
file?: string;
|
20
|
-
position?: DynamicBugPosition;
|
21
|
-
};
|
22
|
-
};
|
23
|
-
export type DynamicBugCommand = {
|
24
|
-
type: 'change-bug';
|
25
|
-
file?: string;
|
26
|
-
position?: DynamicBugPosition;
|
27
|
-
};
|
28
|
-
export type DynamicBugEvent = {
|
29
|
-
type: 'bug-changed';
|
30
|
-
file?: string;
|
31
|
-
position?: DynamicBugPosition;
|
32
|
-
};
|
33
|
-
export default class DynamicBugDefinition implements ServerComponentDefinition<DynamicBugConfig, DynamicBug, DynamicBugState, DynamicBugCommand, DynamicBugEvent> {
|
34
|
-
create(norsk: Norsk, cfg: DynamicBugConfig, cb: OnCreated<DynamicBug>, runtime: StudioRuntime<DynamicBugState, DynamicBugEvent>): Promise<void>;
|
35
|
-
routes(): Router;
|
36
|
-
handleCommand(node: DynamicBug, command: DynamicBugCommand): Promise<void>;
|
37
|
-
}
|
38
|
-
export declare class DynamicBug implements CreatedMediaNode {
|
39
|
-
id: string;
|
40
|
-
relatedMediaNodes: RelatedMediaNodes;
|
41
|
-
contexts: ContextPromiseControl;
|
42
|
-
norsk: Norsk;
|
43
|
-
cfg: DynamicBugConfig;
|
44
|
-
bug?: string;
|
45
|
-
position?: DynamicBugPosition;
|
46
|
-
videoSource?: StudioNodeSubscriptionSource;
|
47
|
-
composeNode?: VideoComposeNode<"video" | "bug">;
|
48
|
-
imageSource?: FileImageInputNode;
|
49
|
-
oldImageSource?: FileImageInputNode;
|
50
|
-
activeImage: "a" | "b";
|
51
|
-
initialised: Promise<void>;
|
52
|
-
updates: RuntimeUpdates<DynamicBugState, DynamicBugEvent>;
|
53
|
-
currentVideo?: VideoStreamMetadata;
|
54
|
-
static create(norsk: Norsk, cfg: DynamicBugConfig, updates: RuntimeUpdates<DynamicBugState, DynamicBugEvent>): Promise<DynamicBug>;
|
55
|
-
constructor(norsk: Norsk, cfg: DynamicBugConfig, updates: RuntimeUpdates<DynamicBugState, DynamicBugEvent>);
|
56
|
-
handleContext(): Promise<void>;
|
57
|
-
doSubs(imageSource?: FileImageInputNode): void;
|
58
|
-
setupBug(bug?: string, position?: DynamicBugPosition): Promise<void>;
|
59
|
-
imagePart(position: DynamicBugPosition, videoWidth: number, videoHeight: number, imageWidth: number, imageHeight: number): ComposePart<"bug">;
|
60
|
-
videoPart(videoWidth: number, videoHeight: number): ComposePart<"video">;
|
61
|
-
initialise(): Promise<void>;
|
62
|
-
subscribe(sources: StudioNodeSubscriptionSource[]): void;
|
63
|
-
setSources(): void;
|
64
|
-
}
|
@@ -1,297 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.DynamicBug = void 0;
|
7
|
-
const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
|
8
|
-
const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
|
9
|
-
const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
|
10
|
-
const config_1 = require("@norskvideo/norsk-studio/lib/shared/config");
|
11
|
-
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
12
|
-
const config_2 = __importDefault(require("@norskvideo/norsk-studio/lib/server/config"));
|
13
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
14
|
-
const path_1 = __importDefault(require("path"));
|
15
|
-
const cors_1 = __importDefault(require("cors"));
|
16
|
-
const body_parser_1 = __importDefault(require("body-parser"));
|
17
|
-
const express_1 = __importDefault(require("express"));
|
18
|
-
const multer_1 = __importDefault(require("multer"));
|
19
|
-
const util_2 = require("@norskvideo/norsk-studio/lib/runtime/util");
|
20
|
-
function bugDir() {
|
21
|
-
return path_1.default.join(config_2.default.server.workingDir(), process.env.DYNAMICBUG_DIRECTORY ?? "bugs");
|
22
|
-
}
|
23
|
-
async function getBugs() {
|
24
|
-
const files = await promises_1.default.readdir(bugDir());
|
25
|
-
const images = files.filter((f) => {
|
26
|
-
return f.endsWith(".png") || f.endsWith(".jpg");
|
27
|
-
});
|
28
|
-
return images;
|
29
|
-
}
|
30
|
-
class DynamicBugDefinition {
|
31
|
-
async create(norsk, cfg, cb, runtime) {
|
32
|
-
const node = await DynamicBug.create(norsk, cfg, runtime.updates);
|
33
|
-
cb(node);
|
34
|
-
runtime.router.get("/active-bug", async (_req, res) => {
|
35
|
-
res.send(JSON.stringify({
|
36
|
-
bug: node.bug,
|
37
|
-
position: node.position
|
38
|
-
}));
|
39
|
-
});
|
40
|
-
runtime.router.delete("/active-bug", async (_req, res) => {
|
41
|
-
await node.setupBug(undefined, undefined);
|
42
|
-
res.send("ok");
|
43
|
-
});
|
44
|
-
runtime.router.post("/active-bug", async (req, res) => {
|
45
|
-
if ((req.body.bug || req.body.position)) {
|
46
|
-
if (!["topleft", "topright", "bottomleft", "bottomright"].includes(req.body.position)) {
|
47
|
-
res.status(400).send("bad position");
|
48
|
-
return;
|
49
|
-
}
|
50
|
-
const images = await getBugs();
|
51
|
-
if (!images.includes(req.body.bug)) {
|
52
|
-
res.status(400).send("bad bug");
|
53
|
-
return;
|
54
|
-
}
|
55
|
-
}
|
56
|
-
await node.setupBug(req.body.bug, req.body.position);
|
57
|
-
res.send("ok");
|
58
|
-
});
|
59
|
-
const storage = multer_1.default.diskStorage({
|
60
|
-
destination: bugDir(),
|
61
|
-
filename: function (_req, file, cb) {
|
62
|
-
cb(null, path_1.default.basename(file.originalname));
|
63
|
-
}
|
64
|
-
});
|
65
|
-
const upload = (0, multer_1.default)({ storage });
|
66
|
-
runtime.router.post('/bugs', upload.single('file'), (_req, res) => {
|
67
|
-
res.send('File uploaded successfully');
|
68
|
-
});
|
69
|
-
runtime.router.get("/bugs", (0, cors_1.default)({
|
70
|
-
origin: '*',
|
71
|
-
optionsSuccessStatus: 200
|
72
|
-
}), async (_req, res) => {
|
73
|
-
const images = await getBugs();
|
74
|
-
res.send(JSON.stringify(images));
|
75
|
-
});
|
76
|
-
}
|
77
|
-
routes() {
|
78
|
-
const router = express_1.default.Router();
|
79
|
-
router.use(body_parser_1.default.json());
|
80
|
-
router.get("/bugs", async (_req, res) => {
|
81
|
-
const images = await getBugs();
|
82
|
-
res.send(JSON.stringify(images));
|
83
|
-
});
|
84
|
-
return router;
|
85
|
-
}
|
86
|
-
async handleCommand(node, command) {
|
87
|
-
const commandType = command.type;
|
88
|
-
switch (commandType) {
|
89
|
-
case 'change-bug':
|
90
|
-
await node.setupBug(command.file, command.position);
|
91
|
-
break;
|
92
|
-
default:
|
93
|
-
(0, util_1.assertUnreachable)(commandType);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
}
|
97
|
-
exports.default = DynamicBugDefinition;
|
98
|
-
class DynamicBug {
|
99
|
-
id;
|
100
|
-
relatedMediaNodes = new runtime_types_1.RelatedMediaNodes();
|
101
|
-
contexts = new util_2.ContextPromiseControl(this.handleContext.bind(this));
|
102
|
-
norsk;
|
103
|
-
cfg;
|
104
|
-
bug;
|
105
|
-
position;
|
106
|
-
videoSource;
|
107
|
-
composeNode;
|
108
|
-
imageSource;
|
109
|
-
oldImageSource;
|
110
|
-
activeImage = "a";
|
111
|
-
initialised;
|
112
|
-
updates;
|
113
|
-
currentVideo;
|
114
|
-
static async create(norsk, cfg, updates) {
|
115
|
-
const node = new DynamicBug(norsk, cfg, updates);
|
116
|
-
await node.initialised;
|
117
|
-
return node;
|
118
|
-
}
|
119
|
-
constructor(norsk, cfg, updates) {
|
120
|
-
this.cfg = cfg;
|
121
|
-
this.id = cfg.id;
|
122
|
-
this.norsk = norsk;
|
123
|
-
this.updates = updates;
|
124
|
-
this.initialised = this.initialise();
|
125
|
-
}
|
126
|
-
async handleContext() {
|
127
|
-
const video = this.videoSource?.latestStreams()[0]?.metadata;
|
128
|
-
if (!video || !this.videoSource || video.message.case !== 'video') {
|
129
|
-
await this.composeNode?.close();
|
130
|
-
this.composeNode = undefined;
|
131
|
-
this.currentVideo = undefined;
|
132
|
-
return;
|
133
|
-
}
|
134
|
-
else {
|
135
|
-
const nextVideo = video.message.value;
|
136
|
-
(0, logging_1.debuglog)("Creating compose for dynamic bug", { id: this.id, metadata: nextVideo });
|
137
|
-
if (this.currentVideo) {
|
138
|
-
if (nextVideo.height !== this.currentVideo.height || nextVideo.width !== this.currentVideo.width) {
|
139
|
-
(0, logging_1.debuglog)("Closing compose node in dynamic bug because of metadata change", { id: this.id, old: this.currentVideo, new: nextVideo });
|
140
|
-
await this.composeNode?.close();
|
141
|
-
this.currentVideo = undefined;
|
142
|
-
}
|
143
|
-
}
|
144
|
-
this.currentVideo = nextVideo;
|
145
|
-
if (!this.composeNode) {
|
146
|
-
const thisCompose = this.composeNode = await this.norsk.processor.transform.videoCompose({
|
147
|
-
onCreate: (n) => {
|
148
|
-
this.relatedMediaNodes.addOutput(n);
|
149
|
-
this.relatedMediaNodes.addInput(n);
|
150
|
-
},
|
151
|
-
onClose: () => {
|
152
|
-
this.relatedMediaNodes.removeOutput(thisCompose);
|
153
|
-
this.relatedMediaNodes.removeOutput(thisCompose);
|
154
|
-
},
|
155
|
-
id: `${this.id}-compose`,
|
156
|
-
referenceStream: 'video',
|
157
|
-
hardwareAcceleration: (0, config_1.contractHardwareAcceleration)(this.cfg.__global.hardware, ["nvidia"]),
|
158
|
-
outputResolution: {
|
159
|
-
width: nextVideo.width,
|
160
|
-
height: nextVideo.height
|
161
|
-
},
|
162
|
-
parts: [
|
163
|
-
this.videoPart(nextVideo.width, nextVideo.height),
|
164
|
-
]
|
165
|
-
});
|
166
|
-
this.doSubs();
|
167
|
-
}
|
168
|
-
if (this.imageSource || this.oldImageSource) {
|
169
|
-
const newImageStream = this.imageSource?.outputStreams[0];
|
170
|
-
const oldImageStream = this.oldImageSource?.outputStreams[0];
|
171
|
-
if (newImageStream && oldImageStream) {
|
172
|
-
this.doSubs();
|
173
|
-
this.composeNode?.updateConfig({
|
174
|
-
parts: [
|
175
|
-
this.videoPart(nextVideo.width, nextVideo.height),
|
176
|
-
]
|
177
|
-
});
|
178
|
-
(0, logging_1.debuglog)("Closing old image source for bug", { id: this.id, oldNode: this.oldImageSource?.id, newNode: this.imageSource?.id });
|
179
|
-
void this.oldImageSource?.close();
|
180
|
-
this.oldImageSource = undefined;
|
181
|
-
await this.handleContext();
|
182
|
-
return;
|
183
|
-
}
|
184
|
-
if (newImageStream) {
|
185
|
-
this.doSubs(this.imageSource);
|
186
|
-
}
|
187
|
-
else if (oldImageStream) {
|
188
|
-
this.doSubs(this.oldImageSource);
|
189
|
-
}
|
190
|
-
const imageStream = newImageStream ?? oldImageStream;
|
191
|
-
if (imageStream && imageStream.message.case == 'video') {
|
192
|
-
this.composeNode?.updateConfig({
|
193
|
-
parts: [
|
194
|
-
this.videoPart(nextVideo.width, nextVideo.height),
|
195
|
-
this.imagePart(this.position ?? 'topleft', nextVideo.width, nextVideo.height, imageStream.message.value.width, imageStream.message.value.height)
|
196
|
-
]
|
197
|
-
});
|
198
|
-
}
|
199
|
-
else {
|
200
|
-
this.doSubs();
|
201
|
-
this.composeNode?.updateConfig({
|
202
|
-
parts: [
|
203
|
-
this.videoPart(nextVideo.width, nextVideo.height),
|
204
|
-
]
|
205
|
-
});
|
206
|
-
}
|
207
|
-
}
|
208
|
-
}
|
209
|
-
}
|
210
|
-
doSubs(imageSource) {
|
211
|
-
if (!imageSource) {
|
212
|
-
(0, logging_1.debuglog)("Doing subscriptions for dynamic bug without image source");
|
213
|
-
this.composeNode?.subscribeToPins(this.videoSource?.selectVideoToPin("video") || []);
|
214
|
-
}
|
215
|
-
else {
|
216
|
-
(0, logging_1.debuglog)("Doing subscriptions for dynamic bug with image source", { id: this.id, image: imageSource.id });
|
217
|
-
this.composeNode?.subscribeToPins((this.videoSource?.selectVideoToPin("video") ?? []).concat([
|
218
|
-
{ source: imageSource, sourceSelector: (0, norsk_sdk_1.videoToPin)("bug") }
|
219
|
-
]));
|
220
|
-
}
|
221
|
-
}
|
222
|
-
async setupBug(bug, position) {
|
223
|
-
this.position = position;
|
224
|
-
if (!bug || bug === "") {
|
225
|
-
(0, logging_1.debuglog)("Clearing bug", { id: this.id });
|
226
|
-
this.doSubs();
|
227
|
-
await this.imageSource?.close();
|
228
|
-
this.imageSource = undefined;
|
229
|
-
this.bug = undefined;
|
230
|
-
this.updates.raiseEvent({ type: 'bug-changed' });
|
231
|
-
await this.contexts.schedule();
|
232
|
-
return;
|
233
|
-
}
|
234
|
-
else if (bug !== this.bug) {
|
235
|
-
(0, logging_1.debuglog)("Changing bug", { id: this.id, bug, position });
|
236
|
-
this.bug = bug;
|
237
|
-
this.activeImage = this.activeImage == "a" ? "b" : "a";
|
238
|
-
this.oldImageSource = this.imageSource;
|
239
|
-
this.imageSource = await this.norsk.input.fileImage({
|
240
|
-
id: `${this.id}-${this.activeImage}`,
|
241
|
-
sourceName: `${this.id}-bug-${this.activeImage}`,
|
242
|
-
fileName: path_1.default.join(bugDir(), bug)
|
243
|
-
});
|
244
|
-
this.setSources();
|
245
|
-
}
|
246
|
-
else {
|
247
|
-
(0, logging_1.debuglog)("Changing bug position", { id: this.id, bug, position });
|
248
|
-
this.position = position;
|
249
|
-
await this.contexts.schedule();
|
250
|
-
}
|
251
|
-
this.updates.raiseEvent({ type: 'bug-changed', file: bug, position });
|
252
|
-
}
|
253
|
-
imagePart(position, videoWidth, videoHeight, imageWidth, imageHeight) {
|
254
|
-
imageWidth = Math.min(videoWidth - 100, imageWidth);
|
255
|
-
imageHeight = Math.min(videoHeight - 100, imageHeight);
|
256
|
-
const foo = {
|
257
|
-
id: "bug",
|
258
|
-
zIndex: 1,
|
259
|
-
sourceRect: { x: 0, y: 0, width: videoWidth, height: videoHeight },
|
260
|
-
referenceResolution: undefined,
|
261
|
-
destRect: (position == 'topleft' ? { x: 5, y: 5, width: imageWidth, height: imageHeight } :
|
262
|
-
position == 'topright' ? { x: videoWidth - imageWidth - 5, y: 5, width: imageWidth, height: imageHeight } :
|
263
|
-
position == 'bottomleft' ? { x: 5, y: videoHeight - imageHeight - 5, width: imageWidth, height: imageHeight } :
|
264
|
-
{ x: videoWidth - imageWidth - 5, y: videoHeight - imageHeight - 5, width: imageWidth, height: imageHeight }),
|
265
|
-
opacity: 1.0,
|
266
|
-
pin: "bug"
|
267
|
-
};
|
268
|
-
return foo;
|
269
|
-
}
|
270
|
-
videoPart(videoWidth, videoHeight) {
|
271
|
-
return {
|
272
|
-
id: "video",
|
273
|
-
zIndex: 0,
|
274
|
-
sourceRect: { x: 0, y: 0, width: videoWidth, height: videoHeight },
|
275
|
-
destRect: { x: 0, y: 0, width: videoWidth, height: videoHeight },
|
276
|
-
opacity: 1.0,
|
277
|
-
pin: "video"
|
278
|
-
};
|
279
|
-
}
|
280
|
-
async initialise() {
|
281
|
-
await this.setupBug(this.cfg.defaultBug, this.cfg.defaultPosition);
|
282
|
-
}
|
283
|
-
subscribe(sources) {
|
284
|
-
this.videoSource = sources[0];
|
285
|
-
this.setSources();
|
286
|
-
}
|
287
|
-
setSources() {
|
288
|
-
const imageSources = [];
|
289
|
-
if (this.oldImageSource)
|
290
|
-
imageSources.push(this.oldImageSource);
|
291
|
-
if (this.imageSource)
|
292
|
-
imageSources.push(this.imageSource);
|
293
|
-
this.contexts.setSources(this.videoSource ? [this.videoSource] : [], imageSources);
|
294
|
-
}
|
295
|
-
}
|
296
|
-
exports.DynamicBug = DynamicBug;
|
297
|
-
//# sourceMappingURL=runtime.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/processor.dynamicBug/runtime.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +0,0 @@
|
|
1
|
-
import type { DynamicBugState, DynamicBugConfig, DynamicBugCommand } from "./runtime";
|
2
|
-
import { ViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
|
3
|
-
declare function SummaryView({ state, sendCommand, httpApi }: ViewProps<DynamicBugConfig, DynamicBugState, DynamicBugCommand>): import("react/jsx-runtime").JSX.Element;
|
4
|
-
export default SummaryView;
|
@@ -1,60 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
4
|
-
const react_1 = require("react");
|
5
|
-
function SummaryView({ state, sendCommand, httpApi }) {
|
6
|
-
const [bug, setBug] = (0, react_1.useState)(state.activeBug?.file);
|
7
|
-
const [position, setPosition] = (0, react_1.useState)(state.activeBug?.position);
|
8
|
-
const [bugs, setBugs] = (0, react_1.useState)([]);
|
9
|
-
const [fileToUpload, setFileToUpload] = (0, react_1.useState)(undefined);
|
10
|
-
async function updateBugs() {
|
11
|
-
const result = await fetch('components/processor.dynamicBug/bugs');
|
12
|
-
if (result.ok && result.body) {
|
13
|
-
const bugs = await result.json();
|
14
|
-
setBugs(bugs);
|
15
|
-
}
|
16
|
-
else {
|
17
|
-
const text = await result.text();
|
18
|
-
throw new Error(text);
|
19
|
-
}
|
20
|
-
}
|
21
|
-
(0, react_1.useEffect)(() => {
|
22
|
-
const fn = async () => {
|
23
|
-
await updateBugs();
|
24
|
-
};
|
25
|
-
fn().catch(console.error);
|
26
|
-
}, []);
|
27
|
-
function onFileChange(e) {
|
28
|
-
if (e.target.files?.[0])
|
29
|
-
setFileToUpload(e.target.files[0]);
|
30
|
-
}
|
31
|
-
return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h2", { children: "Controls" }), (0, jsx_runtime_1.jsx)("label", { htmlFor: "select-preview", className: "mt-2", children: "Source" }), (0, jsx_runtime_1.jsxs)("select", { id: "select-bug", className: "mt-2 node-editor-select-input", onChange: (e) => {
|
32
|
-
setBug(e.currentTarget.value === '' ? undefined : e.currentTarget.value);
|
33
|
-
}, children: [(0, jsx_runtime_1.jsx)("option", { value: "", selected: bug === undefined, children: "---" }), (0, jsx_runtime_1.jsx)("option", { value: 'new', selected: bug === 'new', children: "New" }), bugs.map((s, i) => (0, jsx_runtime_1.jsx)("option", { selected: bug == s, value: s, children: s }, i))] }), (0, jsx_runtime_1.jsx)("form", { style: { display: bug === 'new' ? 'block' : 'none' }, onSubmit: (e) => e.preventDefault(), children: (0, jsx_runtime_1.jsx)("input", { type: "file", id: "file", name: "filename", onChange: onFileChange }) }), (0, jsx_runtime_1.jsxs)("select", { style: { display: bug ? 'block' : 'none' }, id: "select-position", className: "mt-2 node-editor-select-input", onChange: (e) => {
|
34
|
-
setPosition(e.currentTarget.value);
|
35
|
-
}, children: [(0, jsx_runtime_1.jsx)("option", { value: 'topleft', selected: position === 'topleft', children: "Top Left" }), (0, jsx_runtime_1.jsx)("option", { value: 'topright', selected: position === 'topright', children: "Top Right" }), (0, jsx_runtime_1.jsx)("option", { value: 'bottomleft', selected: position === 'bottomleft', children: "Bottom Left" }), (0, jsx_runtime_1.jsx)("option", { value: 'bottomright', selected: position === 'bottomright', children: "Bottom Right" })] }), (bug != state.activeBug?.file || position != state.activeBug?.position || fileToUpload) ?
|
36
|
-
(0, jsx_runtime_1.jsx)("button", { type: "button", className: "mt-2 mb-2 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800", onClick: async (e) => {
|
37
|
-
e.preventDefault();
|
38
|
-
if (fileToUpload && bug === 'new') {
|
39
|
-
const form = new FormData();
|
40
|
-
const url = httpApi.toString() + "/bugs";
|
41
|
-
form.append('file', fileToUpload);
|
42
|
-
await fetch(url, {
|
43
|
-
method: 'POST',
|
44
|
-
body: form
|
45
|
-
});
|
46
|
-
setTimeout(async () => {
|
47
|
-
await updateBugs();
|
48
|
-
sendCommand({ type: "change-bug", file: fileToUpload.name, position });
|
49
|
-
setBug(fileToUpload.name);
|
50
|
-
setFileToUpload(undefined);
|
51
|
-
return;
|
52
|
-
}, 500);
|
53
|
-
}
|
54
|
-
else {
|
55
|
-
sendCommand({ type: "change-bug", file: bug, position });
|
56
|
-
}
|
57
|
-
}, children: "Commit" }) : (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {})] });
|
58
|
-
}
|
59
|
-
exports.default = SummaryView;
|
60
|
-
//# sourceMappingURL=summary-view.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"summary-view.js","sourceRoot":"","sources":["../../src/processor.dynamicBug/summary-view.tsx"],"names":[],"mappings":"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"}
|
@@ -1,3 +0,0 @@
|
|
1
|
-
import type Registration from "@norskvideo/norsk-studio/lib/extension/registration";
|
2
|
-
import type { WhisperTranscribeConfig } from "./runtime";
|
3
|
-
export default function ({ defineComponent, Av, Subtitle, validation: { Z } }: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<WhisperTranscribeConfig, object, object, object>;
|
@@ -1,43 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.default = default_1;
|
4
|
-
function default_1({ defineComponent, Av, Subtitle, validation: { Z } }) {
|
5
|
-
return defineComponent({
|
6
|
-
identifier: 'processor.whisper-transcribe',
|
7
|
-
category: 'processor',
|
8
|
-
name: "Whisper Transcribe",
|
9
|
-
subscription: {
|
10
|
-
accepts: {
|
11
|
-
type: 'single-stream',
|
12
|
-
media: Av
|
13
|
-
},
|
14
|
-
produces: {
|
15
|
-
media: Subtitle,
|
16
|
-
type: "single-stream",
|
17
|
-
}
|
18
|
-
},
|
19
|
-
extraValidation: function (ctx) {
|
20
|
-
const video = ctx.videoInputs();
|
21
|
-
const audio = ctx.audioInputs();
|
22
|
-
if (video.length !== 1) {
|
23
|
-
ctx.addError("Whisper Transcribe requires a single video stream to use as a reference");
|
24
|
-
}
|
25
|
-
if (audio.length !== 1) {
|
26
|
-
ctx.addError("Whisper Transcribe requires a single audio stream to transcribe");
|
27
|
-
}
|
28
|
-
},
|
29
|
-
display: (desc) => {
|
30
|
-
return {
|
31
|
-
model: desc.config.model
|
32
|
-
};
|
33
|
-
},
|
34
|
-
configForm: {
|
35
|
-
form: {
|
36
|
-
model: { help: "The ggml model path", hint: { type: 'text', validation: Z.string().min(1, "Choosing a model is mandatory") } },
|
37
|
-
translate: { help: "Whether to translate the output to English", hint: { type: 'boolean', defaultValue: false } },
|
38
|
-
language: { help: "Source language (otherwise automatic)", hint: { type: 'text', validation: Z.union([Z.string().length(0), Z.string().min(1)]) } }
|
39
|
-
}
|
40
|
-
}
|
41
|
-
});
|
42
|
-
}
|
43
|
-
//# sourceMappingURL=info.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/processor.whisper-transcribe/info.ts"],"names":[],"mappings":";;AAGA,4BA2CC;AA3CD,mBAAwB,EACtB,eAAe,EACf,EAAE,EACF,QAAQ,EACR,UAAU,EAAE,EAAE,CAAC,EAAE,EACJ;IACb,OAAO,eAAe,CAA0B;QAC9C,UAAU,EAAE,8BAA8B;QAC1C,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,EAAE;aACV;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,eAAe;aACtB;SACF;QACD,eAAe,EAAE,UAAS,GAAG;YAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,GAAG,CAAC,QAAQ,CAAC,yEAAyE,CAAC,CAAA;YACzF,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,GAAG,CAAC,QAAQ,CAAC,iEAAiE,CAAC,CAAA;YACjF,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;aACzB,CAAA;QACH,CAAC;QACD,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC,EAAE,EAAE;gBAC9H,SAAS,EAAE,EAAE,IAAI,EAAE,4CAA4C,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;gBACjH,QAAQ,EAAE,EAAE,IAAI,EAAE,uCAAuC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;aACpJ;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
|
@@ -1,29 +0,0 @@
|
|
1
|
-
import { AudioTranscribeWhisperNode, Norsk, StreamKeyOverrideNode, StreamMetadataOverrideNode, SubscribeDestination, SubscriptionError } from '@norskvideo/norsk-sdk';
|
2
|
-
import { CreatedMediaNode, OnCreated, RelatedMediaNodes, ServerComponentDefinition, StudioNodeSubscriptionSource } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
|
3
|
-
export type WhisperTranscribeConfig = {
|
4
|
-
id: string;
|
5
|
-
displayName: string;
|
6
|
-
model: string;
|
7
|
-
translate: boolean;
|
8
|
-
language: string;
|
9
|
-
};
|
10
|
-
export default class WhisperTranscribeDefinition implements ServerComponentDefinition<WhisperTranscribeConfig, WhisperTranscribeNode> {
|
11
|
-
create(norsk: Norsk, cfg: WhisperTranscribeConfig, cb: OnCreated<WhisperTranscribeNode>): Promise<void>;
|
12
|
-
}
|
13
|
-
declare class WhisperTranscribeNode implements CreatedMediaNode, SubscribeDestination {
|
14
|
-
norsk: Norsk;
|
15
|
-
cfg: WhisperTranscribeConfig;
|
16
|
-
initialised: Promise<void>;
|
17
|
-
whisper?: AudioTranscribeWhisperNode;
|
18
|
-
whisperCreating: boolean;
|
19
|
-
streamkey?: StreamKeyOverrideNode;
|
20
|
-
source?: StudioNodeSubscriptionSource;
|
21
|
-
output?: StreamMetadataOverrideNode;
|
22
|
-
constructor(norsk: Norsk, cfg: WhisperTranscribeConfig);
|
23
|
-
get id(): string;
|
24
|
-
relatedMediaNodes: RelatedMediaNodes;
|
25
|
-
initialise(): Promise<void>;
|
26
|
-
subscribe(sources: StudioNodeSubscriptionSource[]): void;
|
27
|
-
sourceContextChange(_responseCallback: (error?: SubscriptionError | undefined) => void): Promise<boolean>;
|
28
|
-
}
|
29
|
-
export {};
|