@norskvideo/norsk-studio-alpha 1.27.0-2025-12-23-0e829bed → 1.27.0-2026-01-10-23683704

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/client/info.js +19316 -42369
  2. package/client/style.css +402 -241
  3. package/lib/info.js +13 -9
  4. package/lib/info.js.map +1 -1
  5. package/lib/output.fileMp4/_gen/schema.d.ts +13 -0
  6. package/lib/output.fileMp4/_gen/schema.js +17 -0
  7. package/lib/output.fileMp4/_gen/schema.js.map +1 -0
  8. package/lib/output.fileMp4/_gen/types.d.ts +76 -0
  9. package/lib/output.fileMp4/_gen/types.js +3 -0
  10. package/lib/output.fileMp4/_gen/types.js.map +1 -0
  11. package/lib/output.fileMp4/_gen/zod.d.ts +2 -0
  12. package/lib/output.fileMp4/_gen/zod.js +37 -0
  13. package/lib/output.fileMp4/_gen/zod.js.map +1 -0
  14. package/lib/output.fileMp4/info.d.ts +28 -0
  15. package/lib/output.fileMp4/info.js +84 -0
  16. package/lib/output.fileMp4/info.js.map +1 -0
  17. package/lib/output.fileMp4/inline-view.d.ts +7 -0
  18. package/lib/output.fileMp4/inline-view.js +8 -0
  19. package/lib/output.fileMp4/inline-view.js.map +1 -0
  20. package/lib/output.fileMp4/runtime.d.ts +42 -0
  21. package/lib/output.fileMp4/runtime.js +127 -0
  22. package/lib/output.fileMp4/runtime.js.map +1 -0
  23. package/lib/output.fileMp4/summary-view.d.ts +4 -0
  24. package/lib/output.fileMp4/summary-view.js +16 -0
  25. package/lib/output.fileMp4/summary-view.js.map +1 -0
  26. package/lib/output.fileMp4/types.yaml +81 -0
  27. package/lib/output.tams/info.js +2 -0
  28. package/lib/output.tams/info.js.map +1 -1
  29. package/lib/output.tams/inline-view.js +5 -5
  30. package/lib/output.tams/inline-view.js.map +1 -1
  31. package/lib/output.tams/runtime.d.ts +2 -0
  32. package/lib/output.tams/runtime.js +9 -3
  33. package/lib/output.tams/runtime.js.map +1 -1
  34. package/lib/processor.hardSourceSwitch/_gen/schema.d.ts +16 -0
  35. package/lib/processor.hardSourceSwitch/_gen/schema.js +20 -0
  36. package/lib/processor.hardSourceSwitch/_gen/schema.js.map +1 -0
  37. package/lib/processor.hardSourceSwitch/_gen/types.d.ts +233 -0
  38. package/lib/processor.hardSourceSwitch/_gen/types.js +3 -0
  39. package/lib/processor.hardSourceSwitch/_gen/types.js.map +1 -0
  40. package/lib/processor.hardSourceSwitch/_gen/zod.d.ts +2 -0
  41. package/lib/processor.hardSourceSwitch/_gen/zod.js +156 -0
  42. package/lib/processor.hardSourceSwitch/_gen/zod.js.map +1 -0
  43. package/lib/processor.hardSourceSwitch/fullscreen.d.ts +3 -0
  44. package/lib/processor.hardSourceSwitch/fullscreen.js +40 -0
  45. package/lib/processor.hardSourceSwitch/fullscreen.js.map +1 -0
  46. package/lib/processor.hardSourceSwitch/info.d.ts +78 -0
  47. package/lib/processor.hardSourceSwitch/info.js +191 -0
  48. package/lib/processor.hardSourceSwitch/info.js.map +1 -0
  49. package/lib/processor.hardSourceSwitch/inline-view.d.ts +3 -0
  50. package/lib/processor.hardSourceSwitch/inline-view.js +18 -0
  51. package/lib/processor.hardSourceSwitch/inline-view.js.map +1 -0
  52. package/lib/processor.hardSourceSwitch/runtime.d.ts +81 -0
  53. package/lib/processor.hardSourceSwitch/runtime.js +548 -0
  54. package/lib/processor.hardSourceSwitch/runtime.js.map +1 -0
  55. package/lib/processor.hardSourceSwitch/types.yaml +296 -0
  56. package/lib/test/output.fileMp4.d.ts +1 -0
  57. package/lib/test/output.fileMp4.js +104 -0
  58. package/lib/test/output.fileMp4.js.map +1 -0
  59. package/lib/test/output.tams.js +17 -7
  60. package/lib/test/output.tams.js.map +1 -1
  61. package/lib/util.agent/fullscreen-view.js +17 -7
  62. package/lib/util.agent/fullscreen-view.js.map +1 -1
  63. package/package.json +13 -13
package/lib/info.js CHANGED
@@ -17,22 +17,26 @@ function getNodeInfo(r, type) {
17
17
  }
18
18
  return InitialisedComponents[type];
19
19
  }
20
- const info_1 = __importDefault(require("./output.tams/info"));
20
+ const info_1 = __importDefault(require("./output.fileMp4/info"));
21
21
  AllComponents.push((r) => (0, info_1.default)(r));
22
- const info_2 = __importDefault(require("./processor.actionReplay/info"));
22
+ const info_2 = __importDefault(require("./output.tams/info"));
23
23
  AllComponents.push((r) => (0, info_2.default)(r));
24
- const info_3 = __importDefault(require("./processor.audioLevel/info"));
24
+ const info_3 = __importDefault(require("./processor.actionReplay/info"));
25
25
  AllComponents.push((r) => (0, info_3.default)(r));
26
- const info_4 = __importDefault(require("./processor.chaos/info"));
26
+ const info_4 = __importDefault(require("./processor.audioLevel/info"));
27
27
  AllComponents.push((r) => (0, info_4.default)(r));
28
- const info_5 = __importDefault(require("./processor.delayAll/info"));
28
+ const info_5 = __importDefault(require("./processor.chaos/info"));
29
29
  AllComponents.push((r) => (0, info_5.default)(r));
30
- const info_6 = __importDefault(require("./processor.whisper-transcribe/info"));
30
+ const info_6 = __importDefault(require("./processor.delayAll/info"));
31
31
  AllComponents.push((r) => (0, info_6.default)(r));
32
- const info_7 = __importDefault(require("./util.agent/info"));
32
+ const info_7 = __importDefault(require("./processor.hardSourceSwitch/info"));
33
33
  AllComponents.push((r) => (0, info_7.default)(r));
34
- const info_8 = __importDefault(require("./util.aiChat/info"));
34
+ const info_8 = __importDefault(require("./processor.whisper-transcribe/info"));
35
35
  AllComponents.push((r) => (0, info_8.default)(r));
36
- const info_9 = __importDefault(require("./util.timestamps/info"));
36
+ const info_9 = __importDefault(require("./util.agent/info"));
37
37
  AllComponents.push((r) => (0, info_9.default)(r));
38
+ const info_10 = __importDefault(require("./util.aiChat/info"));
39
+ AllComponents.push((r) => (0, info_10.default)(r));
40
+ const info_11 = __importDefault(require("./util.timestamps/info"));
41
+ AllComponents.push((r) => (0, info_11.default)(r));
38
42
  //# sourceMappingURL=info.js.map
package/lib/info.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/info.ts"],"names":[],"mappings":";;;;;AAYA,8BASC;AAdD,MAAM,qBAAqB,GAA4C,EAAE,CAAC;AAC1E,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,aAAa,GAAkD,EAAE,CAAC;AAExE,SAAwB,WAAW,CAAC,CAAe,EAAE,IAAY;IAC/D,IAAG,CAAC,WAAW,EAAE,CAAC;QAChB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAA;QACF,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,8DAA6C;AAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAW,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC3F,yEAAmE;AACnE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAsB,EAAC,CAAC,CAAoC,CAAC,CAAC;AACtG,uEAA+D;AAC/D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAoB,EAAC,CAAC,CAAoC,CAAC,CAAC;AACpG,kEAAqD;AACrD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAe,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC/F,qEAA2D;AAC3D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAkB,EAAC,CAAC,CAAoC,CAAC,CAAC;AAClG,+EAA+E;AAC/E,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAA4B,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC5G,6DAA2C;AAC3C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAU,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC1F,8DAA6C;AAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAW,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC3F,kEAAqD;AACrD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAe,EAAC,CAAC,CAAoC,CAAC,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/info.ts"],"names":[],"mappings":";;;;;AAYA,8BASC;AAdD,MAAM,qBAAqB,GAA4C,EAAE,CAAC;AAC1E,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,aAAa,GAAkD,EAAE,CAAC;AAExE,SAAwB,WAAW,CAAC,CAAe,EAAE,IAAY;IAC/D,IAAG,CAAC,WAAW,EAAE,CAAC;QAChB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAA;QACF,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,iEAAmD;AACnD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAc,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC9F,8DAA6C;AAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAW,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC3F,yEAAmE;AACnE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAsB,EAAC,CAAC,CAAoC,CAAC,CAAC;AACtG,uEAA+D;AAC/D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAoB,EAAC,CAAC,CAAoC,CAAC,CAAC;AACpG,kEAAqD;AACrD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAe,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC/F,qEAA2D;AAC3D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAkB,EAAC,CAAC,CAAoC,CAAC,CAAC;AAClG,6EAA2E;AAC3E,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAA0B,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC1G,+EAA+E;AAC/E,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAA4B,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC5G,6DAA2C;AAC3C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,cAAU,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC1F,+DAA6C;AAC7C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,eAAW,EAAC,CAAC,CAAoC,CAAC,CAAC;AAC3F,mEAAqD;AACrD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,IAAA,eAAe,EAAC,CAAC,CAAoC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { components } from "./types";
2
+ import { schemas } from "./zod";
3
+ type Schema<T extends keyof typeof schemas> = {
4
+ schema: (typeof schemas)[T];
5
+ type: T extends keyof components["schemas"] ? components["schemas"][T] : unknown;
6
+ };
7
+ export declare const Config: Schema<"Config">;
8
+ export declare const State: Schema<"State">;
9
+ export declare const Commands: Schema<"Commands">;
10
+ export declare const WriteFileCommand: Schema<"WriteFileCommand">;
11
+ export declare const Events: Schema<"Events">;
12
+ export declare const FileWriteEvent: Schema<"FileWriteEvent">;
13
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileWriteEvent = exports.Events = exports.WriteFileCommand = exports.Commands = exports.State = exports.Config = void 0;
4
+ const zod_1 = require("./zod");
5
+ function createSchema(name) {
6
+ return {
7
+ schema: zod_1.schemas[name],
8
+ type: {},
9
+ };
10
+ }
11
+ exports.Config = createSchema("Config");
12
+ exports.State = createSchema("State");
13
+ exports.Commands = createSchema("Commands");
14
+ exports.WriteFileCommand = createSchema("WriteFileCommand");
15
+ exports.Events = createSchema("Events");
16
+ exports.FileWriteEvent = createSchema("FileWriteEvent");
17
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/output.fileMp4/_gen/schema.ts"],"names":[],"mappings":";;;AAKA,+BAAgC;AAOhC,SAAS,YAAY,CACnB,IAAO;IAEP,OAAO;QACL,MAAM,EAAE,aAAO,CAAC,IAAI,CAAC;QAErB,IAAI,EAAE,EAAgF;KACvF,CAAC;AACJ,CAAC;AAEY,QAAA,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9B,QAAA,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,gBAAgB,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AACpD,QAAA,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,cAAc,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,76 @@
1
+ export interface paths {
2
+ "/write": {
3
+ parameters: {
4
+ query?: never;
5
+ header?: never;
6
+ path?: never;
7
+ cookie?: never;
8
+ };
9
+ get?: never;
10
+ put?: never;
11
+ post: {
12
+ parameters: {
13
+ query?: never;
14
+ header?: never;
15
+ path?: never;
16
+ cookie?: never;
17
+ };
18
+ requestBody?: never;
19
+ responses: {
20
+ 204: {
21
+ headers: {
22
+ [name: string]: unknown;
23
+ };
24
+ content?: never;
25
+ };
26
+ 500: {
27
+ headers: {
28
+ [name: string]: unknown;
29
+ };
30
+ content: {
31
+ "application/json": {
32
+ error: string;
33
+ };
34
+ };
35
+ };
36
+ };
37
+ };
38
+ delete?: never;
39
+ options?: never;
40
+ head?: never;
41
+ patch?: never;
42
+ trace?: never;
43
+ };
44
+ }
45
+ export type webhooks = Record<string, never>;
46
+ export interface components {
47
+ schemas: {
48
+ Config: {
49
+ id: string;
50
+ displayName: string;
51
+ notes?: string;
52
+ fileName: string;
53
+ writeMode?: "fragmented" | "non-fragmented" | "incremental";
54
+ };
55
+ State: Record<string, never>;
56
+ Commands: {
57
+ type: "write-file";
58
+ };
59
+ WriteFileCommand: {
60
+ type: "write-file";
61
+ };
62
+ Events: {
63
+ type: "file-write";
64
+ };
65
+ FileWriteEvent: {
66
+ type: "file-write";
67
+ };
68
+ };
69
+ responses: never;
70
+ parameters: never;
71
+ requestBodies: never;
72
+ headers: never;
73
+ pathItems: never;
74
+ }
75
+ export type $defs = Record<string, never>;
76
+ export type operations = Record<string, never>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/output.fileMp4/_gen/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { z } from "zod";
2
+ export declare const schemas: Record<string, z.ZodType>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.schemas = void 0;
4
+ const zod_1 = require("zod");
5
+ const Config = zod_1.z
6
+ .object({
7
+ id: zod_1.z.string(),
8
+ displayName: zod_1.z.string(),
9
+ notes: zod_1.z.string().optional(),
10
+ fileName: zod_1.z.string(),
11
+ writeMode: zod_1.z
12
+ .enum(["fragmented", "non-fragmented", "incremental"])
13
+ .optional(),
14
+ })
15
+ .strict();
16
+ const State = zod_1.z.object({}).partial().strict();
17
+ const Commands = zod_1.z
18
+ .object({ type: zod_1.z.literal("write-file") })
19
+ .strict();
20
+ const WriteFileCommand = zod_1.z
21
+ .object({ type: zod_1.z.literal("write-file") })
22
+ .strict();
23
+ const Events = zod_1.z
24
+ .object({ type: zod_1.z.literal("file-write") })
25
+ .strict();
26
+ const FileWriteEvent = zod_1.z
27
+ .object({ type: zod_1.z.literal("file-write") })
28
+ .strict();
29
+ exports.schemas = {
30
+ Config,
31
+ State,
32
+ Commands,
33
+ WriteFileCommand,
34
+ Events,
35
+ FileWriteEvent,
36
+ };
37
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../../../src/output.fileMp4/_gen/zod.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,MAAM,MAAM,GAAG,OAAC;KACb,MAAM,CAAC;IACN,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;IACd,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,OAAC;SACT,IAAI,CAAC,CAAC,YAAY,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;SACrD,QAAQ,EAAE;CACd,CAAC;KACD,MAAM,EAAE,CACR;AACH,MAAM,KAAK,GAAG,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AAC9C,MAAM,QAAQ,GAAG,OAAC;KACf,MAAM,CAAC,EAAE,IAAI,EAAE,OAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;KACzC,MAAM,EAAE,CACR;AACH,MAAM,gBAAgB,GAAG,OAAC;KACvB,MAAM,CAAC,EAAE,IAAI,EAAE,OAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;KACzC,MAAM,EAAE,CACR;AACH,MAAM,MAAM,GAAG,OAAC;KACb,MAAM,CAAC,EAAE,IAAI,EAAE,OAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;KACzC,MAAM,EAAE,CACR;AACH,MAAM,cAAc,GAAG,OAAC;KACrB,MAAM,CAAC,EAAE,IAAI,EAAE,OAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;KACzC,MAAM,EAAE,CACR;AAEU,QAAA,OAAO,GAA8B;IAChD,MAAM;IACN,KAAK;IACL,QAAQ;IACR,gBAAgB;IAChB,MAAM;IACN,cAAc;CACf,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { NodeInfoConfigForm } from "@norskvideo/norsk-studio/lib/extension/client-types";
2
+ import type Registration from "@norskvideo/norsk-studio/lib/extension/registration";
3
+ import { NodeValidationContext } from "@norskvideo/norsk-studio/lib/shared/document";
4
+ import { type FileMp4OutputSettings } from "./runtime";
5
+ export default function (r: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<{
6
+ id: string;
7
+ displayName: string;
8
+ notes?: string;
9
+ fileName: string;
10
+ writeMode?: "fragmented" | "non-fragmented" | "incremental";
11
+ }, Record<string, never>, {
12
+ type: "write-file";
13
+ }, {
14
+ type: "file-write";
15
+ }>;
16
+ export declare function defineFileOutputComponent<Settings extends FileMp4OutputSettings>({ defineComponent, }: Registration, settings: {
17
+ identifier: string;
18
+ name: string;
19
+ icon?: React.ComponentType;
20
+ description: string;
21
+ searchTags?: string[];
22
+ configForm: NodeInfoConfigForm<Settings>;
23
+ extraValidation?: (context: NodeValidationContext<Settings>) => void;
24
+ }): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<Settings, Record<string, never>, {
25
+ type: "write-file";
26
+ }, {
27
+ type: "file-write";
28
+ }>;
@@ -0,0 +1,84 @@
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.default = default_1;
7
+ exports.defineFileOutputComponent = defineFileOutputComponent;
8
+ const FaFileVideo_1 = require("@react-icons/all-files/fa/FaFileVideo");
9
+ const summary_view_1 = __importDefault(require("./summary-view"));
10
+ function default_1(r) {
11
+ const { validation: { Z } } = r;
12
+ return defineFileOutputComponent(r, {
13
+ identifier: 'output.fileMp4',
14
+ name: "MP4 File",
15
+ description: "Write an MP4 output file. A streaming output file (e.g. fragmented MP4) is created continuously, with finalised MP4 files available on demand.",
16
+ searchTags: ["mp4", "egest"],
17
+ icon: FaFileVideo_1.FaFileVideo,
18
+ configForm: {
19
+ form: {
20
+ fileName: {
21
+ help: "The filename to write",
22
+ hint: {
23
+ type: "text",
24
+ defaultValue: "output",
25
+ envOverride: true,
26
+ validation: Z.string().min(1).max(256)
27
+ }
28
+ },
29
+ writeMode: {
30
+ help: "File write mode for the continuous output",
31
+ hint: {
32
+ type: "select",
33
+ options: [
34
+ { value: 'non-fragmented', display: 'Non-fragmented MP4' },
35
+ { value: 'fragmented', display: 'Fragmented MP4' },
36
+ { value: 'incremental', display: 'Incremental non-fragmented MP4' },
37
+ ],
38
+ defaultValue: "fragmented"
39
+ }
40
+ },
41
+ notes: {
42
+ help: "Additional notes about this component",
43
+ hint: { type: 'text', optional: true }
44
+ },
45
+ }
46
+ },
47
+ });
48
+ }
49
+ function defineFileOutputComponent({ defineComponent, }, settings) {
50
+ return defineComponent({
51
+ ...settings,
52
+ category: 'output',
53
+ subscription: {
54
+ accepts: {
55
+ type: 'simple-stream',
56
+ audio: true,
57
+ video: true
58
+ },
59
+ },
60
+ extraValidation: function (ctx) {
61
+ ctx.requireExactVideo(1);
62
+ ctx.requireExactAudio(1);
63
+ if (settings.extraValidation) {
64
+ settings.extraValidation(ctx);
65
+ }
66
+ },
67
+ display: (desc) => {
68
+ return {
69
+ fileName: desc.config.fileName
70
+ };
71
+ },
72
+ runtime: {
73
+ initialState: () => ({}),
74
+ handleEvent: (ev, state) => {
75
+ return { ...state };
76
+ },
77
+ summary: summary_view_1.default
78
+ },
79
+ });
80
+ }
81
+ function _ssertUnreachable(_) {
82
+ throw new Error("Didn't expect to get here");
83
+ }
84
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/output.fileMp4/info.ts"],"names":[],"mappings":";;;;;AAQA,4BAsCC;AAED,8DA2CC;AAxFD,uEAAoE;AAGpE,kEAAyC;AAEzC,mBAAyB,CAAe;IACtC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,yBAAyB,CAAwB,CAAC,EAAE;QACzD,UAAU,EAAE,gBAAgB;QAC5B,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,gJAAgJ;QAC7J,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;QAC5B,IAAI,EAAE,yBAAW;QACjB,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,QAAQ,EAAE;oBACR,IAAI,EAAE,uBAAuB;oBAC7B,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,YAAY,EAAE,QAAQ;wBACtB,WAAW,EAAE,IAAI;wBACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;qBACvC;iBACF;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,2CAA2C;oBACjD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE;4BACP,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB,EAAE;4BAC1D,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE;4BAClD,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,gCAAgC,EAAE;yBACpE;wBACD,YAAY,EAAE,YAAY;qBAC3B;iBACF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,uCAAuC;oBAC7C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACvC;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,yBAAyB,CACvC,EAAE,eAAe,GACF,EAAE,QAQhB;IAED,OAAO,eAAe,CAAyE;QAC7F,GAAG,QAAQ;QACX,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;aACZ;SACF;QACD,eAAe,EAAE,UAAU,GAAG;YAC5B,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACzB,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;aAC/B,CAAC;QACJ,CAAC;QACD,OAAO,EAAE;YACP,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EACpB,CAAC;YACF,WAAW,EAAE,CAAC,EAAE,EAAE,KAAyB,EAAE,EAAE;gBAC7C,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;YACtB,CAAC;YACD,OAAO,EAAE,sBAAW;SACrB;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAQ;IACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { BaseConfig } from "@norskvideo/norsk-studio/lib/extension/client-types";
2
+ import type { FileMp4OutputState } from "./runtime";
3
+ declare function InlineView({ state: _, config }: {
4
+ state: FileMp4OutputState;
5
+ config: BaseConfig;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export default InlineView;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ function InlineView({ state: _, config }) {
5
+ return (0, jsx_runtime_1.jsx)("div", { className: "file-output", id: `file-output-${config.id}` });
6
+ }
7
+ exports.default = InlineView;
8
+ //# sourceMappingURL=inline-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../../src/output.fileMp4/inline-view.tsx"],"names":[],"mappings":";;;AAGA,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAqD;IACzF,OAAO,gCAAK,SAAS,EAAC,aAAa,EAAC,EAAE,EAAE,eAAe,MAAM,CAAC,EAAE,EAAE,GAE5D,CAAA;AACR,CAAC;AAED,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { FileMp4OutputNode, Norsk } from '@norskvideo/norsk-sdk';
2
+ import { BaseConfig } from '@norskvideo/norsk-studio/lib/extension/client-types';
3
+ import { CreatedMediaNode, InstanceRouteInfo, OnCreated, RelatedMediaNodes, ServerComponentDefinition, ServerComponentSchemas, StudioComponentInputStream, StudioRuntime } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
4
+ import { components } from './_gen/types';
5
+ export type FileMp4OutputSettings = components['schemas']['Config'];
6
+ export type FileMp4OutputState = components['schemas']['State'];
7
+ export type FileMp4OutputEvent = components['schemas']['Events'];
8
+ export type FileMp4OutputCommand = components['schemas']['Commands'];
9
+ export declare abstract class BaseFileMp4OutputDefinition<Settings extends BaseConfig> implements ServerComponentDefinition<Settings, FileMp4Output, FileMp4OutputState, FileMp4OutputCommand, FileMp4OutputEvent> {
10
+ abstract getConfig(input: Settings): Promise<{
11
+ fileName?: string;
12
+ }>;
13
+ create(norsk: Norsk, cfg: Settings, cb: OnCreated<FileMp4Output>, runtime: StudioRuntime<FileMp4OutputState, FileMp4OutputCommand, FileMp4OutputEvent>): Promise<void>;
14
+ handleCommand(output: FileMp4Output, command: FileMp4OutputCommand): Promise<void>;
15
+ handleMetricsUpdate(_node: FileMp4Output): Promise<void>;
16
+ instanceRoutes(): Promise<InstanceRouteInfo<Settings, FileMp4Output, FileMp4OutputState, FileMp4OutputCommand, FileMp4OutputEvent>[]>;
17
+ schemas(): Promise<ServerComponentSchemas>;
18
+ }
19
+ export default class FileMp4OutputDefinition extends BaseFileMp4OutputDefinition<FileMp4OutputSettings> {
20
+ getConfig(cfg: FileMp4OutputSettings): Promise<{
21
+ fileName: string;
22
+ }>;
23
+ }
24
+ export declare class FileMp4Output implements CreatedMediaNode {
25
+ private cfg;
26
+ private fn;
27
+ initialised: Promise<void>;
28
+ norsk: Norsk;
29
+ runtime: StudioRuntime<FileMp4OutputState, FileMp4OutputCommand, FileMp4OutputEvent>;
30
+ resolvedFileName?: string;
31
+ fileOutput?: FileMp4OutputNode;
32
+ enabled: boolean;
33
+ relatedMediaNodes: RelatedMediaNodes;
34
+ id: string;
35
+ currentSources: StudioComponentInputStream[];
36
+ constructor(norsk: Norsk, runtime: StudioRuntime<FileMp4OutputState, FileMp4OutputCommand, FileMp4OutputEvent>, cfg: FileMp4OutputSettings, fn: () => Promise<{
37
+ fileName?: string;
38
+ }>);
39
+ private init;
40
+ subscribe(sources: StudioComponentInputStream[]): Promise<void>;
41
+ writeFile(): Promise<void>;
42
+ }
@@ -0,0 +1,127 @@
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.FileMp4Output = exports.BaseFileMp4OutputDefinition = void 0;
7
+ const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
8
+ const api_1 = require("@norskvideo/norsk-studio/lib/server/api");
9
+ const path_1 = __importDefault(require("path"));
10
+ const files_1 = require("@norskvideo/norsk-studio/lib/server/files");
11
+ const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
12
+ const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
13
+ const api_validation_1 = require("@norskvideo/norsk-studio/lib/server/api-validation");
14
+ class BaseFileMp4OutputDefinition {
15
+ async create(norsk, cfg, cb, runtime) {
16
+ const node = new FileMp4Output(norsk, runtime, cfg, async () => this.getConfig(cfg));
17
+ await node.initialised;
18
+ cb(node);
19
+ }
20
+ async handleCommand(output, command) {
21
+ switch (command.type) {
22
+ case 'write-file':
23
+ await output.writeFile();
24
+ break;
25
+ default:
26
+ (0, util_1.assertUnreachable)(command.type);
27
+ }
28
+ }
29
+ async handleMetricsUpdate(_node) {
30
+ }
31
+ async instanceRoutes() {
32
+ return (0, api_1.defineJsonApi)(path_1.default.join(__dirname, 'types.yaml'), {
33
+ "/write": {
34
+ post: ({ node }) => ({
35
+ swt: api_validation_1.NoBody,
36
+ handler: async (_req) => {
37
+ const _result = await node.writeFile();
38
+ return { statusCode: 204 };
39
+ }
40
+ })
41
+ }
42
+ });
43
+ }
44
+ async schemas() {
45
+ return (0, runtime_types_1.schemaFromTypes)(path_1.default.join(__dirname, 'types.yaml'), {
46
+ config: 'Config'
47
+ });
48
+ }
49
+ }
50
+ exports.BaseFileMp4OutputDefinition = BaseFileMp4OutputDefinition;
51
+ class FileMp4OutputDefinition extends BaseFileMp4OutputDefinition {
52
+ async getConfig(cfg) {
53
+ return {
54
+ fileName: cfg.fileName,
55
+ };
56
+ }
57
+ }
58
+ exports.default = FileMp4OutputDefinition;
59
+ class FileMp4Output {
60
+ cfg;
61
+ fn;
62
+ initialised;
63
+ norsk;
64
+ runtime;
65
+ resolvedFileName;
66
+ fileOutput = undefined;
67
+ enabled = true;
68
+ relatedMediaNodes = new runtime_types_1.RelatedMediaNodes();
69
+ id;
70
+ currentSources = [];
71
+ constructor(norsk, runtime, cfg, fn) {
72
+ this.cfg = cfg;
73
+ this.fn = fn;
74
+ this.id = cfg.id;
75
+ this.norsk = norsk;
76
+ this.runtime = runtime;
77
+ this.initialised = this.init();
78
+ const pathResult = (0, files_1.validatePath)(cfg.fileName);
79
+ if (pathResult.status === 'error') {
80
+ (0, logging_1.errorlog)(pathResult.error);
81
+ }
82
+ else {
83
+ this.resolvedFileName = pathResult.path.replace(/\.(mp4|fmp4)$/, "");
84
+ }
85
+ }
86
+ async init() {
87
+ }
88
+ async subscribe(sources) {
89
+ this.currentSources = sources;
90
+ if (!this.fileOutput && this.resolvedFileName) {
91
+ let config;
92
+ switch (this.cfg.writeMode) {
93
+ case "fragmented":
94
+ config = {
95
+ fragmentedFileName: `${this.resolvedFileName}.fmp4`
96
+ };
97
+ break;
98
+ case "non-fragmented":
99
+ config = {
100
+ nonfragmentedFileName: `${this.resolvedFileName}.mp4`
101
+ };
102
+ break;
103
+ case "incremental":
104
+ default:
105
+ config = {
106
+ nonfragmentedFileName: `${this.resolvedFileName}.mp4`,
107
+ enableIncrementalMp4Write: true,
108
+ };
109
+ }
110
+ this.fileOutput = await this.norsk.output.fileMp4(config);
111
+ this.fileOutput.subscribe(sources.map(x => x.select()), ctx => ctx.streams.length === sources.length);
112
+ }
113
+ }
114
+ async writeFile() {
115
+ if (!this.fileOutput) {
116
+ (0, logging_1.errorlog)("Trying to write a file without an output!?");
117
+ return;
118
+ }
119
+ const now = new Date();
120
+ const outputFileName = `${this.resolvedFileName}-${now.toISOString()}.mp4`;
121
+ (0, logging_1.debuglog)("Writing MP4 file", { outputFileName });
122
+ this.fileOutput.writeFile(outputFileName);
123
+ this.runtime.updates.raiseEvent({ type: "file-write" });
124
+ }
125
+ }
126
+ exports.FileMp4Output = FileMp4Output;
127
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/output.fileMp4/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FileMp4OutputCommand, FileMp4OutputState } from "./runtime";
2
+ import type { BaseConfig, ViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
3
+ declare function SummaryView({ state: _, sendCommand, }: ViewProps<BaseConfig, FileMp4OutputState, FileMp4OutputCommand>): import("react/jsx-runtime").JSX.Element;
4
+ export default SummaryView;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ function SummaryView({ state: _, sendCommand, }) {
5
+ const handleWriteFile = () => {
6
+ void writeFile();
7
+ };
8
+ const writeFile = async () => {
9
+ sendCommand({
10
+ type: "write-file",
11
+ });
12
+ };
13
+ return ((0, jsx_runtime_1.jsx)("div", { className: "mb-5", children: (0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-between mb-3", children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("button", { onClick: handleWriteFile, className: "px-3 py-1 text-sm bg-red-600 hover:bg-red-700 text-white rounded", children: "Write Mp4 File" }) }) }) }));
14
+ }
15
+ exports.default = SummaryView;
16
+ //# sourceMappingURL=summary-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-view.js","sourceRoot":"","sources":["../../../src/output.fileMp4/summary-view.tsx"],"names":[],"mappings":";;;AAOA,SAAS,WAAW,CAAC,EACnB,KAAK,EAAE,CAAC,EACR,WAAW,GACqD;IAEhE,MAAM,eAAe,GAAG,GAAS,EAAE;QACjC,KAAK,SAAS,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;QAC3B,WAAW,CAAC;YACV,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;IAGF,OAAO,CACL,gCAAK,SAAS,EAAC,MAAM,YACnB,gCAAK,SAAS,EAAC,wCAAwC,YACrD,0CACE,mCACE,OAAO,EAAE,eAAe,EACxB,SAAS,EAAC,kEAAkE,+BAGrE,GAEL,GACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,81 @@
1
+ # This file has been generated, please edit types.source.yaml instead
2
+
3
+ openapi: 3.1.0
4
+ info:
5
+ title: Mp4 File Output Component
6
+ version: 1.0.0
7
+ paths:
8
+ /write:
9
+ post:
10
+ summary: Write Output File
11
+ description: Write non-fragmented MP4 output file
12
+ x-route-type: instance
13
+ responses:
14
+ "204":
15
+ description: Output successfully written
16
+ "500":
17
+ description: Server error while writing file
18
+ content:
19
+ application/json:
20
+ schema:
21
+ type: object
22
+ properties:
23
+ error:
24
+ type: string
25
+ required:
26
+ - error
27
+ components:
28
+ schemas:
29
+ Config:
30
+ type: object
31
+ properties:
32
+ id:
33
+ type: string
34
+ description: Component ID
35
+ displayName:
36
+ type: string
37
+ description: Component display name
38
+ notes:
39
+ type: string
40
+ description: Optional notes about the component
41
+ fileName:
42
+ type: string
43
+ description: Base file name
44
+ writeMode:
45
+ type: string
46
+ enum:
47
+ - fragmented
48
+ - non-fragmented
49
+ - incremental
50
+ required:
51
+ - id
52
+ - displayName
53
+ - fileName
54
+ State:
55
+ type: object
56
+ properties: {}
57
+ required: []
58
+ Commands:
59
+ oneOf:
60
+ - &a1
61
+ type: object
62
+ properties:
63
+ type:
64
+ type: string
65
+ enum:
66
+ - write-file
67
+ required:
68
+ - type
69
+ WriteFileCommand: *a1
70
+ Events:
71
+ oneOf:
72
+ - &a2
73
+ type: object
74
+ properties:
75
+ type:
76
+ type: string
77
+ enum:
78
+ - file-write
79
+ required:
80
+ - type
81
+ FileWriteEvent: *a2