@remotion/cli 4.0.0-fastlambda.8 → 4.0.0-lambda.1

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 (240) hide show
  1. package/dist/bundle-on-cli.d.ts +2 -0
  2. package/dist/bundle-on-cli.js +41 -0
  3. package/dist/bundle.d.ts +1 -0
  4. package/dist/bundle.js +31 -0
  5. package/dist/compositions.js +14 -3
  6. package/dist/download-progress.js +4 -1
  7. package/dist/editor/components/AudioWaveform.js +2 -2
  8. package/dist/editor/components/AudioWaveformBar.js +1 -1
  9. package/dist/editor/components/Canvas.js +1 -1
  10. package/dist/editor/components/CheckboardToggle.js +1 -1
  11. package/dist/editor/components/ClipboardIcon.js +1 -1
  12. package/dist/editor/components/CollapsedCompositionSelector.d.ts +4 -0
  13. package/dist/editor/components/CollapsedCompositionSelector.js +39 -0
  14. package/dist/editor/components/CompositionSelector.js +5 -45
  15. package/dist/editor/components/CompositionSelectorItem.js +3 -3
  16. package/dist/editor/components/ControlButton.js +1 -1
  17. package/dist/editor/components/CopyButton.js +2 -2
  18. package/dist/editor/components/CurrentComposition.js +2 -2
  19. package/dist/editor/components/Editor.js +24 -8
  20. package/dist/editor/components/EditorContent.js +3 -2
  21. package/dist/editor/components/FpsCounter.js +1 -1
  22. package/dist/editor/components/InitialCompositionLoader.d.ts +4 -0
  23. package/dist/editor/components/InitialCompositionLoader.js +60 -0
  24. package/dist/editor/components/KeyboardShortcutsModal.js +1 -1
  25. package/dist/editor/components/LoadingIndicator.js +1 -1
  26. package/dist/editor/components/LoopToggle.js +1 -1
  27. package/dist/editor/components/Menu/MenuDivider.js +1 -1
  28. package/dist/editor/components/Menu/MenuItem.js +3 -3
  29. package/dist/editor/components/Menu/MenuSubItem.js +3 -3
  30. package/dist/editor/components/Menu/SubMenu.js +1 -1
  31. package/dist/editor/components/MenuBuildIndicator.d.ts +2 -0
  32. package/dist/editor/components/MenuBuildIndicator.js +26 -0
  33. package/dist/editor/components/MenuToolbar.js +69 -9
  34. package/dist/editor/components/ModalContainer.js +1 -1
  35. package/dist/editor/components/ModalHeader.js +1 -1
  36. package/dist/editor/components/MuteToggle.js +1 -1
  37. package/dist/editor/components/NewComposition/CancelButton.js +1 -1
  38. package/dist/editor/components/NewComposition/ComboBox.js +3 -3
  39. package/dist/editor/components/NewComposition/CopyHint.js +1 -1
  40. package/dist/editor/components/NewComposition/InputDragger.js +2 -2
  41. package/dist/editor/components/NewComposition/MenuContent.js +1 -1
  42. package/dist/editor/components/NewComposition/NewCompAspectRatio.js +1 -1
  43. package/dist/editor/components/NewComposition/NewCompDuration.js +1 -1
  44. package/dist/editor/components/NewComposition/NewComposition.js +4 -4
  45. package/dist/editor/components/NewComposition/RemInput.js +1 -1
  46. package/dist/editor/components/NewComposition/ToggleAspectRatio.js +1 -1
  47. package/dist/editor/components/NewComposition/ValidationMessage.js +2 -2
  48. package/dist/editor/components/NoRegisterRoot.d.ts +2 -0
  49. package/dist/editor/components/NoRegisterRoot.js +41 -0
  50. package/dist/editor/components/PlayPause.js +40 -11
  51. package/dist/editor/components/PlaybackRateSelector.js +2 -2
  52. package/dist/editor/components/Preview.js +10 -7
  53. package/dist/editor/components/PreviewToolbar.js +1 -1
  54. package/dist/editor/components/RichTimelineToggle.js +1 -1
  55. package/dist/editor/components/SizeSelector.js +2 -2
  56. package/dist/editor/components/Splitter/SplitterContainer.js +1 -1
  57. package/dist/editor/components/Splitter/SplitterElement.js +4 -2
  58. package/dist/editor/components/Splitter/SplitterHandle.d.ts +4 -1
  59. package/dist/editor/components/Splitter/SplitterHandle.js +28 -7
  60. package/dist/editor/components/Thumbnail.js +1 -1
  61. package/dist/editor/components/TimeValue.js +1 -1
  62. package/dist/editor/components/Timeline/LoopedIndicator.js +2 -2
  63. package/dist/editor/components/Timeline/LoopedTimelineIndicators.js +3 -3
  64. package/dist/editor/components/Timeline/MaxTimelineTracks.js +1 -1
  65. package/dist/editor/components/Timeline/Timeline.js +2 -1
  66. package/dist/editor/components/Timeline/TimelineCollapseToggle.js +2 -2
  67. package/dist/editor/components/Timeline/TimelineDragHandler.js +1 -1
  68. package/dist/editor/components/Timeline/TimelineInOutPointer.js +2 -2
  69. package/dist/editor/components/Timeline/TimelineInOutPointerHandle.js +1 -1
  70. package/dist/editor/components/Timeline/TimelineList.js +1 -1
  71. package/dist/editor/components/Timeline/TimelineListItem.js +1 -1
  72. package/dist/editor/components/Timeline/TimelineSequence.js +1 -1
  73. package/dist/editor/components/Timeline/TimelineSequenceFrame.js +1 -1
  74. package/dist/editor/components/Timeline/TimelineSlider.js +1 -1
  75. package/dist/editor/components/Timeline/TimelineSliderHandle.js +1 -1
  76. package/dist/editor/components/Timeline/TimelineTracks.js +2 -2
  77. package/dist/editor/components/Timeline/TimelineVideoInfo.js +1 -1
  78. package/dist/editor/components/TimelineInOutToggle.js +1 -1
  79. package/dist/editor/components/TopPanel.js +24 -1
  80. package/dist/editor/components/UpdateCheck.d.ts +1 -1
  81. package/dist/editor/components/UpdateCheck.js +1 -1
  82. package/dist/editor/components/UpdateModal/UpdateModal.js +1 -1
  83. package/dist/editor/components/layout.js +4 -4
  84. package/dist/editor/helpers/use-compact-ui.d.ts +1 -0
  85. package/dist/editor/helpers/use-compact-ui.js +18 -0
  86. package/dist/editor/icons/Checkmark.js +1 -1
  87. package/dist/editor/icons/caret.d.ts +1 -1
  88. package/dist/editor/icons/caret.js +4 -4
  89. package/dist/editor/icons/film.js +1 -1
  90. package/dist/editor/icons/folder.js +2 -2
  91. package/dist/editor/icons/jump-to-start.d.ts +2 -0
  92. package/dist/editor/icons/jump-to-start.js +8 -0
  93. package/dist/editor/icons/keys.js +3 -3
  94. package/dist/editor/icons/lock.js +2 -2
  95. package/dist/editor/icons/media-volume.js +2 -2
  96. package/dist/editor/icons/pause.js +1 -1
  97. package/dist/editor/icons/play.js +1 -1
  98. package/dist/editor/icons/step-back.js +1 -1
  99. package/dist/editor/icons/step-forward.js +1 -1
  100. package/dist/editor/icons/still.js +1 -1
  101. package/dist/editor/icons/timeline.js +1 -1
  102. package/dist/editor/icons/timelineInOutPointer.js +2 -2
  103. package/dist/editor/state/folders.d.ts +11 -0
  104. package/dist/editor/state/folders.js +23 -0
  105. package/dist/editor/state/highest-z-index.js +2 -2
  106. package/dist/editor/state/keybindings.js +1 -1
  107. package/dist/editor/state/sidebar.d.ts +12 -0
  108. package/dist/editor/state/sidebar.js +40 -0
  109. package/dist/editor/state/z-index.js +1 -1
  110. package/dist/get-cli-options.d.ts +3 -1
  111. package/dist/get-cli-options.js +8 -2
  112. package/dist/get-latest-remotion-version.d.ts +1 -0
  113. package/dist/get-latest-remotion-version.js +31 -0
  114. package/dist/index.d.ts +3 -1
  115. package/dist/index.js +5 -1
  116. package/dist/lambda-command.js +5 -1
  117. package/dist/parse-command-line.d.ts +1 -0
  118. package/dist/parse-command-line.js +6 -0
  119. package/dist/prepare-entry-point.d.ts +11 -0
  120. package/dist/prepare-entry-point.js +36 -0
  121. package/dist/preview-server/dev-middleware/compatible-api.d.ts +7 -0
  122. package/dist/preview-server/dev-middleware/compatible-api.js +20 -0
  123. package/dist/preview-server/dev-middleware/get-paths.d.ts +7 -0
  124. package/dist/preview-server/dev-middleware/get-paths.js +19 -0
  125. package/dist/preview-server/dev-middleware/index.d.ts +3 -0
  126. package/dist/preview-server/dev-middleware/index.js +27 -0
  127. package/dist/preview-server/dev-middleware/is-color-supported.d.ts +1 -0
  128. package/dist/preview-server/dev-middleware/is-color-supported.js +37 -0
  129. package/dist/preview-server/dev-middleware/middleware.d.ts +10 -0
  130. package/dist/preview-server/dev-middleware/middleware.js +224 -0
  131. package/dist/preview-server/dev-middleware/range-parser.d.ts +15 -0
  132. package/dist/preview-server/dev-middleware/range-parser.js +96 -0
  133. package/dist/preview-server/dev-middleware/ready.d.ts +3 -0
  134. package/dist/preview-server/dev-middleware/ready.js +11 -0
  135. package/dist/preview-server/dev-middleware/setup-hooks.d.ts +2 -0
  136. package/dist/preview-server/dev-middleware/setup-hooks.js +42 -0
  137. package/dist/preview-server/dev-middleware/setup-output-filesystem.d.ts +2 -0
  138. package/dist/preview-server/dev-middleware/setup-output-filesystem.js +13 -0
  139. package/dist/preview-server/dev-middleware/types.d.ts +10 -0
  140. package/dist/preview-server/dev-middleware/types.js +2 -0
  141. package/dist/preview-server/error-overlay/entry-basic.d.ts +1 -0
  142. package/dist/preview-server/error-overlay/entry-basic.js +21 -0
  143. package/dist/preview-server/error-overlay/react-overlay/effects/format-warning.d.ts +11 -0
  144. package/dist/preview-server/error-overlay/react-overlay/effects/format-warning.js +41 -0
  145. package/dist/preview-server/error-overlay/react-overlay/effects/map-error-to-react-stack.d.ts +7 -0
  146. package/dist/preview-server/error-overlay/react-overlay/effects/map-error-to-react-stack.js +46 -0
  147. package/dist/preview-server/error-overlay/react-overlay/effects/proxy-console.d.ts +24 -0
  148. package/dist/preview-server/error-overlay/react-overlay/effects/proxy-console.js +64 -0
  149. package/dist/preview-server/error-overlay/react-overlay/effects/resolve-file-source.d.ts +3 -0
  150. package/dist/preview-server/error-overlay/react-overlay/effects/resolve-file-source.js +31 -0
  151. package/dist/preview-server/error-overlay/react-overlay/effects/stack-trace-limit.d.ts +3 -0
  152. package/dist/preview-server/error-overlay/react-overlay/effects/stack-trace-limit.js +43 -0
  153. package/dist/preview-server/error-overlay/react-overlay/effects/unhandled-error.d.ts +4 -0
  154. package/dist/preview-server/error-overlay/react-overlay/effects/unhandled-error.js +45 -0
  155. package/dist/preview-server/error-overlay/react-overlay/effects/unhandled-rejection.d.ts +4 -0
  156. package/dist/preview-server/error-overlay/react-overlay/effects/unhandled-rejection.js +41 -0
  157. package/dist/preview-server/error-overlay/react-overlay/index.d.ts +2 -0
  158. package/dist/preview-server/error-overlay/react-overlay/index.js +21 -0
  159. package/dist/preview-server/error-overlay/react-overlay/listen-to-runtime-errors.d.ts +8 -0
  160. package/dist/preview-server/error-overlay/react-overlay/listen-to-runtime-errors.js +79 -0
  161. package/dist/preview-server/error-overlay/react-overlay/utils/get-file-source.d.ts +1 -0
  162. package/dist/preview-server/error-overlay/react-overlay/utils/get-file-source.js +21 -0
  163. package/dist/preview-server/error-overlay/react-overlay/utils/get-lines-around.d.ts +14 -0
  164. package/dist/preview-server/error-overlay/react-overlay/utils/get-lines-around.js +24 -0
  165. package/dist/preview-server/error-overlay/react-overlay/utils/get-source-map.d.ts +13 -0
  166. package/dist/preview-server/error-overlay/react-overlay/utils/get-source-map.js +58 -0
  167. package/dist/preview-server/error-overlay/react-overlay/utils/get-stack-frames.d.ts +2 -0
  168. package/dist/preview-server/error-overlay/react-overlay/utils/get-stack-frames.js +27 -0
  169. package/dist/preview-server/error-overlay/react-overlay/utils/open-in-editor.d.ts +12 -0
  170. package/dist/preview-server/error-overlay/react-overlay/utils/open-in-editor.js +460 -0
  171. package/dist/preview-server/error-overlay/react-overlay/utils/parser.d.ts +2 -0
  172. package/dist/preview-server/error-overlay/react-overlay/utils/parser.js +117 -0
  173. package/dist/preview-server/error-overlay/react-overlay/utils/stack-frame.d.ts +40 -0
  174. package/dist/preview-server/error-overlay/react-overlay/utils/stack-frame.js +31 -0
  175. package/dist/preview-server/error-overlay/react-overlay/utils/unmapper.d.ts +2 -0
  176. package/dist/preview-server/error-overlay/react-overlay/utils/unmapper.js +64 -0
  177. package/dist/preview-server/error-overlay/remotion-overlay/AskOnDiscord.d.ts +2 -0
  178. package/dist/preview-server/error-overlay/remotion-overlay/AskOnDiscord.js +14 -0
  179. package/dist/preview-server/error-overlay/remotion-overlay/Button.d.ts +6 -0
  180. package/dist/preview-server/error-overlay/remotion-overlay/Button.js +24 -0
  181. package/dist/preview-server/error-overlay/remotion-overlay/CodeFrame.d.ts +6 -0
  182. package/dist/preview-server/error-overlay/remotion-overlay/CodeFrame.js +28 -0
  183. package/dist/preview-server/error-overlay/remotion-overlay/DismissButton.d.ts +2 -0
  184. package/dist/preview-server/error-overlay/remotion-overlay/DismissButton.js +23 -0
  185. package/dist/preview-server/error-overlay/remotion-overlay/ErrorDisplay.d.ts +5 -0
  186. package/dist/preview-server/error-overlay/remotion-overlay/ErrorDisplay.js +45 -0
  187. package/dist/preview-server/error-overlay/remotion-overlay/ErrorLoader.d.ts +4 -0
  188. package/dist/preview-server/error-overlay/remotion-overlay/ErrorLoader.js +61 -0
  189. package/dist/preview-server/error-overlay/remotion-overlay/ErrorTitle.d.ts +6 -0
  190. package/dist/preview-server/error-overlay/remotion-overlay/ErrorTitle.js +41 -0
  191. package/dist/preview-server/error-overlay/remotion-overlay/OpenInEditor.d.ts +5 -0
  192. package/dist/preview-server/error-overlay/remotion-overlay/OpenInEditor.js +91 -0
  193. package/dist/preview-server/error-overlay/remotion-overlay/Overlay.d.ts +14 -0
  194. package/dist/preview-server/error-overlay/remotion-overlay/Overlay.js +49 -0
  195. package/dist/preview-server/error-overlay/remotion-overlay/SearchGitHubIssues.d.ts +4 -0
  196. package/dist/preview-server/error-overlay/remotion-overlay/SearchGitHubIssues.js +13 -0
  197. package/dist/preview-server/error-overlay/remotion-overlay/StackFrame.d.ts +8 -0
  198. package/dist/preview-server/error-overlay/remotion-overlay/StackFrame.js +48 -0
  199. package/dist/preview-server/error-overlay/remotion-overlay/Symbolicating.d.ts +2 -0
  200. package/dist/preview-server/error-overlay/remotion-overlay/Symbolicating.js +8 -0
  201. package/dist/preview-server/error-overlay/remotion-overlay/carets.d.ts +3 -0
  202. package/dist/preview-server/error-overlay/remotion-overlay/carets.js +12 -0
  203. package/dist/preview-server/error-overlay/remotion-overlay/format-location.d.ts +1 -0
  204. package/dist/preview-server/error-overlay/remotion-overlay/format-location.js +10 -0
  205. package/dist/preview-server/error-overlay/remotion-overlay/index.d.ts +1 -0
  206. package/dist/preview-server/error-overlay/remotion-overlay/index.js +18 -0
  207. package/dist/preview-server/get-package-manager.d.ts +9 -0
  208. package/dist/preview-server/get-package-manager.js +40 -0
  209. package/dist/preview-server/hot-middleware/client.d.ts +19 -0
  210. package/dist/preview-server/hot-middleware/client.js +177 -0
  211. package/dist/preview-server/hot-middleware/index.d.ts +8 -0
  212. package/dist/preview-server/hot-middleware/index.js +150 -0
  213. package/dist/preview-server/hot-middleware/process-update.d.ts +12 -0
  214. package/dist/preview-server/hot-middleware/process-update.js +144 -0
  215. package/dist/preview-server/hot-middleware/strip-ansi.d.ts +1 -0
  216. package/dist/preview-server/hot-middleware/strip-ansi.js +21 -0
  217. package/dist/preview-server/hot-middleware/types.d.ts +27 -0
  218. package/dist/preview-server/hot-middleware/types.js +10 -0
  219. package/dist/preview-server/project-info.d.ts +5 -0
  220. package/dist/preview-server/project-info.js +22 -0
  221. package/dist/preview-server/routes.d.ts +7 -0
  222. package/dist/preview-server/routes.js +128 -0
  223. package/dist/preview-server/serve-static.d.ts +9 -0
  224. package/dist/preview-server/serve-static.js +77 -0
  225. package/dist/preview-server/start-server.d.ts +8 -0
  226. package/dist/preview-server/start-server.js +69 -0
  227. package/dist/preview-server/update-available.d.ts +11 -0
  228. package/dist/preview-server/update-available.js +44 -0
  229. package/dist/preview.js +2 -2
  230. package/dist/previewEntry.js +2 -2
  231. package/dist/print-error.js +1 -0
  232. package/dist/print-help.js +3 -3
  233. package/dist/render.js +30 -24
  234. package/dist/still.js +46 -15
  235. package/dist/upgrade.js +9 -7
  236. package/dist/versions.js +3 -0
  237. package/dist/webpack-cache.d.ts +12 -0
  238. package/dist/webpack-cache.js +66 -0
  239. package/package.json +12 -10
  240. package/web/favicon.png +0 -0
@@ -0,0 +1,7 @@
1
+ import { IncomingMessage, ServerResponse } from 'http';
2
+ export declare const handleRoutes: ({ hash, hashPrefix, request, response, }: {
3
+ hash: string;
4
+ hashPrefix: string;
5
+ request: IncomingMessage;
6
+ response: ServerResponse;
7
+ }) => void | Promise<void>;
@@ -0,0 +1,128 @@
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.handleRoutes = void 0;
7
+ const bundler_1 = require("@remotion/bundler");
8
+ const fs_1 = require("fs");
9
+ const path_1 = __importDefault(require("path"));
10
+ const url_1 = require("url");
11
+ const get_file_source_1 = require("./error-overlay/react-overlay/utils/get-file-source");
12
+ const open_in_editor_1 = require("./error-overlay/react-overlay/utils/open-in-editor");
13
+ const project_info_1 = require("./project-info");
14
+ const serve_static_1 = require("./serve-static");
15
+ const update_available_1 = require("./update-available");
16
+ const handleUpdate = async (_, response) => {
17
+ const data = await (0, update_available_1.isUpdateAvailableWithTimeout)();
18
+ response.setHeader('content-type', 'application/json');
19
+ response.writeHead(200);
20
+ response.end(JSON.stringify(data));
21
+ };
22
+ const editorGuess = (0, open_in_editor_1.guessEditor)();
23
+ const static404 = (response) => {
24
+ response.writeHead(404);
25
+ response.end('The static/ prefix has been changed, this URL is no longer valid.');
26
+ };
27
+ const handleFallback = async (hash, _, response) => {
28
+ const edit = await editorGuess;
29
+ const displayName = (0, open_in_editor_1.getDisplayNameForEditor)(edit[0]);
30
+ response.setHeader('content-type', 'text/html');
31
+ response.writeHead(200);
32
+ response.end(bundler_1.BundlerInternals.indexHtml(hash, '/', displayName));
33
+ };
34
+ const handleProjectInfo = async (_, response) => {
35
+ const data = await (0, project_info_1.getProjectInfo)();
36
+ response.setHeader('content-type', 'application/json');
37
+ response.writeHead(200);
38
+ response.end(JSON.stringify(data));
39
+ };
40
+ const handleFileSource = async (search, _, response) => {
41
+ if (!search.startsWith('?')) {
42
+ throw new Error('query must start with ?');
43
+ }
44
+ const query = new url_1.URLSearchParams(search);
45
+ const f = query.get('f');
46
+ if (typeof f !== 'string') {
47
+ throw new Error('must pass `f` parameter');
48
+ }
49
+ const data = await (0, get_file_source_1.getFileSource)(decodeURIComponent(f));
50
+ response.writeHead(200);
51
+ response.write(data);
52
+ return response.end();
53
+ };
54
+ const handleOpenInEditor = async (req, res) => {
55
+ try {
56
+ const b = await new Promise((_resolve) => {
57
+ let data = '';
58
+ req.on('data', (chunk) => {
59
+ data += chunk;
60
+ });
61
+ req.on('end', () => {
62
+ _resolve(data.toString());
63
+ });
64
+ });
65
+ const body = JSON.parse(b);
66
+ if (!('stack' in body)) {
67
+ throw new TypeError('Need to pass stack');
68
+ }
69
+ const stack = body.stack;
70
+ const guess = await editorGuess;
71
+ const didOpen = await (0, open_in_editor_1.launchEditor)({
72
+ colNumber: stack.originalColumnNumber,
73
+ editor: guess[0],
74
+ fileName: path_1.default.resolve(process.cwd(), stack.originalFileName),
75
+ lineNumber: stack.originalLineNumber,
76
+ vsCodeNewWindow: false,
77
+ });
78
+ res.setHeader('content-type', 'application/json');
79
+ res.writeHead(200);
80
+ res.end(JSON.stringify({
81
+ success: didOpen,
82
+ }));
83
+ }
84
+ catch (err) {
85
+ res.setHeader('content-type', 'application/json');
86
+ res.writeHead(200);
87
+ res.end(JSON.stringify({
88
+ success: false,
89
+ }));
90
+ }
91
+ };
92
+ const handleFavicon = (_, response) => {
93
+ const filePath = path_1.default.join(__dirname, '..', '..', 'web', 'favicon.png');
94
+ const stat = (0, fs_1.statSync)(filePath);
95
+ response.writeHead(200, {
96
+ 'Content-Type': 'image/png',
97
+ 'Content-Length': stat.size,
98
+ });
99
+ const readStream = (0, fs_1.createReadStream)(filePath);
100
+ readStream.pipe(response);
101
+ };
102
+ const handleRoutes = ({ hash, hashPrefix, request, response, }) => {
103
+ const url = new URL(request.url, 'http://localhost');
104
+ if (url.pathname === '/api/update') {
105
+ return handleUpdate(request, response);
106
+ }
107
+ if (url.pathname === '/api/project-info') {
108
+ return handleProjectInfo(request, response);
109
+ }
110
+ if (url.pathname === '/api/file-source') {
111
+ return handleFileSource(url.search, request, response);
112
+ }
113
+ if (url.pathname === '/api/open-in-editor') {
114
+ return handleOpenInEditor(request, response);
115
+ }
116
+ if (url.pathname === '/remotion.png') {
117
+ return handleFavicon(request, response);
118
+ }
119
+ if (url.pathname.startsWith(hash)) {
120
+ const root = path_1.default.join(process.cwd(), 'public');
121
+ return (0, serve_static_1.serveStatic)(root, hash, request, response);
122
+ }
123
+ if (url.pathname.startsWith(hashPrefix)) {
124
+ return static404(response);
125
+ }
126
+ return handleFallback(hash, request, response);
127
+ };
128
+ exports.handleRoutes = handleRoutes;
@@ -0,0 +1,9 @@
1
+ /*!
2
+ * serve-static
3
+ * Copyright(c) 2010 Sencha Inc.
4
+ * Copyright(c) 2011 TJ Holowaychuk
5
+ * Copyright(c) 2014-2016 Douglas Christopher Wilson
6
+ * MIT Licensed
7
+ */
8
+ import { IncomingMessage, ServerResponse } from 'http';
9
+ export declare const serveStatic: (root: string, hash: string, req: IncomingMessage, res: ServerResponse) => Promise<void>;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /*!
3
+ * serve-static
4
+ * Copyright(c) 2010 Sencha Inc.
5
+ * Copyright(c) 2011 TJ Holowaychuk
6
+ * Copyright(c) 2014-2016 Douglas Christopher Wilson
7
+ * MIT Licensed
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.serveStatic = void 0;
11
+ const renderer_1 = require("@remotion/renderer");
12
+ const fs_1 = require("fs");
13
+ const path_1 = require("path");
14
+ const middleware_1 = require("./dev-middleware/middleware");
15
+ const range_parser_1 = require("./dev-middleware/range-parser");
16
+ const serveStatic = async function (root, hash, req, res) {
17
+ if (req.method !== 'GET' && req.method !== 'HEAD') {
18
+ // method not allowed
19
+ res.statusCode = 405;
20
+ res.setHeader('Allow', 'GET, HEAD');
21
+ res.setHeader('Content-Length', '0');
22
+ res.end();
23
+ return;
24
+ }
25
+ const path = (0, path_1.join)(root, new URL(req.url, 'http://localhost').pathname.replace(new RegExp(`^${hash}`), ''));
26
+ if (!renderer_1.RenderInternals.isPathInside(path, root)) {
27
+ res.writeHead(500);
28
+ res.write('Not allowed to read');
29
+ res.end();
30
+ return;
31
+ }
32
+ const exists = (0, fs_1.existsSync)(path);
33
+ if (!exists) {
34
+ res.writeHead(404);
35
+ res.write(`${path} does not exist`);
36
+ res.end();
37
+ return;
38
+ }
39
+ const lstat = await fs_1.promises.lstat(path);
40
+ const isDirectory = lstat.isDirectory();
41
+ if (isDirectory) {
42
+ res.writeHead(500);
43
+ res.write('Is a directory');
44
+ res.end();
45
+ return;
46
+ }
47
+ const hasRange = req.headers.range && lstat.size;
48
+ if (!hasRange) {
49
+ const readStream = (0, fs_1.createReadStream)(path);
50
+ res.setHeader('content-type', renderer_1.RenderInternals.mime.lookup(path) || 'application/octet-stream');
51
+ res.setHeader('content-length', lstat.size);
52
+ res.writeHead(200);
53
+ readStream.pipe(res);
54
+ return;
55
+ }
56
+ const range = (0, range_parser_1.parseRange)(lstat.size, req.headers.range);
57
+ if (typeof range === 'object' && range.type === 'bytes') {
58
+ const { start, end } = range[0];
59
+ res.setHeader('content-type', renderer_1.RenderInternals.mime.lookup(path) || 'application/octet-stream');
60
+ res.setHeader('content-range', (0, middleware_1.getValueContentRangeHeader)('bytes', lstat.size, {
61
+ end,
62
+ start,
63
+ }));
64
+ res.setHeader('content-length', end - start + 1);
65
+ res.writeHead(206);
66
+ const readStream = (0, fs_1.createReadStream)(path, {
67
+ start,
68
+ end,
69
+ });
70
+ readStream.pipe(res);
71
+ return;
72
+ }
73
+ res.statusCode = 416;
74
+ res.setHeader('Content-Range', `bytes */${lstat.size}`);
75
+ res.end();
76
+ };
77
+ exports.serveStatic = serveStatic;
@@ -0,0 +1,8 @@
1
+ import { WebpackOverrideFn } from 'remotion';
2
+ export declare const startServer: (entry: string, userDefinedComponent: string, options?: {
3
+ webpackOverride?: WebpackOverrideFn;
4
+ inputProps?: object;
5
+ envVariables?: Record<string, string>;
6
+ port: number | null;
7
+ maxTimelineTracks?: number;
8
+ }) => Promise<number>;
@@ -0,0 +1,69 @@
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.startServer = void 0;
7
+ const bundler_1 = require("@remotion/bundler");
8
+ const renderer_1 = require("@remotion/renderer");
9
+ const crypto_1 = __importDefault(require("crypto"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const http_1 = __importDefault(require("http"));
12
+ const os_1 = __importDefault(require("os"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const remotion_1 = require("remotion");
15
+ const dev_middleware_1 = require("./dev-middleware");
16
+ const hot_middleware_1 = require("./hot-middleware");
17
+ const routes_1 = require("./routes");
18
+ const startServer = async (entry, userDefinedComponent, options) => {
19
+ var _a, _b, _c, _d, _e;
20
+ const tmpDir = await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), 'react-motion-graphics'));
21
+ const config = bundler_1.BundlerInternals.webpackConfig({
22
+ entry,
23
+ userDefinedComponent,
24
+ outDir: tmpDir,
25
+ environment: 'development',
26
+ webpackOverride: (_a = options === null || options === void 0 ? void 0 : options.webpackOverride) !== null && _a !== void 0 ? _a : remotion_1.Internals.getWebpackOverrideFn(),
27
+ inputProps: (_b = options === null || options === void 0 ? void 0 : options.inputProps) !== null && _b !== void 0 ? _b : {},
28
+ envVariables: (_c = options === null || options === void 0 ? void 0 : options.envVariables) !== null && _c !== void 0 ? _c : {},
29
+ maxTimelineTracks: (_d = options === null || options === void 0 ? void 0 : options.maxTimelineTracks) !== null && _d !== void 0 ? _d : 15,
30
+ entryPoints: [
31
+ require.resolve('./hot-middleware/client'),
32
+ require.resolve('./error-overlay/entry-basic.js'),
33
+ ],
34
+ });
35
+ const compiler = (0, bundler_1.webpack)(config);
36
+ const hashPrefix = '/static-';
37
+ const hash = `${hashPrefix}${crypto_1.default.randomBytes(6).toString('hex')}`;
38
+ const wdmMiddleware = (0, dev_middleware_1.wdm)(compiler);
39
+ const whm = (0, hot_middleware_1.webpackHotMiddleware)(compiler);
40
+ const server = http_1.default.createServer((request, response) => {
41
+ new Promise((resolve) => {
42
+ wdmMiddleware(request, response, () => {
43
+ resolve();
44
+ });
45
+ })
46
+ .then(() => {
47
+ return new Promise((resolve) => {
48
+ whm(request, response, () => {
49
+ resolve();
50
+ });
51
+ });
52
+ })
53
+ .then(() => {
54
+ (0, routes_1.handleRoutes)({ hash, hashPrefix, request, response });
55
+ })
56
+ .catch((err) => {
57
+ response.setHeader('content-type', 'application/json');
58
+ response.writeHead(500);
59
+ response.end(JSON.stringify({
60
+ err: err.message,
61
+ }));
62
+ });
63
+ });
64
+ const desiredPort = (_e = options === null || options === void 0 ? void 0 : options.port) !== null && _e !== void 0 ? _e : undefined;
65
+ const port = await renderer_1.RenderInternals.getDesiredPort(desiredPort, 3000, 3100);
66
+ server.listen(port);
67
+ return port;
68
+ };
69
+ exports.startServer = startServer;
@@ -0,0 +1,11 @@
1
+ import { PackageManager } from './get-package-manager';
2
+ declare type Info = {
3
+ currentVersion: string;
4
+ latestVersion: string;
5
+ updateAvailable: boolean;
6
+ timedOut: boolean;
7
+ packageManager: PackageManager | 'unknown';
8
+ };
9
+ export declare const getRemotionVersion: () => any;
10
+ export declare const isUpdateAvailableWithTimeout: () => Promise<Info>;
11
+ export {};
@@ -0,0 +1,44 @@
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.isUpdateAvailableWithTimeout = exports.getRemotionVersion = void 0;
7
+ const semver_1 = __importDefault(require("semver"));
8
+ const get_latest_remotion_version_1 = require("../get-latest-remotion-version");
9
+ const get_package_manager_1 = require("./get-package-manager");
10
+ const isUpdateAvailable = async (currentVersion) => {
11
+ const latest = await (0, get_latest_remotion_version_1.getLatestRemotionVersion)();
12
+ const pkgManager = (0, get_package_manager_1.getPackageManager)();
13
+ return {
14
+ updateAvailable: semver_1.default.lt(currentVersion, latest),
15
+ currentVersion,
16
+ latestVersion: latest,
17
+ timedOut: false,
18
+ packageManager: pkgManager === 'unknown' ? 'unknown' : pkgManager.manager,
19
+ };
20
+ };
21
+ const getRemotionVersion = () => {
22
+ // careful when refactoring this file, path must be adjusted
23
+ const packageJson = require('../../package.json');
24
+ const { version } = packageJson;
25
+ return version;
26
+ };
27
+ exports.getRemotionVersion = getRemotionVersion;
28
+ const isUpdateAvailableWithTimeout = () => {
29
+ const version = (0, exports.getRemotionVersion)();
30
+ const threeSecTimeout = new Promise((resolve) => {
31
+ const pkgManager = (0, get_package_manager_1.getPackageManager)();
32
+ setTimeout(() => {
33
+ resolve({
34
+ currentVersion: version,
35
+ latestVersion: version,
36
+ updateAvailable: false,
37
+ timedOut: true,
38
+ packageManager: pkgManager === 'unknown' ? 'unknown' : pkgManager.manager,
39
+ });
40
+ }, 3000);
41
+ });
42
+ return Promise.race([threeSecTimeout, isUpdateAvailable(version)]);
43
+ };
44
+ exports.isUpdateAvailableWithTimeout = isUpdateAvailableWithTimeout;
package/dist/preview.js CHANGED
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.previewCommand = void 0;
7
- const bundler_1 = require("@remotion/bundler");
8
7
  const better_opn_1 = __importDefault(require("better-opn"));
9
8
  const path_1 = __importDefault(require("path"));
10
9
  const remotion_1 = require("remotion");
@@ -13,6 +12,7 @@ const get_input_props_1 = require("./get-input-props");
13
12
  const initialize_render_cli_1 = require("./initialize-render-cli");
14
13
  const log_1 = require("./log");
15
14
  const parse_command_line_1 = require("./parse-command-line");
15
+ const start_server_1 = require("./preview-server/start-server");
16
16
  const noop = () => undefined;
17
17
  const previewCommand = async () => {
18
18
  const file = parse_command_line_1.parsedCli._[1];
@@ -27,7 +27,7 @@ const previewCommand = async () => {
27
27
  await (0, initialize_render_cli_1.initializeRenderCli)('preview');
28
28
  const inputProps = (0, get_input_props_1.getInputProps)();
29
29
  const envVariables = await (0, get_env_1.getEnvironmentVariables)();
30
- const port = await bundler_1.BundlerInternals.startServer(path_1.default.resolve(__dirname, 'previewEntry.js'), fullPath, {
30
+ const port = await (0, start_server_1.startServer)(path_1.default.resolve(__dirname, 'previewEntry.js'), fullPath, {
31
31
  inputProps,
32
32
  envVariables,
33
33
  port: desiredPort,
@@ -9,10 +9,10 @@ const remotion_1 = require("remotion");
9
9
  require("../styles/styles.css");
10
10
  const Editor_1 = require("./editor/components/Editor");
11
11
  remotion_1.Internals.CSSUtils.injectCSS(remotion_1.Internals.CSSUtils.makeDefaultCSS(null, '#1f2428'));
12
- const content = ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}, void 0) }, void 0));
12
+ const content = ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}) }));
13
13
  if (client_1.default.createRoot) {
14
14
  client_1.default.createRoot(remotion_1.Internals.getPreviewDomElement()).render(content);
15
15
  }
16
16
  else {
17
- client_1.default.render((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}, void 0) }, void 0), remotion_1.Internals.getPreviewDomElement());
17
+ client_1.default.render((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}) }), remotion_1.Internals.getPreviewDomElement());
18
18
  }
@@ -25,6 +25,7 @@ const printError = async (err) => {
25
25
  }
26
26
  catch (e) {
27
27
  output.update(chalk_1.default.red('(Error occurred symbolicating stack trace - printing minified stack trace)\n'));
28
+ log_1.Log.error();
28
29
  log_1.Log.error(err.stack || err);
29
30
  }
30
31
  return;
@@ -18,11 +18,11 @@ const printHelp = () => {
18
18
  log_1.Log.info();
19
19
  log_1.Log.info('Available commands:');
20
20
  log_1.Log.info('');
21
- log_1.Log.info('remotion preview <index-file.ts>');
21
+ log_1.Log.info('remotion preview <entry-point.ts>');
22
22
  log_1.Log.info(chalk_1.default.gray('Start the preview server.'));
23
23
  printFlags([['--props', 'Pass input props as filename or as JSON']]);
24
24
  log_1.Log.info();
25
- log_1.Log.info('remotion render <index-file.ts> <comp-name> <output-file.mp4>');
25
+ log_1.Log.info('remotion render <entry-point.ts> <comp-name> <output-file.mp4>');
26
26
  log_1.Log.info(chalk_1.default.gray('Render video, audio or an image sequence.'));
27
27
  printFlags([
28
28
  ['--props', 'Pass input props as filename or as JSON'],
@@ -43,7 +43,7 @@ const printHelp = () => {
43
43
  ['--env-file', 'Specify a location for a dotenv file'],
44
44
  ]);
45
45
  log_1.Log.info();
46
- log_1.Log.info('remotion still <index-file.ts> <comp-name> <still.png>');
46
+ log_1.Log.info('remotion still <entry-point.ts> <comp-name> <still.png>');
47
47
  log_1.Log.info(chalk_1.default.gray('Render a still frame and save it as an image.'));
48
48
  printFlags([
49
49
  ['--frame', 'Which frame to render (default 0)'],
package/dist/render.js CHANGED
@@ -31,13 +31,13 @@ const render = async () => {
31
31
  ? file
32
32
  : path_1.default.join(process.cwd(), file);
33
33
  await (0, initialize_render_cli_1.initializeRenderCli)('sequence');
34
- const { codec, proResProfile, parallelism, frameRange, shouldOutputImageSequence, absoluteOutputFile, overwrite, inputProps, envVariables, quality, browser, crf, pixelFormat, imageFormat, browserExecutable, ffmpegExecutable, scale, chromiumOptions, } = await (0, get_cli_options_1.getCliOptions)({ isLambda: false, type: 'series' });
34
+ const { codec, proResProfile, parallelism, frameRange, shouldOutputImageSequence, absoluteOutputFile, overwrite, inputProps, envVariables, quality, browser, crf, pixelFormat, imageFormat, browserExecutable, ffmpegExecutable, ffprobeExecutable, scale, chromiumOptions, port, puppeteerTimeout, } = await (0, get_cli_options_1.getCliOptions)({ isLambda: false, type: 'series' });
35
35
  if (!absoluteOutputFile) {
36
36
  throw new Error('assertion error - expected absoluteOutputFile to not be null');
37
37
  }
38
38
  log_1.Log.verbose('Browser executable: ', browserExecutable);
39
39
  await (0, validate_ffmpeg_version_1.checkAndValidateFfmpegVersion)({
40
- ffmpegExecutable: remotion_1.Internals.getCustomFfmpegExecutable(),
40
+ ffmpegExecutable,
41
41
  });
42
42
  const browserInstance = (0, renderer_1.openBrowser)(browser, {
43
43
  browserExecutable,
@@ -53,9 +53,22 @@ const render = async () => {
53
53
  const urlOrBundle = renderer_1.RenderInternals.isServeUrl(fullPath)
54
54
  ? fullPath
55
55
  : await (0, setup_cache_1.bundleOnCli)(fullPath, steps);
56
- const { serveUrl, closeServer } = await renderer_1.RenderInternals.prepareServer(urlOrBundle);
56
+ const onDownload = (src) => {
57
+ const id = Math.random();
58
+ const download = {
59
+ id,
60
+ name: src,
61
+ progress: 0,
62
+ };
63
+ downloads.push(download);
64
+ updateRenderProgress();
65
+ return ({ percent }) => {
66
+ download.progress = percent;
67
+ updateRenderProgress();
68
+ };
69
+ };
57
70
  const puppeteerInstance = await browserInstance;
58
- const comps = await (0, renderer_1.getCompositions)(serveUrl, {
71
+ const comps = await (0, renderer_1.getCompositions)(urlOrBundle, {
59
72
  inputProps,
60
73
  puppeteerInstance,
61
74
  envVariables,
@@ -140,16 +153,20 @@ const render = async () => {
140
153
  }
141
154
  },
142
155
  outputDir,
143
- serveUrl,
156
+ serveUrl: urlOrBundle,
144
157
  dumpBrowserLogs: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
145
158
  envVariables,
146
159
  frameRange,
147
160
  parallelism,
148
161
  puppeteerInstance,
149
162
  quality,
150
- timeoutInMilliseconds: remotion_1.Internals.getCurrentPuppeteerTimeout(),
163
+ timeoutInMilliseconds: puppeteerTimeout,
151
164
  chromiumOptions,
152
165
  scale,
166
+ ffmpegExecutable,
167
+ ffprobeExecutable,
168
+ browserExecutable,
169
+ port,
153
170
  });
154
171
  renderedDoneIn = Date.now() - startTime;
155
172
  updateRenderProgress();
@@ -165,6 +182,7 @@ const render = async () => {
165
182
  crf,
166
183
  envVariables,
167
184
  ffmpegExecutable,
185
+ ffprobeExecutable,
168
186
  frameRange,
169
187
  imageFormat,
170
188
  inputProps,
@@ -182,21 +200,8 @@ const render = async () => {
182
200
  pixelFormat,
183
201
  proResProfile,
184
202
  quality,
185
- serveUrl,
186
- onDownload: (src) => {
187
- const id = Math.random();
188
- const download = {
189
- id,
190
- name: src,
191
- progress: 0,
192
- };
193
- downloads.push(download);
194
- updateRenderProgress();
195
- return ({ percent }) => {
196
- download.progress = percent;
197
- updateRenderProgress();
198
- };
199
- },
203
+ serveUrl: urlOrBundle,
204
+ onDownload,
200
205
  dumpBrowserLogs: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
201
206
  onStart: ({ frameCount }) => {
202
207
  totalFrames = frameCount;
@@ -204,6 +209,7 @@ const render = async () => {
204
209
  chromiumOptions,
205
210
  timeoutInMilliseconds: remotion_1.Internals.getCurrentPuppeteerTimeout(),
206
211
  scale,
212
+ port,
207
213
  });
208
214
  log_1.Log.info();
209
215
  log_1.Log.info();
@@ -225,8 +231,8 @@ const render = async () => {
225
231
  log_1.Log.warn('Do you have minimum required Node.js version?');
226
232
  }
227
233
  log_1.Log.info(chalk_1.default.green('\nYour video is ready!'));
228
- closeServer().catch((err) => {
229
- log_1.Log.error('Could not close web server', err);
230
- });
234
+ if (remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose')) {
235
+ remotion_1.Internals.perf.logPerf();
236
+ }
231
237
  };
232
238
  exports.render = render;
package/dist/still.js CHANGED
@@ -33,7 +33,7 @@ const still = async () => {
33
33
  log_1.Log.verbose('Output file has a PNG extension, therefore setting the image format to PNG.');
34
34
  remotion_1.Config.Rendering.setImageFormat('png');
35
35
  }
36
- const { inputProps, envVariables, quality, browser, imageFormat, stillFrame, browserExecutable, chromiumOptions, scale, } = await (0, get_cli_options_1.getCliOptions)({ isLambda: false, type: 'still' });
36
+ const { inputProps, envVariables, quality, browser, imageFormat, stillFrame, browserExecutable, chromiumOptions, scale, ffmpegExecutable, ffprobeExecutable, overwrite, puppeteerTimeout, port, } = await (0, get_cli_options_1.getCliOptions)({ isLambda: false, type: 'still' });
37
37
  log_1.Log.verbose('Browser executable: ', browserExecutable);
38
38
  if (imageFormat === 'none') {
39
39
  log_1.Log.error('No image format was selected - this is probably an error in Remotion - please post your command on Github Issues for help.');
@@ -63,14 +63,17 @@ const still = async () => {
63
63
  const urlOrBundle = renderer_1.RenderInternals.isServeUrl(fullPath)
64
64
  ? Promise.resolve(fullPath)
65
65
  : await (0, setup_cache_1.bundleOnCli)(fullPath, steps);
66
- const { serveUrl, closeServer } = await renderer_1.RenderInternals.prepareServer(await urlOrBundle);
67
66
  const puppeteerInstance = await browserInstance;
68
- const comps = await (0, renderer_1.getCompositions)(serveUrl, {
67
+ const comps = await (0, renderer_1.getCompositions)(await urlOrBundle, {
69
68
  inputProps,
70
69
  puppeteerInstance,
71
70
  envVariables,
72
- timeoutInMilliseconds: remotion_1.Internals.getCurrentPuppeteerTimeout(),
71
+ timeoutInMilliseconds: puppeteerTimeout,
73
72
  chromiumOptions,
73
+ port,
74
+ browserExecutable,
75
+ ffmpegExecutable,
76
+ ffprobeExecutable,
74
77
  });
75
78
  const compositionId = (0, get_composition_id_1.getCompositionId)(comps);
76
79
  const composition = comps.find((c) => c.id === compositionId);
@@ -79,11 +82,42 @@ const still = async () => {
79
82
  }
80
83
  const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)((0, parse_command_line_1.quietFlagProvided)());
81
84
  const renderStart = Date.now();
85
+ const downloads = [];
86
+ let frames = 0;
87
+ const totalFrames = 1;
88
+ const updateProgress = () => {
89
+ renderProgress.update((0, progress_bar_1.makeRenderingAndStitchingProgress)({
90
+ rendering: {
91
+ frames,
92
+ concurrency: 1,
93
+ doneIn: frames === totalFrames ? Date.now() - renderStart : null,
94
+ steps,
95
+ totalFrames,
96
+ },
97
+ downloads,
98
+ stitching: null,
99
+ }));
100
+ };
101
+ updateProgress();
102
+ const onDownload = (src) => {
103
+ const id = Math.random();
104
+ const download = {
105
+ id,
106
+ name: src,
107
+ progress: 0,
108
+ };
109
+ downloads.push(download);
110
+ updateProgress();
111
+ return ({ percent }) => {
112
+ download.progress = percent;
113
+ updateProgress();
114
+ };
115
+ };
82
116
  await (0, renderer_1.renderStill)({
83
117
  composition,
84
118
  frame: stillFrame,
85
119
  output: userOutput,
86
- serveUrl,
120
+ serveUrl: await urlOrBundle,
87
121
  quality,
88
122
  dumpBrowserLogs: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
89
123
  envVariables,
@@ -92,18 +126,15 @@ const still = async () => {
92
126
  chromiumOptions,
93
127
  timeoutInMilliseconds: remotion_1.Internals.getCurrentPuppeteerTimeout(),
94
128
  scale,
129
+ ffmpegExecutable,
130
+ browserExecutable,
131
+ overwrite,
132
+ onDownload,
95
133
  });
134
+ frames = 1;
135
+ updateProgress();
136
+ log_1.Log.info();
96
137
  const closeBrowserPromise = puppeteerInstance.close();
97
- closeServer().catch((err) => {
98
- log_1.Log.error('Could not close web server', err);
99
- });
100
- renderProgress.update((0, progress_bar_1.makeRenderingProgress)({
101
- frames: 1,
102
- concurrency: 1,
103
- doneIn: Date.now() - renderStart,
104
- steps,
105
- totalFrames: 1,
106
- }));
107
138
  log_1.Log.info(chalk_1.default.green('\nYour still frame is ready!'));
108
139
  const seconds = Math.round((Date.now() - startTime) / 1000);
109
140
  log_1.Log.info([