@remotion/studio 4.0.215 → 4.0.217

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
1
 
2
- > @remotion/studio@4.0.214 make /Users/jonathanburger/remotion/packages/studio
2
+ > @remotion/studio@4.0.216 make /Users/jonathanburger/remotion/packages/studio
3
3
  > bun --env-file=../.env.bundle bundle.ts
4
4
 
@@ -75,6 +75,8 @@ const InstallPackageModal = ({ packageManager }) => {
75
75
  '@remotion/three': false,
76
76
  '@remotion/transitions': false,
77
77
  '@remotion/zod-types': false,
78
+ '@remotion/captions': false,
79
+ '@remotion/openai-whisper': false,
78
80
  });
79
81
  const { previewServerState: ctx } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
80
82
  const selectedPackages = Object.keys(map).filter((pkg) => map[pkg]);
@@ -20,7 +20,7 @@ const Modals = ({ readOnlyStudio }) => {
20
20
  const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
21
21
  const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState.type ===
22
22
  'connected';
23
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'duplicate-comp' && ((0, jsx_runtime_1.jsx)(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && ((0, jsx_runtime_1.jsx)(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && ((0, jsx_runtime_1.jsx)(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModalWithLoader, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender })), modalContextType &&
23
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'duplicate-comp' && ((0, jsx_runtime_1.jsx)(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && ((0, jsx_runtime_1.jsx)(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && ((0, jsx_runtime_1.jsx)(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModalWithLoader, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata })), modalContextType &&
24
24
  canRender &&
25
25
  modalContextType.type === 'render-progress' && ((0, jsx_runtime_1.jsx)(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && ((0, jsx_runtime_1.jsx)(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'install-packages' && ((0, jsx_runtime_1.jsx)(InstallPackage_1.InstallPackageModal, { packageManager: modalContextType.packageManager })), modalContextType && modalContextType.type === 'quick-switcher' && ((0, jsx_runtime_1.jsx)(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode }))] }));
26
26
  };
@@ -91,6 +91,7 @@ const RenderButton = () => {
91
91
  initialRepro: defaults.repro,
92
92
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
93
93
  renderTypeOfLastRender: null,
94
+ defaulMetadata: defaults.metadata,
94
95
  });
95
96
  }, [video, setSelectedModal, frame, props, inFrame, outFrame]);
96
97
  if (!video) {
@@ -42,6 +42,7 @@ type RenderModalProps = {
42
42
  readonly defaultConfigurationAudioCodec: AudioCodec | null;
43
43
  readonly initialForSeamlessAacConcatenation: boolean;
44
44
  readonly renderTypeOfLastRender: RenderType | null;
45
+ readonly defaultMetadata: Record<string, string> | null;
45
46
  };
46
47
  export declare const RenderModalWithLoader: React.FC<RenderModalProps>;
47
48
  export {};
@@ -116,7 +116,7 @@ const outer = {
116
116
  display: 'flex',
117
117
  flexDirection: 'column',
118
118
  };
119
- const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageFormat, initialJpegQuality, initialScale, initialLogLevel, initialConcurrency, maxConcurrency, minConcurrency, initialMuted, initialEnforceAudioTrack, initialProResProfile, initialx264Preset, initialPixelFormat, initialVideoBitrate, initialAudioBitrate, initialEveryNthFrame, initialNumberOfGifLoops, initialDelayRenderTimeout, initialOffthreadVideoCacheSizeInBytes, initialEnvVariables, initialDisableWebSecurity, initialGl, initialHeadless, initialIgnoreCertificateErrors, initialEncodingBufferSize, initialEncodingMaxRate, initialUserAgent, defaultProps, inFrameMark, outFrameMark, initialColorSpace, initialMultiProcessOnLinux, defaultConfigurationAudioCodec, defaultConfigurationVideoCodec, initialBeep, initialRepro, initialForSeamlessAacConcatenation, renderTypeOfLastRender, }) => {
119
+ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageFormat, initialJpegQuality, initialScale, initialLogLevel, initialConcurrency, maxConcurrency, minConcurrency, initialMuted, initialEnforceAudioTrack, initialProResProfile, initialx264Preset, initialPixelFormat, initialVideoBitrate, initialAudioBitrate, initialEveryNthFrame, initialNumberOfGifLoops, initialDelayRenderTimeout, initialOffthreadVideoCacheSizeInBytes, initialEnvVariables, initialDisableWebSecurity, initialGl, initialHeadless, initialIgnoreCertificateErrors, initialEncodingBufferSize, initialEncodingMaxRate, initialUserAgent, defaultProps, inFrameMark, outFrameMark, initialColorSpace, initialMultiProcessOnLinux, defaultConfigurationAudioCodec, defaultConfigurationVideoCodec, initialBeep, initialRepro, initialForSeamlessAacConcatenation, renderTypeOfLastRender, defaultMetadata, }) => {
120
120
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
121
121
  const context = (0, react_1.useContext)(ResolveCompositionBeforeModal_1.ResolvedCompositionContext);
122
122
  if (!context) {
@@ -294,6 +294,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
294
294
  return null;
295
295
  }, [codec, x264PresetSetting, renderMode]);
296
296
  const [inputProps, setInputProps] = (0, react_1.useState)(() => defaultProps);
297
+ const [metadata] = (0, react_1.useState)(() => defaultMetadata);
297
298
  const endFrame = (0, react_1.useMemo)(() => {
298
299
  if (endFrameOrNull === null) {
299
300
  return resolvedComposition.durationInFrames - 1;
@@ -399,6 +400,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
399
400
  offthreadVideoCacheSizeInBytes,
400
401
  multiProcessOnLinux,
401
402
  beepOnFinish,
403
+ metadata,
402
404
  })
403
405
  .then(() => {
404
406
  dispatchIfMounted({ type: 'succeed' });
@@ -425,6 +427,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
425
427
  multiProcessOnLinux,
426
428
  beepOnFinish,
427
429
  setSelectedModal,
430
+ metadata,
428
431
  ]);
429
432
  const [everyNthFrameSetting, setEveryNthFrameSetting] = (0, react_1.useState)(() => initialEveryNthFrame);
430
433
  const everyNthFrame = (0, react_1.useMemo)(() => {
@@ -485,6 +488,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
485
488
  repro,
486
489
  forSeamlessAacConcatenation,
487
490
  separateAudioTo,
491
+ metadata,
488
492
  })
489
493
  .then(() => {
490
494
  dispatchIfMounted({ type: 'succeed' });
@@ -534,6 +538,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
534
538
  forSeamlessAacConcatenation,
535
539
  separateAudioTo,
536
540
  setSelectedModal,
541
+ metadata,
537
542
  ]);
538
543
  const onClickSequence = (0, react_1.useCallback)(() => {
539
544
  var _a;
@@ -560,6 +565,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
560
565
  multiProcessOnLinux,
561
566
  beepOnFinish,
562
567
  repro,
568
+ metadata,
563
569
  })
564
570
  .then(() => {
565
571
  dispatchIfMounted({ type: 'succeed' });
@@ -590,6 +596,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
590
596
  beepOnFinish,
591
597
  repro,
592
598
  setSelectedModal,
599
+ metadata,
593
600
  ]);
594
601
  (0, react_1.useEffect)(() => {
595
602
  return () => {
@@ -1,6 +1,6 @@
1
1
  import type { AudioCodec, Codec, ColorSpace, LogLevel, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { CanUpdateDefaultPropsResponse, EnumPath, RecastCodemod, RenderJob, RequiredChromiumOptions } from '@remotion/studio-shared';
3
- export declare const addStillRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, }: {
3
+ export declare const addStillRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, metadata, }: {
4
4
  compositionId: string;
5
5
  outName: string;
6
6
  imageFormat: StillImageFormat;
@@ -15,8 +15,9 @@ export declare const addStillRenderJob: ({ compositionId, outName, imageFormat,
15
15
  offthreadVideoCacheSizeInBytes: number | null;
16
16
  multiProcessOnLinux: boolean;
17
17
  beepOnFinish: boolean;
18
+ metadata: Record<string, string> | null;
18
19
  }) => Promise<undefined>;
19
- export declare const addSequenceRenderJob: ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, }: {
20
+ export declare const addSequenceRenderJob: ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, metadata, }: {
20
21
  compositionId: string;
21
22
  outName: string;
22
23
  imageFormat: VideoImageFormat;
@@ -35,8 +36,9 @@ export declare const addSequenceRenderJob: ({ compositionId, outName, imageForma
35
36
  multiProcessOnLinux: boolean;
36
37
  beepOnFinish: boolean;
37
38
  repro: boolean;
39
+ metadata: Record<string, string> | null;
38
40
  }) => Promise<undefined>;
39
- export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, }: {
41
+ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, }: {
40
42
  compositionId: string;
41
43
  outName: string;
42
44
  imageFormat: VideoImageFormat;
@@ -72,6 +74,7 @@ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat,
72
74
  repro: boolean;
73
75
  forSeamlessAacConcatenation: boolean;
74
76
  separateAudioTo: string | null;
77
+ metadata: Record<string, string> | null;
75
78
  }) => Promise<undefined>;
76
79
  export declare const unsubscribeFromFileExistenceWatcher: ({ file, clientId, }: {
77
80
  file: string;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.canUpdateDefaultProps = exports.callUpdateDefaultPropsApi = exports.getProjectInfo = exports.updateAvailable = exports.cancelRenderJob = exports.removeRenderJob = exports.applyCodemod = exports.copyToClipboard = exports.openInFileExplorer = exports.subscribeToFileExistenceWatcher = exports.unsubscribeFromFileExistenceWatcher = exports.addVideoRenderJob = exports.addSequenceRenderJob = exports.addStillRenderJob = void 0;
4
4
  const no_react_1 = require("remotion/no-react");
5
5
  const call_api_1 = require("../call-api");
6
- const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, }) => {
6
+ const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, metadata, }) => {
7
7
  return (0, call_api_1.callApi)('/api/render', {
8
8
  compositionId,
9
9
  type: 'still',
@@ -24,10 +24,11 @@ const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, f
24
24
  offthreadVideoCacheSizeInBytes,
25
25
  multiProcessOnLinux,
26
26
  beepOnFinish,
27
+ metadata,
27
28
  });
28
29
  };
29
30
  exports.addStillRenderJob = addStillRenderJob;
30
- const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, }) => {
31
+ const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, metadata, }) => {
31
32
  return (0, call_api_1.callApi)('/api/render', {
32
33
  compositionId,
33
34
  type: 'sequence',
@@ -52,10 +53,11 @@ const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame,
52
53
  multiProcessOnLinux,
53
54
  beepOnFinish,
54
55
  repro,
56
+ metadata,
55
57
  });
56
58
  };
57
59
  exports.addSequenceRenderJob = addSequenceRenderJob;
58
- const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, }) => {
60
+ const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, }) => {
59
61
  return (0, call_api_1.callApi)('/api/render', {
60
62
  compositionId,
61
63
  type: 'video',
@@ -97,6 +99,7 @@ const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, s
97
99
  repro,
98
100
  forSeamlessAacConcatenation,
99
101
  separateAudioTo,
102
+ metadata,
100
103
  });
101
104
  };
102
105
  exports.addVideoRenderJob = addVideoRenderJob;
@@ -73,6 +73,7 @@ const SidebarRenderButton = ({ composition, visible }) => {
73
73
  initialRepro: defaults.repro,
74
74
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
75
75
  renderTypeOfLastRender: null,
76
+ defaulMetadata: defaults.metadata,
76
77
  });
77
78
  if (isMobileLayout) {
78
79
  setSidebarCollapsedState({ left: 'collapsed', right: 'collapsed' });
@@ -2567,7 +2567,8 @@ var SidebarRenderButton = ({ composition, visible }) => {
2567
2567
  initialBeep: defaults.beepOnFinish,
2568
2568
  initialRepro: defaults.repro,
2569
2569
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
2570
- renderTypeOfLastRender: null
2570
+ renderTypeOfLastRender: null,
2571
+ defaulMetadata: defaults.metadata
2571
2572
  });
2572
2573
  if (isMobileLayout) {
2573
2574
  setSidebarCollapsedState({ left: "collapsed", right: "collapsed" });
@@ -3204,7 +3205,8 @@ var addStillRenderJob = ({
3204
3205
  inputProps,
3205
3206
  offthreadVideoCacheSizeInBytes,
3206
3207
  multiProcessOnLinux,
3207
- beepOnFinish
3208
+ beepOnFinish,
3209
+ metadata
3208
3210
  }) => {
3209
3211
  return callApi("/api/render", {
3210
3212
  compositionId,
@@ -3225,7 +3227,8 @@ var addStillRenderJob = ({
3225
3227
  }).serializedString,
3226
3228
  offthreadVideoCacheSizeInBytes,
3227
3229
  multiProcessOnLinux,
3228
- beepOnFinish
3230
+ beepOnFinish,
3231
+ metadata
3229
3232
  });
3230
3233
  };
3231
3234
  var addSequenceRenderJob = ({
@@ -3246,7 +3249,8 @@ var addSequenceRenderJob = ({
3246
3249
  disallowParallelEncoding,
3247
3250
  multiProcessOnLinux,
3248
3251
  beepOnFinish,
3249
- repro
3252
+ repro,
3253
+ metadata
3250
3254
  }) => {
3251
3255
  return callApi("/api/render", {
3252
3256
  compositionId,
@@ -3271,7 +3275,8 @@ var addSequenceRenderJob = ({
3271
3275
  disallowParallelEncoding,
3272
3276
  multiProcessOnLinux,
3273
3277
  beepOnFinish,
3274
- repro
3278
+ repro,
3279
+ metadata
3275
3280
  });
3276
3281
  };
3277
3282
  var addVideoRenderJob = ({
@@ -3309,7 +3314,8 @@ var addVideoRenderJob = ({
3309
3314
  beepOnFinish,
3310
3315
  repro,
3311
3316
  forSeamlessAacConcatenation,
3312
- separateAudioTo
3317
+ separateAudioTo,
3318
+ metadata
3313
3319
  }) => {
3314
3320
  return callApi("/api/render", {
3315
3321
  compositionId,
@@ -3351,7 +3357,8 @@ var addVideoRenderJob = ({
3351
3357
  beepOnFinish,
3352
3358
  repro,
3353
3359
  forSeamlessAacConcatenation,
3354
- separateAudioTo
3360
+ separateAudioTo,
3361
+ metadata
3355
3362
  });
3356
3363
  };
3357
3364
  var unsubscribeFromFileExistenceWatcher = ({
@@ -14893,6 +14900,7 @@ var makeRetryPayload = (job) => {
14893
14900
  initialBeep: job.beepOnFinish,
14894
14901
  initialRepro: job.repro,
14895
14902
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
14903
+ defaulMetadata: job.metadata,
14896
14904
  renderTypeOfLastRender: "still"
14897
14905
  };
14898
14906
  }
@@ -14938,6 +14946,7 @@ var makeRetryPayload = (job) => {
14938
14946
  initialBeep: job.beepOnFinish,
14939
14947
  initialRepro: job.repro,
14940
14948
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
14949
+ defaulMetadata: job.metadata,
14941
14950
  renderTypeOfLastRender: "sequence"
14942
14951
  };
14943
14952
  }
@@ -14983,6 +14992,7 @@ var makeRetryPayload = (job) => {
14983
14992
  initialBeep: job.beepOnFinish,
14984
14993
  initialRepro: job.repro,
14985
14994
  initialForSeamlessAacConcatenation: job.forSeamlessAacConcatenation,
14995
+ defaulMetadata: job.metadata,
14986
14996
  renderTypeOfLastRender: "video"
14987
14997
  };
14988
14998
  }
@@ -16341,7 +16351,8 @@ var RenderButton = () => {
16341
16351
  initialBeep: defaults.beepOnFinish,
16342
16352
  initialRepro: defaults.repro,
16343
16353
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
16344
- renderTypeOfLastRender: null
16354
+ renderTypeOfLastRender: null,
16355
+ defaulMetadata: defaults.metadata
16345
16356
  });
16346
16357
  }, [video, setSelectedModal, frame2, props, inFrame, outFrame]);
16347
16358
  if (!video) {
@@ -19771,7 +19782,9 @@ var InstallPackageModal = ({ packageManager }) => {
19771
19782
  "@remotion/tailwind": false,
19772
19783
  "@remotion/three": false,
19773
19784
  "@remotion/transitions": false,
19774
- "@remotion/zod-types": false
19785
+ "@remotion/zod-types": false,
19786
+ "@remotion/captions": false,
19787
+ "@remotion/openai-whisper": false
19775
19788
  });
19776
19789
  const { previewServerState: ctx } = useContext67(StudioServerConnectionCtx);
19777
19790
  const selectedPackages = Object.keys(map).filter((pkg) => map[pkg]);
@@ -24914,7 +24927,8 @@ var RenderModal = ({
24914
24927
  initialBeep,
24915
24928
  initialRepro,
24916
24929
  initialForSeamlessAacConcatenation,
24917
- renderTypeOfLastRender
24930
+ renderTypeOfLastRender,
24931
+ defaultMetadata
24918
24932
  }) => {
24919
24933
  const { setSelectedModal } = useContext75(ModalsContext);
24920
24934
  const context = useContext75(ResolvedCompositionContext);
@@ -25097,6 +25111,7 @@ var RenderModal = ({
25097
25111
  return null;
25098
25112
  }, [codec, x264PresetSetting, renderMode]);
25099
25113
  const [inputProps, setInputProps] = useState70(() => defaultProps);
25114
+ const [metadata] = useState70(() => defaultMetadata);
25100
25115
  const endFrame = useMemo116(() => {
25101
25116
  if (endFrameOrNull === null) {
25102
25117
  return resolvedComposition.durationInFrames - 1;
@@ -25195,7 +25210,8 @@ var RenderModal = ({
25195
25210
  inputProps,
25196
25211
  offthreadVideoCacheSizeInBytes,
25197
25212
  multiProcessOnLinux,
25198
- beepOnFinish
25213
+ beepOnFinish,
25214
+ metadata
25199
25215
  }).then(() => {
25200
25216
  dispatchIfMounted({ type: "succeed" });
25201
25217
  setSelectedModal(null);
@@ -25219,7 +25235,8 @@ var RenderModal = ({
25219
25235
  offthreadVideoCacheSizeInBytes,
25220
25236
  multiProcessOnLinux,
25221
25237
  beepOnFinish,
25222
- setSelectedModal
25238
+ setSelectedModal,
25239
+ metadata
25223
25240
  ]);
25224
25241
  const [everyNthFrameSetting, setEveryNthFrameSetting] = useState70(() => initialEveryNthFrame);
25225
25242
  const everyNthFrame = useMemo116(() => {
@@ -25278,7 +25295,8 @@ var RenderModal = ({
25278
25295
  beepOnFinish,
25279
25296
  repro,
25280
25297
  forSeamlessAacConcatenation,
25281
- separateAudioTo
25298
+ separateAudioTo,
25299
+ metadata
25282
25300
  }).then(() => {
25283
25301
  dispatchIfMounted({ type: "succeed" });
25284
25302
  setSelectedModal(null);
@@ -25325,7 +25343,8 @@ var RenderModal = ({
25325
25343
  repro,
25326
25344
  forSeamlessAacConcatenation,
25327
25345
  separateAudioTo,
25328
- setSelectedModal
25346
+ setSelectedModal,
25347
+ metadata
25329
25348
  ]);
25330
25349
  const onClickSequence = useCallback116(() => {
25331
25350
  setSidebarCollapsedState({ left: null, right: "expanded" });
@@ -25350,7 +25369,8 @@ var RenderModal = ({
25350
25369
  disallowParallelEncoding,
25351
25370
  multiProcessOnLinux,
25352
25371
  beepOnFinish,
25353
- repro
25372
+ repro,
25373
+ metadata
25354
25374
  }).then(() => {
25355
25375
  dispatchIfMounted({ type: "succeed" });
25356
25376
  setSelectedModal(null);
@@ -25378,7 +25398,8 @@ var RenderModal = ({
25378
25398
  multiProcessOnLinux,
25379
25399
  beepOnFinish,
25380
25400
  repro,
25381
- setSelectedModal
25401
+ setSelectedModal,
25402
+ metadata
25382
25403
  ]);
25383
25404
  useEffect70(() => {
25384
25405
  return () => {
@@ -26500,7 +26521,8 @@ var Modals = ({ readOnlyStudio }) => {
26500
26521
  outFrameMark: modalContextType.outFrameMark,
26501
26522
  defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec,
26502
26523
  defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec,
26503
- renderTypeOfLastRender: modalContextType.renderTypeOfLastRender
26524
+ renderTypeOfLastRender: modalContextType.renderTypeOfLastRender,
26525
+ defaultMetadata: modalContextType.defaulMetadata
26504
26526
  }),
26505
26527
  modalContextType && canRender && modalContextType.type === "render-progress" && /* @__PURE__ */ jsx246(RenderStatusModal, {
26506
26528
  jobId: modalContextType.jobId
@@ -50,6 +50,7 @@ const makeRetryPayload = (job) => {
50
50
  initialBeep: job.beepOnFinish,
51
51
  initialRepro: job.repro,
52
52
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
53
+ defaulMetadata: job.metadata,
53
54
  renderTypeOfLastRender: 'still',
54
55
  };
55
56
  }
@@ -95,6 +96,7 @@ const makeRetryPayload = (job) => {
95
96
  initialBeep: job.beepOnFinish,
96
97
  initialRepro: job.repro,
97
98
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
99
+ defaulMetadata: job.metadata,
98
100
  renderTypeOfLastRender: 'sequence',
99
101
  };
100
102
  }
@@ -140,6 +142,7 @@ const makeRetryPayload = (job) => {
140
142
  initialBeep: job.beepOnFinish,
141
143
  initialRepro: job.repro,
142
144
  initialForSeamlessAacConcatenation: job.forSeamlessAacConcatenation,
145
+ defaulMetadata: job.metadata,
143
146
  renderTypeOfLastRender: 'video',
144
147
  };
145
148
  }
@@ -47,6 +47,7 @@ export type RenderModalState = {
47
47
  defaultConfigurationVideoCodec: Codec;
48
48
  defaultConfigurationAudioCodec: AudioCodec | null;
49
49
  renderTypeOfLastRender: RenderType | null;
50
+ defaulMetadata: Record<string, string> | null;
50
51
  };
51
52
  export type ModalState = {
52
53
  type: 'duplicate-comp';
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.215",
6
+ "version": "4.0.217",
7
7
  "description": "APIs for interacting with the Remotion Studio",
8
8
  "main": "dist",
9
9
  "sideEffects": false,
@@ -18,18 +18,18 @@
18
18
  "memfs": "3.4.3",
19
19
  "source-map": "0.7.3",
20
20
  "open": "^8.4.2",
21
- "remotion": "4.0.215",
22
- "@remotion/player": "4.0.215",
23
- "@remotion/studio-shared": "4.0.215",
24
- "@remotion/media-utils": "4.0.215",
25
- "@remotion/renderer": "4.0.215"
21
+ "remotion": "4.0.217",
22
+ "@remotion/player": "4.0.217",
23
+ "@remotion/media-utils": "4.0.217",
24
+ "@remotion/renderer": "4.0.217",
25
+ "@remotion/studio-shared": "4.0.217"
26
26
  },
27
27
  "devDependencies": {
28
28
  "react": "18.3.1",
29
29
  "react-dom": "18.3.1",
30
30
  "@types/semver": "^7.3.4",
31
31
  "zod": "3.22.3",
32
- "@remotion/zod-types": "4.0.215"
32
+ "@remotion/zod-types": "4.0.217"
33
33
  },
34
34
  "publishConfig": {
35
35
  "access": "public"