@remotion/studio 4.0.395 → 4.0.396

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.
@@ -34,7 +34,7 @@ import { Internals as Internals66 } from "remotion";
34
34
 
35
35
  // src/components/Editor.tsx
36
36
  import { PlayerInternals as PlayerInternals20 } from "@remotion/player";
37
- import React176, { useCallback as useCallback136, useEffect as useEffect78, useMemo as useMemo135 } from "react";
37
+ import React176, { useCallback as useCallback135, useEffect as useEffect78, useMemo as useMemo135 } from "react";
38
38
  import { Internals as Internals62 } from "remotion";
39
39
 
40
40
  // src/helpers/colors.ts
@@ -18247,6 +18247,10 @@ var TriggerWebRender = () => {
18247
18247
  if (!video?.id) {
18248
18248
  return null;
18249
18249
  }
18250
+ const defaults = window.remotion_renderDefaults;
18251
+ if (!defaults) {
18252
+ throw new TypeError("Expected defaults");
18253
+ }
18250
18254
  const frame2 = getCurrentFrame2();
18251
18255
  setSelectedModal({
18252
18256
  type: "web-render",
@@ -18254,7 +18258,8 @@ var TriggerWebRender = () => {
18254
18258
  compositionId: video.id,
18255
18259
  defaultProps: video.defaultProps,
18256
18260
  inFrameMark: inFrame,
18257
- outFrameMark: outFrame
18261
+ outFrameMark: outFrame,
18262
+ initialLogLevel: defaults.logLevel
18258
18263
  });
18259
18264
  }, [
18260
18265
  getCurrentFrame2,
@@ -40340,6 +40345,26 @@ var humanReadableCodec = (codec) => {
40340
40345
  throw new TypeError(`Got unexpected codec "${codec}"`);
40341
40346
  };
40342
40347
 
40348
+ // src/components/RenderModal/human-readable-loglevel.ts
40349
+ var humanReadableLogLevel = (logLevel) => {
40350
+ if (logLevel === "trace") {
40351
+ return "Trace";
40352
+ }
40353
+ if (logLevel === "verbose") {
40354
+ return "Verbose";
40355
+ }
40356
+ if (logLevel === "info") {
40357
+ return "Info";
40358
+ }
40359
+ if (logLevel === "warn") {
40360
+ return "Warn";
40361
+ }
40362
+ if (logLevel === "error") {
40363
+ return "Error";
40364
+ }
40365
+ throw new TypeError(`Got unexpected log level "${logLevel}"`);
40366
+ };
40367
+
40343
40368
  // src/components/RenderModal/RenderModalBasic.tsx
40344
40369
  import { jsx as jsx251, jsxs as jsxs129 } from "react/jsx-runtime";
40345
40370
  var container56 = {
@@ -40416,9 +40441,21 @@ var RenderModalBasic = ({
40416
40441
  const onValueChange = useCallback124((e) => {
40417
40442
  setOutName(e.target.value);
40418
40443
  }, [setOutName]);
40419
- const onVerboseLoggingChanged = useCallback124((e) => {
40420
- setVerboseLogging(e.target.checked ? "verbose" : "info");
40421
- }, [setVerboseLogging]);
40444
+ const logLevelOptions = useMemo125(() => {
40445
+ return ["trace", "verbose", "info", "warn", "error"].map((level) => {
40446
+ return {
40447
+ label: humanReadableLogLevel(level),
40448
+ onClick: () => setVerboseLogging(level),
40449
+ leftItem: logLevel === level ? /* @__PURE__ */ jsx251(Checkmark, {}) : null,
40450
+ id: level,
40451
+ keyHint: null,
40452
+ quickSwitcherLabel: null,
40453
+ subMenu: null,
40454
+ type: "item",
40455
+ value: level
40456
+ };
40457
+ });
40458
+ }, [logLevel, setVerboseLogging]);
40422
40459
  return /* @__PURE__ */ jsxs129("div", {
40423
40460
  style: container56,
40424
40461
  children: [
@@ -40526,7 +40563,7 @@ var RenderModalBasic = ({
40526
40563
  /* @__PURE__ */ jsxs129("div", {
40527
40564
  style: label5,
40528
40565
  children: [
40529
- "Verbose logging ",
40566
+ "Log Level ",
40530
40567
  /* @__PURE__ */ jsx251(Spacing, {
40531
40568
  x: 0.5
40532
40569
  }),
@@ -40537,10 +40574,10 @@ var RenderModalBasic = ({
40537
40574
  }),
40538
40575
  /* @__PURE__ */ jsx251("div", {
40539
40576
  style: rightRow,
40540
- children: /* @__PURE__ */ jsx251(Checkbox, {
40541
- checked: logLevel === "verbose",
40542
- onChange: onVerboseLoggingChanged,
40543
- name: "verbose-logging"
40577
+ children: /* @__PURE__ */ jsx251(Combobox, {
40578
+ values: logLevelOptions,
40579
+ selectedId: logLevel,
40580
+ title: "Log Level"
40544
40581
  })
40545
40582
  })
40546
40583
  ]
@@ -42262,7 +42299,7 @@ var RenderModalWithLoader = (props) => {
42262
42299
  // src/components/RenderModal/WebRenderModal.tsx
42263
42300
  import { getDefaultOutLocation as getDefaultOutLocation2 } from "@remotion/studio-shared";
42264
42301
  import { renderMediaOnWeb, renderStillOnWeb } from "@remotion/web-renderer";
42265
- import { useCallback as useCallback132, useContext as useContext83, useMemo as useMemo132, useState as useState81 } from "react";
42302
+ import { useCallback as useCallback131, useContext as useContext83, useMemo as useMemo132, useState as useState81 } from "react";
42266
42303
 
42267
42304
  // src/components/RenderModal/WebRenderModalAdvanced.tsx
42268
42305
  import { useCallback as useCallback129, useMemo as useMemo129 } from "react";
@@ -42404,7 +42441,7 @@ var WebRenderModalAdvanced = ({
42404
42441
  };
42405
42442
 
42406
42443
  // src/components/RenderModal/WebRenderModalBasic.tsx
42407
- import { useCallback as useCallback130, useMemo as useMemo130 } from "react";
42444
+ import { useMemo as useMemo130 } from "react";
42408
42445
  import { jsx as jsx259, jsxs as jsxs136, Fragment as Fragment44 } from "react/jsx-runtime";
42409
42446
  var tabContainer2 = {
42410
42447
  flex: 1
@@ -42453,6 +42490,21 @@ var WebRenderModalBasic = ({
42453
42490
  }
42454
42491
  ];
42455
42492
  }, [imageFormat, setStillFormat]);
42493
+ const logLevelOptions = useMemo130(() => {
42494
+ return ["trace", "verbose", "info", "warn", "error"].map((level) => {
42495
+ return {
42496
+ label: humanReadableLogLevel(level),
42497
+ onClick: () => setLogLevel(level),
42498
+ leftItem: logLevel === level ? /* @__PURE__ */ jsx259(Checkmark, {}) : null,
42499
+ id: level,
42500
+ keyHint: null,
42501
+ quickSwitcherLabel: null,
42502
+ subMenu: null,
42503
+ type: "item",
42504
+ value: level
42505
+ };
42506
+ });
42507
+ }, [logLevel, setLogLevel]);
42456
42508
  const containerOptions = useMemo130(() => {
42457
42509
  return [
42458
42510
  {
@@ -42538,9 +42590,6 @@ var WebRenderModalBasic = ({
42538
42590
  }
42539
42591
  ];
42540
42592
  }, [codec, setCodec]);
42541
- const onVerboseLoggingChanged = useCallback130((e) => {
42542
- setLogLevel(e.target.checked ? "verbose" : "info");
42543
- }, [setLogLevel]);
42544
42593
  return /* @__PURE__ */ jsxs136("div", {
42545
42594
  style: tabContainer2,
42546
42595
  children: [
@@ -42656,7 +42705,7 @@ var WebRenderModalBasic = ({
42656
42705
  /* @__PURE__ */ jsxs136("div", {
42657
42706
  style: label5,
42658
42707
  children: [
42659
- "Verbose logging ",
42708
+ "Log Level ",
42660
42709
  /* @__PURE__ */ jsx259(Spacing, {
42661
42710
  x: 0.5
42662
42711
  }),
@@ -42667,10 +42716,10 @@ var WebRenderModalBasic = ({
42667
42716
  }),
42668
42717
  /* @__PURE__ */ jsx259("div", {
42669
42718
  style: rightRow,
42670
- children: /* @__PURE__ */ jsx259(Checkbox, {
42671
- checked: logLevel === "verbose",
42672
- onChange: onVerboseLoggingChanged,
42673
- name: "verbose-logging"
42719
+ children: /* @__PURE__ */ jsx259(Combobox, {
42720
+ values: logLevelOptions,
42721
+ selectedId: logLevel,
42722
+ title: "Log Level"
42674
42723
  })
42675
42724
  })
42676
42725
  ]
@@ -42680,7 +42729,7 @@ var WebRenderModalBasic = ({
42680
42729
  };
42681
42730
 
42682
42731
  // src/components/RenderModal/WebRenderModalPicture.tsx
42683
- import { useCallback as useCallback131, useMemo as useMemo131 } from "react";
42732
+ import { useCallback as useCallback130, useMemo as useMemo131 } from "react";
42684
42733
  import { jsx as jsx260, jsxs as jsxs137 } from "react/jsx-runtime";
42685
42734
  var tabContainer3 = {
42686
42735
  flex: 1
@@ -42753,7 +42802,7 @@ var WebRenderModalPicture = ({
42753
42802
  }
42754
42803
  ];
42755
42804
  }, [videoBitrate, setVideoBitrate]);
42756
- const onTransparentChanged = useCallback131((e) => {
42805
+ const onTransparentChanged = useCallback130((e) => {
42757
42806
  setTransparent(e.target.checked);
42758
42807
  }, [setTransparent]);
42759
42808
  if (renderMode !== "video") {
@@ -42858,7 +42907,8 @@ var WebRenderModal = ({
42858
42907
  initialFrame,
42859
42908
  defaultProps,
42860
42909
  inFrameMark,
42861
- outFrameMark
42910
+ outFrameMark,
42911
+ initialLogLevel
42862
42912
  }) => {
42863
42913
  const context = useContext83(ResolvedCompositionContext);
42864
42914
  if (!context) {
@@ -42868,11 +42918,14 @@ var WebRenderModal = ({
42868
42918
  resolved: { result: resolvedComposition },
42869
42919
  unresolved: unresolvedComposition
42870
42920
  } = context;
42871
- const [renderMode, setRenderMode] = useState81("video");
42921
+ const [isVideo] = useState81(() => {
42922
+ return typeof resolvedComposition.durationInFrames === "undefined" ? true : resolvedComposition.durationInFrames > 1;
42923
+ });
42924
+ const [renderMode, setRenderMode] = useState81(isVideo ? "video" : "still");
42872
42925
  const [tab, setTab] = useState81("general");
42873
42926
  const [imageFormat, setImageFormat] = useState81("png");
42874
42927
  const [frame2, setFrame] = useState81(() => initialFrame);
42875
- const [logLevel, setLogLevel] = useState81("info");
42928
+ const [logLevel, setLogLevel] = useState81(() => initialLogLevel);
42876
42929
  const [inputProps, setInputProps] = useState81(() => defaultProps);
42877
42930
  const [delayRenderTimeout, setDelayRenderTimeout] = useState81(30000);
42878
42931
  const [mediaCacheSizeInBytes, setMediaCacheSizeInBytes] = useState81(null);
@@ -42907,28 +42960,28 @@ var WebRenderModal = ({
42907
42960
  const [initialOutName] = useState81(() => {
42908
42961
  return getDefaultOutLocation2({
42909
42962
  compositionName: resolvedComposition.id,
42910
- defaultExtension: container60,
42963
+ defaultExtension: renderMode === "still" ? imageFormat : isVideo ? container60 : imageFormat,
42911
42964
  type: "asset",
42912
42965
  compositionDefaultOutName: resolvedComposition.defaultOutName,
42913
42966
  clientSideRender: true
42914
42967
  });
42915
42968
  });
42916
42969
  const [outName, setOutName] = useState81(() => initialOutName);
42917
- const setStillFormat = useCallback132((format) => {
42970
+ const setStillFormat = useCallback131((format) => {
42918
42971
  setImageFormat(format);
42919
42972
  setOutName((prev) => {
42920
42973
  const newFileName = getStringBeforeSuffix(prev) + "." + format;
42921
42974
  return newFileName;
42922
42975
  });
42923
42976
  }, []);
42924
- const setContainerFormat = useCallback132((newContainer) => {
42977
+ const setContainerFormat = useCallback131((newContainer) => {
42925
42978
  setContainer(newContainer);
42926
42979
  setOutName((prev) => {
42927
42980
  const newFileName = getStringBeforeSuffix(prev) + "." + newContainer;
42928
42981
  return newFileName;
42929
42982
  });
42930
42983
  }, []);
42931
- const onRenderModeChange = useCallback132((newMode) => {
42984
+ const onRenderModeChange = useCallback131((newMode) => {
42932
42985
  setRenderMode(newMode);
42933
42986
  if (newMode === "video") {
42934
42987
  setOutName((prev) => {
@@ -42965,10 +43018,10 @@ var WebRenderModal = ({
42965
43018
  }
42966
43019
  return options;
42967
43020
  }, [renderMode, resolvedComposition.durationInFrames, onRenderModeChange]);
42968
- const onFrameSetDirectly = useCallback132((newFrame) => {
43021
+ const onFrameSetDirectly = useCallback131((newFrame) => {
42969
43022
  setFrame(newFrame);
42970
43023
  }, [setFrame]);
42971
- const onFrameChanged = useCallback132((e) => {
43024
+ const onFrameChanged = useCallback131((e) => {
42972
43025
  setFrame((q) => {
42973
43026
  const newFrame = parseFloat(e);
42974
43027
  if (Number.isNaN(newFrame)) {
@@ -42977,7 +43030,7 @@ var WebRenderModal = ({
42977
43030
  return newFrame;
42978
43031
  });
42979
43032
  }, [setFrame]);
42980
- const onOutNameChange = useCallback132((e) => {
43033
+ const onOutNameChange = useCallback131((e) => {
42981
43034
  setOutName(e.target.value);
42982
43035
  }, []);
42983
43036
  const outnameValidation = useMemo132(() => {
@@ -43019,8 +43072,8 @@ var WebRenderModal = ({
43019
43072
  return { valid: false, error: err };
43020
43073
  }
43021
43074
  }, [outName, imageFormat, renderMode, container60]);
43022
- const onRenderStill = useCallback132(async () => {
43023
- const blob = await renderStillOnWeb({
43075
+ const onRenderStill = useCallback131(async () => {
43076
+ const { blob } = await renderStillOnWeb({
43024
43077
  composition: {
43025
43078
  component: unresolvedComposition.component,
43026
43079
  width: resolvedComposition.width,
@@ -43062,7 +43115,7 @@ var WebRenderModal = ({
43062
43115
  unresolvedComposition.calculateMetadata,
43063
43116
  resolvedComposition.id
43064
43117
  ]);
43065
- const onRenderVideo = useCallback132(async () => {
43118
+ const onRenderVideo = useCallback131(async () => {
43066
43119
  setRenderProgress({ renderedFrames: 0, encodedFrames: 0 });
43067
43120
  const { getBlob } = await renderMediaOnWeb({
43068
43121
  composition: {
@@ -43122,7 +43175,7 @@ var WebRenderModal = ({
43122
43175
  resolvedComposition.id,
43123
43176
  unresolvedComposition.calculateMetadata
43124
43177
  ]);
43125
- const onRender = useCallback132(async () => {
43178
+ const onRender = useCallback131(async () => {
43126
43179
  if (renderMode === "still") {
43127
43180
  await onRenderStill();
43128
43181
  } else {
@@ -43292,10 +43345,10 @@ var WebRenderModalWithLoader = (props) => {
43292
43345
  };
43293
43346
 
43294
43347
  // src/components/UpdateModal/UpdateModal.tsx
43295
- import { useCallback as useCallback135, useMemo as useMemo134 } from "react";
43348
+ import { useCallback as useCallback134, useMemo as useMemo134 } from "react";
43296
43349
 
43297
43350
  // src/components/CopyButton.tsx
43298
- import { useCallback as useCallback133, useEffect as useEffect77, useState as useState82 } from "react";
43351
+ import { useCallback as useCallback132, useEffect as useEffect77, useState as useState82 } from "react";
43299
43352
  import { jsx as jsx262, jsxs as jsxs139 } from "react/jsx-runtime";
43300
43353
  var iconStyle8 = {
43301
43354
  width: 16,
@@ -43326,7 +43379,7 @@ var labelStyle5 = {
43326
43379
  };
43327
43380
  var CopyButton = ({ textToCopy, label: label12, labelWhenCopied }) => {
43328
43381
  const [copied, setCopied] = useState82(false);
43329
- const onClick = useCallback133(() => {
43382
+ const onClick = useCallback132(() => {
43330
43383
  copyText(textToCopy).then(() => {
43331
43384
  setCopied(Date.now());
43332
43385
  }).catch((err) => {
@@ -43358,7 +43411,7 @@ var CopyButton = ({ textToCopy, label: label12, labelWhenCopied }) => {
43358
43411
  };
43359
43412
 
43360
43413
  // src/components/UpdateModal/OpenIssueButton.tsx
43361
- import { useCallback as useCallback134, useMemo as useMemo133, useState as useState83 } from "react";
43414
+ import { useCallback as useCallback133, useMemo as useMemo133, useState as useState83 } from "react";
43362
43415
  import { jsx as jsx263 } from "react/jsx-runtime";
43363
43416
  var svgStyle3 = {
43364
43417
  width: "11px",
@@ -43375,7 +43428,7 @@ var buttonStyle8 = {
43375
43428
  var OpenIssueButton = ({ link: link3 }) => {
43376
43429
  const [hovered, setHovered] = useState83(false);
43377
43430
  const buttonTooltip = `Open GitHub issue in new Tab`;
43378
- const handleClick = useCallback134(() => {
43431
+ const handleClick = useCallback133(() => {
43379
43432
  window.open(link3, "_blank");
43380
43433
  }, [link3]);
43381
43434
  const svgFillColor = useMemo133(() => {
@@ -43389,10 +43442,10 @@ var OpenIssueButton = ({ link: link3 }) => {
43389
43442
  d: "M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h82.7L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z"
43390
43443
  })
43391
43444
  });
43392
- const onPointerEnter = useCallback134(() => {
43445
+ const onPointerEnter = useCallback133(() => {
43393
43446
  setHovered(true);
43394
43447
  }, []);
43395
- const onPointerLeave = useCallback134(() => {
43448
+ const onPointerLeave = useCallback133(() => {
43396
43449
  setHovered(false);
43397
43450
  }, []);
43398
43451
  return /* @__PURE__ */ jsx263("button", {
@@ -43479,7 +43532,7 @@ var UpdateModal = ({ info, knownBugs }) => {
43479
43532
  return knownBugs && knownBugs?.length > 0;
43480
43533
  }, [knownBugs]);
43481
43534
  const command = commands[info.packageManager];
43482
- const onClick = useCallback135(() => {
43535
+ const onClick = useCallback134(() => {
43483
43536
  copyText(command).catch((err) => {
43484
43537
  showNotification(`Could not copy: ${err.message}`, 2000);
43485
43538
  });
@@ -43595,7 +43648,8 @@ var Modals = ({ readOnlyStudio }) => {
43595
43648
  compositionId: modalContextType.compositionId,
43596
43649
  defaultProps: modalContextType.defaultProps,
43597
43650
  inFrameMark: modalContextType.inFrameMark,
43598
- outFrameMark: modalContextType.outFrameMark
43651
+ outFrameMark: modalContextType.outFrameMark,
43652
+ initialLogLevel: modalContextType.initialLogLevel
43599
43653
  }),
43600
43654
  modalContextType && canRender && modalContextType.type === "server-render" && /* @__PURE__ */ jsx266(RenderModalWithLoader, {
43601
43655
  initialFrame: modalContextType.initialFrame,
@@ -43698,7 +43752,7 @@ var Editor = ({ Root, readOnlyStudio }) => {
43698
43752
  };
43699
43753
  }, [readOnlyStudio]);
43700
43754
  const [canvasMounted, setCanvasMounted] = React176.useState(false);
43701
- const onMounted = useCallback136(() => {
43755
+ const onMounted = useCallback135(() => {
43702
43756
  setCanvasMounted(true);
43703
43757
  }, []);
43704
43758
  const value = useMemo135(() => {
@@ -43754,7 +43808,7 @@ var Editor = ({ Root, readOnlyStudio }) => {
43754
43808
  import { PlayerInternals as PlayerInternals21 } from "@remotion/player";
43755
43809
 
43756
43810
  // src/state/preview-size.tsx
43757
- import { useCallback as useCallback137, useContext as useContext85, useMemo as useMemo136, useState as useState84 } from "react";
43811
+ import { useCallback as useCallback136, useContext as useContext85, useMemo as useMemo136, useState as useState84 } from "react";
43758
43812
  import { Internals as Internals63 } from "remotion";
43759
43813
  import { jsx as jsx268 } from "react/jsx-runtime";
43760
43814
  var key5 = "remotion.previewSize";
@@ -43783,7 +43837,7 @@ var PreviewSizeProvider = ({ children }) => {
43783
43837
  };
43784
43838
  });
43785
43839
  const { editorZoomGestures } = useContext85(EditorZoomGesturesContext);
43786
- const setSize = useCallback137((newValue) => {
43840
+ const setSize = useCallback136((newValue) => {
43787
43841
  setSizeState((prevState) => {
43788
43842
  const newVal = newValue(prevState);
43789
43843
  persistPreviewSizeOption(newVal);
@@ -43811,11 +43865,11 @@ var PreviewSizeProvider = ({ children }) => {
43811
43865
  };
43812
43866
 
43813
43867
  // src/components/CheckerboardProvider.tsx
43814
- import { useCallback as useCallback138, useMemo as useMemo137, useState as useState85 } from "react";
43868
+ import { useCallback as useCallback137, useMemo as useMemo137, useState as useState85 } from "react";
43815
43869
  import { jsx as jsx269 } from "react/jsx-runtime";
43816
43870
  var CheckerboardProvider = ({ children }) => {
43817
43871
  const [checkerboard, setCheckerboardState] = useState85(() => loadCheckerboardOption());
43818
- const setCheckerboard = useCallback138((newValue) => {
43872
+ const setCheckerboard = useCallback137((newValue) => {
43819
43873
  setCheckerboardState((prevState) => {
43820
43874
  const newVal = newValue(prevState);
43821
43875
  persistCheckerboardOption(newVal);
@@ -43917,7 +43971,7 @@ var SetTimelineInOutProvider = ({ children }) => {
43917
43971
  };
43918
43972
 
43919
43973
  // src/components/ShowGuidesProvider.tsx
43920
- import { useCallback as useCallback139, useMemo as useMemo141, useRef as useRef42, useState as useState89 } from "react";
43974
+ import { useCallback as useCallback138, useMemo as useMemo141, useRef as useRef42, useState as useState89 } from "react";
43921
43975
  import { jsx as jsx273 } from "react/jsx-runtime";
43922
43976
  var ShowGuidesProvider = ({ children }) => {
43923
43977
  const [guidesList, setGuidesList] = useState89(() => loadGuidesList());
@@ -43926,7 +43980,7 @@ var ShowGuidesProvider = ({ children }) => {
43926
43980
  const [editorShowGuides, setEditorShowGuidesState] = useState89(() => loadEditorShowGuidesOption());
43927
43981
  const shouldCreateGuideRef = useRef42(false);
43928
43982
  const shouldDeleteGuideRef = useRef42(false);
43929
- const setEditorShowGuides = useCallback139((newValue) => {
43983
+ const setEditorShowGuides = useCallback138((newValue) => {
43930
43984
  setEditorShowGuidesState((prevState) => {
43931
43985
  const newVal = newValue(prevState);
43932
43986
  persistEditorShowGuidesOption(newVal);
@@ -43960,11 +44014,11 @@ var ShowGuidesProvider = ({ children }) => {
43960
44014
  };
43961
44015
 
43962
44016
  // src/components/ShowRulersProvider.tsx
43963
- import { useCallback as useCallback140, useMemo as useMemo142, useState as useState90 } from "react";
44017
+ import { useCallback as useCallback139, useMemo as useMemo142, useState as useState90 } from "react";
43964
44018
  import { jsx as jsx274 } from "react/jsx-runtime";
43965
44019
  var ShowRulersProvider = ({ children }) => {
43966
44020
  const [editorShowRulers, setEditorShowRulersState] = useState90(() => loadEditorShowRulersOption());
43967
- const setEditorShowRulers = useCallback140((newValue) => {
44021
+ const setEditorShowRulers = useCallback139((newValue) => {
43968
44022
  setEditorShowRulersState((prevState) => {
43969
44023
  const newVal = newValue(prevState);
43970
44024
  persistEditorShowRulersOption(newVal);
@@ -43984,11 +44038,11 @@ var ShowRulersProvider = ({ children }) => {
43984
44038
  };
43985
44039
 
43986
44040
  // src/components/ZoomGesturesProvider.tsx
43987
- import { useCallback as useCallback141, useMemo as useMemo143, useState as useState91 } from "react";
44041
+ import { useCallback as useCallback140, useMemo as useMemo143, useState as useState91 } from "react";
43988
44042
  import { jsx as jsx275 } from "react/jsx-runtime";
43989
44043
  var ZoomGesturesProvider = ({ children }) => {
43990
44044
  const [editorZoomGestures, setEditorZoomGesturesState] = useState91(() => loadEditorZoomGesturesOption());
43991
- const setEditorZoomGestures = useCallback141((newValue) => {
44045
+ const setEditorZoomGestures = useCallback140((newValue) => {
43992
44046
  setEditorZoomGesturesState((prevState) => {
43993
44047
  const newVal = newValue(prevState);
43994
44048
  persistEditorZoomGesturesOption(newVal);
@@ -206,7 +206,7 @@ var renderContent = (Root) => {
206
206
  renderToDOM(/* @__PURE__ */ jsx("div", {
207
207
  children: /* @__PURE__ */ jsx(DelayedSpinner, {})
208
208
  }));
209
- import("./chunk-jzq8t233.js").then(({ StudioInternals }) => {
209
+ import("./chunk-khjn7st6.js").then(({ StudioInternals }) => {
210
210
  window.remotion_isStudio = true;
211
211
  window.remotion_isReadOnlyStudio = true;
212
212
  window.remotion_inputProps = "{}";
@@ -14,6 +14,7 @@ export type WebRenderModalState = {
14
14
  defaultProps: Record<string, unknown>;
15
15
  inFrameMark: number | null;
16
16
  outFrameMark: number | null;
17
+ initialLogLevel: LogLevel;
17
18
  };
18
19
  export type RenderModalState = {
19
20
  type: 'server-render';
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio"
4
4
  },
5
5
  "name": "@remotion/studio",
6
- "version": "4.0.395",
6
+ "version": "4.0.396",
7
7
  "description": "APIs for interacting with the Remotion Studio",
8
8
  "main": "dist",
9
9
  "sideEffects": false,
@@ -25,13 +25,13 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "semver": "7.5.3",
28
- "remotion": "4.0.395",
29
- "@remotion/player": "4.0.395",
30
- "@remotion/media-utils": "4.0.395",
31
- "@remotion/renderer": "4.0.395",
32
- "@remotion/web-renderer": "4.0.395",
33
- "@remotion/studio-shared": "4.0.395",
34
- "@remotion/zod-types": "4.0.395",
28
+ "remotion": "4.0.396",
29
+ "@remotion/player": "4.0.396",
30
+ "@remotion/media-utils": "4.0.396",
31
+ "@remotion/renderer": "4.0.396",
32
+ "@remotion/web-renderer": "4.0.396",
33
+ "@remotion/studio-shared": "4.0.396",
34
+ "@remotion/zod-types": "4.0.396",
35
35
  "mediabunny": "1.27.2",
36
36
  "memfs": "3.4.3",
37
37
  "source-map": "0.7.3",
@@ -42,7 +42,7 @@
42
42
  "react": "19.2.3",
43
43
  "react-dom": "19.2.3",
44
44
  "@types/semver": "^7.3.4",
45
- "@remotion/eslint-config-internal": "4.0.395",
45
+ "@remotion/eslint-config-internal": "4.0.396",
46
46
  "eslint": "9.19.0"
47
47
  },
48
48
  "publishConfig": {