@hyperframes/studio 0.8.17 → 0.8.19

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,4 +1,4 @@
1
- import{n as Qi}from"./index-CU6o8PuW.js";/*!
1
+ import{n as Qi}from"./index-Bjd2hioj.js";/*!
2
2
  * Copyright (c) 2026-present, Vanilagy and contributors
3
3
  *
4
4
  * This Source Code Form is subject to the terms of the Mozilla Public
@@ -1 +1 @@
1
- import{g as P}from"./index-CU6o8PuW.js";function j(c,d){for(var s=0;s<d.length;s++){const a=d[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in c)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(c,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var v={},w;function k(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.default=d;var c=window.OfflineAudioContext||window.webkitOfflineAudioContext;function d(e){var r=a(e);return r.start(0),[i,y,O(e.sampleRate),s].reduce(function(t,o){return o(t)},r.buffer.getChannelData(0))}function s(e){return e.sort(function(r,t){return t.count-r.count}).splice(0,5)[0].tempo}function a(e){var r=e.length,t=e.numberOfChannels,o=e.sampleRate,n=new c(t,r,o),u=n.createBufferSource();u.buffer=e;var f=n.createBiquadFilter();return f.type="lowpass",u.connect(f),f.connect(n.destination),u}function i(e){for(var r=[],t=.9,o=.3,n=15;r.length<n&&t>=o;)r=l(e,t),t-=.05;if(r.length<n)throw new Error("Could not find enough samples for a reliable detection.");return r}function l(e,r){for(var t=[],o=0,n=e.length;o<n;o+=1)e[o]>r&&(t.push(o),o+=1e4);return t}function y(e){var r=[];return e.forEach(function(t,o){for(var n=function(x){var g=e[o+x]-t,_=r.some(function(h){if(h.interval===g)return h.count+=1});_||r.push({interval:g,count:1})},u=0;u<10;u+=1)n(u)}),r}function O(e){return function(r){var t=[];return r.forEach(function(o){if(o.interval!==0){for(var n=60/(o.interval/e);n<90;)n*=2;for(;n>180;)n/=2;n=Math.round(n);var u=t.some(function(f){if(f.tempo===n)return f.count+=o.count});u||t.push({tempo:n,count:o.count})}}),t}}return v}var p,b;function q(){return b||(b=1,p=k().default),p}var m=q();const A=P(m),D=j({__proto__:null,default:A},[m]);export{D as i};
1
+ import{g as P}from"./index-Bjd2hioj.js";function j(c,d){for(var s=0;s<d.length;s++){const a=d[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in c)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(c,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var v={},w;function k(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.default=d;var c=window.OfflineAudioContext||window.webkitOfflineAudioContext;function d(e){var r=a(e);return r.start(0),[i,y,O(e.sampleRate),s].reduce(function(t,o){return o(t)},r.buffer.getChannelData(0))}function s(e){return e.sort(function(r,t){return t.count-r.count}).splice(0,5)[0].tempo}function a(e){var r=e.length,t=e.numberOfChannels,o=e.sampleRate,n=new c(t,r,o),u=n.createBufferSource();u.buffer=e;var f=n.createBiquadFilter();return f.type="lowpass",u.connect(f),f.connect(n.destination),u}function i(e){for(var r=[],t=.9,o=.3,n=15;r.length<n&&t>=o;)r=l(e,t),t-=.05;if(r.length<n)throw new Error("Could not find enough samples for a reliable detection.");return r}function l(e,r){for(var t=[],o=0,n=e.length;o<n;o+=1)e[o]>r&&(t.push(o),o+=1e4);return t}function y(e){var r=[];return e.forEach(function(t,o){for(var n=function(x){var g=e[o+x]-t,_=r.some(function(h){if(h.interval===g)return h.count+=1});_||r.push({interval:g,count:1})},u=0;u<10;u+=1)n(u)}),r}function O(e){return function(r){var t=[];return r.forEach(function(o){if(o.interval!==0){for(var n=60/(o.interval/e);n<90;)n*=2;for(;n>180;)n/=2;n=Math.round(n);var u=t.some(function(f){if(f.tempo===n)return f.count+=o.count});u||t.push({tempo:n,count:o.count})}}),t}}return v}var p,b;function q(){return b||(b=1,p=k().default),p}var m=q();const A=P(m),D=j({__proto__:null,default:A},[m]);export{D as i};
package/dist/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
6
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
7
  <title>HyperFrames Studio</title>
8
- <script type="module" crossorigin src="/assets/index-CU6o8PuW.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-Bjd2hioj.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-yGhfxxoL.css">
10
10
  </head>
11
11
  <body>
package/dist/index.js CHANGED
@@ -26650,7 +26650,7 @@ function useCompositionStack({
26650
26650
  if (activeCompositionPath === "index.html") {
26651
26651
  usePlayerStore.getState().setElements([]);
26652
26652
  updateCompositionStack([master]);
26653
- } else if (activeCompositionPath && activeCompositionPath.startsWith("compositions/")) {
26653
+ } else if (activeCompositionPath) {
26654
26654
  const label = activeCompositionPath.replace(/^compositions\//, "").replace(/\.html$/, "");
26655
26655
  const previewUrl = `/api/projects/${projectId}/preview/comp/${encodePreviewPath(activeCompositionPath)}`;
26656
26656
  usePlayerStore.getState().setElements([]);
@@ -26658,7 +26658,7 @@ function useCompositionStack({
26658
26658
  if (prev[prev.length - 1]?.id === activeCompositionPath) return prev;
26659
26659
  return [master, { id: activeCompositionPath, label, previewUrl }];
26660
26660
  });
26661
- } else if (!activeCompositionPath) {
26661
+ } else {
26662
26662
  usePlayerStore.getState().setElements([]);
26663
26663
  updateCompositionStack([master]);
26664
26664
  }
@@ -60693,7 +60693,7 @@ function writeHiddenIds(projectId, ids) {
60693
60693
  } catch {
60694
60694
  }
60695
60695
  }
60696
- function useRenderQueue(projectId) {
60696
+ function useRenderQueue(projectId, activeCompPathRef) {
60697
60697
  const [jobs, setJobs] = useState94([]);
60698
60698
  const [loadError, setLoadError] = useState94(null);
60699
60699
  const [actionError, setActionError] = useState94(null);
@@ -60769,7 +60769,7 @@ function useRenderQueue(projectId) {
60769
60769
  const quality = opts.quality ?? "standard";
60770
60770
  const format = opts.format ?? "mp4";
60771
60771
  const resolution = opts.resolution;
60772
- const composition = opts.composition;
60772
+ const composition = opts.composition ?? activeCompPathRef.current ?? void 0;
60773
60773
  trackStudioRenderStart({
60774
60774
  fps,
60775
60775
  quality,
@@ -60884,7 +60884,7 @@ function useRenderQueue(projectId) {
60884
60884
  };
60885
60885
  return jobId;
60886
60886
  },
60887
- [projectId, closeActiveEventSource, addSessionJob, ffmpeg, ffmpegMissing]
60887
+ [projectId, activeCompPathRef, closeActiveEventSource, addSessionJob, ffmpeg, ffmpegMissing]
60888
60888
  );
60889
60889
  const cancelRender = useCallback80(
60890
60890
  async (jobId) => {
@@ -81852,13 +81852,7 @@ var RenderQueue = memo49(function RenderQueue2({
81852
81852
  // src/components/renders/RenderQueuePanel.tsx
81853
81853
  import { jsx as jsx194 } from "react/jsx-runtime";
81854
81854
  var RenderQueuePanel = memo50(function RenderQueuePanel2() {
81855
- const {
81856
- projectId,
81857
- activeCompPath,
81858
- compositionDimensions,
81859
- waitForPendingDomEditSaves,
81860
- renderQueue
81861
- } = useStudioShellContext();
81855
+ const { projectId, compositionDimensions, waitForPendingDomEditSaves, renderQueue } = useStudioShellContext();
81862
81856
  return /* @__PURE__ */ jsx194(
81863
81857
  RenderQueue,
81864
81858
  {
@@ -81876,13 +81870,11 @@ var RenderQueuePanel = memo50(function RenderQueuePanel2() {
81876
81870
  onRecheckFfmpeg: renderQueue.recheckFfmpeg,
81877
81871
  onStartRender: async (format, quality, resolution, fps) => {
81878
81872
  await waitForPendingDomEditSaves();
81879
- const composition = activeCompPath && activeCompPath !== "index.html" ? activeCompPath : void 0;
81880
81873
  await renderQueue.startRender({
81881
81874
  fps,
81882
81875
  quality,
81883
81876
  format,
81884
81877
  resolution,
81885
- composition,
81886
81878
  // Render what the user is previewing: active variable overrides
81887
81879
  // from the Variables panel ride along (undefined = defaults).
81888
81880
  variables: usePreviewVariablesStore.getState().values ?? void 0
@@ -87215,7 +87207,7 @@ function StudioApp() {
87215
87207
  const activeCompPathRef = useRef170(activeCompPath);
87216
87208
  activeCompPathRef.current = activeCompPath;
87217
87209
  const leftSidebarRef = useRef170(null);
87218
- const renderQueue = useRenderQueue(projectId);
87210
+ const renderQueue = useRenderQueue(projectId, activeCompPathRef);
87219
87211
  const captionEditMode = useCaptionStore((s) => s.isEditMode);
87220
87212
  const captionHasSelection = useCaptionStore((s) => s.selectedSegmentIds.size > 0);
87221
87213
  const captionSync = useCaptionSync(projectId);