@codingfactory/mediables-vue 2.1.1 → 2.3.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 (78) hide show
  1. package/dist/{PixiFrameExporter-DClr376o.js → PixiFrameExporter-Cz7dg92v.js} +2 -2
  2. package/dist/{PixiFrameExporter-DClr376o.js.map → PixiFrameExporter-Cz7dg92v.js.map} +1 -1
  3. package/dist/{PixiFrameExporter-D_yS7r_n.cjs → PixiFrameExporter-dBsAo3iz.cjs} +2 -2
  4. package/dist/{PixiFrameExporter-D_yS7r_n.cjs.map → PixiFrameExporter-dBsAo3iz.cjs.map} +1 -1
  5. package/dist/composables/useVideoEditor.d.ts +1 -1
  6. package/dist/editor-BPW3mi6G.cjs +42 -0
  7. package/dist/editor-BPW3mi6G.cjs.map +1 -0
  8. package/dist/{index-DBM_ViWA.js → editor-CfH1RN8F.js} +143 -124
  9. package/dist/editor-CfH1RN8F.js.map +1 -0
  10. package/dist/filters/index.d.ts +13 -6
  11. package/dist/filters/registry.d.ts +6 -0
  12. package/dist/index-DDmYo-6o.js +23377 -0
  13. package/dist/index-DDmYo-6o.js.map +1 -0
  14. package/dist/index-Du0vZ5BO.cjs +39 -0
  15. package/dist/index-Du0vZ5BO.cjs.map +1 -0
  16. package/dist/mediables-vanilla.cjs +1 -1
  17. package/dist/mediables-vanilla.mjs +1 -1
  18. package/dist/mediables-vue.cjs +1 -1
  19. package/dist/mediables-vue.mjs +2 -2
  20. package/dist/render-page/assets/{index-SU1f_egA.js → index-BLDUp5ON.js} +61 -8
  21. package/dist/render-page/index.html +1 -1
  22. package/dist/style.css +1 -1
  23. package/package.json +1 -1
  24. package/dist/filters/filters/controlMapping.d.ts +0 -31
  25. package/dist/filters/filters/definitions/adjustment.d.ts +0 -2
  26. package/dist/filters/filters/definitions/adjustmentAdvanced.d.ts +0 -2
  27. package/dist/filters/filters/definitions/advancedBloom.d.ts +0 -2
  28. package/dist/filters/filters/definitions/alpha.d.ts +0 -2
  29. package/dist/filters/filters/definitions/ascii.d.ts +0 -2
  30. package/dist/filters/filters/definitions/backdropBlur.d.ts +0 -2
  31. package/dist/filters/filters/definitions/bevel.d.ts +0 -2
  32. package/dist/filters/filters/definitions/bloom.d.ts +0 -2
  33. package/dist/filters/filters/definitions/blur.d.ts +0 -2
  34. package/dist/filters/filters/definitions/bulgePinch.d.ts +0 -2
  35. package/dist/filters/filters/definitions/colorGradient.d.ts +0 -2
  36. package/dist/filters/filters/definitions/colorMap.d.ts +0 -2
  37. package/dist/filters/filters/definitions/colorMatrix.d.ts +0 -2
  38. package/dist/filters/filters/definitions/colorOverlay.d.ts +0 -2
  39. package/dist/filters/filters/definitions/colorReplace.d.ts +0 -2
  40. package/dist/filters/filters/definitions/convolution.d.ts +0 -2
  41. package/dist/filters/filters/definitions/crossHatch.d.ts +0 -2
  42. package/dist/filters/filters/definitions/crt.d.ts +0 -2
  43. package/dist/filters/filters/definitions/displacement.d.ts +0 -2
  44. package/dist/filters/filters/definitions/dot.d.ts +0 -2
  45. package/dist/filters/filters/definitions/dropShadow.d.ts +0 -2
  46. package/dist/filters/filters/definitions/emboss.d.ts +0 -2
  47. package/dist/filters/filters/definitions/glitch.d.ts +0 -2
  48. package/dist/filters/filters/definitions/glow.d.ts +0 -2
  49. package/dist/filters/filters/definitions/godray.d.ts +0 -2
  50. package/dist/filters/filters/definitions/grayscale.d.ts +0 -2
  51. package/dist/filters/filters/definitions/hslAdjustment.d.ts +0 -2
  52. package/dist/filters/filters/definitions/kawaseBlur.d.ts +0 -2
  53. package/dist/filters/filters/definitions/lightmap.d.ts +0 -2
  54. package/dist/filters/filters/definitions/motionBlur.d.ts +0 -2
  55. package/dist/filters/filters/definitions/multiColorReplace.d.ts +0 -2
  56. package/dist/filters/filters/definitions/noise.d.ts +0 -2
  57. package/dist/filters/filters/definitions/oldFilm.d.ts +0 -2
  58. package/dist/filters/filters/definitions/outline.d.ts +0 -2
  59. package/dist/filters/filters/definitions/pixelate.d.ts +0 -2
  60. package/dist/filters/filters/definitions/radialBlur.d.ts +0 -2
  61. package/dist/filters/filters/definitions/reflection.d.ts +0 -2
  62. package/dist/filters/filters/definitions/rgbSplit.d.ts +0 -2
  63. package/dist/filters/filters/definitions/shockwave.d.ts +0 -2
  64. package/dist/filters/filters/definitions/simplexNoise.d.ts +0 -2
  65. package/dist/filters/filters/definitions/tiltShift.d.ts +0 -2
  66. package/dist/filters/filters/definitions/twist.d.ts +0 -2
  67. package/dist/filters/filters/definitions/vignette.d.ts +0 -2
  68. package/dist/filters/filters/definitions/zoomBlur.d.ts +0 -2
  69. package/dist/filters/filters/factory.d.ts +0 -36
  70. package/dist/filters/filters/index.d.ts +0 -93
  71. package/dist/filters/filters/registry.d.ts +0 -89
  72. package/dist/index-DBM_ViWA.js.map +0 -1
  73. package/dist/index-DvFmBczx.cjs +0 -39
  74. package/dist/index-DvFmBczx.cjs.map +0 -1
  75. package/dist/index-HREFg1jF.cjs +0 -42
  76. package/dist/index-HREFg1jF.cjs.map +0 -1
  77. package/dist/index-yxrF48R3.js +0 -28830
  78. package/dist/index-yxrF48R3.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-HREFg1jF.cjs");exports.VanillaImageEditor=e.VanillaImageEditor;exports.getAllCategories=e.getAllCategories;exports.getAllFilters=e.getAllFilters;exports.getFilter=e.getFilter;exports.getFiltersByCategory=e.getFiltersByCategory;exports.hasFilter=e.hasFilter;exports.initializeFilterRegistry=e.initializeFilterRegistry;exports.registerFilter=e.registerFilter;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./editor-BPW3mi6G.cjs");exports.VanillaImageEditor=e.VanillaImageEditor;exports.getAllCategories=e.getAllCategories;exports.getAllFilters=e.getAllFilters;exports.getFilter=e.getFilter;exports.getFiltersByCategory=e.getFiltersByCategory;exports.hasFilter=e.hasFilter;exports.initializeFilterRegistry=e.initializeFilterRegistry;exports.registerFilter=e.registerFilter;
2
2
  //# sourceMappingURL=mediables-vanilla.cjs.map
@@ -1,4 +1,4 @@
1
- import { V as a, c as i, g as r, a as s, b as l, h as g, i as F, r as o } from "./index-DBM_ViWA.js";
1
+ import { V as a, c as i, g as r, a as s, b as l, h as g, i as F, r as o } from "./editor-CfH1RN8F.js";
2
2
  export {
3
3
  a as VanillaImageEditor,
4
4
  i as getAllCategories,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-DvFmBczx.cjs"),i=require("./index-HREFg1jF.cjs");exports.AlbumBrowser=e.AlbumBrowser;exports.AlbumManager=e.AlbumManager;exports.AlbumMediaGrid=e.AlbumMediaGrid;exports.AlbumTree=e.AlbumTree;exports.ImageEditor=e.ImageEditor;exports.ImageEditorModal=e.ImageEditorModal;exports.LiveStreamManager=e.LiveStreamManager;exports.ManagedMediaGallery=e.ManagedMediaGallery;exports.MediaAttachment=e.MediaAttachment;exports.MediaAttachmentProvider=e._sfc_main$1;exports.MediaCollection=e.MediaCollection;exports.MediaCollectionDropzone=e.MediaCollectionDropzone;exports.MediaCollectionItem=e.MediaCollectionItem;exports.MediaCollectionProvider=e._sfc_main;exports.MediaHiddenFields=e._sfc_main$2;exports.MediaWorkspace=e.MediaWorkspace;exports.ModelMediaManager=e.ModelMediaManager;exports.VideoEditor=e.VideoEditor;exports.VideoEditorDialog=e.VideoEditorDialog;exports.VideoEditorSimple=e.VideoEditorSimple;exports.VideoExportPanel=e.VideoExportPanel;exports.VideoJobClient=e.VideoJobClient;exports.VideoPlayer=e.VideoPlayer;exports.VideoTimeline=e.VideoTimeline;exports.VideoToolsPanel=e.VideoToolsPanel;exports.VideoUploader=e.VideoUploader;exports.applyTemporaryMediaStoreConfig=e.applyTemporaryMediaStoreConfig;exports.configureMediaStore=e.configureMediaStore;exports.createAdapter=e.createAdapter;exports.createMediablesAdapter=e.createMediablesAdapter;exports.createSpatieAdapter=e.createSpatieAdapter;exports.formatFileSize=e.formatFileSize;exports.fromMediaArray=e.fromMediaArray;exports.getFileExtension=e.getFileExtension;exports.getImageDimensions=e.getImageDimensions;exports.getMediablesAdapter=e.getMediablesAdapter;exports.getSpatieAdapter=e.getSpatieAdapter;exports.isImageFile=e.isImageFile;exports.resetMediablesAdapter=e.resetMediablesAdapter;exports.resetSpatieAdapter=e.resetSpatieAdapter;exports.restoreMediaStoreConfig=e.restoreMediaStoreConfig;exports.snapshotMediaStoreConfig=e.snapshotMediaStoreConfig;exports.toFormValues=e.toFormValues;exports.useAdminMediaStore=e.useAdminMediaStore;exports.useAlbumDragDrop=e.useAlbumDragDrop;exports.useAlbumStore=e.useAlbumStore;exports.useAlbums=e.useAlbums;exports.useMediaAttachment=e.useMediaAttachment;exports.useMediaCollection=e.useMediaCollection;exports.useMediaDragSort=e.useMediaDragSort;exports.useMediaStore=e.useMediaStore;exports.useMediaUploadQueue=e.useMediaUploadQueue;exports.useMediaValidation=e.useMediaValidation;exports.validateFile=e.validateFile;exports.VanillaImageEditor=i.VanillaImageEditor;exports.getAllCategories=i.getAllCategories;exports.getAllFilters=i.getAllFilters;exports.getFilter=i.getFilter;exports.getFiltersByCategory=i.getFiltersByCategory;exports.hasFilter=i.hasFilter;exports.initializeFilterRegistry=i.initializeFilterRegistry;exports.registerFilter=i.registerFilter;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-Du0vZ5BO.cjs"),i=require("./editor-BPW3mi6G.cjs");exports.AlbumBrowser=e.AlbumBrowser;exports.AlbumManager=e.AlbumManager;exports.AlbumMediaGrid=e.AlbumMediaGrid;exports.AlbumTree=e.AlbumTree;exports.ImageEditor=e.ImageEditor;exports.ImageEditorModal=e.ImageEditorModal;exports.LiveStreamManager=e.LiveStreamManager;exports.ManagedMediaGallery=e.ManagedMediaGallery;exports.MediaAttachment=e.MediaAttachment;exports.MediaAttachmentProvider=e._sfc_main$1;exports.MediaCollection=e.MediaCollection;exports.MediaCollectionDropzone=e.MediaCollectionDropzone;exports.MediaCollectionItem=e.MediaCollectionItem;exports.MediaCollectionProvider=e._sfc_main;exports.MediaHiddenFields=e._sfc_main$2;exports.MediaWorkspace=e.MediaWorkspace;exports.ModelMediaManager=e.ModelMediaManager;exports.VideoEditor=e.VideoEditor;exports.VideoEditorDialog=e.VideoEditorDialog;exports.VideoEditorSimple=e.VideoEditorSimple;exports.VideoExportPanel=e.VideoExportPanel;exports.VideoJobClient=e.VideoJobClient;exports.VideoPlayer=e.VideoPlayer;exports.VideoTimeline=e.VideoTimeline;exports.VideoToolsPanel=e.VideoToolsPanel;exports.VideoUploader=e.VideoUploader;exports.applyTemporaryMediaStoreConfig=e.applyTemporaryMediaStoreConfig;exports.configureMediaStore=e.configureMediaStore;exports.createAdapter=e.createAdapter;exports.createMediablesAdapter=e.createMediablesAdapter;exports.createSpatieAdapter=e.createSpatieAdapter;exports.formatFileSize=e.formatFileSize;exports.fromMediaArray=e.fromMediaArray;exports.getFileExtension=e.getFileExtension;exports.getImageDimensions=e.getImageDimensions;exports.getMediablesAdapter=e.getMediablesAdapter;exports.getSpatieAdapter=e.getSpatieAdapter;exports.isImageFile=e.isImageFile;exports.resetMediablesAdapter=e.resetMediablesAdapter;exports.resetSpatieAdapter=e.resetSpatieAdapter;exports.restoreMediaStoreConfig=e.restoreMediaStoreConfig;exports.snapshotMediaStoreConfig=e.snapshotMediaStoreConfig;exports.toFormValues=e.toFormValues;exports.useAdminMediaStore=e.useAdminMediaStore;exports.useAlbumDragDrop=e.useAlbumDragDrop;exports.useAlbumStore=e.useAlbumStore;exports.useAlbums=e.useAlbums;exports.useMediaAttachment=e.useMediaAttachment;exports.useMediaCollection=e.useMediaCollection;exports.useMediaDragSort=e.useMediaDragSort;exports.useMediaStore=e.useMediaStore;exports.useMediaUploadQueue=e.useMediaUploadQueue;exports.useMediaValidation=e.useMediaValidation;exports.validateFile=e.validateFile;exports.VanillaImageEditor=i.VanillaImageEditor;exports.getAllCategories=i.getAllCategories;exports.getAllFilters=i.getAllFilters;exports.getFilter=i.getFilter;exports.getFiltersByCategory=i.getFiltersByCategory;exports.hasFilter=i.hasFilter;exports.initializeFilterRegistry=i.initializeFilterRegistry;exports.registerFilter=i.registerFilter;
2
2
  //# sourceMappingURL=mediables-vue.cjs.map
@@ -1,5 +1,5 @@
1
- import { q as s, t as i, v as t, p as r, I as o, d, L as l, f as n, D as M, E as g, z as m, C as p, B as u, _ as A, F as c, e as S, g as V, h as b, V as F, i as C, l as f, o as y, n as E, j as h, k as D, m as I, a as P, c as v, T as x, U as T, Y as z, O as B, a1 as G, P as U, R as k, W as w, Z as H, Q as J, X as L, $ as Q, r as R, s as W, a0 as j, b as q, x as K, y as N, w as O, H as X, G as Y, K as Z, u as _, J as $, N as ee, S as ae } from "./index-yxrF48R3.js";
2
- import { V as ie, c as te, g as re, a as oe, b as de, h as le, i as ne, r as Me } from "./index-DBM_ViWA.js";
1
+ import { q as s, t as i, v as t, p as r, I as o, d, L as l, f as n, D as M, E as g, z as m, C as p, B as u, _ as A, F as c, e as S, g as V, h as b, V as F, i as C, l as f, o as y, n as E, j as h, k as D, m as I, a as P, c as v, T as x, U as T, Y as z, O as B, a1 as G, P as U, R as k, W as w, Z as H, Q as J, X as L, $ as Q, r as R, s as W, a0 as j, b as q, x as K, y as N, w as O, H as X, G as Y, K as Z, u as _, J as $, N as ee, S as ae } from "./index-DDmYo-6o.js";
2
+ import { V as ie, c as te, g as re, a as oe, b as de, h as le, i as ne, r as Me } from "./editor-CfH1RN8F.js";
3
3
  export {
4
4
  s as AlbumBrowser,
5
5
  i as AlbumManager,
@@ -70989,6 +70989,25 @@ function createPixiVideoFallbackFilter(filterId, params) {
70989
70989
  return null;
70990
70990
  }
70991
70991
  }
70992
+ function createChunkWriteQueue() {
70993
+ let chain = Promise.resolve();
70994
+ let writeError = null;
70995
+ return {
70996
+ enqueue(chunkFn) {
70997
+ chain = chain.then(chunkFn).catch((error) => {
70998
+ if (writeError === null) {
70999
+ writeError = error instanceof Error ? error : new Error(String(error));
71000
+ }
71001
+ });
71002
+ },
71003
+ async flush() {
71004
+ await chain;
71005
+ if (writeError !== null) {
71006
+ throw writeError;
71007
+ }
71008
+ }
71009
+ };
71010
+ }
70992
71011
  function resolveFitMode(recipe) {
70993
71012
  var _a;
70994
71013
  const mode = (_a = recipe.metadata) == null ? void 0 : _a.fit_mode;
@@ -70999,7 +71018,7 @@ function resolveFitMode(recipe) {
70999
71018
  }
71000
71019
  function resolveRecipeFilters(recipe) {
71001
71020
  const firstClip = Array.isArray(recipe.timeline) ? recipe.timeline[0] : void 0;
71002
- if (firstClip && Array.isArray(firstClip.filters) && firstClip.filters.length > 0) {
71021
+ if (firstClip && Array.isArray(firstClip.filters)) {
71003
71022
  return firstClip.filters;
71004
71023
  }
71005
71024
  if (Array.isArray(recipe.filters)) {
@@ -71086,19 +71105,35 @@ function waitForVideoReady(video) {
71086
71105
  }
71087
71106
  async function decodeAudioFromSource(sourceUrl) {
71088
71107
  try {
71108
+ console.log("[RenderAudio] Fetching source for audio decode:", sourceUrl);
71089
71109
  const response = await fetch(sourceUrl);
71090
- if (!response.ok) return null;
71110
+ if (!response.ok) {
71111
+ console.warn("[RenderAudio] Fetch failed:", response.status, response.statusText);
71112
+ return null;
71113
+ }
71091
71114
  const arrayBuffer = await response.arrayBuffer();
71092
- const audioCtx = new AudioContext();
71115
+ console.log("[RenderAudio] Source fetched, size:", arrayBuffer.byteLength, "bytes");
71116
+ const audioCtx = new OfflineAudioContext(1, 1, 44100);
71117
+ console.log("[RenderAudio] OfflineAudioContext created, state:", audioCtx.state);
71093
71118
  try {
71094
71119
  const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer);
71120
+ console.log("[RenderAudio] Audio decoded:", {
71121
+ channels: audioBuffer.numberOfChannels,
71122
+ sampleRate: audioBuffer.sampleRate,
71123
+ duration: audioBuffer.duration,
71124
+ length: audioBuffer.length
71125
+ });
71095
71126
  return audioBuffer;
71096
- } catch {
71127
+ } catch (decodeErr) {
71128
+ const msg = decodeErr instanceof Error ? decodeErr.message : String(decodeErr);
71129
+ console.warn("[RenderAudio] decodeAudioData failed:", msg);
71097
71130
  return null;
71098
71131
  } finally {
71099
71132
  await audioCtx.close();
71100
71133
  }
71101
- } catch {
71134
+ } catch (fetchErr) {
71135
+ const msg = fetchErr instanceof Error ? fetchErr.message : String(fetchErr);
71136
+ console.warn("[RenderAudio] Audio extraction failed:", msg);
71102
71137
  return null;
71103
71138
  }
71104
71139
  }
@@ -71119,6 +71154,7 @@ async function main() {
71119
71154
  window.__RENDER_STATUS__ = "running";
71120
71155
  window.__RENDER_PROGRESS__ = 0;
71121
71156
  window.__RENDER_ERROR__ = null;
71157
+ window.__RENDER_AUDIO_STATUS__ = null;
71122
71158
  try {
71123
71159
  const config = window.__RENDER_CONFIG__;
71124
71160
  if (!config) throw new Error("No __RENDER_CONFIG__ found on window");
@@ -71143,7 +71179,12 @@ async function main() {
71143
71179
  const trimEnd = resolveTrimEnd(recipe, videoDuration);
71144
71180
  const exportDuration = Math.max(0, trimEnd - trimStart);
71145
71181
  const totalFrames = Math.max(1, Math.ceil(exportDuration * fps));
71146
- const audioPromise = typeof AudioEncoder !== "undefined" ? decodeAudioFromSource(sourceUrl) : Promise.resolve(null);
71182
+ const hasAudioEncoder = typeof AudioEncoder !== "undefined";
71183
+ console.log("[RenderAudio] AudioEncoder available:", hasAudioEncoder);
71184
+ if (!hasAudioEncoder) {
71185
+ window.__RENDER_AUDIO_STATUS__ = "skipped:AudioEncoder-unavailable";
71186
+ }
71187
+ const audioPromise = hasAudioEncoder ? decodeAudioFromSource(sourceUrl) : Promise.resolve(null);
71147
71188
  const app = new Application();
71148
71189
  await app.init({
71149
71190
  width,
@@ -71201,11 +71242,16 @@ async function main() {
71201
71242
  sprite.filters = filterInstances;
71202
71243
  const audioBuffer = await audioPromise;
71203
71244
  const hasAudio = !!audioBuffer && audioBuffer.numberOfChannels > 0 && audioBuffer.length > 0;
71245
+ console.log("[RenderAudio] hasAudio:", hasAudio, audioBuffer ? { channels: audioBuffer.numberOfChannels, length: audioBuffer.length } : "null");
71246
+ if (!hasAudio && hasAudioEncoder) {
71247
+ window.__RENDER_AUDIO_STATUS__ = "skipped:decode-failed";
71248
+ }
71249
+ const chunkWriteQueue = createChunkWriteQueue();
71204
71250
  const muxerOptions = {
71205
71251
  target: new StreamTarget({
71206
- onData: async (data) => {
71252
+ onData: (data, position2) => {
71207
71253
  const b64 = toBase64(data);
71208
- await window.__writeChunk(b64);
71254
+ chunkWriteQueue.enqueue(() => window.__writeChunk(b64, position2));
71209
71255
  }
71210
71256
  }),
71211
71257
  video: {
@@ -71298,6 +71344,7 @@ async function main() {
71298
71344
  bitrate: audioBitrate
71299
71345
  };
71300
71346
  const audioSupport = await AudioEncoder.isConfigSupported(audioEncoderConfig);
71347
+ console.log("[RenderAudio] AAC encoder supported:", audioSupport.supported);
71301
71348
  if (audioSupport.supported) {
71302
71349
  const audioEncoder = new AudioEncoder({
71303
71350
  output: (chunk, metadata) => {
@@ -71337,10 +71384,16 @@ async function main() {
71337
71384
  }
71338
71385
  await audioEncoder.flush();
71339
71386
  audioEncoder.close();
71387
+ console.log("[RenderAudio] Audio encoding complete");
71388
+ window.__RENDER_AUDIO_STATUS__ = "encoded";
71389
+ } else {
71390
+ console.warn("[RenderAudio] AAC not supported, exporting without audio");
71391
+ window.__RENDER_AUDIO_STATUS__ = "skipped:aac-unsupported";
71340
71392
  }
71341
71393
  window.__RENDER_PROGRESS__ = 99;
71342
71394
  }
71343
71395
  muxer.finalize();
71396
+ await chunkWriteQueue.flush();
71344
71397
  window.__RENDER_PROGRESS__ = 100;
71345
71398
  window.__RENDER_STATUS__ = "done";
71346
71399
  app.destroy(true);
@@ -9,7 +9,7 @@
9
9
  body { margin: 0; background: #000; overflow: hidden; }
10
10
  #render-canvas { display: block; }
11
11
  </style>
12
- <script type="module" crossorigin src="/assets/index-SU1f_egA.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-BLDUp5ON.js"></script>
13
13
  </head>
14
14
  <body>
15
15
  <video id="source-video" crossorigin="anonymous" preload="auto" muted playsinline></video>