@vvfx/artis 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/LICENSE +22 -0
  2. package/dist/artis/artis.d.ts +44 -0
  3. package/dist/artis/base-artis.d.ts +520 -0
  4. package/dist/artis/canvas-layer-order.d.ts +19 -0
  5. package/dist/artis/create-info-to-schema.d.ts +21 -0
  6. package/dist/artis/index.d.ts +15 -0
  7. package/dist/artis/operations/index.d.ts +3 -0
  8. package/dist/artis/operations/operations.d.ts +362 -0
  9. package/dist/artis/operations/scene-operations.d.ts +26 -0
  10. package/dist/artis/operations/types.d.ts +39 -0
  11. package/dist/artis/scene-artis.d.ts +386 -0
  12. package/dist/artis/screenshot-service.d.ts +83 -0
  13. package/dist/artis/types.d.ts +130 -0
  14. package/dist/artis/wiring/index.d.ts +17 -0
  15. package/dist/artis/wiring/register-commands.d.ts +44 -0
  16. package/dist/artis/wiring/setup-commands.d.ts +5 -0
  17. package/dist/artis/wiring/setup-event-bindings.d.ts +16 -0
  18. package/dist/artis/wiring/setup-keybindings.d.ts +38 -0
  19. package/dist/artis/wiring/setup-plugins.d.ts +5 -0
  20. package/dist/artis/wiring/wiring-context.d.ts +34 -0
  21. package/dist/artis-sdk/artis-sdk.d.ts +1117 -0
  22. package/dist/artis-sdk/index.d.ts +1 -0
  23. package/dist/core/asset/asset-manager.d.ts +288 -0
  24. package/dist/core/asset/index.d.ts +3 -0
  25. package/dist/core/command/command-service.d.ts +315 -0
  26. package/dist/core/command/commands/composite-command.d.ts +45 -0
  27. package/dist/core/command/commands/frame-layout-command.d.ts +81 -0
  28. package/dist/core/command/commands/frame-layout-mode-command.d.ts +55 -0
  29. package/dist/core/command/commands/frame-move-in-command.d.ts +54 -0
  30. package/dist/core/command/commands/frame-move-out-command.d.ts +54 -0
  31. package/dist/core/command/commands/group-children-detach-command.d.ts +28 -0
  32. package/dist/core/command/commands/index.d.ts +98 -0
  33. package/dist/core/command/commands/item-align-command.d.ts +52 -0
  34. package/dist/core/command/commands/item-create-command.d.ts +66 -0
  35. package/dist/core/command/commands/item-delete-command.d.ts +40 -0
  36. package/dist/core/command/commands/item-distribute-command.d.ts +53 -0
  37. package/dist/core/command/commands/item-group-command.d.ts +41 -0
  38. package/dist/core/command/commands/item-reorder-command.d.ts +41 -0
  39. package/dist/core/command/commands/item-replace-source-command.d.ts +48 -0
  40. package/dist/core/command/commands/item-set-font-family-command.d.ts +46 -0
  41. package/dist/core/command/commands/item-set-generator-resource-command.d.ts +40 -0
  42. package/dist/core/command/commands/item-transform-command.d.ts +51 -0
  43. package/dist/core/command/commands/item-ungroup-command.d.ts +34 -0
  44. package/dist/core/command/commands/item-update-property-by-create-info-command.d.ts +41 -0
  45. package/dist/core/command/commands/item-update-property-command.d.ts +82 -0
  46. package/dist/core/command/commands/mask-commit-command.d.ts +53 -0
  47. package/dist/core/command/commands/page-auto-layout-command.d.ts +53 -0
  48. package/dist/core/command/commands/picture-cut-commit-command.d.ts +43 -0
  49. package/dist/core/command/commands/picture-expand-commit-command.d.ts +35 -0
  50. package/dist/core/command/commands/scene-switch-command.d.ts +35 -0
  51. package/dist/core/command/commands/selection-set-command.d.ts +38 -0
  52. package/dist/core/command/commands/sprite-image-command.d.ts +36 -0
  53. package/dist/core/command/commands/sprite-text-edit-commit-command.d.ts +43 -0
  54. package/dist/core/command/commands/state-hand-command.d.ts +14 -0
  55. package/dist/core/command/commands/state-image-cut-command.d.ts +14 -0
  56. package/dist/core/command/commands/state-image-expand-command.d.ts +14 -0
  57. package/dist/core/command/commands/state-image-mask-command.d.ts +15 -0
  58. package/dist/core/command/commands/state-image-text-edit-command.d.ts +14 -0
  59. package/dist/core/command/commands/state-item-create-command.d.ts +34 -0
  60. package/dist/core/command/commands/state-move-command.d.ts +14 -0
  61. package/dist/core/command/commands/state-switch-command-base.d.ts +41 -0
  62. package/dist/core/command/commands/text-move-command.d.ts +47 -0
  63. package/dist/core/command/commands/text-rotate-command.d.ts +52 -0
  64. package/dist/core/command/commands/text-scale-command.d.ts +56 -0
  65. package/dist/core/command/commands/text-update-content-command.d.ts +51 -0
  66. package/dist/core/command/commands/transform-move-command.d.ts +56 -0
  67. package/dist/core/command/commands/transform-move-with-frame-change-command.d.ts +80 -0
  68. package/dist/core/command/commands/transform-move-with-layout-command.d.ts +56 -0
  69. package/dist/core/command/commands/transform-rotate-command.d.ts +51 -0
  70. package/dist/core/command/commands/transform-scale-command.d.ts +54 -0
  71. package/dist/core/command/commands/video-play-command.d.ts +28 -0
  72. package/dist/core/command/commands/video-source-command.d.ts +39 -0
  73. package/dist/core/command/commands/viewport-fit-to-box-command.d.ts +37 -0
  74. package/dist/core/command/commands/viewport-fit-to-items-command.d.ts +43 -0
  75. package/dist/core/command/commands/viewport-move-command.d.ts +34 -0
  76. package/dist/core/command/commands/viewport-zoom-command.d.ts +35 -0
  77. package/dist/core/command/index.d.ts +5 -0
  78. package/dist/core/command/registry.d.ts +246 -0
  79. package/dist/core/command/types.d.ts +124 -0
  80. package/dist/core/element-registry/element-facade.d.ts +35 -0
  81. package/dist/core/element-registry/element-identity-strategy.d.ts +75 -0
  82. package/dist/core/element-registry/element-registry.d.ts +72 -0
  83. package/dist/core/element-registry/index.d.ts +5 -0
  84. package/dist/core/element-registry/types.d.ts +15 -0
  85. package/dist/core/gizmo/gizmo-bootstrap.d.ts +70 -0
  86. package/dist/core/gizmo/gizmo-command-binder.d.ts +55 -0
  87. package/dist/core/gizmo/gizmo-config-override.d.ts +24 -0
  88. package/dist/core/gizmo/gizmo-registry.d.ts +39 -0
  89. package/dist/core/gizmo/index.d.ts +19 -0
  90. package/dist/core/gizmo/register-gizmo-command-bindings.d.ts +20 -0
  91. package/dist/core/gizmo/state-gizmo-controller.d.ts +20 -0
  92. package/dist/core/history/history-manager.d.ts +174 -0
  93. package/dist/core/history/index.d.ts +1 -0
  94. package/dist/core/index.d.ts +25 -0
  95. package/dist/core/item/base-item.d.ts +154 -0
  96. package/dist/core/item/card-item.d.ts +91 -0
  97. package/dist/core/item/default-item-schema.d.ts +20 -0
  98. package/dist/core/item/effects-item.d.ts +99 -0
  99. package/dist/core/item/frame-item.d.ts +153 -0
  100. package/dist/core/item/generator-item.d.ts +114 -0
  101. package/dist/core/item/group-item.d.ts +51 -0
  102. package/dist/core/item/index.d.ts +25 -0
  103. package/dist/core/item/sprite-item.d.ts +80 -0
  104. package/dist/core/item/text-item.d.ts +171 -0
  105. package/dist/core/item/types.d.ts +158 -0
  106. package/dist/core/item/video-item.d.ts +120 -0
  107. package/dist/core/keybinding/index.d.ts +11 -0
  108. package/dist/core/keybinding/key-binding-controller.d.ts +44 -0
  109. package/dist/core/keybinding/key-binding-registry.d.ts +92 -0
  110. package/dist/core/keybinding/key-binding-store.d.ts +29 -0
  111. package/dist/core/keybinding/key-matcher.d.ts +24 -0
  112. package/dist/core/keybinding/types.d.ts +84 -0
  113. package/dist/core/plugin/index.d.ts +3 -0
  114. package/dist/core/plugin/io-plugin.d.ts +167 -0
  115. package/dist/core/plugin/plugin-system.d.ts +77 -0
  116. package/dist/core/predict/align-predict.d.ts +20 -0
  117. package/dist/core/predict/base/box-ops.d.ts +40 -0
  118. package/dist/core/predict/base/index.d.ts +14 -0
  119. package/dist/core/predict/base/parent-coord.d.ts +29 -0
  120. package/dist/core/predict/base/schema-box.d.ts +21 -0
  121. package/dist/core/predict/distribute-predict.d.ts +19 -0
  122. package/dist/core/predict/frame-layout-predict.d.ts +24 -0
  123. package/dist/core/predict/index.d.ts +12 -0
  124. package/dist/core/preferences/index.d.ts +2 -0
  125. package/dist/core/preferences/user-preferences-manager.d.ts +130 -0
  126. package/dist/core/quality/error-monitor/error-monitor-facade.d.ts +73 -0
  127. package/dist/core/quality/error-monitor/error-monitor.d.ts +106 -0
  128. package/dist/core/quality/error-monitor/index.d.ts +4 -0
  129. package/dist/core/quality/error-monitor/types.d.ts +198 -0
  130. package/dist/core/quality/index.d.ts +3 -0
  131. package/dist/core/quality/perf-monitor/index.d.ts +5 -0
  132. package/dist/core/quality/perf-monitor/perf-monitor-facade.d.ts +45 -0
  133. package/dist/core/quality/perf-monitor/perf-monitor.d.ts +60 -0
  134. package/dist/core/quality/perf-monitor/types.d.ts +66 -0
  135. package/dist/core/quality/stability-monitor/index.d.ts +5 -0
  136. package/dist/core/quality/stability-monitor/stability-monitor-facade.d.ts +50 -0
  137. package/dist/core/quality/stability-monitor/stability-monitor.d.ts +61 -0
  138. package/dist/core/quality/stability-monitor/types.d.ts +69 -0
  139. package/dist/core/renderer/background-controller.d.ts +56 -0
  140. package/dist/core/renderer/index.d.ts +5 -0
  141. package/dist/core/renderer/player-adapter.d.ts +129 -0
  142. package/dist/core/renderer/renderer.d.ts +134 -0
  143. package/dist/core/service/frame-service.d.ts +116 -0
  144. package/dist/core/service/index.d.ts +9 -0
  145. package/dist/core/service/interaction-providers.d.ts +20 -0
  146. package/dist/core/service/interaction-service.d.ts +211 -0
  147. package/dist/core/service/item-asset-service.d.ts +120 -0
  148. package/dist/core/service/item-creator-service.d.ts +211 -0
  149. package/dist/core/service/item-service.d.ts +641 -0
  150. package/dist/core/service/item-sync-service.d.ts +66 -0
  151. package/dist/core/service/json-scene-sync-service.d.ts +140 -0
  152. package/dist/core/service/refresh-animation-base-service.d.ts +1 -0
  153. package/dist/core/service/scene-data-assembler.d.ts +166 -0
  154. package/dist/core/service/view-service.d.ts +202 -0
  155. package/dist/core/state/base-state.d.ts +28 -0
  156. package/dist/core/state/index.d.ts +6 -0
  157. package/dist/core/state/presets.d.ts +25 -0
  158. package/dist/core/state/state-manager.d.ts +50 -0
  159. package/dist/core/state/types.d.ts +52 -0
  160. package/dist/core/store/index.d.ts +3 -0
  161. package/dist/core/store/scene-store.d.ts +194 -0
  162. package/dist/core/store/store.d.ts +36 -0
  163. package/dist/core/types/artis-config.d.ts +186 -0
  164. package/dist/core/types/artis-events.d.ts +101 -0
  165. package/dist/core/types/frame.d.ts +3 -0
  166. package/dist/core/types/generator.d.ts +28 -0
  167. package/dist/core/types/index.d.ts +15 -0
  168. package/dist/core/types/item-create-info.d.ts +205 -0
  169. package/dist/core/types/item-property.d.ts +149 -0
  170. package/dist/core/types/item-reorder.d.ts +12 -0
  171. package/dist/core/types/item-schema.d.ts +263 -0
  172. package/dist/core/types/item-set-property.d.ts +48 -0
  173. package/dist/core/types/page.d.ts +40 -0
  174. package/dist/core/types/sdk.d.ts +28 -0
  175. package/dist/core/types/view.d.ts +39 -0
  176. package/dist/helper/exporter/config.d.ts +18 -0
  177. package/dist/helper/exporter/const.d.ts +71 -0
  178. package/dist/helper/exporter/export-media.d.ts +189 -0
  179. package/dist/helper/exporter/exporter.d.ts +58 -0
  180. package/dist/helper/exporter/index.d.ts +2 -0
  181. package/dist/helper/exporter/types.d.ts +194 -0
  182. package/dist/helper/exporter/utils.d.ts +71 -0
  183. package/dist/helper/exporter/wav-audio.d.ts +35 -0
  184. package/dist/helper/html-overlay/anchor-navigation-runtime.d.ts +1 -0
  185. package/dist/helper/html-overlay/auto-height-layout.d.ts +16 -0
  186. package/dist/helper/html-overlay/auto-height-runtime.d.ts +40 -0
  187. package/dist/helper/html-overlay/document-runtime.d.ts +18 -0
  188. package/dist/helper/html-overlay/document-transform.d.ts +46 -0
  189. package/dist/helper/html-overlay/dom-order.d.ts +5 -0
  190. package/dist/helper/html-overlay/host-message-runtime.d.ts +15 -0
  191. package/dist/helper/html-overlay/html-capture-runtime.d.ts +12 -0
  192. package/dist/helper/html-overlay/html-card-service.d.ts +287 -0
  193. package/dist/helper/html-overlay/html-viewport-style.d.ts +6 -0
  194. package/dist/helper/html-overlay/index.d.ts +1 -0
  195. package/dist/helper/html-overlay/inline-script-json.d.ts +1 -0
  196. package/dist/helper/html-overlay/mime-utils.d.ts +13 -0
  197. package/dist/helper/html-overlay/overlay-transform.d.ts +30 -0
  198. package/dist/helper/html-overlay/path-utils.d.ts +34 -0
  199. package/dist/helper/html-overlay/runtime-context.d.ts +2 -0
  200. package/dist/helper/html-overlay/shell-runtime.d.ts +13 -0
  201. package/dist/helper/index.d.ts +5 -0
  202. package/dist/helper/scene-builder.d.ts +111 -0
  203. package/dist/helper/screen-shot.d.ts +51 -0
  204. package/dist/helper/size-adapt.d.ts +88 -0
  205. package/dist/index.cjs +69350 -0
  206. package/dist/index.cjs.map +1 -0
  207. package/dist/index.d.ts +19 -0
  208. package/dist/index.mjs +68963 -0
  209. package/dist/index.mjs.map +1 -0
  210. package/dist/shared/index.d.ts +1 -0
  211. package/dist/shared/player.d.ts +9 -0
  212. package/dist/utils/background-manager.d.ts +76 -0
  213. package/dist/utils/common-utils.d.ts +39 -0
  214. package/dist/utils/container-size.d.ts +7 -0
  215. package/dist/utils/find-player-item.d.ts +9 -0
  216. package/dist/utils/index.d.ts +11 -0
  217. package/dist/utils/json-data-utils.d.ts +198 -0
  218. package/dist/utils/layout-utils.d.ts +144 -0
  219. package/dist/utils/pixel-box-utils.d.ts +26 -0
  220. package/dist/utils/player-data-utils.d.ts +9 -0
  221. package/dist/utils/player-utils.d.ts +42 -0
  222. package/dist/utils/replay-utils.d.ts +22 -0
  223. package/dist/utils/types.d.ts +130 -0
  224. package/package.json +66 -0
@@ -0,0 +1,40 @@
1
+ import type { ItemSchema } from './item-schema';
2
+ import type { ArtisItem } from '../item';
3
+ import type { GlobalLayoutMode } from '../../utils';
4
+ import type { ViewportFitShiftParam } from './view';
5
+ export type PageOptions = {
6
+ asyncMode: boolean;
7
+ safeAreaPreview: boolean;
8
+ adsorption: boolean;
9
+ };
10
+ export type ArtisData = {
11
+ items: ArtisItem[];
12
+ };
13
+ export type InitArtisData = {
14
+ items: ItemSchema[];
15
+ };
16
+ export type PageAutoLayoutParam = {
17
+ mode?: GlobalLayoutMode;
18
+ ids?: string[];
19
+ focus?: boolean;
20
+ gap?: number;
21
+ padding?: ViewportFitShiftParam;
22
+ };
23
+ export type ArtisPageConfig = {
24
+ safeAreaPreview: boolean;
25
+ zoom: number;
26
+ adsorption: boolean;
27
+ asyncMode: boolean;
28
+ translation: [number, number];
29
+ };
30
+ export type PageProperty = {
31
+ safeAreaPreview: boolean;
32
+ zoom: number;
33
+ translation: [number, number];
34
+ adsorption: boolean;
35
+ asyncMode: boolean;
36
+ };
37
+ export type ActiveData = {
38
+ selectedItems: string[];
39
+ loadingItems: string[];
40
+ };
@@ -0,0 +1,28 @@
1
+ import type { spec } from '../../shared';
2
+ import type { ViewParam } from './view';
3
+ import type { PageOptions } from './page';
4
+ export declare enum SDKBackgroundType {
5
+ COLOR = "color",
6
+ IMAGE = "image",
7
+ CHESS_BOARD = "chess-board",
8
+ DOT_BOARD = "dot-board"
9
+ }
10
+ export type SDKOptions = {
11
+ /** 导出视频时,是否开启转码日志 */
12
+ loggerInExportVideoTranscoding?: boolean;
13
+ };
14
+ export type SDKTemplateInputParam = {
15
+ scene: string | spec.JSONScene;
16
+ mode: 'template';
17
+ viewParams?: ViewParam[];
18
+ options: PageOptions;
19
+ };
20
+ export type SDKEditorInputParam = {
21
+ mode: 'editor';
22
+ };
23
+ export type SDKInputParam = SDKTemplateInputParam | SDKEditorInputParam;
24
+ export type SDKInitParam = {
25
+ scene: spec.JSONScene;
26
+ viewParams: ViewParam[];
27
+ options: PageOptions;
28
+ };
@@ -0,0 +1,39 @@
1
+ import type { SizeAdaptDirection, ExportMediaItemOptions } from '../../helper';
2
+ /** 聚焦偏移参数 */
3
+ export type ViewportFitShiftParam = {
4
+ /** 左偏移 */
5
+ left?: number;
6
+ /** 右偏移 */
7
+ right?: number;
8
+ /** 上偏移 */
9
+ top?: number;
10
+ /** 下偏移 */
11
+ bottom?: number;
12
+ /** 包围盒整体缩放 */
13
+ scale?: number;
14
+ };
15
+ export type ExportParam = {
16
+ name?: string;
17
+ } & Omit<ExportMediaItemOptions, 'scene' | 'size'>;
18
+ export type PreviewSafeAreaParam = {
19
+ box: [number, number, number, number];
20
+ color?: [number, number, number, number];
21
+ url?: string;
22
+ visible?: boolean;
23
+ };
24
+ export type ViewParam = {
25
+ size?: [number, number];
26
+ safeArea?: [number, number, number, number];
27
+ adaptionDirection?: SizeAdaptDirection;
28
+ previewSafeAreas?: PreviewSafeAreaParam[];
29
+ export: ExportParam;
30
+ };
31
+ export type ViewProperty = {
32
+ id: number;
33
+ size: [number, number];
34
+ safeArea: [number, number, number, number];
35
+ previewSafeAreas: PreviewSafeAreaParam[];
36
+ scene: unknown;
37
+ export: ExportParam;
38
+ ignoreInteraction: boolean;
39
+ };
@@ -0,0 +1,18 @@
1
+ export declare const HELPER_CONFIG: {
2
+ WEBP: {
3
+ SCRIPT: string;
4
+ WASM: string;
5
+ };
6
+ FFMPEG: {
7
+ CLASSWORKER: string;
8
+ DEFAULT: {
9
+ CORE: string;
10
+ WASM: string;
11
+ };
12
+ MT: {
13
+ CORE: string;
14
+ WASM: string;
15
+ WORKER: string;
16
+ };
17
+ };
18
+ };
@@ -0,0 +1,71 @@
1
+ export declare const STATUS_MAP: {
2
+ readonly READY: "ready";
3
+ readonly EXECUTABLE: "executable";
4
+ readonly DISPOSE: "dispose";
5
+ };
6
+ export declare const MEDIA_TYPE: {
7
+ readonly APNG: "APNG";
8
+ readonly MP4: "MP4";
9
+ readonly WebM: "WebM";
10
+ readonly Images: "Images";
11
+ readonly WebP: "WebP";
12
+ readonly GIF: "GIF";
13
+ readonly AlphaMaskVideo: "AlphaMaskVideo";
14
+ };
15
+ export declare const STAGE_MAP: {
16
+ readonly IDLE: "idle";
17
+ readonly CONVERT_IMAGE: "convertImage";
18
+ readonly TRANSCODING: "transcoding";
19
+ readonly AUDIO: "audio";
20
+ };
21
+ export declare const EXPORT_NEED_TRANS_IMAGES_MAP: {
22
+ JPEG: string;
23
+ WEBP: string;
24
+ PNG: string;
25
+ };
26
+ export declare const FORMAT_BUFFER_DOWNLOAD_SUFFIX: {
27
+ MP4: string;
28
+ WebP: string;
29
+ APNG: string;
30
+ GIF: string;
31
+ AlphaMaskVideo: string;
32
+ Images: string;
33
+ };
34
+ export declare const FORMAT_BUFFER_DOWNLOAD_MIMETYPE: {
35
+ MP4: string;
36
+ WebP: string;
37
+ APNG: string;
38
+ GIF: string;
39
+ AlphaMaskVideo: string;
40
+ Images: string;
41
+ };
42
+ export declare const EXPORT_STATUS_MAP: {
43
+ DEFAULT: string;
44
+ EXPORTING: string;
45
+ SUCCESS: string;
46
+ ERROR: string;
47
+ };
48
+ /**
49
+ * GIF 压缩参数
50
+ * 核心通过参数 flags + palettegen + paletteuse 实现
51
+ * highest: lanczos + max_colors=256 + dither=bayer
52
+ * high: bicubic + max_colors=200 + dither=bayer
53
+ * medium: bilinear + max_colors=64 + dither=bayer
54
+ * low: neighbor + max_colors=32 + dither=none
55
+ */
56
+ export declare const GIF_QUALITY_TO_FFMPEG_ARGS: {
57
+ highest: string;
58
+ high: string;
59
+ medium: string;
60
+ low: string;
61
+ };
62
+ /**
63
+ * APNG 压缩参数
64
+ * 核心通过参数 compression_level 实现,压缩等级分为 1/3/6/9
65
+ */
66
+ export declare const APNG_QUALITY_TO_FFMPEG_ARGS: {
67
+ highest: string;
68
+ high: string;
69
+ medium: string;
70
+ low: string;
71
+ };
@@ -0,0 +1,189 @@
1
+ import { EventEmitter } from '../../shared';
2
+ import type { MediaType, ExportMediaInitOptions, ExportItemParams, ExportParams, Buffer, Extra, Buffers, Extras } from './types';
3
+ export type ExportMediaEvent = {
4
+ /**
5
+ * 环境准备完成
6
+ */
7
+ ready: [mediaType: MediaType];
8
+ /**
9
+ * 总体进度
10
+ */
11
+ progress: [progress: number];
12
+ /**
13
+ * 单个任务完成
14
+ */
15
+ done: [item: ExportItemParams | undefined, success: boolean, buffer: Buffer, extra: Extra];
16
+ /**
17
+ * 全部任务完成
18
+ */
19
+ finish: [success: boolean, taskInfos: ExportParams, buffers: Buffers, extras: Extras];
20
+ /**
21
+ * 异常
22
+ */
23
+ error: [error: any];
24
+ };
25
+ export declare class ExportMedia extends EventEmitter<ExportMediaEvent> {
26
+ #private;
27
+ private status;
28
+ private stage;
29
+ private player?;
30
+ /**
31
+ * 构造导出器实例,合并默认选项并触发初始化
32
+ * @param options 导出初始化配置
33
+ */
34
+ constructor(options: ExportMediaInitOptions);
35
+ /**
36
+ * 切换导出媒体类型,类型变化时重置实例并重新初始化
37
+ * @param curMediaType 目标媒体类型
38
+ */
39
+ setMediaType(curMediaType: MediaType): void;
40
+ /**
41
+ * 合并更新导出选项,媒体类型变化时联动切换
42
+ * @param options 待合并的选项片段
43
+ */
44
+ setOptions(options: Partial<ExportMediaInitOptions>): void;
45
+ /** 当前是否已处于销毁(取消)态 */
46
+ get canceled(): boolean;
47
+ /** 基于当前任务与播放器合成信息组装出导出所需的运行配置 */
48
+ private get config();
49
+ /** 当前任务的 MP4 导出参数 */
50
+ private get mp4Config();
51
+ /** 当前任务的 GIF 导出参数 */
52
+ private get gifConfig();
53
+ /** 当前任务的 APNG 导出参数 */
54
+ private get apngConfig();
55
+ /** 按转帧与转码两段权重计算得到的总体进度(0-1) */
56
+ private get progress();
57
+ /** 根据当前媒体类型推导序列帧应使用的图片格式 */
58
+ private get transImageType();
59
+ /**
60
+ * 初始化导出环境,按媒体类型加载所需 helper 并抛出 ready 事件
61
+ * @returns 初始化后的状态
62
+ */
63
+ private onInit;
64
+ /** 重置运行态:清理定时器、动画帧、播放器与任务进度 */
65
+ private onReset;
66
+ /**
67
+ * 统一处理导出异常:结束流程并触发 error 事件后销毁实例
68
+ * @param error 抛出的异常对象
69
+ */
70
+ private onError;
71
+ /**
72
+ * 收尾流程:补满进度并对外抛出 finish 事件
73
+ * @param success 本次导出是否全部成功
74
+ * @param taskInfos 任务信息集合
75
+ * @param buffers 输出文件缓冲集合
76
+ * @param extras 额外输出文件缓冲集合
77
+ */
78
+ private onFinish;
79
+ /**
80
+ * 按媒体类型按需加载 WebP / FFmpeg helper,并为 ffmpeg 注册日志监听以更新转码帧进度
81
+ * @param mediaType 当前媒体类型
82
+ */
83
+ private loadHelper;
84
+ /**
85
+ * 累加所有任务的总帧数,用于全局进度计算
86
+ * @param options 全部导出任务配置
87
+ * @returns 所有任务总帧数
88
+ */
89
+ private getAllTaskFrames;
90
+ /**
91
+ * 更新进度相关内部字段并对外抛出 progress 事件
92
+ * @param options 需要更新的进度子字段
93
+ */
94
+ private setProgress;
95
+ /**
96
+ * 将播放器时间跳转到指定秒数,规避末帧回卷边界问题
97
+ * @param seconds 目标时间(秒)
98
+ * @param playing 是否以播放方式跳转
99
+ * @returns 实际生效的时间(秒)
100
+ */
101
+ private forwardPlayerTime;
102
+ /**
103
+ * 生成静音 wav 音轨并写入 ffmpeg 虚拟文件系统
104
+ * @param name 写入 ffmpeg 的文件名
105
+ */
106
+ private getWavAudio;
107
+ /**
108
+ * 将序列帧缓冲打包成zip并返回整体 ArrayBuffer
109
+ * @param folderName zip 内目录名
110
+ * @param imageBuffers 各帧图片缓冲
111
+ * @returns 打包后的 ArrayBuffer
112
+ */
113
+ private getImagesZip;
114
+ /**
115
+ * 调用 img2webp 将序列帧合成为 WebP 动图,处理后清理中间文件
116
+ * @returns 合成后的 WebP 文件字节
117
+ */
118
+ private getWebP;
119
+ /**
120
+ * 通过 ffmpeg 将序列帧合成为 APNG,失败抛出异常
121
+ * @returns 生成的 APNG 文件名
122
+ */
123
+ private getAPNG;
124
+ /**
125
+ * 通过 ffmpeg 将序列帧合成为 GIF,失败抛出异常
126
+ * @returns 生成的 GIF 文件名
127
+ */
128
+ private getGIF;
129
+ /**
130
+ * 通过 ffmpeg 合成 MP4,按需混入音频并可选输出末帧 JPEG,返回产物文件名
131
+ * @param oldTotalTime 原始总时长
132
+ * @param newTotalTime 目标总时长,用于变速
133
+ * @returns 视频文件名与可选末帧文件名
134
+ */
135
+ private getMP4;
136
+ /**
137
+ * 通过 ffmpeg 合成 AlphaMask 透明视频
138
+ * @param oldTotalTime 原始总时长
139
+ * @param newTotalTime 目标总时长,用于变速
140
+ * @returns 生成的视频文件名
141
+ */
142
+ private getAlphaMaskVideo;
143
+ /**
144
+ * 按当前媒体类型分派到具体合成方法,并读取/清理 ffmpeg 内的产物文件
145
+ * @param oldTotalTime 原始总时长
146
+ * @param newTotalTime 目标总时长
147
+ * @returns 主产物与额外产物的字节内容
148
+ */
149
+ private getVideoByType;
150
+ /**
151
+ * 启动 MediaRecorder 录制 canvas 流为 WebM 分片
152
+ * @param canvas 被录制的画布
153
+ */
154
+ private onRecordWebM;
155
+ /**
156
+ * 逐帧推进播放器并将序列帧写入对应产物通道(ffmpeg/webp/images),完成后抛出 done
157
+ * @param options 单帧导出参数
158
+ */
159
+ private onExportImageFrame;
160
+ /**
161
+ * 通过画布流录制方式逐帧采集 WebM,录制完成后抛出 done
162
+ * @param canvas 输出画布
163
+ */
164
+ private onExportWebMFrame;
165
+ /**
166
+ * 执行单个导出任务:配置画布尺寸并按媒体类型分派到帧导出流程
167
+ * @param options 单任务执行参数
168
+ */
169
+ private runTask;
170
+ /** 清空任务相关的全部进度与缓存字段 */
171
+ private clearTaskInfo;
172
+ /** 清理 ffmpeg 实例及其内部残留文件并终止 worker */
173
+ private clearFFMpegCore;
174
+ /** 关闭并释放 img2webp 内核实例 */
175
+ private clearImage2WebPCore;
176
+ /** 停止 MediaRecorder 并清空已录制分片 */
177
+ private clearMediaRecorder;
178
+ /** 移除当前实例对外抛出的全部事件监听 */
179
+ private clearAllListeners;
180
+ /** 取消导出:触发失败收尾、重置状态并释放全部资源 */
181
+ onCancel(): void;
182
+ /**
183
+ * 串行执行所有导出任务,逐任务加载场景并收集产物,最终触发 finish
184
+ * @param options 全部导出任务配置
185
+ */
186
+ onExport(options: ExportParams): Promise<void>;
187
+ /** 销毁实例:释放播放器、helper 与监听等全部资源 */
188
+ dispose(): void;
189
+ }
@@ -0,0 +1,58 @@
1
+ import type { ExportMediaInitOptions, ExportItemParams, ExportParams, ExportMediaItemDownloadInfo, FileBuffer, Buffers, Extras } from './types';
2
+ import { EventEmitter } from '../../shared';
3
+ export type ExporterEvent = {
4
+ 'progress': [progress: number];
5
+ 'done': [item: ExportItemParams | undefined, success: boolean, buffer?: FileBuffer, extra?: FileBuffer | null];
6
+ 'complete': [success: boolean, taskInfos: ExportParams, buffers: Buffers, extras: Extras];
7
+ };
8
+ export declare class Exporter extends EventEmitter<ExporterEvent> {
9
+ private _options;
10
+ private _status;
11
+ private _exportMedia;
12
+ /**
13
+ * 构造导出器,保存选项并创建内部媒体导出实例
14
+ * @param options 导出初始化配置
15
+ */
16
+ constructor(options: ExportMediaInitOptions);
17
+ /** 当前导出状态 */
18
+ get status(): string;
19
+ /**
20
+ * 合并更新导出选项并同步给内部媒体导出实例
21
+ * @param options 待合并的选项片段
22
+ */
23
+ setOptions(options: Partial<ExportMediaInitOptions>): void;
24
+ /**
25
+ * 将导出产物按文件名打包成 zip 并触发浏览器下载
26
+ * @param params 各任务的下载命名信息
27
+ * @param buffers 主产物缓冲集合
28
+ * @param extras 额外产物缓冲集合
29
+ */
30
+ downloadByMediaBuffers(params: ExportMediaItemDownloadInfo[], buffers: Buffers, extras: Extras): void;
31
+ /**
32
+ * 转发媒体导出进度事件
33
+ * @param progress 当前进度(0-1)
34
+ */
35
+ private onExportProgress;
36
+ /**
37
+ * 转发单任务完成事件
38
+ * @param current 当前任务信息
39
+ * @param success 是否成功
40
+ * @param buffer 产物缓冲
41
+ * @param extra 额外产物缓冲
42
+ */
43
+ private onExportDone;
44
+ /**
45
+ * 处理导出异常:置错误态并记录日志
46
+ * @param error 异常对象
47
+ */
48
+ private onExportError;
49
+ /**
50
+ * 启动导出流程:委托内部实例执行任务并桥接进度/完成/异常事件
51
+ * @param params 全部导出任务配置
52
+ */
53
+ onExport(params: ExportParams): void;
54
+ /** 取消导出:置错误态并对外抛出失败完成事件 */
55
+ onCancel(): void;
56
+ /** 释放内部媒体导出实例资源 */
57
+ dispose(): void;
58
+ }
@@ -0,0 +1,2 @@
1
+ export type { ExportItemParams, ExportParams, ExportMediaInitOptions, ExportMediaItemDownloadInfo, ExportMediaItemOptions, FileBuffer, Buffers, Extras } from './types';
2
+ export * from './exporter';
@@ -0,0 +1,194 @@
1
+ import { spec } from '../../shared';
2
+ import { STATUS_MAP, MEDIA_TYPE, STAGE_MAP, EXPORT_STATUS_MAP, GIF_QUALITY_TO_FFMPEG_ARGS } from './const';
3
+ declare global {
4
+ interface Window {
5
+ /**
6
+ * 创建 WebP Core 实例
7
+ */
8
+ createWebPCore: (config: any) => Promise<Img2WebPCore>;
9
+ }
10
+ }
11
+ export type FileBuffer = ArrayBuffer | Uint8Array;
12
+ export type Status = typeof STATUS_MAP[keyof typeof STATUS_MAP];
13
+ export type MediaType = typeof MEDIA_TYPE[keyof typeof MEDIA_TYPE];
14
+ export type ExportImageFrameOptions = {
15
+ canvas: HTMLCanvasElement;
16
+ imageBuffers: ArrayBuffer[];
17
+ startTime: number;
18
+ oldTotalTime: number;
19
+ newTotalTime?: number;
20
+ backgroundCanvas?: HTMLCanvasElement;
21
+ };
22
+ export type RunExportTaskOptions = {
23
+ size: [number, number];
24
+ startTime: number;
25
+ containerCanvas: HTMLCanvasElement;
26
+ background?: {
27
+ backgroundCanvas?: HTMLCanvasElement;
28
+ backgroundImage?: HTMLImageElement;
29
+ };
30
+ };
31
+ export type FS = {
32
+ writeFile: (path: string, data: Uint8Array | string) => void;
33
+ unlink: (path: string) => void;
34
+ quit: () => void;
35
+ readFile(path: string, opts: {
36
+ encoding: 'binary';
37
+ flags?: string | undefined;
38
+ }): Uint8Array;
39
+ readFile(path: string, opts: {
40
+ encoding: 'utf8';
41
+ flags?: string | undefined;
42
+ }): string;
43
+ readFile(path: string, opts?: {
44
+ flags?: string | undefined;
45
+ }): Uint8Array;
46
+ };
47
+ type Pointer = number;
48
+ export type Img2WebPCore = {
49
+ FS: FS;
50
+ run: (...args: string[]) => number;
51
+ cwrap: (ident: string, returnType: string, argTypes: string[]) => ((argc: number, argv: Pointer) => number);
52
+ _malloc: (size: number) => Pointer;
53
+ writeAsciiToMemory: (str: string, buffer: number, dontAddNull?: boolean) => void;
54
+ setValue: (ptr: number, value: any, type: string, noSafe?: boolean) => void;
55
+ };
56
+ export type Config = {
57
+ name: string;
58
+ oldTotalTime: number;
59
+ newTotalTime?: number;
60
+ startTime: number;
61
+ fps: number;
62
+ backgroundColor: string;
63
+ loop: boolean;
64
+ audioEnable: boolean;
65
+ };
66
+ export type Stage = typeof STAGE_MAP[keyof typeof STAGE_MAP];
67
+ export type ExportStatus = typeof EXPORT_STATUS_MAP[keyof typeof EXPORT_STATUS_MAP];
68
+ export type ExportMediaInitOptions = {
69
+ /**
70
+ * 导出类型
71
+ */
72
+ mediaType: MediaType;
73
+ /**
74
+ * 额外画布,导出透明视频时使用
75
+ */
76
+ extraCanvas?: HTMLCanvasElement | null;
77
+ /**
78
+ * 是否打印转码过程中的日志,仅在导出 MP4/AlphaMaskVideo 时有效, 默认 false
79
+ * 供开发调试使用
80
+ */
81
+ loggerInTranscoding?: boolean;
82
+ /**
83
+ * ffmpeg 转码是否开启多线程,默认 false,确保环境支持 SharedArrayBuffer
84
+ */
85
+ multiThreading?: boolean;
86
+ /**
87
+ * 是否输出 buffer,默认 false
88
+ */
89
+ isOutputBuffer?: boolean;
90
+ };
91
+ export type MP4Config = {
92
+ /**
93
+ * MP4 导出时是否需要导出最后一帧 PNG
94
+ */
95
+ isExportLastFrameJPEG?: boolean;
96
+ };
97
+ export type GifConfig = {
98
+ /**
99
+ * GIF 导出时的帧率
100
+ */
101
+ fps?: number;
102
+ /**
103
+ * GIF 导出时的缩放比例
104
+ * 默认 '-1:-1', 表示不缩放
105
+ * 例如 '100:-1', 表示宽度 100,高度自动
106
+ * 例如 '-1:100', 表示宽度自动,高度 100
107
+ */
108
+ scale?: string;
109
+ /**
110
+ * GIF 导出时的质量
111
+ * 默认 'highest'
112
+ * 可选 'highest', 'high', 'medium', 'low'
113
+ */
114
+ quality?: keyof typeof GIF_QUALITY_TO_FFMPEG_ARGS;
115
+ };
116
+ export type ApngConfig = {
117
+ /**
118
+ * APNG 导出时的帧率
119
+ */
120
+ fps?: number;
121
+ /**
122
+ * APNG 导出时的缩放比例
123
+ * 默认 '-1:-1', 表示不缩放
124
+ * 例如 '100:-1', 表示宽度 100,高度自动
125
+ * 例如 '-1:100', 表示宽度自动,高度 100
126
+ */
127
+ scale?: string;
128
+ /**
129
+ * APNG 导出时的质量
130
+ * 默认 'highest'
131
+ * 可选 'highest', 'high', 'medium', 'low'
132
+ */
133
+ quality?: keyof typeof GIF_QUALITY_TO_FFMPEG_ARGS;
134
+ };
135
+ export type ExportMediaItemOptions = {
136
+ /**
137
+ * 尺寸
138
+ */
139
+ size: [number, number];
140
+ /**
141
+ * 动效资源
142
+ */
143
+ scene: spec.JSONScene;
144
+ /**
145
+ * 视频时长,目前仅在导出 MP4 / AlphaMaskVideo 时有效,默认取动效资源时长
146
+ */
147
+ time?: number;
148
+ /**
149
+ * 是否生成音轨,默认 false,仅在导出 MP4 时有效
150
+ */
151
+ audioEnable?: boolean;
152
+ /**
153
+ * 帧率, 默认 30
154
+ */
155
+ fps?: number;
156
+ /**
157
+ * 是否循环,默认 true
158
+ */
159
+ loop?: boolean;
160
+ /**
161
+ * 视频背景颜色,默认 #000000
162
+ */
163
+ backgroundColor?: string;
164
+ /**
165
+ * 导出 MP4 时,设置的导出配置
166
+ */
167
+ mp4Config?: MP4Config;
168
+ /**
169
+ * 导出 GIF 时,设置的导出配置
170
+ */
171
+ gifConfig?: GifConfig;
172
+ /**
173
+ * 导出 APNG 时,设置的导出配置
174
+ */
175
+ apngConfig?: ApngConfig;
176
+ };
177
+ export type ExportOptions = ExportMediaItemOptions[];
178
+ export type ExportMediaItemDownloadInfo = {
179
+ /**
180
+ * 导出文件夹名称
181
+ */
182
+ folderName: string;
183
+ /**
184
+ * 导出视频名称
185
+ */
186
+ name: string;
187
+ };
188
+ export type ExportItemParams = ExportMediaItemOptions & ExportMediaItemDownloadInfo;
189
+ export type ExportParams = ExportItemParams[];
190
+ export type Buffer = FileBuffer | undefined;
191
+ export type Extra = FileBuffer | null | undefined;
192
+ export type Buffers = FileBuffer[] | undefined;
193
+ export type Extras = (FileBuffer | null)[] | null | undefined;
194
+ export {};