@remotion/studio-server 4.0.490 → 4.0.492
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.
- package/dist/better-opn/index.d.ts +4 -0
- package/dist/better-opn/index.js +152 -31
- package/dist/codemods/paste-effects.d.ts +2 -1
- package/dist/codemods/paste-effects.js +33 -6
- package/dist/codemods/split-jsx-sequence.js +5 -0
- package/dist/codemods/update-keyframes/update-keyframes.d.ts +9 -5
- package/dist/codemods/update-keyframes/update-keyframes.js +88 -42
- package/dist/codemods/update-nested-prop.d.ts +3 -2
- package/dist/codemods/update-nested-prop.js +17 -4
- package/dist/codemods/update-sequence-props/update-sequence-props.d.ts +6 -3
- package/dist/codemods/update-sequence-props/update-sequence-props.js +51 -10
- package/dist/helpers/video-config-numeric-expression.d.ts +12 -0
- package/dist/helpers/video-config-numeric-expression.js +152 -0
- package/dist/helpers/video-config-values.d.ts +7 -0
- package/dist/helpers/video-config-values.js +84 -0
- package/dist/index.d.ts +1 -2
- package/dist/preview-server/element-install-state.d.ts +1 -0
- package/dist/preview-server/routes/add-effect-keyframe.js +6 -0
- package/dist/preview-server/routes/add-keyframes.js +2 -0
- package/dist/preview-server/routes/add-sequence-keyframe.js +2 -0
- package/dist/preview-server/routes/apply-codemod.d.ts +1 -0
- package/dist/preview-server/routes/apply-codemod.js +62 -13
- package/dist/preview-server/routes/can-update-effect-props.d.ts +8 -4
- package/dist/preview-server/routes/can-update-effect-props.js +26 -5
- package/dist/preview-server/routes/can-update-sequence-props.d.ts +12 -5
- package/dist/preview-server/routes/can-update-sequence-props.js +82 -33
- package/dist/preview-server/routes/delete-keyframes.js +8 -0
- package/dist/preview-server/routes/move-keyframes.js +2 -0
- package/dist/preview-server/routes/paste-effects.js +2 -1
- package/dist/preview-server/routes/save-effect-props.js +5 -0
- package/dist/preview-server/routes/save-sequence-props.js +5 -0
- package/dist/preview-server/routes/subscribe-to-sequence-props.js +3 -1
- package/dist/preview-server/routes/unsubscribe-from-sequence-props.js +3 -1
- package/dist/preview-server/routes/update-effect-keyframe-settings.js +6 -0
- package/dist/preview-server/routes/update-element-install-target.js +15 -1
- package/dist/preview-server/routes/update-sequence-keyframe-settings.js +2 -0
- package/dist/preview-server/sequence-props-watchers.d.ts +7 -3
- package/dist/preview-server/sequence-props-watchers.js +20 -6
- package/dist/preview-server/start-server.d.ts +0 -1
- package/dist/preview-server/start-server.js +0 -1
- package/dist/routes.js +3 -0
- package/dist/start-studio.d.ts +1 -2
- package/dist/start-studio.js +1 -2
- package/package.json +6 -6
|
@@ -14,7 +14,8 @@ const live_events_1 = require("./live-events");
|
|
|
14
14
|
const node_path_cache_1 = require("./node-path-cache");
|
|
15
15
|
const can_update_sequence_props_1 = require("./routes/can-update-sequence-props");
|
|
16
16
|
const sequencePropsWatchers = {};
|
|
17
|
-
const
|
|
17
|
+
const getWatcherKey = (nodePath, assetKeys) => `${(0, studio_shared_1.stringifySequenceSubscriptionKey)(nodePath)}:${assetKeys.join('\0')}:${JSON.stringify(nodePath.videoConfigValues)}`;
|
|
18
|
+
const getSequencePropsStatus = ({ fileName, line, column, preferredNodePath, componentIdentity, keys, assetKeys, effects, remotionRoot, logLevel, videoConfigValues, }) => {
|
|
18
19
|
if (preferredNodePath) {
|
|
19
20
|
try {
|
|
20
21
|
const fromNodePath = (0, can_update_sequence_props_1.computeSequencePropsStatus)({
|
|
@@ -22,8 +23,10 @@ const getSequencePropsStatus = ({ fileName, line, column, preferredNodePath, com
|
|
|
22
23
|
nodePath: preferredNodePath,
|
|
23
24
|
componentIdentity,
|
|
24
25
|
keys,
|
|
26
|
+
assetKeys,
|
|
25
27
|
effects,
|
|
26
28
|
remotionRoot,
|
|
29
|
+
videoConfigValues,
|
|
27
30
|
});
|
|
28
31
|
return {
|
|
29
32
|
status: fromNodePath,
|
|
@@ -32,6 +35,7 @@ const getSequencePropsStatus = ({ fileName, line, column, preferredNodePath, com
|
|
|
32
35
|
nodePath: preferredNodePath,
|
|
33
36
|
sequenceKeys: keys,
|
|
34
37
|
effectKeys: effects,
|
|
38
|
+
videoConfigValues,
|
|
35
39
|
},
|
|
36
40
|
success: true,
|
|
37
41
|
};
|
|
@@ -53,8 +57,10 @@ const getSequencePropsStatus = ({ fileName, line, column, preferredNodePath, com
|
|
|
53
57
|
nodePath: cachedNodePath,
|
|
54
58
|
componentIdentity,
|
|
55
59
|
keys,
|
|
60
|
+
assetKeys,
|
|
56
61
|
effects,
|
|
57
62
|
remotionRoot,
|
|
63
|
+
videoConfigValues,
|
|
58
64
|
});
|
|
59
65
|
}
|
|
60
66
|
catch (error) {
|
|
@@ -73,6 +79,7 @@ const getSequencePropsStatus = ({ fileName, line, column, preferredNodePath, com
|
|
|
73
79
|
nodePath: cachedNodePath,
|
|
74
80
|
sequenceKeys: keys,
|
|
75
81
|
effectKeys: effects,
|
|
82
|
+
videoConfigValues,
|
|
76
83
|
},
|
|
77
84
|
success: true,
|
|
78
85
|
};
|
|
@@ -83,13 +90,15 @@ const getSequencePropsStatus = ({ fileName, line, column, preferredNodePath, com
|
|
|
83
90
|
line,
|
|
84
91
|
componentIdentity,
|
|
85
92
|
keys,
|
|
93
|
+
assetKeys,
|
|
86
94
|
effects,
|
|
87
95
|
remotionRoot,
|
|
88
96
|
logLevel,
|
|
97
|
+
videoConfigValues,
|
|
89
98
|
});
|
|
90
99
|
return status;
|
|
91
100
|
};
|
|
92
|
-
const subscribeToSequencePropsWatchers = ({ fileName, line, column, nodePath: preferredNodePath, componentIdentity, keys, effects, remotionRoot, clientId, logLevel, }) => {
|
|
101
|
+
const subscribeToSequencePropsWatchers = ({ fileName, line, column, nodePath: preferredNodePath, componentIdentity, keys, assetKeys, effects, remotionRoot, clientId, logLevel, videoConfigValues, }) => {
|
|
93
102
|
var _a;
|
|
94
103
|
const initialResult = getSequencePropsStatus({
|
|
95
104
|
fileName,
|
|
@@ -98,9 +107,11 @@ const subscribeToSequencePropsWatchers = ({ fileName, line, column, nodePath: pr
|
|
|
98
107
|
preferredNodePath,
|
|
99
108
|
componentIdentity,
|
|
100
109
|
keys,
|
|
110
|
+
assetKeys,
|
|
101
111
|
effects,
|
|
102
112
|
remotionRoot,
|
|
103
113
|
logLevel,
|
|
114
|
+
videoConfigValues,
|
|
104
115
|
});
|
|
105
116
|
if (!initialResult.success) {
|
|
106
117
|
return initialResult;
|
|
@@ -109,7 +120,7 @@ const subscribeToSequencePropsWatchers = ({ fileName, line, column, nodePath: pr
|
|
|
109
120
|
// Cache the resolved nodePath for future lookups with stale source maps
|
|
110
121
|
(0, node_path_cache_1.setCachedNodePath)(fileName, line, column, initialResult.nodePath.nodePath);
|
|
111
122
|
const { nodePath } = initialResult;
|
|
112
|
-
const watcherKey = (
|
|
123
|
+
const watcherKey = getWatcherKey(nodePath, assetKeys);
|
|
113
124
|
// If a watcher already exists for this key, just bump the ref count
|
|
114
125
|
if ((_a = sequencePropsWatchers[clientId]) === null || _a === void 0 ? void 0 : _a[watcherKey]) {
|
|
115
126
|
sequencePropsWatchers[clientId][watcherKey].refCount++;
|
|
@@ -131,7 +142,9 @@ const subscribeToSequencePropsWatchers = ({ fileName, line, column, nodePath: pr
|
|
|
131
142
|
nodePath: nodePath.nodePath,
|
|
132
143
|
componentIdentity,
|
|
133
144
|
keys,
|
|
145
|
+
assetKeys,
|
|
134
146
|
effects,
|
|
147
|
+
videoConfigValues,
|
|
135
148
|
});
|
|
136
149
|
const previousEffectChain = result.effects.map((effect) => effect.canUpdate && effect.callee);
|
|
137
150
|
const newEffectChain = initialResult.success &&
|
|
@@ -173,14 +186,15 @@ const subscribeToSequencePropsWatchers = ({ fileName, line, column, nodePath: pr
|
|
|
173
186
|
return initialResult;
|
|
174
187
|
};
|
|
175
188
|
exports.subscribeToSequencePropsWatchers = subscribeToSequencePropsWatchers;
|
|
176
|
-
const unsubscribeFromSequencePropsWatchers = ({ fileName, nodePath, remotionRoot, clientId, sequenceKeys, effectKeys, }) => {
|
|
189
|
+
const unsubscribeFromSequencePropsWatchers = ({ fileName, nodePath, remotionRoot, clientId, sequenceKeys, assetKeys, effectKeys, videoConfigValues, }) => {
|
|
177
190
|
const absolutePath = node_path_1.default.resolve(remotionRoot, fileName);
|
|
178
|
-
const watcherKey = (
|
|
191
|
+
const watcherKey = getWatcherKey({
|
|
179
192
|
absolutePath,
|
|
180
193
|
nodePath,
|
|
181
194
|
sequenceKeys,
|
|
182
195
|
effectKeys,
|
|
183
|
-
|
|
196
|
+
videoConfigValues,
|
|
197
|
+
}, assetKeys);
|
|
184
198
|
if (!sequencePropsWatchers[clientId] ||
|
|
185
199
|
!sequencePropsWatchers[clientId][watcherKey]) {
|
|
186
200
|
return;
|
|
@@ -22,7 +22,6 @@ export declare const startServer: (options: {
|
|
|
22
22
|
bufferStateDelayInMilliseconds: number | null;
|
|
23
23
|
remotionRoot: string;
|
|
24
24
|
keyboardShortcutsEnabled: boolean;
|
|
25
|
-
experimentalClientSideRenderingEnabled: boolean;
|
|
26
25
|
publicDir: string;
|
|
27
26
|
poll: number | null;
|
|
28
27
|
staticHash: string;
|
|
@@ -41,7 +41,6 @@ const startServer = async (options) => {
|
|
|
41
41
|
maxTimelineTracks: (_c = options === null || options === void 0 ? void 0 : options.maxTimelineTracks) !== null && _c !== void 0 ? _c : null,
|
|
42
42
|
remotionRoot: options.remotionRoot,
|
|
43
43
|
keyboardShortcutsEnabled: options.keyboardShortcutsEnabled,
|
|
44
|
-
experimentalClientSideRenderingEnabled: options.experimentalClientSideRenderingEnabled,
|
|
45
44
|
poll: options.poll,
|
|
46
45
|
bufferStateDelayInMilliseconds: options.bufferStateDelayInMilliseconds,
|
|
47
46
|
askAIEnabled: options.askAIEnabled,
|
package/dist/routes.js
CHANGED
|
@@ -41,6 +41,7 @@ const node_url_1 = require("node:url");
|
|
|
41
41
|
const bundler_1 = require("@remotion/bundler");
|
|
42
42
|
const renderer_1 = require("@remotion/renderer");
|
|
43
43
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
44
|
+
const better_opn_1 = require("./better-opn");
|
|
44
45
|
const client_render_queue_1 = require("./client-render-queue");
|
|
45
46
|
const get_file_source_1 = require("./helpers/get-file-source");
|
|
46
47
|
const get_installed_installable_packages_1 = require("./helpers/get-installed-installable-packages");
|
|
@@ -215,6 +216,7 @@ const handleRequestElementInstall = async ({ liveEventsServer, request, response
|
|
|
215
216
|
}));
|
|
216
217
|
return;
|
|
217
218
|
}
|
|
219
|
+
(0, better_opn_1.focusBrowserTab)({ url: target.studioUrl }).catch(() => undefined);
|
|
218
220
|
response.writeHead(200);
|
|
219
221
|
response.end(JSON.stringify({ success: true, status: 'sent' }));
|
|
220
222
|
}
|
|
@@ -276,6 +278,7 @@ const handleFallback = async ({ remotionRoot, hash, response, request, getCurren
|
|
|
276
278
|
title: 'Remotion Studio',
|
|
277
279
|
renderDefaults: getRenderDefaults(),
|
|
278
280
|
publicFolderExists: (0, node_fs_1.existsSync)(publicDir) ? publicDir : null,
|
|
281
|
+
fileSystemPlatform: process.platform,
|
|
279
282
|
gitSource,
|
|
280
283
|
projectName: (0, studio_shared_1.getProjectName)({
|
|
281
284
|
basename: node_path_1.default.basename,
|
package/dist/start-studio.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export type StartStudioResult = {
|
|
|
6
6
|
} | {
|
|
7
7
|
type: 'already-running';
|
|
8
8
|
};
|
|
9
|
-
export declare const startStudio: ({ browserArgs, browserFlag, shouldOpenBrowser, fullEntryPath, logLevel, getCurrentInputProps, getEnvVariables, desiredPort, maxTimelineTracks, remotionRoot, keyboardShortcutsEnabled,
|
|
9
|
+
export declare const startStudio: ({ browserArgs, browserFlag, shouldOpenBrowser, fullEntryPath, logLevel, getCurrentInputProps, getEnvVariables, desiredPort, maxTimelineTracks, remotionRoot, keyboardShortcutsEnabled, relativePublicDir, webpackOverride, poll, getRenderDefaults, getRenderQueue, numberOfAudioTags, queueMethods, previewEntry, gitSource, bufferStateDelayInMilliseconds, binariesDirectory, forceIPv4, audioLatencyHint, previewSampleRate, enableCrossSiteIsolation, askAIEnabled, interactivityEnabled, forceNew, rspack, getStudioRuntimeConfig, }: {
|
|
10
10
|
browserArgs: string;
|
|
11
11
|
browserFlag: string;
|
|
12
12
|
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
@@ -19,7 +19,6 @@ export declare const startStudio: ({ browserArgs, browserFlag, shouldOpenBrowser
|
|
|
19
19
|
bufferStateDelayInMilliseconds: number | null;
|
|
20
20
|
remotionRoot: string;
|
|
21
21
|
keyboardShortcutsEnabled: boolean;
|
|
22
|
-
experimentalClientSideRenderingEnabled: boolean;
|
|
23
22
|
relativePublicDir: string | null;
|
|
24
23
|
webpackOverride: WebpackOverrideFn;
|
|
25
24
|
poll: number | null;
|
package/dist/start-studio.js
CHANGED
|
@@ -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, maxTimelineTracks, remotionRoot, keyboardShortcutsEnabled,
|
|
22
|
+
const startStudio = async ({ browserArgs, browserFlag, shouldOpenBrowser, fullEntryPath, logLevel, getCurrentInputProps, getEnvVariables, desiredPort, maxTimelineTracks, remotionRoot, keyboardShortcutsEnabled, relativePublicDir, webpackOverride, poll, getRenderDefaults, getRenderQueue, numberOfAudioTags, queueMethods, previewEntry, gitSource, bufferStateDelayInMilliseconds, binariesDirectory, forceIPv4, audioLatencyHint, previewSampleRate, enableCrossSiteIsolation, askAIEnabled, interactivityEnabled, forceNew, rspack, getStudioRuntimeConfig, }) => {
|
|
23
23
|
try {
|
|
24
24
|
if (typeof Bun === 'undefined') {
|
|
25
25
|
process.title = 'node (npx remotion studio)';
|
|
@@ -72,7 +72,6 @@ const startStudio = async ({ browserArgs, browserFlag, shouldOpenBrowser, fullEn
|
|
|
72
72
|
maxTimelineTracks,
|
|
73
73
|
remotionRoot,
|
|
74
74
|
keyboardShortcutsEnabled,
|
|
75
|
-
experimentalClientSideRenderingEnabled,
|
|
76
75
|
publicDir,
|
|
77
76
|
webpackOverride,
|
|
78
77
|
poll,
|
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.
|
|
6
|
+
"version": "4.0.492",
|
|
7
7
|
"description": "Run a Remotion Studio with a server backend",
|
|
8
8
|
"main": "dist",
|
|
9
9
|
"scripts": {
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"@babel/parser": "7.24.1",
|
|
28
28
|
"semver": "7.5.3",
|
|
29
29
|
"prettier": "3.8.1",
|
|
30
|
-
"remotion": "4.0.
|
|
30
|
+
"remotion": "4.0.492",
|
|
31
31
|
"recast": "0.23.11",
|
|
32
|
-
"@remotion/bundler": "4.0.
|
|
33
|
-
"@remotion/renderer": "4.0.
|
|
34
|
-
"@remotion/studio-shared": "4.0.
|
|
32
|
+
"@remotion/bundler": "4.0.492",
|
|
33
|
+
"@remotion/renderer": "4.0.492",
|
|
34
|
+
"@remotion/studio-shared": "4.0.492",
|
|
35
35
|
"memfs": "3.4.3",
|
|
36
36
|
"open": "8.4.2"
|
|
37
37
|
},
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"ast-types": "0.16.1",
|
|
40
40
|
"react": "19.2.3",
|
|
41
41
|
"@types/semver": "7.5.3",
|
|
42
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
42
|
+
"@remotion/eslint-config-internal": "4.0.492",
|
|
43
43
|
"eslint": "9.19.0",
|
|
44
44
|
"@types/node": "20.12.14",
|
|
45
45
|
"@typescript/native-preview": "7.0.0-dev.20260217.1"
|