@codingfactory/mediables-vue 2.7.0 → 2.7.2

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-CvzKjaYw.cjs"),i=require("./editor-BTwIhrcA.cjs");exports.AlbumBrowser=e.AlbumBrowser;exports.AlbumManager=e.AlbumManager;exports.AlbumMediaGrid=e.AlbumMediaGrid;exports.AlbumTree=e.AlbumTree;exports.ExistingMediaSelector=e.ExistingMediaSelector;exports.ImageEditor=e.ImageEditor;exports.ImageEditorModal=e.ImageEditorModal;exports.LiveStreamManager=e.LiveStreamManager;exports.ManagedMediaGallery=e.ManagedMediaGallery;exports.MediaAlbumInlineCreate=e.MediaAlbumInlineCreate;exports.MediaAlbumUnavailableState=e.MediaAlbumUnavailableState;exports.MediaAttachment=e.MediaAttachment;exports.MediaAttachmentMetadataFields=e.MediaAttachmentMetadataFields;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.MediaLibraryPicker=e.MediaLibraryPicker;exports.MediaLibraryPickerModal=e.MediaLibraryPickerModal;exports.MediaManagementView=e.MediaManagementView;exports.MediaPreviewSheet=e.MediaPreviewSheet;exports.MediaSelectionTray=e.MediaSelectionTray;exports.MediaSourceSheet=e.MediaSourceSheet;exports.MediaThumbnailCell=e.MediaThumbnailCell;exports.MediaUploadSheet=e.MediaUploadSheet;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.VirtualMediaGrid=e.VirtualMediaGrid;exports.applyTemporaryMediaStoreConfig=e.applyTemporaryMediaStoreConfig;exports.configureMediaStore=e.configureMediaStore;exports.createAdapter=e.createAdapter;exports.createEmptyEditorState=e.createEmptyEditorState;exports.createImageEditor=e.createImageEditor;exports.createMediablesAdapter=e.createMediablesAdapter;exports.createSpatieAdapter=e.createSpatieAdapter;exports.deserializeEditorState=e.deserializeEditorState;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.normalizeEditorState=e.normalizeEditorState;exports.normalizeRecipeForServerRender=e.normalizeRecipeForServerRender;exports.recipeHasServerRenderableEdits=e.recipeHasServerRenderableEdits;exports.recipeHasUnsupportedServerEdits=e.recipeHasUnsupportedServerEdits;exports.resetMediablesAdapter=e.resetMediablesAdapter;exports.resetSpatieAdapter=e.resetSpatieAdapter;exports.restoreMediaStoreConfig=e.restoreMediaStoreConfig;exports.serializeEditorState=e.serializeEditorState;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.useGlobalImageEditor=e.useGlobalImageEditor;exports.useImageEditorModal=e.useImageEditorModal;exports.useMediaAttachment=e.useMediaAttachment;exports.useMediaCollection=e.useMediaCollection;exports.useMediaDeletion=e.useMediaDeletion;exports.useMediaDragSort=e.useMediaDragSort;exports.useMediaLibraryPickerController=e.useMediaLibraryPickerController;exports.useMediaLibraryQuery=e.useMediaLibraryQuery;exports.useMediaLibrarySession=e.useMediaLibrarySession;exports.useMediaLibraryStateMachine=e.useMediaLibraryStateMachine;exports.useMediaLibraryTelemetry=e.useMediaLibraryTelemetry;exports.useMediaStore=e.useMediaStore;exports.useMediaTrash=e.useMediaTrash;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-Dx7DOxwK.cjs"),i=require("./editor-BTwIhrcA.cjs");exports.AlbumBrowser=e.AlbumBrowser;exports.AlbumManager=e.AlbumManager;exports.AlbumMediaGrid=e.AlbumMediaGrid;exports.AlbumTree=e.AlbumTree;exports.ExistingMediaSelector=e.ExistingMediaSelector;exports.ImageEditor=e.ImageEditor;exports.ImageEditorModal=e.ImageEditorModal;exports.LiveStreamManager=e.LiveStreamManager;exports.ManagedMediaGallery=e.ManagedMediaGallery;exports.MediaAlbumInlineCreate=e.MediaAlbumInlineCreate;exports.MediaAlbumUnavailableState=e.MediaAlbumUnavailableState;exports.MediaAttachment=e.MediaAttachment;exports.MediaAttachmentMetadataFields=e.MediaAttachmentMetadataFields;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.MediaLibraryPicker=e.MediaLibraryPicker;exports.MediaLibraryPickerModal=e.MediaLibraryPickerModal;exports.MediaManagementView=e.MediaManagementView;exports.MediaPreviewSheet=e.MediaPreviewSheet;exports.MediaSelectionTray=e.MediaSelectionTray;exports.MediaSourceSheet=e.MediaSourceSheet;exports.MediaThumbnailCell=e.MediaThumbnailCell;exports.MediaUploadSheet=e.MediaUploadSheet;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.VirtualMediaGrid=e.VirtualMediaGrid;exports.applyTemporaryMediaStoreConfig=e.applyTemporaryMediaStoreConfig;exports.configureMediaStore=e.configureMediaStore;exports.createAdapter=e.createAdapter;exports.createEmptyEditorState=e.createEmptyEditorState;exports.createImageEditor=e.createImageEditor;exports.createMediablesAdapter=e.createMediablesAdapter;exports.createSpatieAdapter=e.createSpatieAdapter;exports.deserializeEditorState=e.deserializeEditorState;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.normalizeEditorState=e.normalizeEditorState;exports.normalizeRecipeForServerRender=e.normalizeRecipeForServerRender;exports.recipeHasServerRenderableEdits=e.recipeHasServerRenderableEdits;exports.recipeHasUnsupportedServerEdits=e.recipeHasUnsupportedServerEdits;exports.resetMediablesAdapter=e.resetMediablesAdapter;exports.resetSpatieAdapter=e.resetSpatieAdapter;exports.restoreMediaStoreConfig=e.restoreMediaStoreConfig;exports.serializeEditorState=e.serializeEditorState;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.useGlobalImageEditor=e.useGlobalImageEditor;exports.useImageEditorModal=e.useImageEditorModal;exports.useMediaAttachment=e.useMediaAttachment;exports.useMediaCollection=e.useMediaCollection;exports.useMediaDeletion=e.useMediaDeletion;exports.useMediaDragSort=e.useMediaDragSort;exports.useMediaLibraryPickerController=e.useMediaLibraryPickerController;exports.useMediaLibraryQuery=e.useMediaLibraryQuery;exports.useMediaLibrarySession=e.useMediaLibrarySession;exports.useMediaLibraryStateMachine=e.useMediaLibraryStateMachine;exports.useMediaLibraryTelemetry=e.useMediaLibraryTelemetry;exports.useMediaStore=e.useMediaStore;exports.useMediaTrash=e.useMediaTrash;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,4 +1,4 @@
1
- import { w as i, x as s, y as r, v as t, E as d, I as o, d as l, L as M, f as n, H as m, N as u, a0 as g, a4 as p, a2 as S, Z as c, $ as b, _ as A, a1 as y, a3 as E, z as V, B as h, ad as C, F, J as v, G as I, D as f, K as P, e as L, g as T, h as z, V as D, i as k, l as x, o as U, n as G, j as R, k as w, m as H, C as B, a as Q, c as j, an as q, U as J, Q as W, ao as K, ar as N, T as O, ai as X, av as Y, aj as Z, al as _, ap as $, as as aa, ak as ea, R as ia, p as sa, q as ra, t as ta, aq as da, at as oa, r as la, S as Ma, s as na, au as ma, b as ua, X as ga, Y as pa, W as Sa, P as ca, O as ba, a6 as Aa, a5 as ya, ae as Ea, ag as Va, a9 as ha, a8 as Ca, aa as Fa, ac as va, ab as Ia, u as fa, af as Pa, a7 as La, ah as Ta, am as za } from "./index-x6MmiEXL.js";
1
+ import { w as i, x as s, y as r, v as t, E as d, I as o, d as l, L as M, f as n, H as m, N as u, a0 as g, a4 as p, a2 as S, Z as c, $ as b, _ as A, a1 as y, a3 as E, z as V, B as h, ad as C, F, J as v, G as I, D as f, K as P, e as L, g as T, h as z, V as D, i as k, l as x, o as U, n as G, j as R, k as w, m as H, C as B, a as Q, c as j, an as q, U as J, Q as W, ao as K, ar as N, T as O, ai as X, av as Y, aj as Z, al as _, ap as $, as as aa, ak as ea, R as ia, p as sa, q as ra, t as ta, aq as da, at as oa, r as la, S as Ma, s as na, au as ma, b as ua, X as ga, Y as pa, W as Sa, P as ca, O as ba, a6 as Aa, a5 as ya, ae as Ea, ag as Va, a9 as ha, a8 as Ca, aa as Fa, ac as va, ab as Ia, u as fa, af as Pa, a7 as La, ah as Ta, am as za } from "./index-B_7DfcKr.js";
2
2
  import { V as ka, c as xa, g as Ua, a as Ga, b as Ra, h as wa, i as Ha, r as Ba } from "./editor-CYj5y5bp.js";
3
3
  export {
4
4
  i as AlbumBrowser,
@@ -70936,6 +70936,10 @@ const MAX_SEEK_RETRY_ATTEMPTS = 6;
70936
70936
  const MIN_SEEK_TIMEOUT_MS = 250;
70937
70937
  const MAX_SEEK_NUDGE_SECONDS = 0.25;
70938
70938
  const MIN_SEEK_EPSILON_SECONDS = 1e-3;
70939
+ const HAVE_CURRENT_DATA = 2;
70940
+ function shouldSkipRedundantSeek(video, targetTime) {
70941
+ return video.readyState >= HAVE_CURRENT_DATA && !video.seeking && Math.abs(video.currentTime - targetTime) < MIN_SEEK_EPSILON_SECONDS;
70942
+ }
70939
70943
  function normalizeSeekTimeoutMs(value) {
70940
70944
  if (!Number.isFinite(value) || value === void 0 || value < MIN_SEEK_TIMEOUT_MS) {
70941
70945
  return DEFAULT_SEEK_TIMEOUT_MS;
@@ -71046,7 +71050,6 @@ function resetTime(video) {
71046
71050
  } catch {
71047
71051
  }
71048
71052
  }
71049
- const HAVE_CURRENT_DATA = 2;
71050
71053
  const PENDING_SEEK_DRAIN_TIMEOUT_MS = 1e3;
71051
71054
  function resolveFitMode(recipe) {
71052
71055
  var _a;
@@ -71220,7 +71223,7 @@ function seekVideoOnce(video, timeSec, timeoutMs) {
71220
71223
  `Video seek timed out at ${timeSec}s after ${timeoutMs}ms (readyState=${video.readyState}, seeking=${video.seeking}, currentTime=${video.currentTime.toFixed(4)}, duration=${video.duration}, networkState=${video.networkState}, paused=${video.paused}, ended=${video.ended})`
71221
71224
  ));
71222
71225
  }, timeoutMs);
71223
- if (!video.seeking && Math.abs(video.currentTime - timeSec) < 1e-3) {
71226
+ if (shouldSkipRedundantSeek(video, timeSec)) {
71224
71227
  ensureFrameDecoded(video, timeoutMs).then(() => finish()).catch((error) => {
71225
71228
  const message = error instanceof Error ? error.message : String(error);
71226
71229
  finish(new Error(`Frame decode failed at ${timeSec}s: ${message}`));
@@ -71363,6 +71366,9 @@ async function main() {
71363
71366
  width,
71364
71367
  height,
71365
71368
  fps,
71369
+ sourceFrameRate,
71370
+ recipeFrameRate,
71371
+ frameRateSource,
71366
71372
  bitrate = 5e6,
71367
71373
  audioBitrate = 128e3
71368
71374
  } = config;
@@ -71377,6 +71383,18 @@ async function main() {
71377
71383
  const trimEnd = resolveTrimEnd(recipe, videoDuration);
71378
71384
  const exportDuration = Math.max(0, trimEnd - trimStart);
71379
71385
  const totalFrames = Math.max(1, Math.ceil(exportDuration * fps));
71386
+ const keyFrameIntervalFrames = Math.max(1, Math.round(fps * 2));
71387
+ console.log("[Render] Timing resolved", {
71388
+ fps,
71389
+ frameRateSource: frameRateSource ?? "unknown",
71390
+ sourceFrameRate: sourceFrameRate ?? null,
71391
+ recipeFrameRate: recipeFrameRate ?? null,
71392
+ trimStart,
71393
+ trimEnd,
71394
+ exportDuration,
71395
+ totalFrames,
71396
+ keyFrameIntervalFrames
71397
+ });
71380
71398
  const hasAudioEncoder = typeof AudioEncoder !== "undefined";
71381
71399
  console.log("[RenderAudio] AudioEncoder available:", hasAudioEncoder);
71382
71400
  if (!hasAudioEncoder) {
@@ -71511,6 +71529,14 @@ async function main() {
71511
71529
  }
71512
71530
  });
71513
71531
  encoder.configure(encoderConfig);
71532
+ touchRenderHeartbeat("priming-first-frame");
71533
+ await seekVideo(
71534
+ video,
71535
+ trimStart,
71536
+ config.seekTimeoutMs ?? 4e3,
71537
+ config.seekRetryAttempts ?? 3,
71538
+ fps
71539
+ );
71514
71540
  for (let frame = 0; frame < totalFrames; frame++) {
71515
71541
  const timeSec = trimStart + frame / fps;
71516
71542
  await seekVideo(
@@ -71523,13 +71549,14 @@ async function main() {
71523
71549
  await drawCurrentVideoFrameToCanvas(video, sourceCtx, sourceWidth, sourceHeight);
71524
71550
  videoTexture.source.update();
71525
71551
  app.render();
71526
- const timestamp = Math.floor(frame / fps * 1e6);
71527
- const frameDuration = Math.floor(1e6 / fps);
71552
+ const timestamp = Math.round(frame / fps * 1e6);
71553
+ const nextTimestamp = Math.round((frame + 1) / fps * 1e6);
71554
+ const frameDuration = Math.max(1, nextTimestamp - timestamp);
71528
71555
  const videoFrame = new VideoFrame(
71529
71556
  app.canvas,
71530
71557
  { timestamp, duration: frameDuration }
71531
71558
  );
71532
- const keyFrame = frame % (fps * 2) === 0;
71559
+ const keyFrame = frame % keyFrameIntervalFrames === 0;
71533
71560
  encoder.encode(videoFrame, { keyFrame });
71534
71561
  videoFrame.close();
71535
71562
  if (encoder.encodeQueueSize > 5) {
@@ -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-y90zwXpc.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-aDRQNAjC.js"></script>
13
13
  </head>
14
14
  <body>
15
15
  <video id="source-video" crossorigin="anonymous" preload="auto" muted playsinline></video>