@remotion/cli 4.0.102 → 4.0.104

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/LICENSE.md CHANGED
@@ -7,7 +7,7 @@ Depending on the type of your legal entity, you are granted permission to use Re
7
7
 
8
8
  ## Free license
9
9
 
10
- Copyright © 2023 [Remotion](https://www.remotion.dev)
10
+ Copyright © 2024 [Remotion](https://www.remotion.dev)
11
11
 
12
12
  ### Eligibility
13
13
 
package/dist/benchmark.js CHANGED
@@ -127,6 +127,8 @@ const benchmarkCommand = async (remotionRoot, args, logLevel) => {
127
127
  quietProgress: false,
128
128
  quietFlag: (0, parse_command_line_1.quietFlagProvided)(),
129
129
  outDir: null,
130
+ // Not needed for benchmark
131
+ gitSource: null,
130
132
  });
131
133
  (0, cleanup_before_quit_1.registerCleanupJob)(() => cleanupBundle());
132
134
  const puppeteerInstance = await browserInstance;
package/dist/bundle.js CHANGED
@@ -11,6 +11,7 @@ const path_1 = __importDefault(require("path"));
11
11
  const chalk_1 = require("./chalk");
12
12
  const entry_point_1 = require("./entry-point");
13
13
  const get_cli_options_1 = require("./get-cli-options");
14
+ const get_github_repository_1 = require("./get-github-repository");
14
15
  const log_1 = require("./log");
15
16
  const parse_command_line_1 = require("./parse-command-line");
16
17
  const setup_cache_1 = require("./setup-cache");
@@ -42,7 +43,7 @@ const bundleCommand = async (remotionRoot, args, logLevel) => {
42
43
  const outputPath = parse_command_line_1.parsedCli['out-dir']
43
44
  ? path_1.default.resolve(process.cwd(), parse_command_line_1.parsedCli['out-dir'])
44
45
  : path_1.default.join(remotionRoot, 'build');
45
- const gitignoreFolder = bundler_1.BundlerInternals.findClosestFolderWithFile(outputPath, '.gitignore');
46
+ const gitignoreFolder = bundler_1.BundlerInternals.findClosestFolderWithItem(outputPath, '.gitignore');
46
47
  const existed = (0, fs_1.existsSync)(outputPath);
47
48
  if (existed) {
48
49
  const existsIndexHtml = (0, fs_1.existsSync)(path_1.default.join(outputPath, 'index.html'));
@@ -55,6 +56,7 @@ const bundleCommand = async (remotionRoot, args, logLevel) => {
55
56
  }
56
57
  (0, fs_1.rmSync)(outputPath, { recursive: true });
57
58
  }
59
+ const gitSource = (0, get_github_repository_1.getGitSource)(remotionRoot);
58
60
  const output = await (0, setup_cache_1.bundleOnCli)({
59
61
  fullPath: file,
60
62
  logLevel,
@@ -80,6 +82,7 @@ const bundleCommand = async (remotionRoot, args, logLevel) => {
80
82
  },
81
83
  quietFlag: (0, parse_command_line_1.quietFlagProvided)(),
82
84
  outDir: outputPath,
85
+ gitSource,
83
86
  });
84
87
  log_1.Log.infoAdvanced({ indent: false, logLevel }, chalk_1.chalk.blue(`${existed ? '○' : '+'} ${output}`));
85
88
  if (!gitignoreFolder) {
@@ -41,6 +41,8 @@ const listCompositionsCommand = async (remotionRoot, args, logLevel) => {
41
41
  quietProgress: false,
42
42
  quietFlag: (0, parse_command_line_1.quietFlagProvided)(),
43
43
  outDir: null,
44
+ // Not needed for compositions
45
+ gitSource: null,
44
46
  });
45
47
  (0, cleanup_before_quit_1.registerCleanupJob)(() => cleanupBundle());
46
48
  const compositions = await renderer_1.RenderInternals.internalGetCompositions({
package/dist/ffmpeg.d.ts CHANGED
@@ -1,2 +1,13 @@
1
+ import type { LogLevel } from '@remotion/renderer';
2
+ export declare const dynamicLibEnv: (indent: boolean, logLevel: LogLevel) => {
3
+ DYLD_LIBRARY_PATH: string;
4
+ RUST_BACKTRACE: string;
5
+ } | {
6
+ PATH: string;
7
+ RUST_BACKTRACE: string;
8
+ } | {
9
+ LD_LIBRARY_PATH: string;
10
+ RUST_BACKTRACE: string;
11
+ };
1
12
  export declare const ffmpegCommand: (_root: string, args: string[]) => never;
2
13
  export declare const ffprobeCommand: (_root: string, args: string[]) => never;
package/dist/ffmpeg.js CHANGED
@@ -1,10 +1,32 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ffprobeCommand = exports.ffmpegCommand = void 0;
6
+ exports.ffprobeCommand = exports.ffmpegCommand = exports.dynamicLibEnv = void 0;
4
7
  const renderer_1 = require("@remotion/renderer");
5
8
  const node_child_process_1 = require("node:child_process");
6
9
  const node_fs_1 = require("node:fs");
10
+ const node_path_1 = __importDefault(require("node:path"));
7
11
  const config_1 = require("./config");
12
+ const dynamicLibEnv = (indent, logLevel) => {
13
+ const lib = node_path_1.default.dirname(renderer_1.RenderInternals.getExecutablePath('compositor', indent, logLevel));
14
+ return {
15
+ RUST_BACKTRACE: 'full',
16
+ ...(process.platform === 'darwin'
17
+ ? {
18
+ DYLD_LIBRARY_PATH: lib,
19
+ }
20
+ : process.platform === 'win32'
21
+ ? {
22
+ PATH: `${lib};${process.env.PATH}`,
23
+ }
24
+ : {
25
+ LD_LIBRARY_PATH: lib,
26
+ }),
27
+ };
28
+ };
29
+ exports.dynamicLibEnv = dynamicLibEnv;
8
30
  const ffmpegCommand = (_root, args) => {
9
31
  const logLevel = config_1.ConfigInternals.Logging.getLogLevel();
10
32
  const binary = renderer_1.RenderInternals.getExecutablePath('ffmpeg', false, logLevel);
@@ -12,8 +34,8 @@ const ffmpegCommand = (_root, args) => {
12
34
  (0, node_fs_1.chmodSync)(binary, 0o755);
13
35
  }
14
36
  const done = (0, node_child_process_1.spawnSync)(binary, args, {
15
- ...renderer_1.RenderInternals.dynamicLibraryPathOptions(false, logLevel),
16
37
  stdio: 'inherit',
38
+ env: (0, exports.dynamicLibEnv)(false, logLevel),
17
39
  });
18
40
  process.exit(done.status);
19
41
  };
@@ -25,8 +47,9 @@ const ffprobeCommand = (_root, args) => {
25
47
  (0, node_fs_1.chmodSync)(binary, 0o755);
26
48
  }
27
49
  const done = (0, node_child_process_1.spawnSync)(binary, args, {
28
- ...renderer_1.RenderInternals.dynamicLibraryPathOptions(false, logLevel),
50
+ cwd: node_path_1.default.dirname(binary),
29
51
  stdio: 'inherit',
52
+ env: (0, exports.dynamicLibEnv)(false, logLevel),
30
53
  });
31
54
  process.exit(done.status);
32
55
  };
@@ -0,0 +1,14 @@
1
+ import type { GitSource } from '@remotion/studio';
2
+ export type ParsedGitRemote = {
3
+ type: 'github';
4
+ org: string;
5
+ name: string;
6
+ };
7
+ export declare const getGitConfig: (remotionRoot: string) => string | null;
8
+ export declare const getGitRemoteOrigin: (gitConfig: string) => {
9
+ remote: string;
10
+ url: string | null;
11
+ } | null;
12
+ export declare const normalizeGitRemoteUrl: (url: string) => ParsedGitRemote | null;
13
+ export declare const getGifRef: () => string | null;
14
+ export declare const getGitSource: (remotionRoot: string | null) => GitSource | null;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getGitSource = exports.getGifRef = exports.normalizeGitRemoteUrl = exports.getGitRemoteOrigin = exports.getGitConfig = void 0;
7
+ const bundler_1 = require("@remotion/bundler");
8
+ const child_process_1 = require("child_process");
9
+ const fs_1 = require("fs");
10
+ const path_1 = __importDefault(require("path"));
11
+ const getGitRemotes = (lines) => {
12
+ const sections = [];
13
+ let open = false;
14
+ for (const line of lines) {
15
+ if (line.startsWith('[')) {
16
+ if (line.startsWith('[remote')) {
17
+ open = true;
18
+ sections.push([line]);
19
+ }
20
+ else {
21
+ open = false;
22
+ }
23
+ }
24
+ else if (open) {
25
+ sections[sections.length - 1].push(line);
26
+ }
27
+ }
28
+ return sections.map((s) => {
29
+ const url = s.find((l) => l.trimStart().startsWith('url = '));
30
+ return {
31
+ remote: s[0].replace('[remote "', '').replace('"]', ''),
32
+ url: url ? url.replace('url = ', '').trim() : null,
33
+ };
34
+ });
35
+ };
36
+ const getGitConfig = (remotionRoot) => {
37
+ const gitFolder = bundler_1.BundlerInternals.findClosestFolderWithItem(remotionRoot, '.git');
38
+ if (!gitFolder) {
39
+ return null;
40
+ }
41
+ const gitConfig = path_1.default.join(gitFolder, '.git', 'config');
42
+ if (!(0, fs_1.existsSync)(gitConfig)) {
43
+ return null;
44
+ }
45
+ return gitConfig;
46
+ };
47
+ exports.getGitConfig = getGitConfig;
48
+ const getGitRemoteOrigin = (gitConfig) => {
49
+ const contents = (0, fs_1.readFileSync)(gitConfig, 'utf-8');
50
+ const lines = contents.split('\n');
51
+ const remotes = getGitRemotes(lines);
52
+ const origin = remotes.find((r) => r.remote === 'origin');
53
+ return origin !== null && origin !== void 0 ? origin : null;
54
+ };
55
+ exports.getGitRemoteOrigin = getGitRemoteOrigin;
56
+ const normalizeGitRemoteUrl = (url) => {
57
+ if (url.startsWith('git@github.com')) {
58
+ const matched = url.match(/git@github.com:(.*)\/(.*)\.git/);
59
+ if (matched) {
60
+ return {
61
+ type: 'github',
62
+ name: matched[2],
63
+ org: matched[1],
64
+ };
65
+ }
66
+ }
67
+ const gitHubMatch = url.match(/https:\/\/github.com\/(.*)\/(.*)\.git/);
68
+ if (gitHubMatch) {
69
+ return {
70
+ type: 'github',
71
+ name: gitHubMatch[2],
72
+ org: gitHubMatch[1],
73
+ };
74
+ }
75
+ const gitHubMatchWithoutGit = url.match(/https:\/\/github.com\/(.*)\/(.*)/);
76
+ if (gitHubMatchWithoutGit) {
77
+ return {
78
+ type: 'github',
79
+ name: gitHubMatchWithoutGit[2],
80
+ org: gitHubMatchWithoutGit[1],
81
+ };
82
+ }
83
+ return null;
84
+ };
85
+ exports.normalizeGitRemoteUrl = normalizeGitRemoteUrl;
86
+ const getGifRef = () => {
87
+ try {
88
+ return (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD').toString('utf-8').trim();
89
+ }
90
+ catch (err) {
91
+ return null;
92
+ }
93
+ };
94
+ exports.getGifRef = getGifRef;
95
+ const getFromEnvVariables = () => {
96
+ const { VERCEL_GIT_PROVIDER, VERCEL_GIT_COMMIT_SHA, VERCEL_GIT_REPO_OWNER, VERCEL_GIT_REPO_SLUG, } = process.env;
97
+ if (VERCEL_GIT_COMMIT_SHA &&
98
+ VERCEL_GIT_REPO_OWNER &&
99
+ VERCEL_GIT_REPO_SLUG &&
100
+ VERCEL_GIT_PROVIDER === 'github') {
101
+ return {
102
+ name: VERCEL_GIT_REPO_SLUG,
103
+ org: VERCEL_GIT_REPO_OWNER,
104
+ ref: VERCEL_GIT_COMMIT_SHA,
105
+ type: 'github',
106
+ relativeFromGitRoot: '',
107
+ };
108
+ }
109
+ return null;
110
+ };
111
+ const getGitSource = (remotionRoot) => {
112
+ if (remotionRoot === null) {
113
+ return getFromEnvVariables();
114
+ }
115
+ const ref = (0, exports.getGifRef)();
116
+ if (!ref) {
117
+ return null;
118
+ }
119
+ const gitConfig = (0, exports.getGitConfig)(remotionRoot);
120
+ if (!gitConfig) {
121
+ return null;
122
+ }
123
+ const origin = (0, exports.getGitRemoteOrigin)(gitConfig);
124
+ if (!origin || !origin.url) {
125
+ return null;
126
+ }
127
+ const parsed = (0, exports.normalizeGitRemoteUrl)(origin.url);
128
+ if (!parsed) {
129
+ return null;
130
+ }
131
+ const gitRoot = path_1.default.dirname(path_1.default.dirname(gitConfig));
132
+ const relativeFromGitRoot = path_1.default.relative(gitRoot, remotionRoot);
133
+ return {
134
+ name: parsed.name,
135
+ org: parsed.org,
136
+ ref,
137
+ type: 'github',
138
+ relativeFromGitRoot,
139
+ };
140
+ };
141
+ exports.getGitSource = getGitSource;
@@ -120,6 +120,8 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
120
120
  quietProgress: updatesDontOverwrite,
121
121
  quietFlag: (0, parse_command_line_1.quietFlagProvided)(),
122
122
  outDir: null,
123
+ // Not needed for render
124
+ gitSource: null,
123
125
  });
124
126
  addCleanupCallback(() => cleanupBundle());
125
127
  const onDownload = (0, make_on_download_1.makeOnDownload)({
@@ -84,6 +84,8 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
84
84
  quietProgress: updatesDontOverwrite,
85
85
  quietFlag: (0, parse_command_line_1.quietFlagProvided)(),
86
86
  outDir: null,
87
+ // Not needed for still
88
+ gitSource: null,
87
89
  });
88
90
  const server = await renderer_1.RenderInternals.prepareServer({
89
91
  concurrency: 1,
@@ -1,6 +1,7 @@
1
1
  import type { LogLevel } from '@remotion/renderer';
2
+ import type { GitSource } from '@remotion/studio';
2
3
  import type { BundlingState, CopyingState } from '@remotion/studio-server';
3
- export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, }: {
4
+ export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, }: {
4
5
  fullPath: string;
5
6
  remotionRoot: string;
6
7
  publicDir: string | null;
@@ -16,11 +17,12 @@ export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publi
16
17
  quietProgress: boolean;
17
18
  quietFlag: boolean;
18
19
  outDir: string | null;
20
+ gitSource: GitSource | null;
19
21
  }) => Promise<{
20
22
  urlOrBundle: string;
21
23
  cleanup: () => void;
22
24
  }>;
23
- export declare const bundleOnCli: ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, }: {
25
+ export declare const bundleOnCli: ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, }: {
24
26
  fullPath: string;
25
27
  remotionRoot: string;
26
28
  publicDir: string | null;
@@ -36,4 +38,5 @@ export declare const bundleOnCli: ({ fullPath, remotionRoot, publicDir, onProgre
36
38
  quietProgress: boolean;
37
39
  quietFlag: boolean;
38
40
  outDir: string | null;
41
+ gitSource: GitSource | null;
39
42
  }) => Promise<string>;
@@ -7,7 +7,7 @@ const config_1 = require("./config");
7
7
  const log_1 = require("./log");
8
8
  const progress_bar_1 = require("./progress-bar");
9
9
  const should_use_non_overlaying_logger_1 = require("./should-use-non-overlaying-logger");
10
- const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, }) => {
10
+ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, }) => {
11
11
  if (renderer_1.RenderInternals.isServeUrl(fullPath)) {
12
12
  onProgress({
13
13
  bundling: {
@@ -37,6 +37,7 @@ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, on
37
37
  quietProgress,
38
38
  quietFlag,
39
39
  outDir,
40
+ gitSource,
40
41
  });
41
42
  return {
42
43
  urlOrBundle: bundled,
@@ -44,7 +45,7 @@ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, on
44
45
  };
45
46
  };
46
47
  exports.bundleOnCliOrTakeServeUrl = bundleOnCliOrTakeServeUrl;
47
- const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, }) => {
48
+ const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, bundlingStep, steps, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, }) => {
48
49
  var _a;
49
50
  const shouldCache = config_1.ConfigInternals.getWebpackCaching();
50
51
  const symlinkState = {
@@ -133,6 +134,7 @@ const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallba
133
134
  },
134
135
  onDirectoryCreated,
135
136
  outDir: outDir !== null && outDir !== void 0 ? outDir : undefined,
137
+ gitSource,
136
138
  ...options,
137
139
  });
138
140
  bundlingState = {
package/dist/studio.js CHANGED
@@ -7,6 +7,7 @@ const number_of_shared_audio_tags_1 = require("./config/number-of-shared-audio-t
7
7
  const convert_entry_point_to_serve_url_1 = require("./convert-entry-point-to-serve-url");
8
8
  const entry_point_1 = require("./entry-point");
9
9
  const get_env_1 = require("./get-env");
10
+ const get_github_repository_1 = require("./get-github-repository");
10
11
  const get_input_props_1 = require("./get-input-props");
11
12
  const get_render_defaults_1 = require("./get-render-defaults");
12
13
  const log_1 = require("./log");
@@ -54,6 +55,7 @@ const studioCommand = async (remotionRoot, args, logLevel) => {
54
55
  }, logLevel);
55
56
  const maxTimelineTracks = config_1.ConfigInternals.getMaxTimelineTracks();
56
57
  const keyboardShortcutsEnabled = config_1.ConfigInternals.getKeyboardShortcutsEnabled();
58
+ const gitSource = (0, get_github_repository_1.getGitSource)(remotionRoot);
57
59
  await studio_server_1.StudioServerInternals.startStudio({
58
60
  previewEntry: require.resolve('@remotion/studio/entry'),
59
61
  browserArgs: parse_command_line_1.parsedCli['browser-args'],
@@ -81,6 +83,7 @@ const studioCommand = async (remotionRoot, args, logLevel) => {
81
83
  // Minimist quirk: Adding `--no-open` flag will result in {['no-open']: false, open: true}
82
84
  // @ts-expect-error
83
85
  parsedCliOpen: parse_command_line_1.parsedCli.open,
86
+ gitSource,
84
87
  });
85
88
  };
86
89
  exports.studioCommand = studioCommand;
package/dist/upgrade.js CHANGED
@@ -13,7 +13,7 @@ const log_1 = require("./log");
13
13
  const getUpgradeCommand = ({ manager, packages, version, }) => {
14
14
  const pkgList = packages.map((p) => `${p}@${version}`);
15
15
  const commands = {
16
- npm: ['i', '--save-exact', ...pkgList],
16
+ npm: ['i', '--save-exact', '--no-fund', '--no-audit', ...pkgList],
17
17
  pnpm: ['i', '--save-exact', ...pkgList],
18
18
  yarn: ['add', '--exact', ...pkgList],
19
19
  bun: ['i', ...pkgList],
@@ -52,6 +52,7 @@ const upgrade = async (remotionRoot, packageManager, version) => {
52
52
  packages: toUpgrade,
53
53
  version: targetVersion,
54
54
  }), {
55
+ env: { ...process.env, ADBLOCK: '1', DISABLE_OPENCOLLECTIVE: '1' },
55
56
  stdio: 'inherit',
56
57
  });
57
58
  if (renderer_1.RenderInternals.isEqualOrBelowLogLevel(config_1.ConfigInternals.Logging.getLogLevel(), 'info')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "4.0.102",
3
+ "version": "4.0.104",
4
4
  "description": "CLI for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "sideEffects": false,
@@ -31,13 +31,13 @@
31
31
  "dotenv": "9.0.2",
32
32
  "minimist": "1.2.6",
33
33
  "prompts": "2.4.2",
34
- "@remotion/bundler": "4.0.102",
35
- "@remotion/media-utils": "4.0.102",
36
- "@remotion/renderer": "4.0.102",
37
- "@remotion/player": "4.0.102",
38
- "@remotion/studio-server": "4.0.102",
39
- "@remotion/studio": "4.0.102",
40
- "remotion": "4.0.102"
34
+ "@remotion/bundler": "4.0.104",
35
+ "@remotion/media-utils": "4.0.104",
36
+ "@remotion/player": "4.0.104",
37
+ "@remotion/renderer": "4.0.104",
38
+ "@remotion/studio-server": "4.0.104",
39
+ "@remotion/studio": "4.0.104",
40
+ "remotion": "4.0.104"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "react": ">=16.8.0",
@@ -62,8 +62,8 @@
62
62
  "react-dom": "18.2.0",
63
63
  "vitest": "0.31.1",
64
64
  "zod": "^3.22.3",
65
- "@remotion/zod-types": "4.0.102",
66
- "@remotion/tailwind": "4.0.102"
65
+ "@remotion/zod-types": "4.0.104",
66
+ "@remotion/tailwind": "4.0.104"
67
67
  },
68
68
  "keywords": [
69
69
  "remotion",