@remotion/studio-server 4.0.502 → 4.0.504

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 (60) hide show
  1. package/dist/detect-outdated-remotion-skills.d.ts +25 -0
  2. package/dist/detect-outdated-remotion-skills.js +73 -0
  3. package/dist/helpers/custom-editor.d.ts +37 -0
  4. package/dist/helpers/custom-editor.js +167 -0
  5. package/dist/helpers/editor-registry.d.ts +18 -0
  6. package/dist/helpers/editor-registry.js +500 -0
  7. package/dist/helpers/open-in-editor.d.ts +4 -4
  8. package/dist/helpers/open-in-editor.js +23 -87
  9. package/dist/helpers/resolve-editor.d.ts +27 -0
  10. package/dist/helpers/resolve-editor.js +90 -0
  11. package/dist/helpers/resolve-file-inside-project.d.ts +2 -0
  12. package/dist/helpers/resolve-file-inside-project.js +5 -2
  13. package/dist/index.d.ts +17 -1
  14. package/dist/index.js +9 -1
  15. package/dist/preview-server/api-routes.js +6 -1
  16. package/dist/preview-server/api-types.d.ts +2 -1
  17. package/dist/preview-server/element-install-state.d.ts +9 -2
  18. package/dist/preview-server/element-install-state.js +15 -5
  19. package/dist/preview-server/handler.d.ts +3 -1
  20. package/dist/preview-server/handler.js +2 -1
  21. package/dist/preview-server/routes/can-update-sequence-props.js +2 -1
  22. package/dist/preview-server/routes/default-editor.d.ts +8 -0
  23. package/dist/preview-server/routes/default-editor.js +131 -0
  24. package/dist/preview-server/routes/delete-effect-keyframe.d.ts +3 -0
  25. package/dist/preview-server/routes/delete-effect-keyframe.js +89 -0
  26. package/dist/preview-server/routes/delete-sequence-keyframe.d.ts +3 -0
  27. package/dist/preview-server/routes/delete-sequence-keyframe.js +82 -0
  28. package/dist/preview-server/routes/element-install-plan.d.ts +33 -0
  29. package/dist/preview-server/routes/element-install-plan.js +122 -0
  30. package/dist/preview-server/routes/insert-element.d.ts +1 -1
  31. package/dist/preview-server/routes/insert-element.js +70 -107
  32. package/dist/preview-server/routes/install-dependency.d.ts +2 -1
  33. package/dist/preview-server/routes/install-dependency.js +33 -44
  34. package/dist/preview-server/routes/open-in-editor.d.ts +5 -1
  35. package/dist/preview-server/routes/open-in-editor.js +42 -12
  36. package/dist/preview-server/routes/prepare-element-install.d.ts +3 -0
  37. package/dist/preview-server/routes/prepare-element-install.js +25 -0
  38. package/dist/preview-server/routes/safe-element-install-path.d.ts +9 -0
  39. package/dist/preview-server/routes/safe-element-install-path.js +58 -0
  40. package/dist/preview-server/routes/save-props-mutex.d.ts +1 -0
  41. package/dist/preview-server/routes/save-props-mutex.js +11 -0
  42. package/dist/preview-server/routes/update-public-license.d.ts +4 -0
  43. package/dist/preview-server/routes/update-public-license.js +9 -5
  44. package/dist/preview-server/start-server.d.ts +2 -0
  45. package/dist/preview-server/start-server.js +1 -0
  46. package/dist/preview-server/studio-protocol/handle-discovery.js +57 -26
  47. package/dist/preview-server/studio-protocol/handle-install.js +13 -3
  48. package/dist/preview-server/studio-protocol/handle-license-key.d.ts +6 -0
  49. package/dist/preview-server/studio-protocol/handle-license-key.js +129 -0
  50. package/dist/preview-server/studio-protocol/origin-policy.d.ts +6 -3
  51. package/dist/preview-server/studio-protocol/origin-policy.js +43 -17
  52. package/dist/preview-server/update-available.d.ts +6 -0
  53. package/dist/preview-server/update-available.js +30 -4
  54. package/dist/remotion-skill-names.d.ts +2 -0
  55. package/dist/remotion-skill-names.js +16 -0
  56. package/dist/routes.d.ts +3 -1
  57. package/dist/routes.js +16 -5
  58. package/dist/start-studio.d.ts +3 -1
  59. package/dist/start-studio.js +2 -1
  60. package/package.json +8 -8
@@ -1,39 +1,65 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleStudioProtocolOptions = exports.setStudioProtocolCorsHeaders = exports.isAllowedStudioProtocolOrigin = void 0;
4
- const isAllowedStudioProtocolOrigin = (origin) => {
3
+ exports.handleStudioProtocolOptions = exports.setStudioProtocolCorsHeaders = exports.getAllowedLicenseKeyOrigin = exports.getAllowedStudioProtocolOrigin = void 0;
4
+ const isLoopbackHttp = (url) => url.protocol === 'http:' &&
5
+ (url.hostname === 'localhost' || url.hostname === '127.0.0.1');
6
+ const getAllowedStudioProtocolOrigin = (origin) => {
5
7
  if (!origin) {
6
- return false;
8
+ return null;
7
9
  }
8
10
  try {
9
11
  const url = new URL(origin);
10
- return ((url.protocol === 'https:' &&
11
- (url.hostname === 'remotion.dev' ||
12
- url.hostname === 'www.remotion.dev')) ||
13
- (url.protocol === 'http:' &&
14
- (url.hostname === 'localhost' || url.hostname === '127.0.0.1')));
12
+ if (url.protocol !== 'https:' && !isLoopbackHttp(url)) {
13
+ return null;
14
+ }
15
+ return url.origin;
15
16
  }
16
17
  catch (_a) {
17
- return false;
18
+ return null;
18
19
  }
19
20
  };
20
- exports.isAllowedStudioProtocolOrigin = isAllowedStudioProtocolOrigin;
21
- const setStudioProtocolCorsHeaders = ({ request, response, }) => {
22
- const { origin } = request.headers;
23
- if (typeof origin !== 'string' || !(0, exports.isAllowedStudioProtocolOrigin)(origin)) {
21
+ exports.getAllowedStudioProtocolOrigin = getAllowedStudioProtocolOrigin;
22
+ const getAllowedLicenseKeyOrigin = (origin) => {
23
+ if (!origin) {
24
+ return null;
25
+ }
26
+ try {
27
+ const url = new URL(origin);
28
+ if (isLoopbackHttp(url)) {
29
+ return url.origin;
30
+ }
31
+ if (url.origin === 'https://remotion.pro' ||
32
+ url.origin === 'https://www.remotion.pro') {
33
+ return url.origin;
34
+ }
35
+ return null;
36
+ }
37
+ catch (_a) {
38
+ return null;
39
+ }
40
+ };
41
+ exports.getAllowedLicenseKeyOrigin = getAllowedLicenseKeyOrigin;
42
+ const setStudioProtocolCorsHeaders = ({ licenseKey, request, response, }) => {
43
+ const origin = licenseKey
44
+ ? (0, exports.getAllowedLicenseKeyOrigin)(request.headers.origin)
45
+ : (0, exports.getAllowedStudioProtocolOrigin)(request.headers.origin);
46
+ if (origin === null) {
24
47
  return;
25
48
  }
26
49
  response.setHeader('Access-Control-Allow-Origin', origin);
27
- response.setHeader('Vary', 'Origin');
50
+ response.setHeader('Vary', 'Origin, Access-Control-Request-Headers, Access-Control-Request-Private-Network');
28
51
  response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
29
52
  response.setHeader('Access-Control-Allow-Headers', 'Content-Type');
30
53
  response.setHeader('Access-Control-Max-Age', '600');
31
54
  response.setHeader('Access-Control-Allow-Private-Network', 'true');
32
55
  };
33
56
  exports.setStudioProtocolCorsHeaders = setStudioProtocolCorsHeaders;
34
- const handleStudioProtocolOptions = ({ request, response, }) => {
35
- (0, exports.setStudioProtocolCorsHeaders)({ request, response });
36
- response.writeHead((0, exports.isAllowedStudioProtocolOrigin)(request.headers.origin) ? 204 : 403);
57
+ const handleStudioProtocolOptions = ({ licenseKey, request, response, }) => {
58
+ (0, exports.setStudioProtocolCorsHeaders)({ licenseKey, request, response });
59
+ const origin = licenseKey
60
+ ? (0, exports.getAllowedLicenseKeyOrigin)(request.headers.origin)
61
+ : (0, exports.getAllowedStudioProtocolOrigin)(request.headers.origin);
62
+ response.writeHead(origin === null ? 403 : 204);
37
63
  response.end();
38
64
  return Promise.resolve();
39
65
  };
@@ -1,3 +1,9 @@
1
1
  import type { UpdateAvailableResponse } from '@remotion/studio-shared';
2
+ export declare const isUpdateAvailable: ({ remotionRoot, currentVersion, logLevel, getLatestVersion, }: {
3
+ remotionRoot: string;
4
+ currentVersion: string;
5
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
6
+ getLatestVersion: (() => Promise<string>) | null;
7
+ }) => Promise<UpdateAvailableResponse>;
2
8
  export declare const getRemotionVersion: () => any;
3
9
  export declare const isUpdateAvailableWithTimeout: (remotionRoot: string, logLevel: "error" | "info" | "trace" | "verbose" | "warn") => Promise<UpdateAvailableResponse>;
@@ -3,12 +3,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isUpdateAvailableWithTimeout = exports.getRemotionVersion = void 0;
6
+ exports.isUpdateAvailableWithTimeout = exports.getRemotionVersion = exports.isUpdateAvailable = void 0;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
7
9
  const semver_1 = __importDefault(require("semver"));
10
+ const detect_outdated_remotion_skills_1 = require("../detect-outdated-remotion-skills");
8
11
  const get_latest_remotion_version_1 = require("../get-latest-remotion-version");
9
12
  const get_package_manager_1 = require("./get-package-manager");
10
- const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, }) => {
11
- const latest = await (0, get_latest_remotion_version_1.getLatestRemotionVersion)();
13
+ const getSkillsUpdateInfo = ({ remotionRoot, currentVersion, }) => {
14
+ const projectSkills = (0, detect_outdated_remotion_skills_1.detectOutdatedRemotionSkills)({
15
+ cwd: remotionRoot,
16
+ currentVersion,
17
+ }).project;
18
+ return {
19
+ skillsUpdateAvailable: projectSkills.type === 'outdated',
20
+ remotionUpgradeSkillAvailable: (0, node_fs_1.existsSync)(node_path_1.default.join(remotionRoot, '.agents', 'skills', 'remotion-upgrade', 'SKILL.md')),
21
+ };
22
+ };
23
+ const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, getLatestVersion, }) => {
24
+ const latest = await (getLatestVersion !== null && getLatestVersion !== void 0 ? getLatestVersion : get_latest_remotion_version_1.getLatestRemotionVersion)();
25
+ const skillsUpdateInfo = getSkillsUpdateInfo({ remotionRoot, currentVersion });
12
26
  const pkgManager = (0, get_package_manager_1.getPackageManager)({
13
27
  remotionRoot,
14
28
  packageManager: undefined,
@@ -17,12 +31,14 @@ const isUpdateAvailable = async ({ remotionRoot, currentVersion, logLevel, }) =>
17
31
  });
18
32
  return {
19
33
  updateAvailable: semver_1.default.lt(currentVersion, latest),
34
+ ...skillsUpdateInfo,
20
35
  currentVersion,
21
36
  latestVersion: latest,
22
37
  timedOut: false,
23
38
  packageManager: pkgManager === 'unknown' ? 'unknown' : pkgManager.manager,
24
39
  };
25
40
  };
41
+ exports.isUpdateAvailable = isUpdateAvailable;
26
42
  const getRemotionVersion = () => {
27
43
  // careful when refactoring this file, path must be adjusted
28
44
  const packageJson = require('../../package.json');
@@ -32,6 +48,10 @@ const getRemotionVersion = () => {
32
48
  exports.getRemotionVersion = getRemotionVersion;
33
49
  const isUpdateAvailableWithTimeout = (remotionRoot, logLevel) => {
34
50
  const version = (0, exports.getRemotionVersion)();
51
+ const skillsUpdateInfo = getSkillsUpdateInfo({
52
+ remotionRoot,
53
+ currentVersion: version,
54
+ });
35
55
  const threeSecTimeout = new Promise((resolve) => {
36
56
  const pkgManager = (0, get_package_manager_1.getPackageManager)({
37
57
  remotionRoot,
@@ -44,6 +64,7 @@ const isUpdateAvailableWithTimeout = (remotionRoot, logLevel) => {
44
64
  currentVersion: version,
45
65
  latestVersion: version,
46
66
  updateAvailable: false,
67
+ ...skillsUpdateInfo,
47
68
  timedOut: true,
48
69
  packageManager: pkgManager === 'unknown' ? 'unknown' : pkgManager.manager,
49
70
  });
@@ -51,7 +72,12 @@ const isUpdateAvailableWithTimeout = (remotionRoot, logLevel) => {
51
72
  });
52
73
  return Promise.race([
53
74
  threeSecTimeout,
54
- isUpdateAvailable({ remotionRoot, currentVersion: version, logLevel }),
75
+ (0, exports.isUpdateAvailable)({
76
+ remotionRoot,
77
+ currentVersion: version,
78
+ logLevel,
79
+ getLatestVersion: null,
80
+ }),
55
81
  ]);
56
82
  };
57
83
  exports.isUpdateAvailableWithTimeout = isUpdateAvailableWithTimeout;
@@ -0,0 +1,2 @@
1
+ export declare const remotionSkillNames: readonly ["remotion-best-practices", "remotion-captions", "remotion-create", "remotion-docs", "remotion-interactivity", "remotion-maps", "remotion-markup", "remotion-multimedia", "remotion-render", "remotion-saas", "remotion-upgrade"];
2
+ export type RemotionSkillName = (typeof remotionSkillNames)[number];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remotionSkillNames = void 0;
4
+ exports.remotionSkillNames = [
5
+ 'remotion-best-practices',
6
+ 'remotion-captions',
7
+ 'remotion-create',
8
+ 'remotion-docs',
9
+ 'remotion-interactivity',
10
+ 'remotion-maps',
11
+ 'remotion-markup',
12
+ 'remotion-multimedia',
13
+ 'remotion-render',
14
+ 'remotion-saas',
15
+ 'remotion-upgrade',
16
+ ];
package/dist/routes.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { DefaultEditor } from '@remotion/renderer';
2
3
  import type { GitSource, RenderDefaults, RenderJob, StudioRuntimeConfig } from '@remotion/studio-shared';
3
4
  import type { QueueMethods } from './preview-server/api-types';
4
5
  import type { LiveEventsServer } from './preview-server/live-events';
5
- export declare const handleRoutes: ({ staticHash, staticHashPrefix, outputHash, outputHashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, logLevel, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, queueMethods: methods, gitSource, binariesDirectory, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, getStudioRuntimeConfig, configFile, }: {
6
+ export declare const handleRoutes: ({ staticHash, staticHashPrefix, outputHash, outputHashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, logLevel, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, queueMethods: methods, gitSource, binariesDirectory, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, getStudioRuntimeConfig, getDefaultEditor, configFile, }: {
6
7
  staticHash: string;
7
8
  staticHashPrefix: string;
8
9
  outputHash: string;
@@ -26,5 +27,6 @@ export declare const handleRoutes: ({ staticHash, staticHashPrefix, outputHash,
26
27
  getPreviewSampleRate: () => number | null;
27
28
  enableCrossSiteIsolation: boolean;
28
29
  getStudioRuntimeConfig: () => StudioRuntimeConfig;
30
+ getDefaultEditor: () => DefaultEditor | null;
29
31
  configFile: string | null;
30
32
  }) => Promise<void>;
package/dist/routes.js CHANGED
@@ -55,6 +55,7 @@ const open_in_editor_1 = require("./preview-server/routes/open-in-editor");
55
55
  const serve_static_1 = require("./preview-server/serve-static");
56
56
  const handle_discovery_1 = require("./preview-server/studio-protocol/handle-discovery");
57
57
  const handle_install_1 = require("./preview-server/studio-protocol/handle-install");
58
+ const handle_license_key_1 = require("./preview-server/studio-protocol/handle-license-key");
58
59
  const origin_policy_1 = require("./preview-server/studio-protocol/origin-policy");
59
60
  const validate_same_origin_1 = require("./preview-server/validate-same-origin");
60
61
  const watch_ignore_next_change_1 = require("./preview-server/watch-ignore-next-change");
@@ -82,7 +83,7 @@ const handleRemotionConfig = (response, remotionRoot) => {
82
83
  response.end(JSON.stringify(body));
83
84
  return Promise.resolve();
84
85
  };
85
- const handleFallback = async ({ remotionRoot, hash, response, request, getCurrentInputProps, getEnvVariables, publicDir, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, getAudioLatencyHint, getPreviewSampleRate, gitSource, logLevel, enableCrossSiteIsolation, getStudioRuntimeConfig, }) => {
86
+ const handleFallback = async ({ remotionRoot, hash, response, request, getCurrentInputProps, getEnvVariables, publicDir, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, getAudioLatencyHint, getPreviewSampleRate, gitSource, logLevel, enableCrossSiteIsolation, getStudioRuntimeConfig, getDefaultEditor, }) => {
86
87
  var _a, _b;
87
88
  const acceptsHtml = ((_a = request.headers.accept) !== null && _a !== void 0 ? _a : '').includes('text/html');
88
89
  if (request.method === 'GET' && acceptsHtml) {
@@ -105,7 +106,7 @@ const handleFallback = async ({ remotionRoot, hash, response, request, getCurren
105
106
  `Change \`"${pathname}"\` to \`staticFile("${pathname}")\` to fix the error.`,
106
107
  ].join('\n'));
107
108
  }
108
- const displayName = await (0, open_in_editor_1.getEditorName)();
109
+ const displayName = await (0, open_in_editor_1.getEditorName)({ getDefaultEditor, logLevel });
109
110
  response.setHeader('content-type', 'text/html');
110
111
  if (enableCrossSiteIsolation) {
111
112
  response.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
@@ -251,7 +252,7 @@ const handleBeep = (_, response) => {
251
252
  readStream.pipe(response);
252
253
  return Promise.resolve();
253
254
  };
254
- const handleRoutes = ({ staticHash, staticHashPrefix, outputHash, outputHashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, logLevel, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, queueMethods: methods, gitSource, binariesDirectory, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, getStudioRuntimeConfig, configFile, }) => {
255
+ const handleRoutes = ({ staticHash, staticHashPrefix, outputHash, outputHashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, logLevel, getRenderQueue, getRenderDefaults, getNumberOfAudioTags, queueMethods: methods, gitSource, binariesDirectory, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, getStudioRuntimeConfig, getDefaultEditor, configFile, }) => {
255
256
  const url = new URL(request.url, 'http://localhost');
256
257
  if (url.pathname === '/api/file-source') {
257
258
  return handleFileSource({
@@ -279,9 +280,14 @@ const handleRoutes = ({ staticHash, staticHashPrefix, outputHash, outputHashPref
279
280
  });
280
281
  }
281
282
  if (url.pathname === '/api/studio-protocol' ||
282
- url.pathname === '/api/studio-protocol/install') {
283
+ url.pathname === '/api/studio-protocol/install' ||
284
+ url.pathname === '/api/studio-protocol/license-key') {
283
285
  if (request.method === 'OPTIONS') {
284
- return (0, origin_policy_1.handleStudioProtocolOptions)({ request, response });
286
+ return (0, origin_policy_1.handleStudioProtocolOptions)({
287
+ licenseKey: url.pathname === '/api/studio-protocol/license-key',
288
+ request,
289
+ response,
290
+ });
285
291
  }
286
292
  if (url.pathname === '/api/studio-protocol') {
287
293
  return (0, handle_discovery_1.handleStudioProtocolDiscovery)({
@@ -292,6 +298,9 @@ const handleRoutes = ({ staticHash, staticHashPrefix, outputHash, outputHashPref
292
298
  response,
293
299
  });
294
300
  }
301
+ if (url.pathname === '/api/studio-protocol/license-key') {
302
+ return (0, handle_license_key_1.handleStudioProtocolLicenseKey)({ configFile, request, response });
303
+ }
295
304
  return (0, handle_install_1.handleStudioProtocolInstall)({
296
305
  focusStudioTab: (studioUrl) => {
297
306
  (0, better_opn_1.focusBrowserTab)({ url: studioUrl }).catch(() => undefined);
@@ -314,6 +323,7 @@ const handleRoutes = ({ staticHash, staticHashPrefix, outputHash, outputHashPref
314
323
  binariesDirectory,
315
324
  publicDir,
316
325
  configFile,
326
+ getDefaultEditor,
317
327
  });
318
328
  }
319
329
  }
@@ -374,6 +384,7 @@ const handleRoutes = ({ staticHash, staticHashPrefix, outputHash, outputHashPref
374
384
  getPreviewSampleRate,
375
385
  enableCrossSiteIsolation,
376
386
  getStudioRuntimeConfig,
387
+ getDefaultEditor,
377
388
  });
378
389
  };
379
390
  exports.handleRoutes = handleRoutes;
@@ -1,4 +1,5 @@
1
1
  import type { BundlerOverrideFn, RspackOverrideFn, WebpackOverrideFn } from '@remotion/bundler';
2
+ import type { DefaultEditor } from '@remotion/renderer';
2
3
  import type { GitSource, RenderDefaults, RenderJob, StudioRuntimeConfig } from '@remotion/studio-shared';
3
4
  import type { QueueMethods } from './preview-server/api-types';
4
5
  export type StartStudioResult = {
@@ -6,7 +7,7 @@ export type StartStudioResult = {
6
7
  } | {
7
8
  type: 'already-running';
8
9
  };
9
- export declare const startStudio: ({ browserArgs, browserFlag, shouldOpenBrowser, fullEntryPath, logLevel, getCurrentInputProps, getEnvVariables, desiredPort, remotionRoot, relativePublicDir, bundlerOverride, rspackOverride, webpackOverride, poll, getRenderDefaults, getRenderQueue, getNumberOfAudioTags, queueMethods, previewEntry, gitSource, binariesDirectory, forceIPv4, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, forceNew, rspack, getStudioRuntimeConfig, configFile, }: {
10
+ export declare const startStudio: ({ browserArgs, browserFlag, shouldOpenBrowser, fullEntryPath, logLevel, getCurrentInputProps, getEnvVariables, desiredPort, remotionRoot, relativePublicDir, bundlerOverride, rspackOverride, webpackOverride, poll, getRenderDefaults, getRenderQueue, getNumberOfAudioTags, queueMethods, previewEntry, gitSource, binariesDirectory, forceIPv4, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, forceNew, rspack, getStudioRuntimeConfig, getDefaultEditor, configFile, }: {
10
11
  browserArgs: string;
11
12
  browserFlag: string;
12
13
  logLevel: "error" | "info" | "trace" | "verbose" | "warn";
@@ -35,5 +36,6 @@ export declare const startStudio: ({ browserArgs, browserFlag, shouldOpenBrowser
35
36
  forceNew: boolean;
36
37
  rspack: boolean;
37
38
  getStudioRuntimeConfig: () => StudioRuntimeConfig;
39
+ getDefaultEditor: () => DefaultEditor | null;
38
40
  configFile: string | null;
39
41
  }) => Promise<StartStudioResult>;
@@ -19,7 +19,7 @@ const public_folder_1 = require("./preview-server/public-folder");
19
19
  const start_server_1 = require("./preview-server/start-server");
20
20
  const server_ready_1 = require("./server-ready");
21
21
  const watch_root_file_1 = require("./watch-root-file");
22
- const startStudio = async ({ browserArgs, browserFlag, shouldOpenBrowser, fullEntryPath, logLevel, getCurrentInputProps, getEnvVariables, desiredPort, remotionRoot, relativePublicDir, bundlerOverride, rspackOverride, webpackOverride, poll, getRenderDefaults, getRenderQueue, getNumberOfAudioTags, queueMethods, previewEntry, gitSource, binariesDirectory, forceIPv4, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, forceNew, rspack, getStudioRuntimeConfig, configFile, }) => {
22
+ const startStudio = async ({ browserArgs, browserFlag, shouldOpenBrowser, fullEntryPath, logLevel, getCurrentInputProps, getEnvVariables, desiredPort, remotionRoot, relativePublicDir, bundlerOverride, rspackOverride, webpackOverride, poll, getRenderDefaults, getRenderQueue, getNumberOfAudioTags, queueMethods, previewEntry, gitSource, binariesDirectory, forceIPv4, getAudioLatencyHint, getPreviewSampleRate, enableCrossSiteIsolation, forceNew, rspack, getStudioRuntimeConfig, getDefaultEditor, configFile, }) => {
23
23
  try {
24
24
  if (typeof Bun === 'undefined') {
25
25
  process.title = 'node (npx remotion studio)';
@@ -93,6 +93,7 @@ const startStudio = async ({ browserArgs, browserFlag, shouldOpenBrowser, fullEn
93
93
  forceNew,
94
94
  rspack,
95
95
  getStudioRuntimeConfig,
96
+ getDefaultEditor,
96
97
  configFile,
97
98
  });
98
99
  if (result.type === 'already-running') {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio-server"
4
4
  },
5
5
  "name": "@remotion/studio-server",
6
- "version": "4.0.502",
6
+ "version": "4.0.504",
7
7
  "description": "Run a Remotion Studio with a server backend",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -23,7 +23,7 @@
23
23
  "access": "public"
24
24
  },
25
25
  "dependencies": {
26
- "@remotion/studio-protocol": "4.0.502",
26
+ "@remotion/studio-protocol": "4.0.504",
27
27
  "@babel/types": "7.24.0",
28
28
  "@babel/parser": "7.24.1",
29
29
  "@svgr/core": "8.1.0",
@@ -32,12 +32,12 @@
32
32
  "semver": "7.5.3",
33
33
  "zod": "4.4.3",
34
34
  "prettier": "3.8.1",
35
- "remotion": "4.0.502",
35
+ "remotion": "4.0.504",
36
36
  "recast": "0.23.11",
37
- "@remotion/bundler": "4.0.502",
38
- "@remotion/renderer": "4.0.502",
39
- "@remotion/studio-codemods": "4.0.502",
40
- "@remotion/studio-shared": "4.0.502",
37
+ "@remotion/bundler": "4.0.504",
38
+ "@remotion/renderer": "4.0.504",
39
+ "@remotion/studio-codemods": "4.0.504",
40
+ "@remotion/studio-shared": "4.0.504",
41
41
  "memfs": "3.4.3",
42
42
  "open": "8.4.2"
43
43
  },
@@ -45,7 +45,7 @@
45
45
  "ast-types": "0.16.1",
46
46
  "react": "19.2.3",
47
47
  "@types/semver": "7.5.3",
48
- "@remotion/eslint-config-internal": "4.0.502",
48
+ "@remotion/eslint-config-internal": "4.0.504",
49
49
  "eslint": "9.19.0",
50
50
  "@types/node": "20.12.14",
51
51
  "@typescript/native-preview": "7.0.0-dev.20260217.1"