From 641bd25b028dcd183eb87240b57fca76b4fa8327 Mon Sep 17 00:00:00 2001 From: Jonny Burger Date: Mon, 23 Feb 2026 18:39:53 +0100 Subject: [PATCH 01/19] Add save-sequence-props endpoint and extract timeline field components Extract TimelineSchemaField and TimelineExpandedSection from TimelineListItem, add /api/save-sequence-props endpoint with codemod to write prop changes to source. Co-Authored-By: Claude Opus 4.6 --- .../src/codemods/update-sequence-props.ts | 100 ++++++++++++++ .../src/preview-server/api-routes.ts | 4 + .../routes/can-update-sequence-props.ts | 79 +++++++++++ .../routes/save-sequence-props.ts | 48 +++++++ packages/studio-shared/src/api-requests.ts | 41 ++++++ packages/studio-shared/src/index.ts | 4 + .../Timeline/TimelineExpandedSection.tsx | 129 ++++++++++++++++++ .../components/Timeline/TimelineListItem.tsx | 113 +-------------- .../Timeline/TimelineSchemaField.tsx | 103 ++++++++++++++ 9 files changed, 510 insertions(+), 111 deletions(-) create mode 100644 packages/studio-server/src/codemods/update-sequence-props.ts create mode 100644 packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts create mode 100644 packages/studio-server/src/preview-server/routes/save-sequence-props.ts create mode 100644 packages/studio/src/components/Timeline/TimelineExpandedSection.tsx create mode 100644 packages/studio/src/components/Timeline/TimelineSchemaField.tsx diff --git a/packages/studio-server/src/codemods/update-sequence-props.ts b/packages/studio-server/src/codemods/update-sequence-props.ts new file mode 100644 index 00000000000..e688180c78c --- /dev/null +++ b/packages/studio-server/src/codemods/update-sequence-props.ts @@ -0,0 +1,100 @@ +import type {AssignmentExpression, ExpressionStatement} from '@babel/types'; +import {stringifyDefaultProps, type EnumPath} from '@remotion/studio-shared'; +import type {ExpressionKind} from 'ast-types/lib/gen/kinds'; +import * as recast from 'recast'; +import {parseAst, serializeAst} from './parse-ast'; + +export const updateSequenceProps = async ({ + input, + targetLine, + key, + value, + enumPaths, +}: { + input: string; + targetLine: number; + key: string; + value: unknown; + enumPaths: EnumPath[]; +}): Promise => { + const ast = parseAst(input); + let found = false; + + recast.types.visit(ast, { + visitJSXOpeningElement(path) { + const {node} = path; + + if (!node.loc || node.loc.start.line !== targetLine) { + return this.traverse(path); + } + + const attr = node.attributes?.find((a) => { + if (a.type === 'JSXSpreadAttribute') { + return false; + } + + if (a.name.type === 'JSXNamespacedName') { + return false; + } + + return a.name.name === key; + }); + + if (!attr || attr.type === 'JSXSpreadAttribute') { + throw new Error(`Could not find attribute "${key}" on the JSX element`); + } + + const parsed = ( + ( + parseAst(`a = ${stringifyDefaultProps({props: value, enumPaths})}`) + .program.body[0] as unknown as ExpressionStatement + ).expression as AssignmentExpression + ).right as ExpressionKind; + + attr.value = recast.types.builders.jsxExpressionContainer(parsed); + found = true; + + return this.traverse(path); + }, + }); + + if (!found) { + throw new Error( + 'Could not find a JSX element at the specified line to update', + ); + } + + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + type PrettierType = typeof import('prettier'); + let prettier: PrettierType | null = null; + + try { + prettier = await import('prettier'); + } catch { + throw new Error('Prettier cannot be found in the current project.'); + } + + const {format, resolveConfig, resolveConfigFile} = prettier as PrettierType; + + const configFilePath = await resolveConfigFile(); + if (!configFilePath) { + throw new Error('The Prettier config file was not found'); + } + + const prettierConfig = await resolveConfig(configFilePath); + if (!prettierConfig) { + throw new Error( + 'The Prettier config file was not found. For this feature, the "prettier" package must be installed and a .prettierrc file must exist.', + ); + } + + const finalFile = serializeAst(ast); + + const prettified = await format(finalFile, { + ...prettierConfig, + filepath: 'test.tsx', + plugins: [], + endOfLine: 'auto', + }); + return prettified; +}; diff --git a/packages/studio-server/src/preview-server/api-routes.ts b/packages/studio-server/src/preview-server/api-routes.ts index 200415d03c9..f39b0486788 100644 --- a/packages/studio-server/src/preview-server/api-routes.ts +++ b/packages/studio-server/src/preview-server/api-routes.ts @@ -4,6 +4,7 @@ import {handleAddRender} from './routes/add-render'; import {applyCodemodHandler} from './routes/apply-codemod'; import {applyVisualControlHandler} from './routes/apply-visual-control-change'; import {canUpdateDefaultPropsHandler} from './routes/can-update-default-props'; +import {canUpdateSequencePropsHandler} from './routes/can-update-sequence-props'; import {handleCancelRender} from './routes/cancel-render'; import {deleteStaticFileHandler} from './routes/delete-static-file'; import {handleInstallPackage} from './routes/install-dependency'; @@ -11,6 +12,7 @@ import {handleOpenInFileExplorer} from './routes/open-in-file-explorer'; import {projectInfoHandler} from './routes/project-info'; import {handleRemoveRender} from './routes/remove-render'; import {handleRestartStudio} from './routes/restart-studio'; +import {saveSequencePropsHandler} from './routes/save-sequence-props'; import {subscribeToFileExistence} from './routes/subscribe-to-file-existence'; import {unsubscribeFromFileExistence} from './routes/unsubscribe-from-file-existence'; import {handleUpdate} from './routes/update-available'; @@ -32,6 +34,8 @@ export const allApiRoutes: { '/api/apply-visual-control-change': applyVisualControlHandler, '/api/apply-codemod': applyCodemodHandler, '/api/can-update-default-props': canUpdateDefaultPropsHandler, + '/api/can-update-sequence-props': canUpdateSequencePropsHandler, + '/api/save-sequence-props': saveSequencePropsHandler, '/api/update-available': handleUpdate, '/api/project-info': projectInfoHandler, '/api/delete-static-file': deleteStaticFileHandler, diff --git a/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts new file mode 100644 index 00000000000..031970a7483 --- /dev/null +++ b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts @@ -0,0 +1,79 @@ +import type { + CanUpdateSequencePropsRequest, + CanUpdateSequencePropsResponse, +} from '@remotion/studio-shared'; +import {readFileSync} from 'node:fs'; +import path from 'node:path'; +import {parseAst} from '../../codemods/parse-ast'; +import type {ApiHandler} from '../api-types'; +import {checkIfTypeScriptFile} from './can-update-default-props'; + +const findJsxElementAtLine = ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + node: any, + targetLine: number, +): boolean => { + if (!node || typeof node !== 'object') { + return false; + } + + if (node.type === 'JSXOpeningElement' && node.loc) { + if (node.loc.start.line === targetLine) { + return true; + } + } + + for (const key of Object.keys(node)) { + if (key === 'loc' || key === 'start' || key === 'end' || key === 'type') { + continue; + } + + const child = node[key]; + if (Array.isArray(child)) { + for (const item of child) { + if (findJsxElementAtLine(item, targetLine)) { + return true; + } + } + } else if (child && typeof child === 'object' && child.type) { + if (findJsxElementAtLine(child, targetLine)) { + return true; + } + } + } + + return false; +}; + +export const canUpdateSequencePropsHandler: ApiHandler< + CanUpdateSequencePropsRequest, + CanUpdateSequencePropsResponse +> = ({input: {fileName, line, column: _column}, remotionRoot}) => { + try { + const absolutePath = path.resolve(remotionRoot, fileName); + const fileRelativeToRoot = path.relative(remotionRoot, absolutePath); + if (fileRelativeToRoot.startsWith('..')) { + throw new Error('Cannot read a file outside the project'); + } + + checkIfTypeScriptFile(absolutePath); + + const fileContents = readFileSync(absolutePath, 'utf-8'); + const ast = parseAst(fileContents); + + const found = findJsxElementAtLine(ast, line); + + if (!found) { + throw new Error('Could not find a JSX element at the specified location'); + } + + return Promise.resolve({ + canUpdate: true as const, + }); + } catch (err) { + return Promise.resolve({ + canUpdate: false as const, + reason: (err as Error).message, + }); + } +}; diff --git a/packages/studio-server/src/preview-server/routes/save-sequence-props.ts b/packages/studio-server/src/preview-server/routes/save-sequence-props.ts new file mode 100644 index 00000000000..44fdee3ce9b --- /dev/null +++ b/packages/studio-server/src/preview-server/routes/save-sequence-props.ts @@ -0,0 +1,48 @@ +import type { + SaveSequencePropsRequest, + SaveSequencePropsResponse, +} from '@remotion/studio-shared'; +import {readFileSync, writeFileSync} from 'node:fs'; +import path from 'node:path'; +import {updateSequenceProps} from '../../codemods/update-sequence-props'; +import type {ApiHandler} from '../api-types'; +import {checkIfTypeScriptFile} from './can-update-default-props'; + +export const saveSequencePropsHandler: ApiHandler< + SaveSequencePropsRequest, + SaveSequencePropsResponse +> = async ({ + input: {fileName, line, column: _column, key, value, enumPaths}, + remotionRoot, +}) => { + try { + const absolutePath = path.resolve(remotionRoot, fileName); + const fileRelativeToRoot = path.relative(remotionRoot, absolutePath); + if (fileRelativeToRoot.startsWith('..')) { + throw new Error('Cannot modify a file outside the project'); + } + + checkIfTypeScriptFile(absolutePath); + + const fileContents = readFileSync(absolutePath, 'utf-8'); + + const updated = await updateSequenceProps({ + input: fileContents, + targetLine: line, + key, + value: JSON.parse(value), + enumPaths, + }); + + writeFileSync(absolutePath, updated); + + return { + success: true, + }; + } catch (err) { + return { + success: false, + reason: (err as Error).message, + }; + } +}; diff --git a/packages/studio-shared/src/api-requests.ts b/packages/studio-shared/src/api-requests.ts index 9f390874e77..1404464091a 100644 --- a/packages/studio-shared/src/api-requests.ts +++ b/packages/studio-shared/src/api-requests.ts @@ -191,6 +191,39 @@ export type CanUpdateDefaultPropsResponse = reason: string; }; +export type CanUpdateSequencePropsRequest = { + fileName: string; + line: number; + column: number; +}; + +export type CanUpdateSequencePropsResponse = + | { + canUpdate: true; + } + | { + canUpdate: false; + reason: string; + }; + +export type SaveSequencePropsRequest = { + fileName: string; + line: number; + column: number; + key: string; + value: string; + enumPaths: EnumPath[]; +}; + +export type SaveSequencePropsResponse = + | { + success: true; + } + | { + success: false; + reason: string; + }; + export type UpdateAvailableRequest = {}; export type UpdateAvailableResponse = { currentVersion: string; @@ -238,6 +271,14 @@ export type ApiRoutes = { CanUpdateDefaultPropsRequest, CanUpdateDefaultPropsResponse >; + '/api/can-update-sequence-props': ReqAndRes< + CanUpdateSequencePropsRequest, + CanUpdateSequencePropsResponse + >; + '/api/save-sequence-props': ReqAndRes< + SaveSequencePropsRequest, + SaveSequencePropsResponse + >; '/api/update-available': ReqAndRes< UpdateAvailableRequest, UpdateAvailableResponse diff --git a/packages/studio-shared/src/index.ts b/packages/studio-shared/src/index.ts index 4827356a2a4..0461818e2ed 100644 --- a/packages/studio-shared/src/index.ts +++ b/packages/studio-shared/src/index.ts @@ -8,6 +8,8 @@ export { ApplyVisualControlResponse, CanUpdateDefaultPropsRequest, CanUpdateDefaultPropsResponse, + CanUpdateSequencePropsRequest, + CanUpdateSequencePropsResponse, CancelRenderRequest, CancelRenderResponse, CopyStillToClipboardRequest, @@ -21,6 +23,8 @@ export { RemoveRenderRequest, RestartStudioRequest, RestartStudioResponse, + SaveSequencePropsRequest, + SaveSequencePropsResponse, SimpleDiff, SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse, diff --git a/packages/studio/src/components/Timeline/TimelineExpandedSection.tsx b/packages/studio/src/components/Timeline/TimelineExpandedSection.tsx new file mode 100644 index 00000000000..ce16e773592 --- /dev/null +++ b/packages/studio/src/components/Timeline/TimelineExpandedSection.tsx @@ -0,0 +1,129 @@ +import React, {useCallback, useEffect, useMemo, useState} from 'react'; +import type {TSequence} from 'remotion'; +import {TIMELINE_TRACK_SEPARATOR} from '../../helpers/colors'; +import { + getExpandedTrackHeight, + getSchemaFields, +} from '../../helpers/timeline-layout'; +import {callApi} from '../call-api'; +import {TimelineFieldValue} from './TimelineSchemaField'; +import {getOriginalLocationFromStack} from './TimelineStack/get-stack'; + +const expandedSectionBase: React.CSSProperties = { + color: 'white', + fontFamily: 'Arial, Helvetica, sans-serif', + fontSize: 12, + display: 'flex', + flexDirection: 'column', + paddingLeft: 28, + paddingRight: 10, + borderBottom: `1px solid ${TIMELINE_TRACK_SEPARATOR}`, +}; + +const fieldRow: React.CSSProperties = { + display: 'flex', + alignItems: 'center', + gap: 8, +}; + +const fieldName: React.CSSProperties = { + flex: 1, + fontSize: 12, +}; + +type OriginalLocation = { + source: string; + line: number; + column: number; +}; + +export const TimelineExpandedSection: React.FC<{ + readonly sequence: TSequence; +}> = ({sequence}) => { + const [canUpdate, setCanUpdate] = useState(null); + const [originalLocation, setOriginalLocation] = + useState(null); + + useEffect(() => { + if (!sequence.stack || !sequence.controls) { + setCanUpdate(false); + return; + } + + getOriginalLocationFromStack(sequence.stack, 'sequence') + .then((location) => { + if (!location || !location.source || !location.line) { + setCanUpdate(false); + return undefined; + } + + setOriginalLocation({ + source: location.source, + line: location.line, + column: location.column ?? 0, + }); + + return callApi('/api/can-update-sequence-props', { + fileName: location.source, + line: location.line, + column: location.column ?? 0, + }); + }) + .then((result) => { + if (result) { + setCanUpdate(result.canUpdate); + } + }) + .catch(() => { + setCanUpdate(false); + }); + }, [sequence.stack, sequence.controls]); + + const schemaFields = useMemo( + () => getSchemaFields(sequence.controls), + [sequence.controls], + ); + + const expandedHeight = useMemo( + () => getExpandedTrackHeight(sequence.controls), + [sequence.controls], + ); + + const onSave = useCallback( + (key: string, value: unknown) => { + if (!canUpdate || !originalLocation) { + return; + } + + callApi('/api/save-sequence-props', { + fileName: originalLocation.source, + line: originalLocation.line, + column: originalLocation.column, + key, + value: JSON.stringify(value), + enumPaths: [], + }).catch((err) => { + // eslint-disable-next-line no-console + console.error('Failed to save sequence prop:', err); + }); + }, + [canUpdate, originalLocation], + ); + + return ( +
+ {schemaFields + ? schemaFields.map((field) => ( +
+ {field.key} + +
+ )) + : 'No schema'} +
+ ); +}; diff --git a/packages/studio/src/components/Timeline/TimelineListItem.tsx b/packages/studio/src/components/Timeline/TimelineListItem.tsx index 05ccd2dc093..ba4a2eaf316 100644 --- a/packages/studio/src/components/Timeline/TimelineListItem.tsx +++ b/packages/studio/src/components/Timeline/TimelineListItem.tsx @@ -2,20 +2,12 @@ import React, {useCallback, useContext, useMemo} from 'react'; import type {TSequence} from 'remotion'; import {Internals} from 'remotion'; import {TIMELINE_TRACK_SEPARATOR} from '../../helpers/colors'; -import type {SchemaFieldInfo} from '../../helpers/timeline-layout'; import { - getExpandedTrackHeight, - getSchemaFields, getTimelineLayerHeight, TIMELINE_ITEM_BORDER_BOTTOM, } from '../../helpers/timeline-layout'; import {ExpandedTracksContext} from '../ExpandedTracksProvider'; -import {InputDragger} from '../NewComposition/InputDragger'; -import { - getZodNumberMaximum, - getZodNumberMinimum, - getZodNumberStep, -} from '../RenderModal/SchemaEditor/zod-number-constraints'; +import {TimelineExpandedSection} from './TimelineExpandedSection'; import {TimelineLayerEye} from './TimelineLayerEye'; import {TimelineStack} from './TimelineStack'; @@ -45,85 +37,6 @@ const arrowButton: React.CSSProperties = { lineHeight: 1, }; -const expandedSectionBase: React.CSSProperties = { - color: 'white', - fontFamily: 'Arial, Helvetica, sans-serif', - fontSize: 12, - display: 'flex', - flexDirection: 'column', - paddingLeft: 28, - paddingRight: 10, - borderBottom: `1px solid ${TIMELINE_TRACK_SEPARATOR}`, -}; - -const fieldRow: React.CSSProperties = { - display: 'flex', - alignItems: 'center', - gap: 8, -}; - -const fieldName: React.CSSProperties = { - flex: 1, - fontSize: 12, -}; - -const unsupportedLabel: React.CSSProperties = { - color: 'rgba(255, 255, 255, 0.4)', - fontSize: 12, - marginLeft: 'auto', - fontStyle: 'italic', -}; - -const draggerStyle: React.CSSProperties = { - width: 80, - marginLeft: 'auto', -}; - -const TimelineNumberField: React.FC<{ - readonly field: SchemaFieldInfo; -}> = ({field}) => { - const onValueChange = useCallback((_newVal: number) => { - // TODO: wire up value change - }, []); - - const onTextChange = useCallback((_newVal: string) => { - // TODO: wire up text change - }, []); - - return ( - - ); -}; - -const TimelineFieldValue: React.FC<{ - readonly field: SchemaFieldInfo; -}> = ({field}) => { - if (!field.supported) { - return unsupported; - } - - if (field.typeName === 'number') { - return ; - } - - return ( - - {String(field.currentValue)} - - ); -}; - export const TimelineListItem: React.FC<{ readonly sequence: TSequence; readonly nestedDepth: number; @@ -139,16 +52,6 @@ export const TimelineListItem: React.FC<{ const isExpanded = expandedTracks[sequence.id] ?? false; - const schemaFields = useMemo( - () => getSchemaFields(sequence.controls), - [sequence.controls], - ); - - const expandedHeight = useMemo( - () => getExpandedTrackHeight(sequence.controls), - [sequence.controls], - ); - const onToggleExpand = useCallback(() => { toggleTrack(sequence.id); }, [sequence.id, toggleTrack]); @@ -231,19 +134,7 @@ export const TimelineListItem: React.FC<{ {visualModeEnabled && isExpanded ? ( -
- {schemaFields - ? schemaFields.map((field) => ( -
- {field.key} - -
- )) - : 'No schema'} -
+ ) : null} ); diff --git a/packages/studio/src/components/Timeline/TimelineSchemaField.tsx b/packages/studio/src/components/Timeline/TimelineSchemaField.tsx new file mode 100644 index 00000000000..5ec453c2214 --- /dev/null +++ b/packages/studio/src/components/Timeline/TimelineSchemaField.tsx @@ -0,0 +1,103 @@ +import React, {useCallback} from 'react'; +import type {SchemaFieldInfo} from '../../helpers/timeline-layout'; +import {InputDragger} from '../NewComposition/InputDragger'; +import { + getZodNumberMaximum, + getZodNumberMinimum, + getZodNumberStep, +} from '../RenderModal/SchemaEditor/zod-number-constraints'; + +const unsupportedLabel: React.CSSProperties = { + color: 'rgba(255, 255, 255, 0.4)', + fontSize: 12, + marginLeft: 'auto', + fontStyle: 'italic', +}; + +const draggerStyle: React.CSSProperties = { + width: 80, + marginLeft: 'auto', +}; + +const notEditableBackground: React.CSSProperties = { + backgroundColor: 'rgba(255, 0, 0, 0.2)', + borderRadius: 3, + padding: '0 4px', +}; + +const TimelineNumberField: React.FC<{ + readonly field: SchemaFieldInfo; + readonly canUpdate: boolean | null; + readonly onSave: (key: string, value: unknown) => void; +}> = ({field, canUpdate, onSave}) => { + const onValueChange = useCallback( + (newVal: number) => { + if (canUpdate) { + onSave(field.key, newVal); + } + }, + [canUpdate, onSave, field.key], + ); + + const onTextChange = useCallback( + (newVal: string) => { + if (canUpdate) { + const parsed = Number(newVal); + if (!Number.isNaN(parsed)) { + onSave(field.key, parsed); + } + } + }, + [canUpdate, onSave, field.key], + ); + + return ( + + ); +}; + +export const TimelineFieldValue: React.FC<{ + readonly field: SchemaFieldInfo; + readonly canUpdate: boolean | null; + readonly onSave: (key: string, value: unknown) => void; +}> = ({field, canUpdate, onSave}) => { + const wrapperStyle: React.CSSProperties | undefined = + canUpdate === null || canUpdate === false + ? notEditableBackground + : undefined; + + if (!field.supported) { + return ( + unsupported + ); + } + + if (field.typeName === 'number') { + return ( + + + + ); + } + + return ( + + {String(field.currentValue)} + + ); +}; From 725825a059d387136f3f1d72fc4f4a46a788118f Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 17:57:16 +0000 Subject: [PATCH 02/19] Include targetLine in error message for better debugging --- packages/studio-server/src/codemods/update-sequence-props.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/studio-server/src/codemods/update-sequence-props.ts b/packages/studio-server/src/codemods/update-sequence-props.ts index e688180c78c..2c7c1ef38b5 100644 --- a/packages/studio-server/src/codemods/update-sequence-props.ts +++ b/packages/studio-server/src/codemods/update-sequence-props.ts @@ -41,7 +41,7 @@ export const updateSequenceProps = async ({ }); if (!attr || attr.type === 'JSXSpreadAttribute') { - throw new Error(`Could not find attribute "${key}" on the JSX element`); + throw new Error(`Could not find attribute "${key}" on the JSX element at line ${targetLine}`); } const parsed = ( From af7487f29e4de2fa26fbed53f8a9e79827aa8703 Mon Sep 17 00:00:00 2001 From: "pullfrog[bot]" <226033991+pullfrog[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 18:10:24 +0000 Subject: [PATCH 03/19] Fix Prettier formatting in update-sequence-props.ts --- packages/studio-server/src/codemods/update-sequence-props.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/studio-server/src/codemods/update-sequence-props.ts b/packages/studio-server/src/codemods/update-sequence-props.ts index 2c7c1ef38b5..47f9de0610a 100644 --- a/packages/studio-server/src/codemods/update-sequence-props.ts +++ b/packages/studio-server/src/codemods/update-sequence-props.ts @@ -41,7 +41,9 @@ export const updateSequenceProps = async ({ }); if (!attr || attr.type === 'JSXSpreadAttribute') { - throw new Error(`Could not find attribute "${key}" on the JSX element at line ${targetLine}`); + throw new Error( + `Could not find attribute "${key}" on the JSX element at line ${targetLine}`, + ); } const parsed = ( From 2dd2a8099db601616eb31e2be839f3b70bc44f91 Mon Sep 17 00:00:00 2001 From: Igor Samokhovets Date: Mon, 23 Feb 2026 19:39:53 +0100 Subject: [PATCH 04/19] `create-video`: Skip git init when inside existing git repo --- packages/create-video/src/init.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/create-video/src/init.ts b/packages/create-video/src/init.ts index a62be59cbda..99c579731a5 100644 --- a/packages/create-video/src/init.ts +++ b/packages/create-video/src/init.ts @@ -119,13 +119,15 @@ export const init = async () => { process.exit(1); } - if (result.type === 'is-git-repo') { + const isInsideGitRepo = result.type === 'is-git-repo'; + + if (isInsideGitRepo) { const {shouldContinue} = await prompts({ type: 'toggle', name: 'shouldContinue', message: `You are already inside a Git repo (${path.resolve( result.location, - )}).\nThis might lead to a Git Submodule being created. Do you want to continue?`, + )}).\nA new project will be created without initializing a new Git repository. Do you want to continue?`, initial: false, active: 'Yes', inactive: 'No', @@ -181,7 +183,9 @@ export const init = async () => { projectRoot, }); - await getGitStatus(projectRoot); + if (!isInsideGitRepo) { + await getGitStatus(projectRoot); + } if (shouldInstallSkills) { await installSkills(projectRoot); From 072b32633887f4a9945453a606182077f4c31db2 Mon Sep 17 00:00:00 2001 From: Jonny Burger Date: Mon, 23 Feb 2026 20:10:27 +0100 Subject: [PATCH 05/19] fix: Add id, type, and autoComplete props to Next.js template inputs Prevents browser autofill by adding id="username", type="text", and autoComplete="off" to input fields in Next.js templates. Co-Authored-By: Claude Opus 4.6 --- packages/template-next-app-tailwind/src/components/Input.tsx | 3 +++ packages/template-next-app/src/components/Input.tsx | 3 +++ packages/template-next-pages/src/components/Input.tsx | 3 +++ 3 files changed, 9 insertions(+) diff --git a/packages/template-next-app-tailwind/src/components/Input.tsx b/packages/template-next-app-tailwind/src/components/Input.tsx index d6dcc0434d6..345f99bcbdd 100644 --- a/packages/template-next-app-tailwind/src/components/Input.tsx +++ b/packages/template-next-app-tailwind/src/components/Input.tsx @@ -14,6 +14,9 @@ export const Input: React.FC<{ return ( Date: Mon, 23 Feb 2026 20:13:30 +0100 Subject: [PATCH 06/19] fix: Add type and autoComplete props to template-vercel input Co-Authored-By: Claude Opus 4.6 --- packages/template-vercel/src/components/Input.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/template-vercel/src/components/Input.tsx b/packages/template-vercel/src/components/Input.tsx index b31484af231..d91f663ccd6 100644 --- a/packages/template-vercel/src/components/Input.tsx +++ b/packages/template-vercel/src/components/Input.tsx @@ -22,6 +22,8 @@ export const Input: React.FC<{ Date: Mon, 23 Feb 2026 20:15:27 +0100 Subject: [PATCH 07/19] fix: Add id, type, and autoComplete props to template-react-router input Co-Authored-By: Claude Opus 4.6 --- packages/template-react-router/app/components/Input.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/template-react-router/app/components/Input.tsx b/packages/template-react-router/app/components/Input.tsx index d6dcc0434d6..345f99bcbdd 100644 --- a/packages/template-react-router/app/components/Input.tsx +++ b/packages/template-react-router/app/components/Input.tsx @@ -14,6 +14,9 @@ export const Input: React.FC<{ return ( Date: Tue, 24 Feb 2026 07:57:11 +0000 Subject: [PATCH 08/19] Revert id change, use type="search" instead --- packages/template-next-app-tailwind/src/components/Input.tsx | 3 +-- packages/template-next-app/src/components/Input.tsx | 3 +-- packages/template-next-pages/src/components/Input.tsx | 3 +-- packages/template-react-router/app/components/Input.tsx | 3 +-- packages/template-vercel/src/components/Input.tsx | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/template-next-app-tailwind/src/components/Input.tsx b/packages/template-next-app-tailwind/src/components/Input.tsx index 345f99bcbdd..af468fc2d09 100644 --- a/packages/template-next-app-tailwind/src/components/Input.tsx +++ b/packages/template-next-app-tailwind/src/components/Input.tsx @@ -14,8 +14,7 @@ export const Input: React.FC<{ return ( Date: Tue, 24 Feb 2026 08:57:44 +0100 Subject: [PATCH 09/19] no need to check for if it is a TS file --- packages/example/remotion.config.ts | 1 - .../src/preview-server/routes/can-update-sequence-props.ts | 3 --- .../src/preview-server/routes/save-sequence-props.ts | 3 --- 3 files changed, 7 deletions(-) diff --git a/packages/example/remotion.config.ts b/packages/example/remotion.config.ts index 59f2c09b2e5..912bffef8bb 100644 --- a/packages/example/remotion.config.ts +++ b/packages/example/remotion.config.ts @@ -10,4 +10,3 @@ Config.overrideWebpackConfig(async (config) => { }); Config.setExperimentalClientSideRenderingEnabled(true); -Config.setExperimentalVisualMode(true); diff --git a/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts index 031970a7483..5bdcabba30f 100644 --- a/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts +++ b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts @@ -6,7 +6,6 @@ import {readFileSync} from 'node:fs'; import path from 'node:path'; import {parseAst} from '../../codemods/parse-ast'; import type {ApiHandler} from '../api-types'; -import {checkIfTypeScriptFile} from './can-update-default-props'; const findJsxElementAtLine = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -56,8 +55,6 @@ export const canUpdateSequencePropsHandler: ApiHandler< throw new Error('Cannot read a file outside the project'); } - checkIfTypeScriptFile(absolutePath); - const fileContents = readFileSync(absolutePath, 'utf-8'); const ast = parseAst(fileContents); diff --git a/packages/studio-server/src/preview-server/routes/save-sequence-props.ts b/packages/studio-server/src/preview-server/routes/save-sequence-props.ts index 44fdee3ce9b..a969832836c 100644 --- a/packages/studio-server/src/preview-server/routes/save-sequence-props.ts +++ b/packages/studio-server/src/preview-server/routes/save-sequence-props.ts @@ -6,7 +6,6 @@ import {readFileSync, writeFileSync} from 'node:fs'; import path from 'node:path'; import {updateSequenceProps} from '../../codemods/update-sequence-props'; import type {ApiHandler} from '../api-types'; -import {checkIfTypeScriptFile} from './can-update-default-props'; export const saveSequencePropsHandler: ApiHandler< SaveSequencePropsRequest, @@ -22,8 +21,6 @@ export const saveSequencePropsHandler: ApiHandler< throw new Error('Cannot modify a file outside the project'); } - checkIfTypeScriptFile(absolutePath); - const fileContents = readFileSync(absolutePath, 'utf-8'); const updated = await updateSequenceProps({ From 419e94586dda3afa00a0d8f01f311a10c1a36ffa Mon Sep 17 00:00:00 2001 From: Jonny Burger Date: Tue, 24 Feb 2026 09:17:49 +0100 Subject: [PATCH 10/19] make typesafe! --- packages/example/remotion.config.ts | 1 + .../routes/can-update-sequence-props.ts | 47 ++++++------------- 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/packages/example/remotion.config.ts b/packages/example/remotion.config.ts index 912bffef8bb..59f2c09b2e5 100644 --- a/packages/example/remotion.config.ts +++ b/packages/example/remotion.config.ts @@ -10,3 +10,4 @@ Config.overrideWebpackConfig(async (config) => { }); Config.setExperimentalClientSideRenderingEnabled(true); +Config.setExperimentalVisualMode(true); diff --git a/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts index 5bdcabba30f..4e7827c58f9 100644 --- a/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts +++ b/packages/studio-server/src/preview-server/routes/can-update-sequence-props.ts @@ -2,46 +2,29 @@ import type { CanUpdateSequencePropsRequest, CanUpdateSequencePropsResponse, } from '@remotion/studio-shared'; +import type {File} from '@babel/types'; import {readFileSync} from 'node:fs'; import path from 'node:path'; +import * as recast from 'recast'; import {parseAst} from '../../codemods/parse-ast'; import type {ApiHandler} from '../api-types'; -const findJsxElementAtLine = ( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - node: any, - targetLine: number, -): boolean => { - if (!node || typeof node !== 'object') { - return false; - } - - if (node.type === 'JSXOpeningElement' && node.loc) { - if (node.loc.start.line === targetLine) { - return true; - } - } - - for (const key of Object.keys(node)) { - if (key === 'loc' || key === 'start' || key === 'end' || key === 'type') { - continue; - } +const findJsxElementAtLine = (ast: File, targetLine: number): boolean => { + let found = false; - const child = node[key]; - if (Array.isArray(child)) { - for (const item of child) { - if (findJsxElementAtLine(item, targetLine)) { - return true; - } - } - } else if (child && typeof child === 'object' && child.type) { - if (findJsxElementAtLine(child, targetLine)) { - return true; + recast.types.visit(ast, { + visitJSXOpeningElement(nodePath) { + const {node} = nodePath; + if (node.loc && node.loc.start.line === targetLine) { + found = true; + return false; } - } - } - return false; + return this.traverse(nodePath); + }, + }); + + return found; }; export const canUpdateSequencePropsHandler: ApiHandler< From f8d0806003164da00fb8efc74f710e2d7cc01303 Mon Sep 17 00:00:00 2001 From: Jonny Burger Date: Tue, 24 Feb 2026 09:31:46 +0100 Subject: [PATCH 11/19] Reorder imports via oxfmt sortImports Oxfmt sorts builtin/node imports before external packages. Co-Authored-By: Claude Opus 4.6 --- packages/.monorepo/builder.ts | 2 +- packages/bugs/api/index.ts | 20 +- packages/bugs/deprecate-versions.ts | 10 +- packages/bundler/src/bundle.ts | 4 +- packages/bundler/src/esbuild-loader/index.ts | 2 +- packages/cli/src/add.ts | 4 +- packages/cli/src/bundle.ts | 4 +- packages/cli/src/config/index.ts | 33 +- .../src/convert-entry-point-to-serve-url.ts | 2 +- packages/cli/src/entry-point.ts | 4 +- packages/cli/src/ffmpeg.ts | 4 +- packages/cli/src/get-cli-options.ts | 4 +- packages/cli/src/get-config-file-name.ts | 2 +- packages/cli/src/get-env.ts | 4 +- packages/cli/src/get-github-repository.ts | 6 +- packages/cli/src/get-input-props.ts | 4 +- packages/cli/src/initialize-cli.ts | 2 +- packages/cli/src/load-config.ts | 2 +- packages/cli/src/on-artifact.ts | 4 +- packages/cli/src/render-flows/render.ts | 6 +- packages/cli/src/render-flows/still.ts | 4 +- packages/cli/src/render-queue/queue.ts | 2 +- packages/cli/src/setup-cache.ts | 4 +- packages/cli/src/show-compositions-picker.ts | 3 +- packages/cli/src/skills.ts | 2 +- packages/cli/src/test/codec.test.ts | 2 +- packages/cli/src/test/config-chromium.test.ts | 2 +- packages/cli/src/test/crf.test.ts | 2 +- .../cli/src/test/final-output-codec.test.ts | 2 +- packages/cli/src/test/log.test.ts | 2 +- packages/cli/src/test/overwrite.test.ts | 2 +- packages/cli/src/test/pixel-format.test.ts | 2 +- packages/cli/src/test/quality.test.ts | 2 +- packages/cli/src/test/range.test.tsx | 2 +- packages/cli/src/upgrade.ts | 2 +- packages/cli/src/versions.ts | 4 +- .../cloudrun/src/admin/bundle-installer.ts | 2 +- .../cloudrun/src/admin/bundle-renderLogic.ts | 4 +- packages/cloudrun/src/api/download-file.ts | 2 +- packages/cloudrun/src/cli/args.ts | 1 - .../cloudrun/src/cli/commands/sites/create.ts | 2 +- .../functions/helpers/write-cloudrun-error.ts | 2 +- .../app/components/AudioCodecSelection.tsx | 12 +- .../app/components/ContainerOverview.tsx | 2 +- .../convert/app/components/ConvertForm.tsx | 16 +- .../convert/app/components/FileAvailable.tsx | 2 +- packages/convert/app/components/MuxPlayer.tsx | 1 - packages/convert/app/components/Probe.tsx | 10 +- .../convert/app/components/ResampleUi.tsx | 2 +- .../app/components/VideoCodecSelection.tsx | 8 +- .../app/components/VideoTrackOverview.tsx | 2 +- .../timing-editor/CanvasWrapper.tsx | 9 +- .../timing-editor/TimingComponentEditor.tsx | 8 +- .../components/transcribe/downloadModel.tsx | 16 +- packages/convert/app/components/ui/badge.tsx | 4 +- packages/convert/app/components/ui/button.tsx | 4 +- packages/convert/app/components/ui/card.tsx | 1 - .../convert/app/components/ui/checkbox.tsx | 1 - packages/convert/app/components/ui/dialog.tsx | 1 - packages/convert/app/components/ui/input.tsx | 4 +- packages/convert/app/components/ui/label.tsx | 1 - packages/convert/app/components/ui/radio.tsx | 1 - .../convert/app/components/ui/scroll-area.tsx | 1 - .../convert/app/components/ui/separator.tsx | 1 - packages/convert/app/components/ui/slider.tsx | 1 - packages/convert/app/components/ui/table.tsx | 1 - .../convert/app/components/ui/textarea.tsx | 1 - packages/convert/app/lib/prompt-helpers.ts | 3 +- packages/convert/app/root.tsx | 5 +- packages/convert/vite-spa.config.ts | 2 +- packages/convert/vite.config.ts | 2 +- packages/core/src/Artifact.tsx | 2 +- packages/core/src/Img.tsx | 2 +- packages/core/src/RemotionRoot.tsx | 6 +- .../core/src/ResolveCompositionConfig.tsx | 2 +- packages/core/src/Sequence.tsx | 5 +- packages/core/src/audio/Audio.tsx | 2 +- packages/core/src/audio/AudioForPreview.tsx | 4 +- packages/core/src/audio/AudioForRendering.tsx | 4 +- packages/core/src/audio/use-audio-frame.ts | 2 +- packages/core/src/series/index.tsx | 2 +- packages/core/src/test/Img.test.tsx | 2 +- .../src/test/audio-for-rendering.test.tsx | 4 +- packages/core/src/test/audio.test.tsx | 2 +- .../core/src/test/composition-rules.test.tsx | 2 +- .../src/test/composition-validation.test.tsx | 2 +- packages/core/src/test/freeze.test.tsx | 2 +- .../core/src/test/loop-validation.test.tsx | 2 +- .../core/src/test/nested-sequences.test.tsx | 2 +- .../core/src/test/offthread-video.test.tsx | 2 +- .../src/test/sequence-validation.test.tsx | 2 +- .../src/test/use-media-in-timeline.test.tsx | 2 +- packages/core/src/test/video.test.tsx | 2 +- .../core/src/test/wrap-sequence-context.tsx | 2 +- packages/core/src/use-media-in-timeline.ts | 8 +- packages/core/src/video/OffthreadVideo.tsx | 4 +- .../src/video/OffthreadVideoForRendering.tsx | 6 +- packages/core/src/video/Video.tsx | 6 +- packages/core/src/video/VideoForPreview.tsx | 4 +- packages/core/src/video/VideoForRendering.tsx | 4 +- packages/create-video/src/init.ts | 2 +- .../create-video/src/resolve-project-root.ts | 2 +- packages/design/bundle.ts | 2 +- packages/design/src/Select.tsx | 1 - packages/design/src/Tabs.tsx | 1 - .../components/3DPhone/helpers/constants.ts | 132 +- .../Aac/AacConcatenationProblem.tsx | 178 +-- .../Aac/AacConcatenationSolution.tsx | 1412 ++++++++--------- packages/docs/components/Aac/AacFile.tsx | 392 ++--- packages/docs/components/Aac/AacKeyframes.tsx | 400 ++--- packages/docs/components/Aac/AacPadding.tsx | 408 ++--- packages/docs/components/Aac/Benchmarks.tsx | 466 +++--- .../docs/components/AvailableFonts/index.tsx | 40 +- packages/docs/components/Bounties.tsx | 1 - .../CameraMotionBlurExample.tsx | 3 +- .../components/ColorDemo/readable-color.ts | 2 +- packages/docs/components/ColorDemo/styles.tsx | 12 +- packages/docs/components/Concurrency.tsx | 57 +- packages/docs/components/Dataset/MyComp.tsx | 164 +- .../docs/components/DownloadPressRelease.tsx | 104 +- packages/docs/components/Experimental.tsx | 58 +- packages/docs/components/FFmpegVideo.tsx | 32 +- packages/docs/components/HowPropsFlow.tsx | 392 ++--- packages/docs/components/Installation.tsx | 6 +- packages/docs/components/InvestorGrid.tsx | 90 +- .../components/LambdaSplash/BuildApps.tsx | 54 +- .../docs/components/LambdaSplash/Easy.tsx | 72 +- .../docs/components/LambdaSplash/Fast.tsx | 70 +- .../components/LambdaSplash/LambdaHeader.tsx | 122 +- .../components/LambdaSplash/LambdaLogo.tsx | 10 +- .../components/LambdaSplash/PlayerPreview.tsx | 102 +- .../components/LambdaSplash/VideoApps.tsx | 2 +- .../components/LambdaSplash/YouAreHere.tsx | 42 +- .../LandingPage/SuccessFeatures.tsx | 80 +- packages/docs/components/PeriodSelector.tsx | 64 +- .../docs/components/Player/ColorPicker.tsx | 110 +- .../docs/components/Player/LandingHeader.tsx | 108 +- .../components/Player/PoweredByRemotion.tsx | 94 +- packages/docs/components/Player/Wrapped.tsx | 98 +- packages/docs/components/Player/features.tsx | 214 +-- .../components/PlayerExampleWithControls.tsx | 70 +- .../components/Premounting/NoPremounting.tsx | 98 +- .../components/Premounting/Premounting.tsx | 132 +- packages/docs/components/Redirect.tsx | 24 +- packages/docs/components/Spinner.tsx | 14 +- packages/docs/components/SplineVideo.tsx | 32 +- .../docs/components/SupportedAudioCodec.tsx | 162 +- .../docs/components/TableOfContents/Grid.tsx | 10 +- .../components/TableOfContents/TOCItem.tsx | 22 +- .../components/TableOfContents/pro-label.tsx | 46 +- .../transitions/presentations.tsx | 2 +- .../components/TrailExample/TrailExample.tsx | 3 +- .../docs/components/TransitionsDuration.tsx | 260 +-- packages/docs/components/Triangle.tsx | 40 +- packages/docs/components/YouTube.tsx | 80 +- .../components/cloudrun/default-timeout.tsx | 6 +- packages/docs/components/cloudrun/regions.tsx | 26 +- .../components/cloudrun/sa-permissions.tsx | 83 +- packages/docs/components/demos/Circle.tsx | 38 +- packages/docs/components/demos/Ellipse.tsx | 42 +- packages/docs/components/demos/NoiseDemo.tsx | 82 +- packages/docs/components/demos/Polygon.tsx | 50 +- packages/docs/components/demos/Rect.tsx | 54 +- packages/docs/components/demos/Star.tsx | 64 +- .../components/demos/SubtractAnimations.tsx | 99 +- packages/docs/components/demos/Translate.tsx | 180 +-- packages/docs/components/demos/Triangle.tsx | 56 +- packages/docs/components/demos/control.tsx | 2 +- packages/docs/components/demos/index.tsx | 2 +- packages/docs/components/demos/types.ts | 8 +- .../docs/components/lambda/webhook-test.tsx | 408 +++-- packages/docs/components/layout/Button.tsx | 2 +- .../docs/components/layout/RowOnDesktop.tsx | 10 +- packages/docs/components/layout/Spacer.tsx | 4 +- .../docs/components/recorder/RecordButton.tsx | 45 +- .../docs/components/recorder/RenderButton.tsx | 68 +- packages/docs/components/recorder/layout.tsx | 92 +- .../docs/components/shapes/edge-roundness.tsx | 382 ++--- .../transitions/custom-transition.tsx | 111 +- packages/docs/copy-convert.ts | 2 +- packages/docs/count-pages.ts | 24 +- .../animation-utils/table-of-contents.tsx | 42 +- .../docs/docs/bundler/table-of-contents.tsx | 26 +- .../docs/captions/GuideTableOfContents.tsx | 2 +- .../docs/docs/cloudrun/table-of-contents.tsx | 122 +- .../docs/docs/fonts-api/TableOfContents.tsx | 26 +- packages/docs/docs/gif/table-of-contents.tsx | 42 +- .../docs/docs/lambda/table-of-contents.tsx | 4 +- .../docs/layout-utils/table-of-contents.tsx | 6 +- .../docs/light-leaks/table-of-contents.tsx | 26 +- .../docs/motion-blur/table-of-contents.tsx | 34 +- .../docs/docs/noise/table-of-contents.tsx | 44 +- .../docs/docs/paths/table-of-contents.tsx | 174 +- .../docs/docs/player/drag-and-drop/Demo.tsx | 2 +- .../player/drag-and-drop/SelectionOutline.tsx | 3 +- .../player/drag-and-drop/SortedOutlines.tsx | 2 +- .../docs/docs/preload/table-of-contents.tsx | 58 +- packages/docs/docs/rive/table-of-contents.tsx | 26 +- .../docs/docs/shapes/table-of-contents.tsx | 48 +- .../docs/transitions/table-of-contents.tsx | 2 +- .../docs/docs/whisper-web/whisper-web.tsx | 4 +- packages/docs/prewarm-twoslash.ts | 2 +- packages/docs/remotion.config.ts | 6 +- packages/docs/render-cards.ts | 4 +- packages/docs/src/components/TeamCards.tsx | 2 +- packages/docs/src/components/TemplatePage.tsx | 5 +- packages/docs/src/pages/about/index.tsx | 5 +- packages/docs/src/pages/contact/index.tsx | 3 +- packages/docs/src/pages/player/index.tsx | 2 +- packages/docs/twoslash-worker.ts | 5 +- packages/docs/vercel.ts | 16 +- packages/docusaurus-plugin/src/index.ts | 2 +- packages/docusaurus-plugin/src/shiki.ts | 1 - packages/eslint-config-internal/src/index.ts | 2 +- .../example-without-zod/remotion.config.ts | 2 +- packages/gif/src/worker/source.ts | 4 +- packages/google-fonts/bundle.ts | 2 +- packages/google-fonts/ensure-generation.ts | 14 +- packages/google-fonts/scripts/generate.ts | 1 - .../scripts/incompatible-fonts.ts | 240 +-- packages/google-fonts/scripts/utils.ts | 56 +- .../google-fonts/test/generate-info.test.ts | 80 +- .../src/test/convert-to-captions.test.ts | 2 +- packages/it-tests/download-whisper.ts | 2 +- .../it-tests/src/bundle/bundle-studio.test.ts | 2 +- .../cloudrun/cloudrun-browser-bundle.test.ts | 2 +- .../it-tests/src/codemods/codemods.test.ts | 2 +- .../src/codemods/visual-controls.test.ts | 2 +- .../src/lambda/lambda-browser-bundle.test.ts | 2 +- .../src/lambda/lambda-integration.test.ts | 2 +- .../src/monorepo/cli-versions.test.ts | 2 +- .../it-tests/src/monorepo/get-all-packages.ts | 4 +- .../it-tests/src/monorepo/go-package.test.ts | 2 +- .../src/monorepo/no-dev-files.test.ts | 2 +- .../src/monorepo/package-metadata.test.ts | 2 +- .../src/monorepo/package-sync.test.ts | 6 +- .../it-tests/src/monorepo/php-package.test.ts | 4 +- .../src/monorepo/python-package.test.ts | 2 +- .../src/monorepo/ruby-package.test.ts | 2 +- .../src/monorepo/statistics-file.test.ts | 2 +- .../src/rendering/base64-audio.test.ts | 4 +- .../src/rendering/bundle-renderer.test.ts | 6 +- .../call-ffmpeg-from-node-modules.test.ts | 2 +- .../src/rendering/cancel-render.test.ts | 2 +- .../src/rendering/frame-accuracy-gif.test.ts | 4 +- .../src/rendering/get-compositions.test.ts | 2 +- .../src/rendering/get-video-metadata.test.ts | 7 +- .../src/rendering/render-scale.test.ts | 4 +- .../it-tests/src/rendering/rendering.test.ts | 4 +- packages/it-tests/src/rendering/test-utils.ts | 4 +- .../it-tests/src/size-benchmark/benchmark.ts | 2 +- .../src/size-benchmark/run-benchmark.ts | 6 +- .../src/ssr/cancel-after-success.test.ts | 2 +- .../src/ssr/cancel-renderframes.test.ts | 2 +- .../src/ssr/cancel-rendermedia.test.ts | 2 +- .../src/ssr/cancel-renderstill.test.ts | 2 +- .../src/ssr/fatal-error-correct-error.test.ts | 2 +- .../it-tests/src/ssr/render-frames.test.ts | 8 +- .../it-tests/src/ssr/render-media.test.ts | 2 +- .../it-tests/src/ssr/render-still.test.ts | 8 +- packages/it-tests/src/templates/publish.ts | 4 +- .../src/templates/validate-templates.test.ts | 2 +- packages/lambda-client/src/aws-provider.ts | 2 +- .../lambda-client/src/make-lambda-payload.ts | 5 +- packages/lambda-client/src/read-file.ts | 2 +- .../src/render-still-on-lambda.ts | 3 +- .../src/test/concurrency-payload.test.ts | 2 +- .../src/test/price-calculation.test.ts | 2 +- packages/lambda/build.ts | 6 +- packages/lambda/src/api/create-function.ts | 2 +- packages/lambda/src/api/deploy-site.ts | 2 +- packages/lambda/src/api/download-media.ts | 2 +- packages/lambda/src/api/upload-dir.ts | 6 +- packages/lambda/src/cli/args.ts | 5 +- .../src/cli/commands/quotas/increase.ts | 2 +- .../lambda/src/cli/commands/render/render.ts | 13 +- .../lambda/src/cli/commands/sites/create.ts | 5 +- packages/lambda/src/cli/commands/still.ts | 2 +- .../cli/helpers/get-webhook-custom-data.ts | 4 +- .../src/functions/helpers/get-folder-files.ts | 2 +- packages/lambda/src/shared/read-dir.ts | 2 +- .../lambda/src/test/integration/cli.test.ts | 2 +- .../src/test/integration/delete-site.test.ts | 2 +- .../test/integration/deploy-function.test.ts | 2 +- .../src/test/integration/deploy-site.test.ts | 2 +- .../src/test/integration/get-sites.test.ts | 2 +- .../src/test/integration/handlers.test.ts | 2 +- .../src/test/integration/lifecycle.test.ts | 2 +- .../src/test/integration/renders/gif.test.ts | 2 +- .../integration/renders/muted-render.test.ts | 6 +- .../integration/renders/old-version.test.ts | 2 +- .../integration/renders/other-bucket.test.ts | 2 +- .../integration/renders/regular-audio.test.ts | 4 +- .../renders/seamless-audio.test.ts | 6 +- .../renders/slow-seamless-audio.test.ts | 6 +- .../renders/transparent-webm.test.ts | 6 +- .../integration/simulate-lambda-render.ts | 2 +- .../src/test/integration/webhooks.test.ts | 4 +- .../src/test/mocks/mock-implementation.ts | 4 +- packages/lambda/src/test/mocks/mock-store.ts | 2 +- .../src/test/unit/best-bucketnames.test.ts | 2 +- .../lambda/src/test/unit/handlers.test.ts | 2 +- packages/light-leaks/bundle.ts | 2 +- .../src/containers/webm/make-track.ts | 2 +- packages/media-parser/src/test/av1.test.ts | 2 +- .../src/test/callback-fields.test.ts | 2 +- .../media-parser/src/test/duration.test.ts | 2 +- .../media-parser/src/test/elst-offset.test.ts | 2 +- .../media-parser/src/test/empty-video.test.ts | 2 +- .../src/test/error-messages.test.ts | 2 +- .../media-parser/src/test/fast-mehmet.test.ts | 2 +- .../src/test/finish-callback.test.ts | 2 +- packages/media-parser/src/test/flac.test.ts | 2 +- .../src/test/foreign-types.test.ts | 2 +- ...nted-mp4-with-no-duration-metadata.test.ts | 2 +- .../src/test/fragmented-mp4a.test.ts | 2 +- .../src/test/h262-unsupported.test.ts | 2 +- .../src/test/iso-base-media.test.ts | 2 +- .../media-parser/src/test/keyframes.test.ts | 2 +- .../test/m3u8-multiple-audio-streams.test.ts | 2 +- packages/media-parser/src/test/m4a.test.ts | 2 +- .../media-parser/src/test/matroska.test.ts | 2 +- .../media-parser/src/test/mp3-mpeg25.test.ts | 2 +- .../src/test/mp3-no-magic.test.ts | 2 +- .../src/test/mp3-syncsafe.test.ts | 2 +- .../media-parser/src/test/mp3-vbr.test.ts | 2 +- .../media-parser/src/test/mp4-av1.test.ts | 2 +- .../src/test/mp4-resiliency.test.ts | 2 +- .../src/test/no-codecprivate.test.ts | 2 +- .../media-parser/src/test/no-fields.test.ts | 2 +- .../media-parser/src/test/parse-aac.test.ts | 2 +- .../src/test/parse-and-download-video.test.ts | 2 +- .../src/test/parse-avi-file.test.ts | 2 +- .../media-parser/src/test/parse-colr.test.ts | 2 +- .../src/test/parse-local-m3u8.test.ts | 2 +- .../media-parser/src/test/parse-mfra.test.ts | 2 +- .../media-parser/src/test/parse-mp3.test.ts | 2 +- .../src/test/parse-mp4-partially.test.ts | 2 +- .../parse-transport-stream-partially.test.ts | 2 +- .../media-parser/src/test/parse-video.test.ts | 2 +- .../src/test/parse-webm-partially.test.ts | 2 +- .../media-parser/src/test/parse-webm.test.ts | 2 +- .../src/test/read-metadata.test.ts | 2 +- .../src/test/respect-editlist.test.ts | 2 +- .../src/test/scattered-samples.test.ts | 2 +- .../src/test/seeking/basic-mp4.test.ts | 2 +- .../src/test/seeking/fetch-idx.test.ts | 2 +- .../src/test/seeking/no-samples-twice.test.ts | 2 +- .../src/test/seeking/seek-aac.test.ts | 2 +- .../test/seeking/seek-avi-without-idx.test.ts | 2 +- .../src/test/seeking/seek-avi.test.ts | 2 +- .../src/test/seeking/seek-backwards.test.ts | 2 +- .../src/test/seeking/seek-before.test.ts | 2 +- .../src/test/seeking/seek-flac.test.ts | 2 +- .../src/test/seeking/seek-m3u-mp4.test.ts | 2 +- .../src/test/seeking/seek-moof.test.ts | 2 +- .../src/test/seeking/seek-mp3-cbr.test.ts | 2 +- .../src/test/seeking/seek-mp3.test.ts | 2 +- .../src/test/seeking/seek-on-worker.test.ts | 2 +- .../test/seeking/seek-transportstream.test.ts | 2 +- .../src/test/seeking/seek-xing.test.ts | 2 +- .../src/test/seeking/seeking-wav.test.ts | 2 +- .../seeking/slow-fields-forward-seek.test.ts | 2 +- .../seeking/throw-on-infinite-loop.test.ts | 2 +- .../src/test/seeking/webm-cues.test.ts | 2 +- .../media-parser/src/test/skipped-avi.test.ts | 2 +- .../src/test/slow-shortcircuit.test.ts | 2 +- .../src/test/stream-local.test.ts | 2 +- .../src/test/stream-samples.test.ts | 2 +- .../src/test/transportstream.test.ts | 2 +- .../src/test/tricky-moof-duration.test.ts | 2 +- .../src/test/ts-multiple-keyframes.test.ts | 2 +- .../src/test/very-big-mp4.test.ts | 2 +- .../media-parser/src/test/vp9-in-mp4.test.ts | 2 +- .../media-parser/src/test/wav-junk.test.ts | 2 +- packages/media-parser/src/test/wav.test.ts | 2 +- .../src/test/wave-format-extensible.test.ts | 2 +- .../src/test/webm-codec-no-sps.test.ts | 2 +- packages/media-parser/src/test/worker.test.ts | 2 +- .../src/use-windowed-audio-data.ts | 1 - packages/media/bundle.ts | 2 +- packages/media/vitest.config.ts | 2 +- .../src/test/get-and-convert.test.ts | 2 +- packages/paths/src/helpers/bezier.ts | 3 +- packages/player/src/Player.tsx | 8 +- packages/player/src/PlayerControls.tsx | 4 +- packages/player/src/PlayerUI.tsx | 12 +- packages/player/src/render-volume-slider.tsx | 2 +- packages/promo-pages/bundle.ts | 1 - .../src/components/3DEngine/ButtonDemo.tsx | 2 +- .../components/homepage/ChooseTemplate.tsx | 1 - .../homepage/Demo/DisplayedEmoji.tsx | 1 - .../src/components/homepage/Demo/index.tsx | 1 - .../homepage/EditorStarterSection.tsx | 1 - .../components/homepage/VideoAppsShowcase.tsx | 1 - .../src/components/prompts/MuxPlayer.tsx | 1 - packages/promo-pages/src/prompts-show.tsx | 2 +- packages/promo-pages/vite.config.ts | 1 - packages/react18-tests/vitest.config.ts | 2 +- .../renderer/src/browser/BrowserFetcher.ts | 5 +- packages/renderer/src/browser/BrowserPage.ts | 22 +- .../renderer/src/browser/BrowserRunner.ts | 2 +- packages/renderer/src/browser/Connection.ts | 1 - packages/renderer/src/browser/FrameManager.ts | 24 +- packages/renderer/src/browser/Launcher.ts | 1 - .../src/browser/handle-failed-resource.ts | 2 +- packages/renderer/src/call-ffmpeg.ts | 2 +- .../renderer/src/compositor/compositor.ts | 2 +- packages/renderer/src/ensure-browser.ts | 2 +- packages/renderer/src/get-compositions.ts | 2 +- packages/renderer/src/index.ts | 2 - packages/renderer/src/render-frames.ts | 5 +- packages/renderer/src/render-media.ts | 6 +- packages/renderer/src/render-still.ts | 6 +- packages/renderer/src/select-composition.ts | 2 +- .../renderer/src/test/extract-audio.test.ts | 2 +- .../src/test/extract-frame-rust.test.ts | 2 +- .../src/test/get-silent-parts.test.ts | 2 +- .../src/test/rust-memory-usage.test.ts | 2 +- packages/renderer/types/ws/index.d.ts | 140 +- packages/serverless-client/src/progress.ts | 1 - .../src/provider-implementation.ts | 2 +- packages/serverless/src/concat-videos.ts | 5 +- packages/serverless/src/handlers/launch.ts | 10 +- packages/serverless/src/handlers/renderer.ts | 5 +- packages/serverless/src/handlers/still.ts | 5 +- packages/serverless/src/invoke-webhook.ts | 2 +- packages/serverless/src/merge-chunks.ts | 3 +- packages/serverless/src/stream-renderer.ts | 4 +- packages/skia/src/enable.ts | 2 +- .../rules/assets/charts-bar-chart.tsx | 303 ++-- .../assets/text-animations-typewriter.tsx | 150 +- .../assets/text-animations-word-highlight.tsx | 169 +- packages/skills/src/Root.tsx | 72 +- packages/skills/src/index.ts | 4 +- .../src/helpers/open-in-editor.ts | 12 +- .../src/preview-server/api-types.ts | 2 +- .../dev-middleware/middleware.ts | 2 +- .../src/preview-server/get-package-manager.ts | 4 +- .../src/preview-server/handler.ts | 2 +- .../preview-server/hot-middleware/index.tsx | 4 +- .../src/preview-server/live-events.ts | 4 +- .../src/preview-server/project-info.ts | 2 +- .../src/preview-server/public-folder.ts | 2 +- .../preview-server/routes/apply-codemod.ts | 2 +- .../routes/apply-visual-control-change.ts | 4 +- .../routes/can-update-default-props.ts | 2 +- .../routes/delete-static-file.ts | 4 +- .../routes/install-dependency.ts | 2 +- .../routes/update-default-props.ts | 2 +- .../src/preview-server/serve-static.ts | 2 +- .../src/preview-server/start-server.ts | 4 +- packages/studio-server/src/routes.ts | 10 +- packages/studio-server/src/start-studio.ts | 6 +- .../src/test/parse-error-stack.test.ts | 2 +- .../src/test/parse-module-not-found.test.ts | 2 +- .../src/components/AssetSelectorItem.tsx | 2 +- packages/studio/src/components/Canvas.tsx | 2 +- packages/studio/src/components/CopyButton.tsx | 2 +- .../studio/src/components/EditorContexts.tsx | 1 - .../studio/src/components/FilePreview.tsx | 2 +- .../studio/src/components/InstallPackage.tsx | 2 +- .../src/components/Menu/MenuSubItem.tsx | 4 +- .../src/components/MenuBuildIndicator.tsx | 2 +- .../studio/src/components/MenuToolbar.tsx | 2 +- .../studio/src/components/ModalHeader.tsx | 2 +- .../NewComposition/CodemodFooter.tsx | 2 +- .../components/NewComposition/ComboBox.tsx | 2 +- .../NewComposition/DuplicateComposition.tsx | 4 +- .../components/NewComposition/MenuContent.tsx | 2 +- .../NewComposition/NewCompDuration.tsx | 2 +- .../NewComposition/RenameComposition.tsx | 4 +- .../src/components/OverrideInputProps.tsx | 2 +- .../studio/src/components/PreviewToolbar.tsx | 4 +- .../QuickSwitcher/QuickSwitcherContent.tsx | 6 +- .../studio/src/components/RenderButton.tsx | 2 +- .../src/components/RenderModal/DataEditor.tsx | 16 +- .../RenderModal/EnforceAudioTrackSetting.tsx | 2 +- .../src/components/RenderModal/EnvInput.tsx | 2 +- .../components/RenderModal/MutedSetting.tsx | 2 +- .../components/RenderModal/NumberSetting.tsx | 4 +- .../RenderModal/OptionExplainer.tsx | 2 +- .../RenderModal/RenderModalAdvanced.tsx | 4 +- .../RenderModal/RenderModalAudio.tsx | 6 +- .../RenderModal/RenderModalBasic.tsx | 8 +- .../components/RenderModal/RenderModalGif.tsx | 2 +- .../RenderModalJSONPropsEditor.tsx | 4 +- .../RenderModal/RenderModalOutputName.tsx | 2 +- .../RenderModal/RenderModalPicture.tsx | 4 +- .../RenderModal/RenderStatusModal.tsx | 2 +- .../ResolveCompositionBeforeModal.tsx | 2 +- .../RenderModal/SchemaEditor/SchemaEditor.tsx | 10 +- .../SchemaEditor/SchemaErrorMessages.tsx | 4 +- .../RenderModal/SchemaEditor/SchemaLabel.tsx | 2 +- .../SchemaEditor/ZodArrayEditor.tsx | 12 +- .../SchemaEditor/ZodArrayItemEditor.tsx | 4 +- .../SchemaEditor/ZodBooleanEditor.tsx | 4 +- .../SchemaEditor/ZodColorEditor.tsx | 12 +- .../SchemaEditor/ZodDateEditor.tsx | 8 +- .../ZodDiscriminatedUnionEditor.tsx | 14 +- .../SchemaEditor/ZodEffectEditor.tsx | 6 +- .../SchemaEditor/ZodEnumEditor.tsx | 6 +- .../SchemaEditor/ZodErrorMessages.tsx | 2 +- .../SchemaEditor/ZodMatrixEditor.tsx | 12 +- .../SchemaEditor/ZodNullableEditor.tsx | 4 +- .../SchemaEditor/ZodNumberEditor.tsx | 6 +- .../SchemaEditor/ZodObjectEditor.tsx | 8 +- .../SchemaEditor/ZodOptionalEditor.tsx | 4 +- .../SchemaEditor/ZodOrNullishEditor.tsx | 8 +- .../SchemaEditor/ZodStaticFileEditor.tsx | 6 +- .../SchemaEditor/ZodStringEditor.tsx | 8 +- .../SchemaEditor/ZodTextareaEditor.tsx | 8 +- .../SchemaEditor/ZodTupleItemEditor.tsx | 4 +- .../SchemaEditor/ZodUnionEditor.tsx | 6 +- .../RenderModal/SchemaEditor/local-state.tsx | 2 +- .../RenderModal/SeparateAudioOption.tsx | 4 +- .../RenderModal/ServerRenderModal.tsx | 24 +- .../RenderModal/WebRenderModalAudio.tsx | 6 +- .../RenderModal/WebRenderModalLicense.tsx | 2 +- .../RenderQueue/RenderQueueDownloadItem.tsx | 2 +- .../src/components/RenderQueue/index.tsx | 4 +- packages/studio/src/components/RendersTab.tsx | 2 +- .../components/RunningCalculateMetadata.tsx | 2 +- packages/studio/src/components/Tabs/index.tsx | 1 - packages/studio/src/components/TimeValue.tsx | 2 +- .../src/components/Timeline/Timeline.tsx | 4 +- .../Timeline/TimelineDragHandler.tsx | 16 +- .../components/Timeline/TimelineSlider.tsx | 4 +- .../Timeline/TimelineStack/index.tsx | 2 +- .../Timeline/TimelineTimeIndicators.tsx | 2 +- .../components/Timeline/TimelineTracks.tsx | 2 +- .../Timeline/timeline-scroll-logic.ts | 2 +- .../components/UpdateModal/UpdateModal.tsx | 2 +- .../VisualControls/VisualControlHandle.tsx | 12 +- .../react-overlay/listen-to-runtime-errors.ts | 16 +- .../CompositionIdsDropdown.tsx | 2 +- .../remotion-overlay/ErrorDisplay.tsx | 4 +- .../remotion-overlay/HelpLink.tsx | 2 +- .../remotion-overlay/StackFrame.tsx | 2 +- .../studio/src/helpers/use-menu-structure.tsx | 2 +- packages/studio/src/previewEntry.tsx | 3 +- .../studio/src/test/create-zod-values.test.ts | 2 +- .../studio/src/test/extract-zod-enums.test.ts | 2 +- .../src/test/stringify-default-props.test.ts | 2 +- packages/transitions/bundle.ts | 12 +- .../transitions/src/test/overlay.test.tsx | 2 +- .../transitions/src/test/sample-test.test.tsx | 2 +- .../transitions/src/test/transitions.test.tsx | 2 +- packages/vercel/bundle.ts | 2 +- packages/vercel/src/add-bundle-to-sandbox.ts | 2 +- packages/vercel/src/scripts/render-still.ts | 2 +- packages/vercel/src/scripts/render-video.ts | 2 +- packages/vercel/src/scripts/upload-blob.ts | 2 +- .../src/test/render-still.test.tsx | 3 +- packages/web-renderer/vitest.config.ts | 2 +- packages/webcodecs/bundle.ts | 2 +- packages/webcodecs/src/auto-select-writer.ts | 3 +- packages/webcodecs/src/convert-media.ts | 1 - .../src/it-tests/resample-audiodata.test.ts | 2 +- .../webcodecs/src/test/avi-to-mp4.test.ts | 2 +- .../webcodecs/src/test/create-ftyp.test.ts | 2 +- .../webcodecs/src/test/create-mvhd.test.ts | 2 +- .../src/test/remux-serverside.test.ts | 4 +- packages/webcodecs/src/test/tkhd.test.ts | 2 +- packages/whisper-web/build-wasm.ts | 2 +- packages/whisper-web/main.d.ts | 93 +- packages/zod-types-v3/bundle.ts | 9 +- publish.ts | 2 +- 568 files changed, 6084 insertions(+), 6058 deletions(-) diff --git a/packages/.monorepo/builder.ts b/packages/.monorepo/builder.ts index c0b887315d6..5571fe87305 100644 --- a/packages/.monorepo/builder.ts +++ b/packages/.monorepo/builder.ts @@ -1,5 +1,5 @@ -import {build} from 'bun'; import path from 'path'; +import {build} from 'bun'; import {Exports, validateExports} from './validate-exports'; if (process.env.NODE_ENV !== 'production') { diff --git a/packages/bugs/api/index.ts b/packages/bugs/api/index.ts index fda3014ac1f..202dae588b9 100644 --- a/packages/bugs/api/index.ts +++ b/packages/bugs/api/index.ts @@ -1,15 +1,15 @@ export default async function handler() { - return new Response( - `

Remotion Bugs

Add a version to query bugs, e.g https://bugs.remotion.dev/v4.0.36

`, - { - status: 200, - headers: { - "content-type": "text/html", - }, - } - ); + return new Response( + `

Remotion Bugs

Add a version to query bugs, e.g https://bugs.remotion.dev/v4.0.36

`, + { + status: 200, + headers: { + 'content-type': 'text/html', + }, + }, + ); } export const config = { - runtime: "edge", + runtime: 'edge', }; diff --git a/packages/bugs/deprecate-versions.ts b/packages/bugs/deprecate-versions.ts index b4451b527a1..d3b3b56043a 100644 --- a/packages/bugs/deprecate-versions.ts +++ b/packages/bugs/deprecate-versions.ts @@ -1,16 +1,16 @@ -import { bugs } from "./api/[v]"; -import { $ } from "bun"; +import {$} from 'bun'; +import {bugs} from './api/[v]'; const buggyRelease: string[] = []; for (const bug of bugs) { - buggyRelease.push(...bug.versions); + buggyRelease.push(...bug.versions); } const uniqueVersions = [...new Set(buggyRelease)]; console.log(uniqueVersions); for (const version of uniqueVersions) { - await $`npm deprecate remotion@${version} "This version contains bugs: https://bugs.remotion.dev/${version}"`; - console.log(`Deprecated version ${version}`); + await $`npm deprecate remotion@${version} "This version contains bugs: https://bugs.remotion.dev/${version}"`; + console.log(`Deprecated version ${version}`); } diff --git a/packages/bundler/src/bundle.ts b/packages/bundler/src/bundle.ts index 7ba39db9b23..7927146b19e 100644 --- a/packages/bundler/src/bundle.ts +++ b/packages/bundler/src/bundle.ts @@ -1,10 +1,10 @@ -import type {GitSource, RenderDefaults} from '@remotion/studio-shared'; -import {getProjectName, SOURCE_MAP_ENDPOINT} from '@remotion/studio-shared'; import fs, {promises} from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import {promisify} from 'node:util'; import {isMainThread} from 'node:worker_threads'; +import type {GitSource, RenderDefaults} from '@remotion/studio-shared'; +import {getProjectName, SOURCE_MAP_ENDPOINT} from '@remotion/studio-shared'; import webpack from 'webpack'; import {copyDir} from './copy-dir'; import {indexHtml} from './index-html'; diff --git a/packages/bundler/src/esbuild-loader/index.ts b/packages/bundler/src/esbuild-loader/index.ts index 4d4172cb695..6f2e2acc4d9 100644 --- a/packages/bundler/src/esbuild-loader/index.ts +++ b/packages/bundler/src/esbuild-loader/index.ts @@ -1,5 +1,5 @@ -import {transform as defaultEsbuildTransform} from 'esbuild'; import path from 'node:path'; +import {transform as defaultEsbuildTransform} from 'esbuild'; import type webpack from 'webpack'; import type {LoaderOptions} from './interfaces'; diff --git a/packages/cli/src/add.ts b/packages/cli/src/add.ts index 86b4e757d16..404892dcd7e 100644 --- a/packages/cli/src/add.ts +++ b/packages/cli/src/add.ts @@ -1,7 +1,7 @@ -import {RenderInternals, type LogLevel} from '@remotion/renderer'; -import {StudioServerInternals} from '@remotion/studio-server'; import {spawn} from 'node:child_process'; import fs from 'node:fs'; +import {RenderInternals, type LogLevel} from '@remotion/renderer'; +import {StudioServerInternals} from '@remotion/studio-server'; import {chalk} from './chalk'; import {EXTRA_PACKAGES} from './extra-packages'; import {listOfRemotionPackages} from './list-of-remotion-packages'; diff --git a/packages/cli/src/bundle.ts b/packages/cli/src/bundle.ts index a8e5ba9a27f..aac53753c07 100644 --- a/packages/cli/src/bundle.ts +++ b/packages/cli/src/bundle.ts @@ -1,9 +1,9 @@ +import {existsSync, readdirSync, readFileSync, rmSync, writeFileSync} from 'fs'; +import path from 'path'; import {BundlerInternals} from '@remotion/bundler'; import type {LogLevel} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; import {StudioServerInternals} from '@remotion/studio-server'; -import {existsSync, readdirSync, readFileSync, rmSync, writeFileSync} from 'fs'; -import path from 'path'; import {chalk} from './chalk'; import {findEntryPoint} from './entry-point'; import {getGitSource} from './get-github-repository'; diff --git a/packages/cli/src/config/index.ts b/packages/cli/src/config/index.ts index a45826667a0..26f1f072dfe 100644 --- a/packages/cli/src/config/index.ts +++ b/packages/cli/src/config/index.ts @@ -1,20 +1,3 @@ -import {getBrowser} from './browser'; -import {getConcurrency} from './concurrency'; -import {getDotEnvLocation} from './env-file'; -import {getShouldOutputImageSequence} from './image-sequence'; -import {getOutputLocation} from './output-location'; -import { - defaultOverrideFunction, - getWebpackOverrideFn, -} from './override-webpack'; -import { - getRendererPortFromConfigFile, - getRendererPortFromConfigFileAndCliFlag, - getStudioPort, -} from './preview-server'; -import {getStillFrame, setStillFrame} from './still-frame'; -import {getWebpackCaching} from './webpack-caching'; - import type {WebpackConfiguration} from '@remotion/bundler'; import type { BrowserExecutable, @@ -31,21 +14,37 @@ import type { import type {HardwareAccelerationOption} from '@remotion/renderer/client'; import {BrowserSafeApis} from '@remotion/renderer/client'; import {StudioServerInternals} from '@remotion/studio-server'; +import {getBrowser} from './browser'; import { getBufferStateDelayInMilliseconds, setBufferStateDelayInMilliseconds, } from './buffer-state-delay-in-milliseconds'; +import {getConcurrency} from './concurrency'; import type {Concurrency} from './concurrency'; import {getEntryPoint, setEntryPoint} from './entry-point'; +import {getDotEnvLocation} from './env-file'; import { getFfmpegOverrideFunction, setFfmpegOverrideFunction, } from './ffmpeg-override'; +import {getShouldOutputImageSequence} from './image-sequence'; import {getMetadata, setMetadata} from './metadata'; +import {getOutputLocation} from './output-location'; import {setOutputLocation} from './output-location'; +import { + defaultOverrideFunction, + getWebpackOverrideFn, +} from './override-webpack'; import type {WebpackOverrideFn} from './override-webpack'; import {overrideWebpackConfig} from './override-webpack'; +import { + getRendererPortFromConfigFile, + getRendererPortFromConfigFileAndCliFlag, + getStudioPort, +} from './preview-server'; import {setPort, setRendererPort, setStudioPort} from './preview-server'; +import {getStillFrame, setStillFrame} from './still-frame'; +import {getWebpackCaching} from './webpack-caching'; import {getWebpackPolling} from './webpack-poll'; export type {Concurrency, WebpackConfiguration, WebpackOverrideFn}; diff --git a/packages/cli/src/convert-entry-point-to-serve-url.ts b/packages/cli/src/convert-entry-point-to-serve-url.ts index 25c15e4b045..a73dcfda8f7 100644 --- a/packages/cli/src/convert-entry-point-to-serve-url.ts +++ b/packages/cli/src/convert-entry-point-to-serve-url.ts @@ -1,5 +1,5 @@ -import {RenderInternals} from '@remotion/renderer'; import path from 'node:path'; +import {RenderInternals} from '@remotion/renderer'; export const convertEntryPointToServeUrl = (entryPoint: string) => { const fullPath = RenderInternals.isServeUrl(entryPoint) diff --git a/packages/cli/src/entry-point.ts b/packages/cli/src/entry-point.ts index 1c3af4dd064..24e6e34f31c 100644 --- a/packages/cli/src/entry-point.ts +++ b/packages/cli/src/entry-point.ts @@ -1,7 +1,7 @@ -import type {LogLevel} from '@remotion/renderer'; -import {RenderInternals} from '@remotion/renderer'; import {existsSync} from 'node:fs'; import path from 'node:path'; +import type {LogLevel} from '@remotion/renderer'; +import {RenderInternals} from '@remotion/renderer'; import {ConfigInternals} from './config'; import {Log} from './log'; diff --git a/packages/cli/src/ffmpeg.ts b/packages/cli/src/ffmpeg.ts index e9624a895b6..7594a9837a9 100644 --- a/packages/cli/src/ffmpeg.ts +++ b/packages/cli/src/ffmpeg.ts @@ -1,8 +1,8 @@ +import {spawnSync} from 'node:child_process'; +import path from 'node:path'; import type {LogLevel} from '@remotion/renderer'; import {RenderInternals} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import {spawnSync} from 'node:child_process'; -import path from 'node:path'; import {parsedCli} from './parsed-cli'; export const dynamicLibEnv = ( diff --git a/packages/cli/src/get-cli-options.ts b/packages/cli/src/get-cli-options.ts index 83401d64472..9e527c8960a 100644 --- a/packages/cli/src/get-cli-options.ts +++ b/packages/cli/src/get-cli-options.ts @@ -1,7 +1,7 @@ -import type {LogLevel} from '@remotion/renderer'; -import {BrowserSafeApis} from '@remotion/renderer/client'; import fs from 'node:fs'; import path from 'node:path'; +import type {LogLevel} from '@remotion/renderer'; +import {BrowserSafeApis} from '@remotion/renderer/client'; import {ConfigInternals} from './config'; import {getEnvironmentVariables} from './get-env'; import {getInputProps} from './get-input-props'; diff --git a/packages/cli/src/get-config-file-name.ts b/packages/cli/src/get-config-file-name.ts index 789fc6640ac..84278972ae7 100644 --- a/packages/cli/src/get-config-file-name.ts +++ b/packages/cli/src/get-config-file-name.ts @@ -1,6 +1,6 @@ -import {BrowserSafeApis} from '@remotion/renderer/client'; import {existsSync} from 'node:fs'; import path from 'node:path'; +import {BrowserSafeApis} from '@remotion/renderer/client'; import {loadConfigFile} from './load-config'; import {Log} from './log'; import {parsedCli} from './parsed-cli'; diff --git a/packages/cli/src/get-env.ts b/packages/cli/src/get-env.ts index 42464d3ad89..7fd2d3105cd 100644 --- a/packages/cli/src/get-env.ts +++ b/packages/cli/src/get-env.ts @@ -1,10 +1,10 @@ +import fs, {readFileSync} from 'node:fs'; +import path from 'node:path'; import type {LogLevel} from '@remotion/renderer'; import {RenderInternals} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; import {StudioServerInternals} from '@remotion/studio-server'; import dotenv from 'dotenv'; -import fs, {readFileSync} from 'node:fs'; -import path from 'node:path'; import {chalk} from './chalk'; import {makeHyperlink} from './hyperlinks/make-link'; import {Log} from './log'; diff --git a/packages/cli/src/get-github-repository.ts b/packages/cli/src/get-github-repository.ts index d7e212752a1..4cba19c3b40 100644 --- a/packages/cli/src/get-github-repository.ts +++ b/packages/cli/src/get-github-repository.ts @@ -1,9 +1,9 @@ -import {BundlerInternals} from '@remotion/bundler'; -import type {LogLevel} from '@remotion/renderer'; -import type {GitSource} from '@remotion/studio-shared'; import {execSync} from 'child_process'; import {existsSync, readFileSync} from 'fs'; import path from 'path'; +import {BundlerInternals} from '@remotion/bundler'; +import type {LogLevel} from '@remotion/renderer'; +import type {GitSource} from '@remotion/studio-shared'; import {Log} from './log'; export type ParsedGitRemote = { diff --git a/packages/cli/src/get-input-props.ts b/packages/cli/src/get-input-props.ts index 0297e229be7..eec942cf982 100644 --- a/packages/cli/src/get-input-props.ts +++ b/packages/cli/src/get-input-props.ts @@ -1,8 +1,8 @@ -import type {LogLevel, LogOptions} from '@remotion/renderer'; -import {BrowserSafeApis} from '@remotion/renderer/client'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; +import type {LogLevel, LogOptions} from '@remotion/renderer'; +import {BrowserSafeApis} from '@remotion/renderer/client'; import {Log} from './log'; import {parsedCli} from './parsed-cli'; diff --git a/packages/cli/src/initialize-cli.ts b/packages/cli/src/initialize-cli.ts index 624ea2cbdbf..37bf1ecf533 100644 --- a/packages/cli/src/initialize-cli.ts +++ b/packages/cli/src/initialize-cli.ts @@ -1,6 +1,6 @@ +import path from 'path'; import type {LogLevel} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import path from 'path'; import {loadConfig} from './get-config-file-name'; import {makeHyperlink} from './hyperlinks/make-link'; import {Log} from './log'; diff --git a/packages/cli/src/load-config.ts b/packages/cli/src/load-config.ts index b7044998009..09949f96052 100644 --- a/packages/cli/src/load-config.ts +++ b/packages/cli/src/load-config.ts @@ -1,7 +1,7 @@ -import {BundlerInternals} from '@remotion/bundler'; import fs from 'node:fs'; import path from 'node:path'; import {isMainThread} from 'node:worker_threads'; +import {BundlerInternals} from '@remotion/bundler'; import {Log} from './log'; export const loadConfigFile = async ( diff --git a/packages/cli/src/on-artifact.ts b/packages/cli/src/on-artifact.ts index 0ed587898e7..53a2aea8c3c 100644 --- a/packages/cli/src/on-artifact.ts +++ b/packages/cli/src/on-artifact.ts @@ -1,7 +1,7 @@ -import type {OnArtifact} from '@remotion/renderer'; -import type {ArtifactProgress} from '@remotion/studio-shared'; import {existsSync, mkdirSync, writeFileSync} from 'fs'; import path from 'path'; +import type {OnArtifact} from '@remotion/renderer'; +import type {ArtifactProgress} from '@remotion/studio-shared'; export const handleOnArtifact = ({ artifactState, diff --git a/packages/cli/src/render-flows/render.ts b/packages/cli/src/render-flows/render.ts index 13152e0d0bd..e4c2be71bc4 100644 --- a/packages/cli/src/render-flows/render.ts +++ b/packages/cli/src/render-flows/render.ts @@ -1,3 +1,6 @@ +import fs, {existsSync} from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; import type { AudioCodec, Browser, @@ -35,9 +38,6 @@ import { type ArtifactProgress, type BrowserDownloadState, } from '@remotion/studio-shared'; -import fs, {existsSync} from 'node:fs'; -import os from 'node:os'; -import path from 'node:path'; import type {_InternalTypes} from 'remotion'; import {NoReactInternals} from 'remotion/no-react'; import {defaultBrowserDownloadProgress} from '../browser-download-bar'; diff --git a/packages/cli/src/render-flows/still.ts b/packages/cli/src/render-flows/still.ts index 69437bf9123..da874e75153 100644 --- a/packages/cli/src/render-flows/still.ts +++ b/packages/cli/src/render-flows/still.ts @@ -1,5 +1,7 @@ // Prints to CLI and also reports back to browser +import {existsSync, mkdirSync} from 'node:fs'; +import path from 'node:path'; import type { Browser, BrowserExecutable, @@ -17,8 +19,6 @@ import type { JobProgressCallback, } from '@remotion/studio-server'; import type {BrowserDownloadState} from '@remotion/studio-shared'; -import {existsSync, mkdirSync} from 'node:fs'; -import path from 'node:path'; import {NoReactInternals} from 'remotion/no-react'; import {defaultBrowserDownloadProgress} from '../browser-download-bar'; import {chalk} from '../chalk'; diff --git a/packages/cli/src/render-queue/queue.ts b/packages/cli/src/render-queue/queue.ts index 15ca3f743b4..f5ab2c87d46 100644 --- a/packages/cli/src/render-queue/queue.ts +++ b/packages/cli/src/render-queue/queue.ts @@ -1,3 +1,4 @@ +import path from 'node:path'; import type {LogLevel} from '@remotion/renderer'; import type { AggregateRenderProgress, @@ -6,7 +7,6 @@ import type { RenderJobWithCleanup, } from '@remotion/studio-server'; import {StudioServerInternals} from '@remotion/studio-server'; -import path from 'node:path'; import {chalk} from '../chalk'; import {Log} from '../log'; import {printError} from '../print-error'; diff --git a/packages/cli/src/setup-cache.ts b/packages/cli/src/setup-cache.ts index 64fa6b66308..28e0924711f 100644 --- a/packages/cli/src/setup-cache.ts +++ b/packages/cli/src/setup-cache.ts @@ -1,11 +1,11 @@ +import {existsSync} from 'fs'; +import path from 'path'; import type {MandatoryLegacyBundleOptions} from '@remotion/bundler'; import {BundlerInternals} from '@remotion/bundler'; import type {LogLevel} from '@remotion/renderer'; import {RenderInternals} from '@remotion/renderer'; import type {BundlingState, CopyingState} from '@remotion/studio-server'; import type {GitSource} from '@remotion/studio-shared'; -import {existsSync} from 'fs'; -import path from 'path'; import {ConfigInternals} from './config'; import {getRenderDefaults} from './get-render-defaults'; import {Log} from './log'; diff --git a/packages/cli/src/show-compositions-picker.ts b/packages/cli/src/show-compositions-picker.ts index ed418cea6bc..c7e3c6d6f08 100644 --- a/packages/cli/src/show-compositions-picker.ts +++ b/packages/cli/src/show-compositions-picker.ts @@ -1,7 +1,6 @@ -import {selectAsync} from './composition-prompts'; - import type {getCompositions, LogLevel} from '@remotion/renderer'; import {chalk} from './chalk'; +import {selectAsync} from './composition-prompts'; type Await = T extends PromiseLike ? U : T; export const showSingleCompositionsPicker = async ( diff --git a/packages/cli/src/skills.ts b/packages/cli/src/skills.ts index 9d204e07f2d..c408ba97d04 100644 --- a/packages/cli/src/skills.ts +++ b/packages/cli/src/skills.ts @@ -1,5 +1,5 @@ -import type {LogLevel} from '@remotion/renderer'; import {spawn} from 'node:child_process'; +import type {LogLevel} from '@remotion/renderer'; import {chalk} from './chalk'; import {Log} from './log'; diff --git a/packages/cli/src/test/codec.test.ts b/packages/cli/src/test/codec.test.ts index 69eb639b956..0e9c239207a 100644 --- a/packages/cli/src/test/codec.test.ts +++ b/packages/cli/src/test/codec.test.ts @@ -1,6 +1,6 @@ +import {describe, expect, test} from 'bun:test'; import type {CodecOrUndefined} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import {describe, expect, test} from 'bun:test'; import {expectToThrow} from './expect-to-throw'; // setCodec diff --git a/packages/cli/src/test/config-chromium.test.ts b/packages/cli/src/test/config-chromium.test.ts index 2968f2d2422..e160ea1a370 100644 --- a/packages/cli/src/test/config-chromium.test.ts +++ b/packages/cli/src/test/config-chromium.test.ts @@ -1,5 +1,5 @@ -import {BrowserSafeApis} from '@remotion/renderer/client'; import {expect, test} from 'bun:test'; +import {BrowserSafeApis} from '@remotion/renderer/client'; import {Config} from '../config'; test('getChromiumOpenGlRenderer from Config - angle value', () => { diff --git a/packages/cli/src/test/crf.test.ts b/packages/cli/src/test/crf.test.ts index 4e5056ec663..4f6ee339946 100644 --- a/packages/cli/src/test/crf.test.ts +++ b/packages/cli/src/test/crf.test.ts @@ -1,5 +1,5 @@ -import {BrowserSafeApis} from '@remotion/renderer/client'; import {describe, test} from 'bun:test'; +import {BrowserSafeApis} from '@remotion/renderer/client'; import {expectToThrow} from './expect-to-throw'; describe('set crf invalid input', () => { diff --git a/packages/cli/src/test/final-output-codec.test.ts b/packages/cli/src/test/final-output-codec.test.ts index 93f5c1544a4..080127b8abd 100644 --- a/packages/cli/src/test/final-output-codec.test.ts +++ b/packages/cli/src/test/final-output-codec.test.ts @@ -1,6 +1,6 @@ +import {describe, expect, test} from 'bun:test'; import type {Codec, CodecOrUndefined} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import {describe, expect, test} from 'bun:test'; const {videoCodecOption} = BrowserSafeApis.options; diff --git a/packages/cli/src/test/log.test.ts b/packages/cli/src/test/log.test.ts index c8d8d2a7388..81e62c69e4e 100644 --- a/packages/cli/src/test/log.test.ts +++ b/packages/cli/src/test/log.test.ts @@ -1,7 +1,7 @@ +import {describe, expect, test} from 'bun:test'; import type {LogLevel} from '@remotion/renderer'; import {RenderInternals} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import {describe, expect, test} from 'bun:test'; const {logLevelOption} = BrowserSafeApis.options; diff --git a/packages/cli/src/test/overwrite.test.ts b/packages/cli/src/test/overwrite.test.ts index 064c2cd90d1..bdad7fc309d 100644 --- a/packages/cli/src/test/overwrite.test.ts +++ b/packages/cli/src/test/overwrite.test.ts @@ -1,5 +1,5 @@ -import {BrowserSafeApis} from '@remotion/renderer/client'; import {afterEach, beforeAll, expect, test} from 'bun:test'; +import {BrowserSafeApis} from '@remotion/renderer/client'; import {expectToThrow} from './expect-to-throw'; const invalidOverwrite = 555; diff --git a/packages/cli/src/test/pixel-format.test.ts b/packages/cli/src/test/pixel-format.test.ts index 6d8bbcaf364..820d6e0ca35 100644 --- a/packages/cli/src/test/pixel-format.test.ts +++ b/packages/cli/src/test/pixel-format.test.ts @@ -1,6 +1,6 @@ +import {describe, expect, test} from 'bun:test'; import type {PixelFormat} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import {describe, expect, test} from 'bun:test'; import {expectToThrow} from './expect-to-throw'; const {pixelFormatOption} = BrowserSafeApis.options; diff --git a/packages/cli/src/test/quality.test.ts b/packages/cli/src/test/quality.test.ts index ceb85f75084..320d6ada7c3 100644 --- a/packages/cli/src/test/quality.test.ts +++ b/packages/cli/src/test/quality.test.ts @@ -1,5 +1,5 @@ -import {BrowserSafeApis} from '@remotion/renderer/client'; import {describe, expect, test} from 'bun:test'; +import {BrowserSafeApis} from '@remotion/renderer/client'; import {expectToThrow} from './expect-to-throw'; const setJpegQuality = BrowserSafeApis.options.jpegQualityOption.setConfig; diff --git a/packages/cli/src/test/range.test.tsx b/packages/cli/src/test/range.test.tsx index 82053bda428..ebb41bec053 100644 --- a/packages/cli/src/test/range.test.tsx +++ b/packages/cli/src/test/range.test.tsx @@ -1,6 +1,6 @@ +import {describe, expect, test} from 'bun:test'; import {RenderInternals} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import {describe, expect, test} from 'bun:test'; import {expectToThrow} from './expect-to-throw'; const {framesOption} = BrowserSafeApis.options; diff --git a/packages/cli/src/upgrade.ts b/packages/cli/src/upgrade.ts index 5a7a440d263..464454bb2b8 100644 --- a/packages/cli/src/upgrade.ts +++ b/packages/cli/src/upgrade.ts @@ -1,6 +1,6 @@ +import {execSync, spawn} from 'node:child_process'; import {RenderInternals, type LogLevel} from '@remotion/renderer'; import {StudioServerInternals} from '@remotion/studio-server'; -import {execSync, spawn} from 'node:child_process'; import {chalk} from './chalk'; import {EXTRA_PACKAGES} from './extra-packages'; import {listOfRemotionPackages} from './list-of-remotion-packages'; diff --git a/packages/cli/src/versions.ts b/packages/cli/src/versions.ts index 8e27cc7a091..a7b4dacb53a 100644 --- a/packages/cli/src/versions.ts +++ b/packages/cli/src/versions.ts @@ -1,7 +1,7 @@ -import type {LogLevel, LogOptions} from '@remotion/renderer'; -import {RenderInternals} from '@remotion/renderer'; import fs from 'node:fs'; import path from 'node:path'; +import type {LogLevel, LogOptions} from '@remotion/renderer'; +import {RenderInternals} from '@remotion/renderer'; import {chalk} from './chalk'; import {EXTRA_PACKAGES, EXTRA_PACKAGES_DOCS} from './extra-packages'; import {listOfRemotionPackages} from './list-of-remotion-packages'; diff --git a/packages/cloudrun/src/admin/bundle-installer.ts b/packages/cloudrun/src/admin/bundle-installer.ts index d06775d1a6d..8f73e12ad7f 100644 --- a/packages/cloudrun/src/admin/bundle-installer.ts +++ b/packages/cloudrun/src/admin/bundle-installer.ts @@ -1,7 +1,7 @@ -import {BundlerInternals} from '@remotion/bundler'; import {execSync} from 'child_process'; import {copyFileSync, mkdirSync, rmSync} from 'fs'; import path from 'path'; +import {BundlerInternals} from '@remotion/bundler'; export const hasGTar = () => { try { diff --git a/packages/cloudrun/src/admin/bundle-renderLogic.ts b/packages/cloudrun/src/admin/bundle-renderLogic.ts index 6b6eb8a2836..30d4345c3d8 100644 --- a/packages/cloudrun/src/admin/bundle-renderLogic.ts +++ b/packages/cloudrun/src/admin/bundle-renderLogic.ts @@ -1,7 +1,7 @@ -import {BundlerInternals} from '@remotion/bundler'; -import {dir} from '@remotion/compositor-linux-x64-gnu'; import fs from 'fs'; import path from 'path'; +import {BundlerInternals} from '@remotion/bundler'; +import {dir} from '@remotion/compositor-linux-x64-gnu'; export const bundleRenderLogic = async () => { const outdir = path.join(__dirname, '../../container/dist'); diff --git a/packages/cloudrun/src/api/download-file.ts b/packages/cloudrun/src/api/download-file.ts index 08fe6dcf672..27c4019669c 100644 --- a/packages/cloudrun/src/api/download-file.ts +++ b/packages/cloudrun/src/api/download-file.ts @@ -1,5 +1,5 @@ -import {RenderInternals} from '@remotion/renderer'; import path from 'node:path'; +import {RenderInternals} from '@remotion/renderer'; import {getCloudStorageClient} from './helpers/get-cloud-storage-client'; /** diff --git a/packages/cloudrun/src/cli/args.ts b/packages/cloudrun/src/cli/args.ts index 7e81841f31f..54cb115dd71 100644 --- a/packages/cloudrun/src/cli/args.ts +++ b/packages/cloudrun/src/cli/args.ts @@ -1,5 +1,4 @@ import {CliInternals} from '@remotion/cli'; - import type {Privacy} from '../defaults'; import type {GcpRegion} from '../pricing/gcp-regions'; diff --git a/packages/cloudrun/src/cli/commands/sites/create.ts b/packages/cloudrun/src/cli/commands/sites/create.ts index ade660d47f5..a9e48666c01 100644 --- a/packages/cloudrun/src/cli/commands/sites/create.ts +++ b/packages/cloudrun/src/cli/commands/sites/create.ts @@ -1,8 +1,8 @@ +import {existsSync, lstatSync} from 'fs'; import {CliInternals} from '@remotion/cli'; import {ConfigInternals} from '@remotion/cli/config'; import type {LogLevel} from '@remotion/renderer'; import {BrowserSafeApis} from '@remotion/renderer/client'; -import {existsSync, lstatSync} from 'fs'; import {Internals} from 'remotion'; import {displaySiteInfo} from '.'; import {internalDeploySiteRaw} from '../../../api/deploy-site'; diff --git a/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts b/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts index 81cc9c9554c..9443c426c12 100644 --- a/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts +++ b/packages/cloudrun/src/functions/helpers/write-cloudrun-error.ts @@ -1,5 +1,5 @@ -import {Storage} from '@google-cloud/storage'; import fs from 'node:fs'; +import {Storage} from '@google-cloud/storage'; export type CloudrunErrorInfo = { type: 'renderer' | 'browser' | 'stitcher' | 'webhook'; diff --git a/packages/convert/app/components/AudioCodecSelection.tsx b/packages/convert/app/components/AudioCodecSelection.tsx index c552292e68c..bb22bb3db6c 100644 --- a/packages/convert/app/components/AudioCodecSelection.tsx +++ b/packages/convert/app/components/AudioCodecSelection.tsx @@ -1,9 +1,3 @@ -import type {InputAudioTrack} from 'mediabunny'; -import React from 'react'; -import type {AudioOperation} from '~/lib/audio-operation'; -import {getAudioOperationId} from '~/lib/operation-key'; -import {AudioCodecDropWarning} from './AudioCodecDropWarning'; -import {AudioOperationOption} from './AudioOperationOption'; import { Select, SelectContent, @@ -12,6 +6,12 @@ import { SelectTrigger, SelectValue, } from '@remotion/design'; +import type {InputAudioTrack} from 'mediabunny'; +import React from 'react'; +import type {AudioOperation} from '~/lib/audio-operation'; +import {getAudioOperationId} from '~/lib/operation-key'; +import {AudioCodecDropWarning} from './AudioCodecDropWarning'; +import {AudioOperationOption} from './AudioOperationOption'; export const AudioCodecSelection: React.FC<{ readonly audioTrackOptions: AudioOperation[]; diff --git a/packages/convert/app/components/ContainerOverview.tsx b/packages/convert/app/components/ContainerOverview.tsx index 13d4321f30f..3b91c2ba61f 100644 --- a/packages/convert/app/components/ContainerOverview.tsx +++ b/packages/convert/app/components/ContainerOverview.tsx @@ -1,4 +1,3 @@ -import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table'; import type { InputAudioTrack, InputFormat, @@ -6,6 +5,7 @@ import type { MetadataTags, } from 'mediabunny'; import React from 'react'; +import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table'; import type {Dimensions} from '~/lib/calculate-new-dimensions-from-dimensions'; import {formatBytes} from '~/lib/format-bytes'; import {formatSeconds} from '~/lib/format-seconds'; diff --git a/packages/convert/app/components/ConvertForm.tsx b/packages/convert/app/components/ConvertForm.tsx index 6d0011f8bff..9f20907ff77 100644 --- a/packages/convert/app/components/ConvertForm.tsx +++ b/packages/convert/app/components/ConvertForm.tsx @@ -1,3 +1,11 @@ +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from '@remotion/design'; import type {InputAudioTrack, InputVideoTrack} from 'mediabunny'; import React from 'react'; import { @@ -12,14 +20,6 @@ import type {SupportedConfigs} from './get-supported-configs'; import {SelectionSkeleton} from './SelectionSkeleton'; import {AudioTrackLabel, VideoTrackLabel} from './TrackSelectionLabels'; import {Label} from './ui/label'; -import { - Select, - SelectContent, - SelectGroup, - SelectItem, - SelectTrigger, - SelectValue, -} from '@remotion/design'; import {VideoCodecSelection} from './VideoCodecSelection'; export const ConvertForm: React.FC<{ diff --git a/packages/convert/app/components/FileAvailable.tsx b/packages/convert/app/components/FileAvailable.tsx index 226431ff0b4..9ec388296f0 100644 --- a/packages/convert/app/components/FileAvailable.tsx +++ b/packages/convert/app/components/FileAvailable.tsx @@ -14,9 +14,9 @@ import {VideoPlayer} from './MediaPlayer'; import {Page} from './Page'; import {Probe} from './Probe'; import {ReplaceVideo} from './ReplaceVideo'; -import type {VideoThumbnailRef} from './VideoThumbnail'; import Transcribe from './transcribe/App'; import {useProbe} from './use-probe'; +import type {VideoThumbnailRef} from './VideoThumbnail'; export const FileAvailable: React.FC<{ readonly src: Source; diff --git a/packages/convert/app/components/MuxPlayer.tsx b/packages/convert/app/components/MuxPlayer.tsx index fb03eedd734..54b7137eecf 100644 --- a/packages/convert/app/components/MuxPlayer.tsx +++ b/packages/convert/app/components/MuxPlayer.tsx @@ -10,7 +10,6 @@ import { defaultLayoutIcons, } from '@vidstack/react/player/layouts/default'; import React, {useCallback} from 'react'; - import '@vidstack/react/player/styles/default/theme.css'; import '@vidstack/react/player/styles/default/layouts/video.css'; diff --git a/packages/convert/app/components/Probe.tsx b/packages/convert/app/components/Probe.tsx index a9584f0b78d..edd2af6edeb 100644 --- a/packages/convert/app/components/Probe.tsx +++ b/packages/convert/app/components/Probe.tsx @@ -10,19 +10,19 @@ import {useThumbnailAndWaveform} from '~/lib/use-thumbnail'; import {AudioTrackOverview} from './AudioTrackOverview'; import {ContainerOverview} from './ContainerOverview'; import {EmbeddedImage} from './EmbeddedImage'; +import {getBrightnessOfFrame} from './get-brightness-of-frame'; import {SourceLabel} from './SourceLabel'; import {TrackSwitcher} from './TrackSwitcher'; -import type {VideoThumbnailRef} from './VideoThumbnail'; -import {VideoThumbnail} from './VideoThumbnail'; -import {VideoTrackOverview} from './VideoTrackOverview'; -import {getBrightnessOfFrame} from './get-brightness-of-frame'; -import styles from './probe.module.css'; import {Button} from './ui/button'; import {Card, CardDescription, CardHeader, CardTitle} from './ui/card'; import {ScrollArea} from './ui/scroll-area'; import {Separator} from './ui/separator'; import {Skeleton} from './ui/skeleton'; import type {ProbeResult} from './use-probe'; +import type {VideoThumbnailRef} from './VideoThumbnail'; +import {VideoThumbnail} from './VideoThumbnail'; +import {VideoTrackOverview} from './VideoTrackOverview'; +import styles from './probe.module.css'; const idealBrightness = 0.8; diff --git a/packages/convert/app/components/ResampleUi.tsx b/packages/convert/app/components/ResampleUi.tsx index 796c544a1ec..7fde0150ca3 100644 --- a/packages/convert/app/components/ResampleUi.tsx +++ b/packages/convert/app/components/ResampleUi.tsx @@ -1,4 +1,3 @@ -import {Label} from './ui/label'; import { Select, SelectContent, @@ -6,6 +5,7 @@ import { SelectTrigger, SelectValue, } from '@remotion/design'; +import {Label} from './ui/label'; const formatSampleRate = (rate: number): string => { return `${(rate / 1000).toFixed(3)} Hz`; diff --git a/packages/convert/app/components/VideoCodecSelection.tsx b/packages/convert/app/components/VideoCodecSelection.tsx index 0c5e66b8565..cfc6e621e9f 100644 --- a/packages/convert/app/components/VideoCodecSelection.tsx +++ b/packages/convert/app/components/VideoCodecSelection.tsx @@ -1,7 +1,3 @@ -import type {InputVideoTrack} from 'mediabunny'; -import React from 'react'; -import type {VideoOperation} from '~/lib/audio-operation'; -import {getVideoOperationId} from '~/lib/operation-key'; import { Select, SelectContent, @@ -10,6 +6,10 @@ import { SelectTrigger, SelectValue, } from '@remotion/design'; +import type {InputVideoTrack} from 'mediabunny'; +import React from 'react'; +import type {VideoOperation} from '~/lib/audio-operation'; +import {getVideoOperationId} from '~/lib/operation-key'; import {VideoOperationOption} from './VideoOperationOption'; export const VideoCodecSelection: React.FC<{ diff --git a/packages/convert/app/components/VideoTrackOverview.tsx b/packages/convert/app/components/VideoTrackOverview.tsx index fe63d078e02..ca18fe60d59 100644 --- a/packages/convert/app/components/VideoTrackOverview.tsx +++ b/packages/convert/app/components/VideoTrackOverview.tsx @@ -1,6 +1,6 @@ -import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table'; import type {InputVideoTrack} from 'mediabunny'; import React, {useEffect, useState} from 'react'; +import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table'; import {renderHumanReadableVideoCodec} from '~/lib/render-codec-label'; import {PacketList} from './PacketList'; import {TextButtonWithChevron} from './TexrButtonWithChevron'; diff --git a/packages/convert/app/components/timing-editor/CanvasWrapper.tsx b/packages/convert/app/components/timing-editor/CanvasWrapper.tsx index d10026d0104..03eff5fb9af 100644 --- a/packages/convert/app/components/timing-editor/CanvasWrapper.tsx +++ b/packages/convert/app/components/timing-editor/CanvasWrapper.tsx @@ -10,7 +10,14 @@ export const CanvasWrapper: React.FC<{ readonly duration: number; readonly fps: number; readonly replayKey: number; -}> = ({components, draggedState, draggedDuration, duration, fps, replayKey}) => { +}> = ({ + components, + draggedState, + draggedDuration, + duration, + fps, + replayKey, +}) => { const outer = useRef(null); const elementSize = PlayerInternals.useElementSize(outer, { diff --git a/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx b/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx index f4d9afd387d..3a0ad104697 100644 --- a/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx +++ b/packages/convert/app/components/timing-editor/TimingComponentEditor.tsx @@ -14,7 +14,9 @@ export const TimingComponentEditor: React.FC<{ readonly component: TimingComponent; readonly draggedConfig: TimingConfig | null; readonly calculatedDurationInFrames: number; - readonly onModeChange: (mode: 'spring' | 'interpolate' | 'sine' | 'constant') => void; + readonly onModeChange: ( + mode: 'spring' | 'interpolate' | 'sine' | 'constant', + ) => void; readonly setDraggedConfig: (config: TimingConfig) => void; readonly onChange: (config: TimingConfig) => void; readonly onRelease: () => void; @@ -75,7 +77,9 @@ export const TimingComponentEditor: React.FC<{ - onModeChange(value as 'spring' | 'interpolate' | 'sine' | 'constant') + onModeChange( + value as 'spring' | 'interpolate' | 'sine' | 'constant', + ) } style={{width: '90%'}} > diff --git a/packages/convert/app/components/transcribe/downloadModel.tsx b/packages/convert/app/components/transcribe/downloadModel.tsx index 5800d24f93d..e73f7f23d50 100644 --- a/packages/convert/app/components/transcribe/downloadModel.tsx +++ b/packages/convert/app/components/transcribe/downloadModel.tsx @@ -1,3 +1,11 @@ +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from '@remotion/design'; import { deleteModel, type DownloadWhisperModelParams, @@ -8,14 +16,6 @@ import { import {useCallback, useEffect, useState} from 'react'; import {formatBytes} from '../../lib/format-bytes'; import {Label} from '../ui/label'; -import { - Select, - SelectContent, - SelectGroup, - SelectItem, - SelectTrigger, - SelectValue, -} from '@remotion/design'; export default function DownloadModel({ selectedModel, diff --git a/packages/convert/app/components/ui/badge.tsx b/packages/convert/app/components/ui/badge.tsx index 1d9e9bfb136..edd85ca6cd4 100644 --- a/packages/convert/app/components/ui/badge.tsx +++ b/packages/convert/app/components/ui/badge.tsx @@ -1,6 +1,5 @@ import {cva, type VariantProps} from 'class-variance-authority'; import * as React from 'react'; - import {cn} from '~/lib/utils'; const badgeVariants = cva( @@ -24,7 +23,8 @@ const badgeVariants = cva( ); export interface BadgeProps - extends React.HTMLAttributes, + extends + React.HTMLAttributes, VariantProps {} const Badge = ({className, variant, ...props}: BadgeProps) => { diff --git a/packages/convert/app/components/ui/button.tsx b/packages/convert/app/components/ui/button.tsx index cebb7171696..f1d5e5597ea 100644 --- a/packages/convert/app/components/ui/button.tsx +++ b/packages/convert/app/components/ui/button.tsx @@ -1,7 +1,6 @@ import {Slot} from '@radix-ui/react-slot'; import {cva, type VariantProps} from 'class-variance-authority'; import * as React from 'react'; - import {cn} from '~/lib/utils'; const buttonVariants = cva( @@ -38,7 +37,8 @@ const buttonVariants = cva( ); export interface ButtonProps - extends React.ButtonHTMLAttributes, + extends + React.ButtonHTMLAttributes, VariantProps { // eslint-disable-next-line react/require-default-props readonly asChild?: boolean; diff --git a/packages/convert/app/components/ui/card.tsx b/packages/convert/app/components/ui/card.tsx index 2d713539cc4..95752362fc8 100644 --- a/packages/convert/app/components/ui/card.tsx +++ b/packages/convert/app/components/ui/card.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; - import {cn} from '~/lib/utils'; const Card = React.forwardRef< diff --git a/packages/convert/app/components/ui/checkbox.tsx b/packages/convert/app/components/ui/checkbox.tsx index 29a5e885d6e..41a40c6f5ad 100644 --- a/packages/convert/app/components/ui/checkbox.tsx +++ b/packages/convert/app/components/ui/checkbox.tsx @@ -1,7 +1,6 @@ import * as CheckboxPrimitive from '@radix-ui/react-checkbox'; import {Check} from 'lucide-react'; import * as React from 'react'; - import {cn} from '~/lib/utils'; const Checkbox = React.forwardRef< diff --git a/packages/convert/app/components/ui/dialog.tsx b/packages/convert/app/components/ui/dialog.tsx index 51de6b5c2de..3b8f0286c18 100644 --- a/packages/convert/app/components/ui/dialog.tsx +++ b/packages/convert/app/components/ui/dialog.tsx @@ -3,7 +3,6 @@ import * as DialogPrimitive from '@radix-ui/react-dialog'; import {XIcon} from 'lucide-react'; import * as React from 'react'; - import {cn} from '@/lib/utils'; function Dialog({...props}: React.ComponentProps) { diff --git a/packages/convert/app/components/ui/input.tsx b/packages/convert/app/components/ui/input.tsx index 28117bdd1ab..7ee6408da7c 100644 --- a/packages/convert/app/components/ui/input.tsx +++ b/packages/convert/app/components/ui/input.tsx @@ -1,9 +1,7 @@ import * as React from 'react'; - import {cn} from '~/lib/utils'; -export interface InputProps - extends React.InputHTMLAttributes {} +export interface InputProps extends React.InputHTMLAttributes {} const Input = React.forwardRef( ({className, type, ...props}, ref) => { diff --git a/packages/convert/app/components/ui/label.tsx b/packages/convert/app/components/ui/label.tsx index 90961d86e76..3261b66a805 100644 --- a/packages/convert/app/components/ui/label.tsx +++ b/packages/convert/app/components/ui/label.tsx @@ -1,7 +1,6 @@ import * as LabelPrimitive from '@radix-ui/react-label'; import {cva, type VariantProps} from 'class-variance-authority'; import * as React from 'react'; - import {cn} from '~/lib/utils'; const labelVariants = cva( diff --git a/packages/convert/app/components/ui/radio.tsx b/packages/convert/app/components/ui/radio.tsx index 3d9ac9de39b..c7156992fa2 100644 --- a/packages/convert/app/components/ui/radio.tsx +++ b/packages/convert/app/components/ui/radio.tsx @@ -3,7 +3,6 @@ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group'; import {Circle} from 'lucide-react'; import * as React from 'react'; - import {cn} from '@/lib/utils'; const RadioGroup = React.forwardRef< diff --git a/packages/convert/app/components/ui/scroll-area.tsx b/packages/convert/app/components/ui/scroll-area.tsx index 8d2b5747496..49ebd6ceb6a 100644 --- a/packages/convert/app/components/ui/scroll-area.tsx +++ b/packages/convert/app/components/ui/scroll-area.tsx @@ -1,6 +1,5 @@ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'; import * as React from 'react'; - import {cn} from '~/lib/utils'; const ScrollBar = React.forwardRef< diff --git a/packages/convert/app/components/ui/separator.tsx b/packages/convert/app/components/ui/separator.tsx index c8fa64ff187..44d4b2fd9fa 100644 --- a/packages/convert/app/components/ui/separator.tsx +++ b/packages/convert/app/components/ui/separator.tsx @@ -1,6 +1,5 @@ import * as SeparatorPrimitive from '@radix-ui/react-separator'; import * as React from 'react'; - import {cn} from '~/lib/utils'; const Separator = React.forwardRef< diff --git a/packages/convert/app/components/ui/slider.tsx b/packages/convert/app/components/ui/slider.tsx index f69f0292a32..c6d99eab19b 100644 --- a/packages/convert/app/components/ui/slider.tsx +++ b/packages/convert/app/components/ui/slider.tsx @@ -1,6 +1,5 @@ import * as SliderPrimitive from '@radix-ui/react-slider'; import * as React from 'react'; - import {cn} from '~/lib/utils'; const Slider = React.forwardRef< diff --git a/packages/convert/app/components/ui/table.tsx b/packages/convert/app/components/ui/table.tsx index 3d02aca0118..094e6193c43 100644 --- a/packages/convert/app/components/ui/table.tsx +++ b/packages/convert/app/components/ui/table.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; - import {cn} from '~/lib/utils'; const Table = React.forwardRef< diff --git a/packages/convert/app/components/ui/textarea.tsx b/packages/convert/app/components/ui/textarea.tsx index 0261b6962a8..799834c311a 100644 --- a/packages/convert/app/components/ui/textarea.tsx +++ b/packages/convert/app/components/ui/textarea.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; - import {cn} from '@/lib/utils'; const Textarea = React.forwardRef< diff --git a/packages/convert/app/lib/prompt-helpers.ts b/packages/convert/app/lib/prompt-helpers.ts index 50e5ae7e905..9ed36b82c7e 100644 --- a/packages/convert/app/lib/prompt-helpers.ts +++ b/packages/convert/app/lib/prompt-helpers.ts @@ -64,8 +64,7 @@ export const getRelativeTime = (dateStr: string): string => { const days = Math.floor(hours / 24); if (days < 30) return `${days} day${days === 1 ? '' : 's'} ago`; const months = Math.floor(days / 30); - if (months < 12) - return `${months} month${months === 1 ? '' : 's'} ago`; + if (months < 12) return `${months} month${months === 1 ? '' : 's'} ago`; const years = Math.floor(months / 12); return `${years} year${years === 1 ? '' : 's'} ago`; }; diff --git a/packages/convert/app/root.tsx b/packages/convert/app/root.tsx index 8c7f8d733b3..1107a9e4ef8 100644 --- a/packages/convert/app/root.tsx +++ b/packages/convert/app/root.tsx @@ -1,8 +1,7 @@ +import {Links, Outlet, Scripts, ScrollRestoration} from '@remix-run/react'; import {ForceSpecificCursor} from './components/crop-ui/force-specific-cursor'; -import {DEFAULT_FAVICON} from './lib/default-favicon'; import './tailwind.css'; - -import {Links, Outlet, Scripts, ScrollRestoration} from '@remix-run/react'; +import {DEFAULT_FAVICON} from './lib/default-favicon'; export const Layout = ({children}: {readonly children: React.ReactNode}) => { return ( diff --git a/packages/convert/vite-spa.config.ts b/packages/convert/vite-spa.config.ts index d4d1e573037..1d94638a3b1 100644 --- a/packages/convert/vite-spa.config.ts +++ b/packages/convert/vite-spa.config.ts @@ -1,6 +1,6 @@ +import path from 'path'; import {vitePlugin as remix} from '@remix-run/dev'; import {installGlobals} from '@remix-run/node'; -import path from 'path'; import {defineConfig} from 'vite'; import tsconfigPaths from 'vite-tsconfig-paths'; diff --git a/packages/convert/vite.config.ts b/packages/convert/vite.config.ts index 5152d878bf3..5a82facfef3 100644 --- a/packages/convert/vite.config.ts +++ b/packages/convert/vite.config.ts @@ -1,7 +1,7 @@ +import path from 'path'; import {vitePlugin as remix} from '@remix-run/dev'; import {installGlobals} from '@remix-run/node'; import {vercelPreset} from '@vercel/remix/vite'; -import path from 'path'; import {defineConfig} from 'vite'; import tsconfigPaths from 'vite-tsconfig-paths'; diff --git a/packages/core/src/Artifact.tsx b/packages/core/src/Artifact.tsx index b786d1da4a4..6ffecc8dbfc 100644 --- a/packages/core/src/Artifact.tsx +++ b/packages/core/src/Artifact.tsx @@ -1,7 +1,7 @@ import type React from 'react'; import {useContext, useLayoutEffect, useState} from 'react'; -import {RenderAssetManager} from './RenderAssetManager'; import type {DownloadBehavior} from './download-behavior'; +import {RenderAssetManager} from './RenderAssetManager'; import {useCurrentFrame} from './use-current-frame'; import {useRemotionEnvironment} from './use-remotion-environment'; diff --git a/packages/core/src/Img.tsx b/packages/core/src/Img.tsx index 632d9ead32a..90a1d7d3d15 100644 --- a/packages/core/src/Img.tsx +++ b/packages/core/src/Img.tsx @@ -6,11 +6,11 @@ import React, { useLayoutEffect, useRef, } from 'react'; -import {SequenceContext} from './SequenceContext.js'; import type {IsExact} from './audio/props.js'; import {cancelRender} from './cancel-render.js'; import {getCrossOriginValue} from './get-cross-origin-value.js'; import {usePreload} from './prefetch.js'; +import {SequenceContext} from './SequenceContext.js'; import {useBufferState} from './use-buffer-state.js'; import {useDelayRender} from './use-delay-render.js'; import {useRemotionEnvironment} from './use-remotion-environment.js'; diff --git a/packages/core/src/RemotionRoot.tsx b/packages/core/src/RemotionRoot.tsx index 96b975dcbc9..424ecd3e2ed 100644 --- a/packages/core/src/RemotionRoot.tsx +++ b/packages/core/src/RemotionRoot.tsx @@ -1,15 +1,15 @@ import React, {useMemo} from 'react'; -import {EditorPropsProvider} from './EditorProps.js'; -import {SequenceManagerProvider} from './SequenceManager.js'; -import {TimelineContextProvider} from './TimelineContext.js'; import {SharedAudioContextProvider} from './audio/shared-audio-tags.js'; import {BufferingProvider} from './buffering.js'; +import {EditorPropsProvider} from './EditorProps.js'; import type {LoggingContextValue} from './log-level-context.js'; import {LogLevelContext} from './log-level-context.js'; import type {LogLevel} from './log.js'; import type {TNonceContext} from './nonce.js'; import {NonceContext} from './nonce.js'; import {PrefetchProvider} from './prefetch-state.js'; +import {SequenceManagerProvider} from './SequenceManager.js'; +import {TimelineContextProvider} from './TimelineContext.js'; import {MediaEnabledProvider} from './use-media-enabled.js'; import {DurationsContextProvider} from './video/duration-state.js'; diff --git a/packages/core/src/ResolveCompositionConfig.tsx b/packages/core/src/ResolveCompositionConfig.tsx index 5957ba030ee..e2c992298f4 100644 --- a/packages/core/src/ResolveCompositionConfig.tsx +++ b/packages/core/src/ResolveCompositionConfig.tsx @@ -1,8 +1,8 @@ import {createContext, createRef, useContext, useMemo} from 'react'; import type {AnyComposition} from './CompositionManager.js'; import {CompositionManager} from './CompositionManagerContext.js'; -import {EditorPropsContext} from './EditorProps.js'; import {getInputProps} from './config/input-props.js'; +import {EditorPropsContext} from './EditorProps.js'; import {useRemotionEnvironment} from './use-remotion-environment.js'; import {validateDimension} from './validation/validate-dimensions.js'; import {validateDurationInFrames} from './validation/validate-duration-in-frames.js'; diff --git a/packages/core/src/Sequence.tsx b/packages/core/src/Sequence.tsx index 51289bc0379..f55b1ab1525 100644 --- a/packages/core/src/Sequence.tsx +++ b/packages/core/src/Sequence.tsx @@ -8,6 +8,7 @@ import React, { } from 'react'; import {AbsoluteFill} from './AbsoluteFill.js'; import type {LoopDisplay, SequenceControls} from './CompositionManager.js'; +import {Freeze} from './freeze.js'; import {useNonce} from './nonce.js'; import type {SequenceContextType} from './SequenceContext.js'; import {SequenceContext} from './SequenceContext.js'; @@ -17,11 +18,9 @@ import { } from './SequenceManager.js'; import {useTimelinePosition} from './timeline-position-state.js'; import {TimelineContext} from './TimelineContext.js'; -import {useVideoConfig} from './use-video-config.js'; - -import {Freeze} from './freeze.js'; import {useCurrentFrame} from './use-current-frame'; import {useRemotionEnvironment} from './use-remotion-environment.js'; +import {useVideoConfig} from './use-video-config.js'; import {ENABLE_V5_BREAKING_CHANGES} from './v5-flag.js'; export type AbsoluteFillLayout = { diff --git a/packages/core/src/audio/Audio.tsx b/packages/core/src/audio/Audio.tsx index 2c4e1c40c70..966b7200ead 100644 --- a/packages/core/src/audio/Audio.tsx +++ b/packages/core/src/audio/Audio.tsx @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-use-before-define */ import React, {forwardRef, useCallback, useContext} from 'react'; -import {Sequence} from '../Sequence.js'; import {getAbsoluteSrc} from '../absolute-src.js'; import {calculateMediaDuration} from '../calculate-media-duration.js'; import {cancelRender} from '../cancel-render.js'; import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js'; import {Loop} from '../loop/index.js'; import {usePreload} from '../prefetch.js'; +import {Sequence} from '../Sequence.js'; import {useRemotionEnvironment} from '../use-remotion-environment.js'; import {useVideoConfig} from '../use-video-config.js'; import {validateMediaProps} from '../validate-media-props.js'; diff --git a/packages/core/src/audio/AudioForPreview.tsx b/packages/core/src/audio/AudioForPreview.tsx index 4c5d4632b41..f3216a60f9e 100644 --- a/packages/core/src/audio/AudioForPreview.tsx +++ b/packages/core/src/audio/AudioForPreview.tsx @@ -8,12 +8,12 @@ import React, { useRef, useState, } from 'react'; -import {SequenceContext} from '../SequenceContext.js'; -import {SequenceVisibilityToggleContext} from '../SequenceManager.js'; import {getCrossOriginValue} from '../get-cross-origin-value.js'; import {useLogLevel} from '../log-level-context.js'; import {usePreload} from '../prefetch.js'; import {random} from '../random.js'; +import {SequenceContext} from '../SequenceContext.js'; +import {SequenceVisibilityToggleContext} from '../SequenceManager.js'; import {useVolume} from '../use-amplification.js'; import {useMediaInTimeline} from '../use-media-in-timeline.js'; import {useMediaPlayback} from '../use-media-playback.js'; diff --git a/packages/core/src/audio/AudioForRendering.tsx b/packages/core/src/audio/AudioForRendering.tsx index bdccaf5d38b..c457f34c445 100644 --- a/packages/core/src/audio/AudioForRendering.tsx +++ b/packages/core/src/audio/AudioForRendering.tsx @@ -8,10 +8,10 @@ import React, { useMemo, useRef, } from 'react'; -import {RenderAssetManager} from '../RenderAssetManager.js'; -import {SequenceContext} from '../SequenceContext.js'; import {getAbsoluteSrc} from '../absolute-src.js'; import {random} from '../random.js'; +import {RenderAssetManager} from '../RenderAssetManager.js'; +import {SequenceContext} from '../SequenceContext.js'; import {useTimelinePosition} from '../timeline-position-state.js'; import {useCurrentFrame} from '../use-current-frame.js'; import {useDelayRender} from '../use-delay-render.js'; diff --git a/packages/core/src/audio/use-audio-frame.ts b/packages/core/src/audio/use-audio-frame.ts index 97738d85e9f..15add44456b 100644 --- a/packages/core/src/audio/use-audio-frame.ts +++ b/packages/core/src/audio/use-audio-frame.ts @@ -1,6 +1,6 @@ import {useContext} from 'react'; -import {SequenceContext} from '../SequenceContext.js'; import {Loop} from '../loop/index.js'; +import {SequenceContext} from '../SequenceContext.js'; import {useCurrentFrame} from '../use-current-frame.js'; export const useMediaStartsAt = () => { diff --git a/packages/core/src/series/index.tsx b/packages/core/src/series/index.tsx index 0fc3971f9b5..03c260587b2 100644 --- a/packages/core/src/series/index.tsx +++ b/packages/core/src/series/index.tsx @@ -1,8 +1,8 @@ import type {FC, PropsWithChildren} from 'react'; import React, {Children, forwardRef, useMemo} from 'react'; +import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js'; import type {LayoutAndStyle, SequenceProps} from '../Sequence.js'; import {Sequence} from '../Sequence.js'; -import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js'; import {ENABLE_V5_BREAKING_CHANGES} from '../v5-flag.js'; import {validateDurationInFrames} from '../validation/validate-duration-in-frames.js'; import {flattenChildren} from './flatten-children.js'; diff --git a/packages/core/src/test/Img.test.tsx b/packages/core/src/test/Img.test.tsx index 0ecf7aa9307..0f4d80c8950 100644 --- a/packages/core/src/test/Img.test.tsx +++ b/packages/core/src/test/Img.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, beforeEach, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import React from 'react'; import {Img} from '../Img.js'; import {WrapSequenceContext} from './wrap-sequence-context.js'; diff --git a/packages/core/src/test/audio-for-rendering.test.tsx b/packages/core/src/test/audio-for-rendering.test.tsx index bd4c2699565..5f16c046641 100644 --- a/packages/core/src/test/audio-for-rendering.test.tsx +++ b/packages/core/src/test/audio-for-rendering.test.tsx @@ -1,9 +1,9 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, beforeEach, describe, expect, mock, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import React from 'react'; +import {AudioForRendering} from '../audio/AudioForRendering.js'; import {CanUseRemotionHooksProvider} from '../CanUseRemotionHooks.js'; import {RenderAssetManager} from '../RenderAssetManager.js'; -import {AudioForRendering} from '../audio/AudioForRendering.js'; import {expectToThrow} from './expect-to-throw.js'; import {WrapSequenceContext} from './wrap-sequence-context.js'; diff --git a/packages/core/src/test/audio.test.tsx b/packages/core/src/test/audio.test.tsx index ff27721f0b9..1e2c368563e 100644 --- a/packages/core/src/test/audio.test.tsx +++ b/packages/core/src/test/audio.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import {Html5Audio} from '../audio/index.js'; import {WrapSequenceContext} from './wrap-sequence-context.js'; diff --git a/packages/core/src/test/composition-rules.test.tsx b/packages/core/src/test/composition-rules.test.tsx index bbd52512acb..039a180c37b 100644 --- a/packages/core/src/test/composition-rules.test.tsx +++ b/packages/core/src/test/composition-rules.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, describe, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import React from 'react'; import {Composition} from '../Composition.js'; import {CompositionManagerProvider} from '../CompositionManagerProvider.js'; diff --git a/packages/core/src/test/composition-validation.test.tsx b/packages/core/src/test/composition-validation.test.tsx index 5ed37cb313f..bffaeb1551a 100644 --- a/packages/core/src/test/composition-validation.test.tsx +++ b/packages/core/src/test/composition-validation.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, describe, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import React from 'react'; import {Composition} from '../Composition.js'; import {resolveVideoConfig} from '../resolve-video-config.js'; diff --git a/packages/core/src/test/freeze.test.tsx b/packages/core/src/test/freeze.test.tsx index 2c52d451f19..1af86df780e 100644 --- a/packages/core/src/test/freeze.test.tsx +++ b/packages/core/src/test/freeze.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, describe, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import {Freeze} from '../freeze.js'; import {expectToThrow} from './expect-to-throw.js'; import {WrapSequenceContext} from './wrap-sequence-context.js'; diff --git a/packages/core/src/test/loop-validation.test.tsx b/packages/core/src/test/loop-validation.test.tsx index a55a7023fce..6a35930a68a 100644 --- a/packages/core/src/test/loop-validation.test.tsx +++ b/packages/core/src/test/loop-validation.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, describe, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import {renderToString} from 'react-dom/server'; import {Loop} from '../loop/index.js'; import {expectToThrow} from './expect-to-throw.js'; diff --git a/packages/core/src/test/nested-sequences.test.tsx b/packages/core/src/test/nested-sequences.test.tsx index 944ddeb0988..b90f2246e20 100644 --- a/packages/core/src/test/nested-sequences.test.tsx +++ b/packages/core/src/test/nested-sequences.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import {AbsoluteFill} from '../AbsoluteFill.js'; import {Sequence} from '../Sequence.js'; import {TimelineContext} from '../TimelineContext.js'; diff --git a/packages/core/src/test/offthread-video.test.tsx b/packages/core/src/test/offthread-video.test.tsx index b1fca466f06..01a203b3ab5 100644 --- a/packages/core/src/test/offthread-video.test.tsx +++ b/packages/core/src/test/offthread-video.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, describe, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import {OffthreadVideo} from '../video/index.js'; import {WrapSequenceContext} from './wrap-sequence-context.js'; diff --git a/packages/core/src/test/sequence-validation.test.tsx b/packages/core/src/test/sequence-validation.test.tsx index c5156a8841a..5c1ed55c3c8 100644 --- a/packages/core/src/test/sequence-validation.test.tsx +++ b/packages/core/src/test/sequence-validation.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {afterEach, describe, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import {renderToString} from 'react-dom/server'; import {Sequence} from '../Sequence.js'; import {expectToThrow} from './expect-to-throw.js'; diff --git a/packages/core/src/test/use-media-in-timeline.test.tsx b/packages/core/src/test/use-media-in-timeline.test.tsx index 98b6f9b3b8b..be5795618b7 100644 --- a/packages/core/src/test/use-media-in-timeline.test.tsx +++ b/packages/core/src/test/use-media-in-timeline.test.tsx @@ -1,4 +1,3 @@ -import {cleanup, renderHook} from '@testing-library/react'; import { afterAll, afterEach, @@ -8,6 +7,7 @@ import { spyOn, test, } from 'bun:test'; +import {cleanup, renderHook} from '@testing-library/react'; import React, {useMemo} from 'react'; import type {SequenceManagerContext} from '../SequenceManager.js'; import {SequenceManager} from '../SequenceManager.js'; diff --git a/packages/core/src/test/video.test.tsx b/packages/core/src/test/video.test.tsx index fd744543661..4827c0e7245 100644 --- a/packages/core/src/test/video.test.tsx +++ b/packages/core/src/test/video.test.tsx @@ -1,5 +1,5 @@ -import {cleanup, render} from '@testing-library/react'; import {beforeEach, expect, test} from 'bun:test'; +import {cleanup, render} from '@testing-library/react'; import {Html5Video} from '../video/index.js'; import {WrapSequenceContext} from './wrap-sequence-context.js'; diff --git a/packages/core/src/test/wrap-sequence-context.tsx b/packages/core/src/test/wrap-sequence-context.tsx index dc5b28cd5f1..e59626effa4 100644 --- a/packages/core/src/test/wrap-sequence-context.tsx +++ b/packages/core/src/test/wrap-sequence-context.tsx @@ -1,8 +1,8 @@ import React from 'react'; +import {BufferingProvider} from '../buffering.js'; import {CanUseRemotionHooksProvider} from '../CanUseRemotionHooks.js'; import type {CompositionManagerContext} from '../CompositionManagerContext.js'; import {CompositionManager} from '../CompositionManagerContext.js'; -import {BufferingProvider} from '../buffering.js'; import type {LoggingContextValue} from '../log-level-context.js'; import {LogLevelContext} from '../log-level-context.js'; diff --git a/packages/core/src/use-media-in-timeline.ts b/packages/core/src/use-media-in-timeline.ts index 21c1d3e27fd..3fcfb575319 100644 --- a/packages/core/src/use-media-in-timeline.ts +++ b/packages/core/src/use-media-in-timeline.ts @@ -1,12 +1,12 @@ import {useContext, useEffect, useMemo, useState} from 'react'; -import type {LoopDisplay} from './CompositionManager.js'; -import {SequenceContext} from './SequenceContext.js'; -import {SequenceManager} from './SequenceManager.js'; -import {TimelineContext} from './TimelineContext.js'; import {useMediaStartsAt} from './audio/use-audio-frame.js'; import {calculateMediaDuration} from './calculate-media-duration.js'; +import type {LoopDisplay} from './CompositionManager.js'; import {getAssetDisplayName} from './get-asset-file-name.js'; import {useNonce} from './nonce.js'; +import {SequenceContext} from './SequenceContext.js'; +import {SequenceManager} from './SequenceManager.js'; +import {TimelineContext} from './TimelineContext.js'; import {useRemotionEnvironment} from './use-remotion-environment.js'; import {useVideoConfig} from './use-video-config.js'; import type {VolumeProp} from './volume-prop.js'; diff --git a/packages/core/src/video/OffthreadVideo.tsx b/packages/core/src/video/OffthreadVideo.tsx index d8191acbab0..693487503eb 100644 --- a/packages/core/src/video/OffthreadVideo.tsx +++ b/packages/core/src/video/OffthreadVideo.tsx @@ -1,6 +1,6 @@ import React, {useCallback} from 'react'; -import {Sequence} from '../Sequence.js'; import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js'; +import {Sequence} from '../Sequence.js'; import {useRemotionEnvironment} from '../use-remotion-environment.js'; import {validateMediaProps} from '../validate-media-props.js'; import { @@ -8,11 +8,11 @@ import { validateMediaTrimProps, } from '../validate-start-from-props.js'; import {OffthreadVideoForRendering} from './OffthreadVideoForRendering.js'; -import {VideoForPreview} from './VideoForPreview.js'; import type { AllOffthreadVideoProps, RemotionOffthreadVideoProps, } from './props.js'; +import {VideoForPreview} from './VideoForPreview.js'; export const InnerOffthreadVideo: React.FC = ( props, diff --git a/packages/core/src/video/OffthreadVideoForRendering.tsx b/packages/core/src/video/OffthreadVideoForRendering.tsx index a14a6bfbaea..4c8671bd290 100644 --- a/packages/core/src/video/OffthreadVideoForRendering.tsx +++ b/packages/core/src/video/OffthreadVideoForRendering.tsx @@ -6,9 +6,6 @@ import React, { useMemo, useState, } from 'react'; -import {Img} from '../Img.js'; -import {RenderAssetManager} from '../RenderAssetManager.js'; -import {SequenceContext} from '../SequenceContext.js'; import {getAbsoluteSrc} from '../absolute-src.js'; import { useFrameForVolumeProp, @@ -17,7 +14,10 @@ import { import {cancelRender} from '../cancel-render.js'; import {OBJECTFIT_CONTAIN_CLASS_NAME} from '../default-css.js'; import type {delayRender as delayRenderGlobal} from '../delay-render.js'; +import {Img} from '../Img.js'; import {random} from '../random.js'; +import {RenderAssetManager} from '../RenderAssetManager.js'; +import {SequenceContext} from '../SequenceContext.js'; import {useTimelinePosition} from '../timeline-position-state.js'; import {truthy} from '../truthy.js'; import {useCurrentFrame} from '../use-current-frame.js'; diff --git a/packages/core/src/video/Video.tsx b/packages/core/src/video/Video.tsx index 8061721350e..bc5610c5aec 100644 --- a/packages/core/src/video/Video.tsx +++ b/packages/core/src/video/Video.tsx @@ -1,11 +1,11 @@ /* eslint-disable @typescript-eslint/no-use-before-define */ import React, {forwardRef, useCallback, useContext} from 'react'; -import {Sequence} from '../Sequence.js'; import {getAbsoluteSrc} from '../absolute-src.js'; import {calculateMediaDuration} from '../calculate-media-duration.js'; import {addSequenceStackTraces} from '../enable-sequence-stack-traces.js'; import {Loop} from '../loop/index.js'; import {usePreload} from '../prefetch.js'; +import {Sequence} from '../Sequence.js'; import {useRemotionEnvironment} from '../use-remotion-environment.js'; import {useVideoConfig} from '../use-video-config.js'; import {validateMediaProps} from '../validate-media-props.js'; @@ -13,10 +13,10 @@ import { resolveTrimProps, validateMediaTrimProps, } from '../validate-start-from-props.js'; -import {VideoForPreview} from './VideoForPreview.js'; -import {VideoForRendering} from './VideoForRendering.js'; import {DurationsContext} from './duration-state.js'; import type {RemotionMainVideoProps, RemotionVideoProps} from './props'; +import {VideoForPreview} from './VideoForPreview.js'; +import {VideoForRendering} from './VideoForRendering.js'; const VideoForwardingFunction: React.ForwardRefRenderFunction< HTMLVideoElement, diff --git a/packages/core/src/video/VideoForPreview.tsx b/packages/core/src/video/VideoForPreview.tsx index 695f93c1392..642640a4711 100644 --- a/packages/core/src/video/VideoForPreview.tsx +++ b/packages/core/src/video/VideoForPreview.tsx @@ -7,8 +7,6 @@ import React, { useRef, useState, } from 'react'; -import {SequenceContext} from '../SequenceContext.js'; -import {SequenceVisibilityToggleContext} from '../SequenceManager.js'; import type {IsExact} from '../audio/props.js'; import {SharedAudioContext} from '../audio/shared-audio-tags.js'; import {makeSharedElementSourceNode} from '../audio/shared-element-source-node.js'; @@ -17,6 +15,8 @@ import {getCrossOriginValue} from '../get-cross-origin-value.js'; import {useLogLevel, useMountTime} from '../log-level-context.js'; import {playbackLogging} from '../playback-logging.js'; import {usePreload} from '../prefetch.js'; +import {SequenceContext} from '../SequenceContext.js'; +import {SequenceVisibilityToggleContext} from '../SequenceManager.js'; import {useVolume} from '../use-amplification.js'; import {useMediaInTimeline} from '../use-media-in-timeline.js'; import {useMediaPlayback} from '../use-media-playback.js'; diff --git a/packages/core/src/video/VideoForRendering.tsx b/packages/core/src/video/VideoForRendering.tsx index 2daaa00694b..6748b18562e 100644 --- a/packages/core/src/video/VideoForRendering.tsx +++ b/packages/core/src/video/VideoForRendering.tsx @@ -8,8 +8,6 @@ import React, { useMemo, useRef, } from 'react'; -import {RenderAssetManager} from '../RenderAssetManager.js'; -import {SequenceContext} from '../SequenceContext.js'; import {getAbsoluteSrc} from '../absolute-src.js'; import { useFrameForVolumeProp, @@ -18,6 +16,8 @@ import { import {isApproximatelyTheSame} from '../is-approximately-the-same.js'; import {useLogLevel, useMountTime} from '../log-level-context.js'; import {random} from '../random.js'; +import {RenderAssetManager} from '../RenderAssetManager.js'; +import {SequenceContext} from '../SequenceContext.js'; import {useTimelinePosition} from '../timeline-position-state.js'; import {useCurrentFrame} from '../use-current-frame.js'; import {useDelayRender} from '../use-delay-render.js'; diff --git a/packages/create-video/src/init.ts b/packages/create-video/src/init.ts index 99c579731a5..a6d3b827cbb 100644 --- a/packages/create-video/src/init.ts +++ b/packages/create-video/src/init.ts @@ -1,6 +1,6 @@ +import path from 'node:path'; import chalk from 'chalk'; import execa from 'execa'; -import path from 'node:path'; import { addPostcssConfig, addTailwindRootCss, diff --git a/packages/create-video/src/resolve-project-root.ts b/packages/create-video/src/resolve-project-root.ts index cab9dccc518..b2da552c65b 100644 --- a/packages/create-video/src/resolve-project-root.ts +++ b/packages/create-video/src/resolve-project-root.ts @@ -1,8 +1,8 @@ -import chalk from 'chalk'; import fs from 'node:fs'; import {readdir, stat} from 'node:fs/promises'; import {tmpdir} from 'node:os'; import path from 'node:path'; +import chalk from 'chalk'; import {Log} from './log'; import {mkdirp} from './mkdirp'; import prompts from './prompts'; diff --git a/packages/design/bundle.ts b/packages/design/bundle.ts index e96cfe5c9e2..f58b37f4f26 100644 --- a/packages/design/bundle.ts +++ b/packages/design/bundle.ts @@ -1,5 +1,5 @@ -import {$, build} from 'bun'; import path from 'path'; +import {$, build} from 'bun'; if (process.env.NODE_ENV !== 'production') { throw new Error('This script must be run using NODE_ENV=production'); diff --git a/packages/design/src/Select.tsx b/packages/design/src/Select.tsx index b4c1379de70..495f83e409b 100644 --- a/packages/design/src/Select.tsx +++ b/packages/design/src/Select.tsx @@ -1,7 +1,6 @@ import * as SelectPrimitive from '@radix-ui/react-select'; import {Check, ChevronDown, ChevronUp} from 'lucide-react'; import * as React from 'react'; - import {cn} from './helpers/cn'; const Select = SelectPrimitive.Root; diff --git a/packages/design/src/Tabs.tsx b/packages/design/src/Tabs.tsx index 054cb1891b9..2b6aaee8cfc 100644 --- a/packages/design/src/Tabs.tsx +++ b/packages/design/src/Tabs.tsx @@ -1,6 +1,5 @@ import * as TabsPrimitive from '@radix-ui/react-tabs'; import * as React from 'react'; - import {cn} from './helpers/cn'; const Tabs = TabsPrimitive.Root; diff --git a/packages/docs/components/3DPhone/helpers/constants.ts b/packages/docs/components/3DPhone/helpers/constants.ts index d8529a51361..0228f68c62a 100644 --- a/packages/docs/components/3DPhone/helpers/constants.ts +++ b/packages/docs/components/3DPhone/helpers/constants.ts @@ -1,4 +1,4 @@ -import type { Vector3 } from "@react-three/fiber"; +import type {Vector3} from '@react-three/fiber'; // The distance from which the camera is pointing to the phone. export const CAMERA_DISTANCE = 2.5; @@ -20,84 +20,84 @@ export const PHONE_COLOR = 0x61a9e8; // Calculate phone size. Whichever side is smaller gets // normalized to the base scale. const getPhoneHeight = (aspectRatio: number, baseScale: number): number => { - if (aspectRatio > 1) { - return baseScale; - } + if (aspectRatio > 1) { + return baseScale; + } - return baseScale / aspectRatio; + return baseScale / aspectRatio; }; const getPhoneWidth = (aspectRatio: number, baseScale: number): number => { - if (aspectRatio < 1) { - return baseScale; - } + if (aspectRatio < 1) { + return baseScale; + } - return baseScale * aspectRatio; + return baseScale * aspectRatio; }; type Layout = { - position: Vector3; - height: number; - width: number; - radius: number; + position: Vector3; + height: number; + width: number; + radius: number; }; type PhoneLayout = { - phone: Layout & { - thickness: number; - bevel: number; - }; - screen: Layout; + phone: Layout & { + thickness: number; + bevel: number; + }; + screen: Layout; }; export const getPhoneLayout = ( - // I recommend building the phone layout based - // on the aspect ratio of the phone - aspectRatio: number, - // This value can be increased or decreased to tweak the - // base value of the phone. - baseScale: number + // I recommend building the phone layout based + // on the aspect ratio of the phone + aspectRatio: number, + // This value can be increased or decreased to tweak the + // base value of the phone. + baseScale: number, ): PhoneLayout => { - // The depth of the phone body - const phoneThickness = baseScale * 0.15; - - // How big the border of the phone is. - const phoneBevel = baseScale * 0.04; - - // The inner radius of the phone, aka the screen radius - const screenRadius = baseScale * 0.07; - - const phoneHeight = getPhoneHeight(aspectRatio, baseScale); - const phoneWidth = getPhoneWidth(aspectRatio, baseScale); - const phonePosition: Vector3 = [-phoneWidth / 2, -phoneHeight / 2, 0]; - const screenWidth = phoneWidth - phoneBevel * 2; - const screenHeight = phoneHeight - phoneBevel * 2; - const screenPosition: Vector3 = [ - -screenWidth / 2, - -screenHeight / 2, - phoneThickness + Z_FLICKER_PREVENTION, - ]; - - // Define the outer radius of the phone. - // It looks better if the outer radius is a bit bigger than the screen radios, - // formula taken from https://twitter.com/joshwcomeau/status/134978208002102886 - const phoneRadius = - screenRadius + (getPhoneWidth(aspectRatio, baseScale) - screenWidth) / 2; - - return { - phone: { - position: phonePosition, - height: phoneHeight, - width: phoneWidth, - radius: phoneRadius, - thickness: phoneThickness, - bevel: phoneBevel, - }, - screen: { - position: screenPosition, - height: screenHeight, - width: screenWidth, - radius: screenRadius, - }, - }; + // The depth of the phone body + const phoneThickness = baseScale * 0.15; + + // How big the border of the phone is. + const phoneBevel = baseScale * 0.04; + + // The inner radius of the phone, aka the screen radius + const screenRadius = baseScale * 0.07; + + const phoneHeight = getPhoneHeight(aspectRatio, baseScale); + const phoneWidth = getPhoneWidth(aspectRatio, baseScale); + const phonePosition: Vector3 = [-phoneWidth / 2, -phoneHeight / 2, 0]; + const screenWidth = phoneWidth - phoneBevel * 2; + const screenHeight = phoneHeight - phoneBevel * 2; + const screenPosition: Vector3 = [ + -screenWidth / 2, + -screenHeight / 2, + phoneThickness + Z_FLICKER_PREVENTION, + ]; + + // Define the outer radius of the phone. + // It looks better if the outer radius is a bit bigger than the screen radios, + // formula taken from https://twitter.com/joshwcomeau/status/134978208002102886 + const phoneRadius = + screenRadius + (getPhoneWidth(aspectRatio, baseScale) - screenWidth) / 2; + + return { + phone: { + position: phonePosition, + height: phoneHeight, + width: phoneWidth, + radius: phoneRadius, + thickness: phoneThickness, + bevel: phoneBevel, + }, + screen: { + position: screenPosition, + height: screenHeight, + width: screenWidth, + radius: screenRadius, + }, + }; }; diff --git a/packages/docs/components/Aac/AacConcatenationProblem.tsx b/packages/docs/components/Aac/AacConcatenationProblem.tsx index 7f1321e2e63..49239ad98ac 100644 --- a/packages/docs/components/Aac/AacConcatenationProblem.tsx +++ b/packages/docs/components/Aac/AacConcatenationProblem.tsx @@ -1,92 +1,92 @@ -import React from "react"; +import React from 'react'; export const AacConcatenationProblem: React.FC = () => { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); }; diff --git a/packages/docs/components/Aac/AacConcatenationSolution.tsx b/packages/docs/components/Aac/AacConcatenationSolution.tsx index 6b6d4903d92..4fb9164c960 100644 --- a/packages/docs/components/Aac/AacConcatenationSolution.tsx +++ b/packages/docs/components/Aac/AacConcatenationSolution.tsx @@ -1,709 +1,709 @@ -import React from "react"; +import React from 'react'; export const AacConcatenationSolution = () => { - return ( - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - 1024 - - - - - 2048 - - - - - 3072 - - - - - 4096 - - - - - 5120 - - - - - 6144 - - - - - 7168 - - - - - 8192 - - - - - 9216 - - - - - 10240 - - - - - 11264 - - - - - 12288 - - - - - - - - - - - - - - - - - - - - 0 - - - - - 1024 - - - - - 2048 - - - - - 3072 - - - - - 4096 - - - - - 5120 - - - - - 6144 - - - - - 7168 - - - - - 8192 - - - - - 9216 - - - - - 10240 - - - - - 11264 - - - - - 12288 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - 1024 - - - - - 2048 - - - - - 3072 - - - - - 4096 - - - - - 5120 - - - - - 6144 - - - - - 7168 - - - - - 8192 - - - - - 9216 - - - - - 10240 - - - - - 11264 - - - - - 12288 - - - - - - - - - - - - - - - - - - ); + return ( + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 1024 + + + + + 2048 + + + + + 3072 + + + + + 4096 + + + + + 5120 + + + + + 6144 + + + + + 7168 + + + + + 8192 + + + + + 9216 + + + + + 10240 + + + + + 11264 + + + + + 12288 + + + + + + + + + + + + + + + + + + + + 0 + + + + + 1024 + + + + + 2048 + + + + + 3072 + + + + + 4096 + + + + + 5120 + + + + + 6144 + + + + + 7168 + + + + + 8192 + + + + + 9216 + + + + + 10240 + + + + + 11264 + + + + + 12288 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 1024 + + + + + 2048 + + + + + 3072 + + + + + 4096 + + + + + 5120 + + + + + 6144 + + + + + 7168 + + + + + 8192 + + + + + 9216 + + + + + 10240 + + + + + 11264 + + + + + 12288 + + + + + + + + + + + + + + + + + + ); }; diff --git a/packages/docs/components/Aac/AacFile.tsx b/packages/docs/components/Aac/AacFile.tsx index 50a624948b0..1513e5d4ab8 100644 --- a/packages/docs/components/Aac/AacFile.tsx +++ b/packages/docs/components/Aac/AacFile.tsx @@ -1,199 +1,199 @@ -import React from "react"; +import React from 'react'; export const AacFile: React.FC = () => { - return ( - - - - - - - - - - - - - - - - - - 0 - - - - - 1024 - - - - - 2048 - - - - - 3072 - - - - - 4096 - - - - - 5120 - - - - - 6144 - - - - - 7168 - - - - - 8192 - - - - - 9216 - - - - - 10240 - - - - - 11264 - - - - - 12288 - - - - ); + return ( + + + + + + + + + + + + + + + + + + 0 + + + + + 1024 + + + + + 2048 + + + + + 3072 + + + + + 4096 + + + + + 5120 + + + + + 6144 + + + + + 7168 + + + + + 8192 + + + + + 9216 + + + + + 10240 + + + + + 11264 + + + + + 12288 + + + + ); }; diff --git a/packages/docs/components/Aac/AacKeyframes.tsx b/packages/docs/components/Aac/AacKeyframes.tsx index bf0b324ed0d..805d96b678f 100644 --- a/packages/docs/components/Aac/AacKeyframes.tsx +++ b/packages/docs/components/Aac/AacKeyframes.tsx @@ -1,203 +1,203 @@ -import React from "react"; +import React from 'react'; export const AacKeyframes: React.FC = () => { - return ( - - - - - - - - - - - - - - - - - - 0 - - - - - 1024 - - - - - 2048 - - - - - 3072 - - - - - 4096 - - - - - 5120 - - - - - 6144 - - - - - 7168 - - - - - 8192 - - - - - 9216 - - - - - 10240 - - - - - 11264 - - - - - 12288 - - - - - - - ); + return ( + + + + + + + + + + + + + + + + + + 0 + + + + + 1024 + + + + + 2048 + + + + + 3072 + + + + + 4096 + + + + + 5120 + + + + + 6144 + + + + + 7168 + + + + + 8192 + + + + + 9216 + + + + + 10240 + + + + + 11264 + + + + + 12288 + + + + + + + ); }; diff --git a/packages/docs/components/Aac/AacPadding.tsx b/packages/docs/components/Aac/AacPadding.tsx index a90fbfb4856..3b57ba1b0ec 100644 --- a/packages/docs/components/Aac/AacPadding.tsx +++ b/packages/docs/components/Aac/AacPadding.tsx @@ -1,207 +1,207 @@ -import React from "react"; +import React from 'react'; export const AacPadding: React.FC = () => { - return ( - - - - - - - - - - - - - - - - - - - 0 - - - - - 1024 - - - - - 2048 - - - - - 3072 - - - - - 4096 - - - - - 5120 - - - - - 6144 - - - - - 7168 - - - - - 8192 - - - - - 9216 - - - - - 10240 - - - - - 11264 - - - - - 12288 - - - - - ); + return ( + + + + + + + + + + + + + + + + + + + 0 + + + + + 1024 + + + + + 2048 + + + + + 3072 + + + + + 4096 + + + + + 5120 + + + + + 6144 + + + + + 7168 + + + + + 8192 + + + + + 9216 + + + + + 10240 + + + + + 11264 + + + + + 12288 + + + + + ); }; diff --git a/packages/docs/components/Aac/Benchmarks.tsx b/packages/docs/components/Aac/Benchmarks.tsx index 33a8d85e6ab..447fcbcdd22 100644 --- a/packages/docs/components/Aac/Benchmarks.tsx +++ b/packages/docs/components/Aac/Benchmarks.tsx @@ -1,236 +1,236 @@ -import React from "react"; +import React from 'react'; export const AacBenchmarks: React.FC = () => { - return ( -
- - - - - - - - - - 28.3s - - - - - 64.8s - - - - - 264.2s - - - - - 31.8s - - - - - 134.7s - - - - - 582.6s - - - - - 1 Minute video - - - - - 1 Minute video - - - - - 10 Minute video - - - - - 40 Minute video - - - - - v4.0.129 - - - - - v4.0.126 - - - - - v4.0.129 - - - - - v4.0.129 - - - - - v4.0.126 - - - - - v4.0.126 - - - {" "} -
- ); + return ( +
+ + + + + + + + + + 28.3s + + + + + 64.8s + + + + + 264.2s + + + + + 31.8s + + + + + 134.7s + + + + + 582.6s + + + + + 1 Minute video + + + + + 1 Minute video + + + + + 10 Minute video + + + + + 40 Minute video + + + + + v4.0.129 + + + + + v4.0.126 + + + + + v4.0.129 + + + + + v4.0.129 + + + + + v4.0.126 + + + + + v4.0.126 + + + {' '} +
+ ); }; diff --git a/packages/docs/components/AvailableFonts/index.tsx b/packages/docs/components/AvailableFonts/index.tsx index 48c04c2d90b..8ae3fb0b969 100644 --- a/packages/docs/components/AvailableFonts/index.tsx +++ b/packages/docs/components/AvailableFonts/index.tsx @@ -1,23 +1,23 @@ -import { getAvailableFonts } from "@remotion/google-fonts"; -import React from "react"; +import {getAvailableFonts} from '@remotion/google-fonts'; +import React from 'react'; export const AvailableFonts: React.FC = () => { - return ( - - - - - - {getAvailableFonts().map((font) => { - return ( - - - - - ); - })} -
Font Familyimport statement
{font.fontFamily} - {`import {loadFont} from "@remotion/google-fonts/${font.importName}"`} -
- ); + return ( + + + + + + {getAvailableFonts().map((font) => { + return ( + + + + + ); + })} +
Font Familyimport statement
{font.fontFamily} + {`import {loadFont} from "@remotion/google-fonts/${font.importName}"`} +
+ ); }; diff --git a/packages/docs/components/Bounties.tsx b/packages/docs/components/Bounties.tsx index 1d8bd3417d7..9a2b1062a50 100644 --- a/packages/docs/components/Bounties.tsx +++ b/packages/docs/components/Bounties.tsx @@ -2,7 +2,6 @@ import {algora, type AlgoraOutput} from '@algora/sdk'; import {useColorMode} from '@docusaurus/theme-common'; import clsx from 'clsx'; import React, {useEffect, useState} from 'react'; - import './bounties.css'; const org = 'remotion'; diff --git a/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx b/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx index 1a27c8d7eb3..5bf09bdbd4f 100644 --- a/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx +++ b/packages/docs/components/CameraMotionBlurExample/CameraMotionBlurExample.tsx @@ -1,3 +1,4 @@ +import {CameraMotionBlur} from '@remotion/motion-blur'; import {Player} from '@remotion/player'; import React, {useState} from 'react'; import { @@ -9,8 +10,6 @@ import { useVideoConfig, } from 'remotion'; -import {CameraMotionBlur} from '@remotion/motion-blur'; - const square: React.CSSProperties = { height: 150, width: 150, diff --git a/packages/docs/components/ColorDemo/readable-color.ts b/packages/docs/components/ColorDemo/readable-color.ts index 6c44e9a700e..de27e5b1074 100644 --- a/packages/docs/components/ColorDemo/readable-color.ts +++ b/packages/docs/components/ColorDemo/readable-color.ts @@ -1,4 +1,4 @@ -import { getLuminance } from 'polished'; +import {getLuminance} from 'polished'; export const getReadableColor = (color: string): string => { const luminance = getLuminance(color); diff --git a/packages/docs/components/ColorDemo/styles.tsx b/packages/docs/components/ColorDemo/styles.tsx index 68dfc52909f..27358bb9058 100644 --- a/packages/docs/components/ColorDemo/styles.tsx +++ b/packages/docs/components/ColorDemo/styles.tsx @@ -1,13 +1,13 @@ -import type React from "react"; +import type React from 'react'; export const defaultStyles: React.CSSProperties = { - display: "flex", + display: 'flex', flex: 1, - justifyContent: "center", - alignItems: "center", + justifyContent: 'center', + alignItems: 'center', fontFamily: - "--apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif", - fontWeight: "bold", + "--apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif", + fontWeight: 'bold', fontSize: 100, lineHeight: 1.1, }; diff --git a/packages/docs/components/Concurrency.tsx b/packages/docs/components/Concurrency.tsx index 8de6016ee5f..aa7cade1444 100644 --- a/packages/docs/components/Concurrency.tsx +++ b/packages/docs/components/Concurrency.tsx @@ -1,38 +1,37 @@ -import React from "react"; - -import { interpolate } from "remotion"; +import React from 'react'; +import {interpolate} from 'remotion'; const bestFramesPerLambdaParam = (frameCount: number) => { - // Between 0 and 10 minutes (at 30fps), interpolate the concurrency from 75 to 150 - const concurrency = interpolate(frameCount, [0, 18000], [75, 150], { - extrapolateRight: "clamp", - }); + // Between 0 and 10 minutes (at 30fps), interpolate the concurrency from 75 to 150 + const concurrency = interpolate(frameCount, [0, 18000], [75, 150], { + extrapolateRight: 'clamp', + }); - // At least have 20 as a `framesPerLambda` value - const framesPerLambda = Math.max(frameCount / concurrency, 20); + // At least have 20 as a `framesPerLambda` value + const framesPerLambda = Math.max(frameCount / concurrency, 20); - // Evenly distribute: For 21 frames over 2 lambda functions, distribute as 11 + 10 ==> framesPerLambda = 11 - const lambdasNeeded = Math.ceil(frameCount / framesPerLambda); + // Evenly distribute: For 21 frames over 2 lambda functions, distribute as 11 + 10 ==> framesPerLambda = 11 + const lambdasNeeded = Math.ceil(frameCount / framesPerLambda); - return Math.ceil(frameCount / lambdasNeeded); + return Math.ceil(frameCount / lambdasNeeded); }; export const ConcurrencyCalculator: React.FC = () => { - const [state, setState] = React.useState(900); - const value = bestFramesPerLambdaParam(state); - return ( -
- Enter number of frames:{" "} - { - setState(parseInt(e.target.value, 10)); - }} - /> -
- The default framesPerLambda is {value} -
- ); + const [state, setState] = React.useState(900); + const value = bestFramesPerLambdaParam(state); + return ( +
+ Enter number of frames:{' '} + { + setState(parseInt(e.target.value, 10)); + }} + /> +
+ The default framesPerLambda is {value} +
+ ); }; diff --git a/packages/docs/components/Dataset/MyComp.tsx b/packages/docs/components/Dataset/MyComp.tsx index d18f122a6d2..23f06079433 100644 --- a/packages/docs/components/Dataset/MyComp.tsx +++ b/packages/docs/components/Dataset/MyComp.tsx @@ -1,91 +1,91 @@ -import React from "react"; +import React from 'react'; import { - AbsoluteFill, - Img, - interpolate, - spring, - useCurrentFrame, - useVideoConfig, -} from "remotion"; + AbsoluteFill, + Img, + interpolate, + spring, + useCurrentFrame, + useVideoConfig, +} from 'remotion'; interface Props { - readonly name: string; - readonly logo: string; - readonly repo: string; + readonly name: string; + readonly logo: string; + readonly repo: string; } -export const MyComp: React.FC = ({ name, repo, logo }) => { - const frame = useCurrentFrame(); - const { fps } = useVideoConfig(); +export const MyComp: React.FC = ({name, repo, logo}) => { + const frame = useCurrentFrame(); + const {fps} = useVideoConfig(); - const scale = spring({ - fps, - frame: frame - 10, - config: { - damping: 100, - }, - }); + const scale = spring({ + fps, + frame: frame - 10, + config: { + damping: 100, + }, + }); - const opacity = interpolate(frame, [30, 40], [0, 1], { - extrapolateLeft: "clamp", - extrapolateRight: "clamp", - }); - const moveY = interpolate(frame, [20, 30], [10, 0], { - extrapolateLeft: "clamp", - extrapolateRight: "clamp", - }); + const opacity = interpolate(frame, [30, 40], [0, 1], { + extrapolateLeft: 'clamp', + extrapolateRight: 'clamp', + }); + const moveY = interpolate(frame, [20, 30], [10, 0], { + extrapolateLeft: 'clamp', + extrapolateRight: 'clamp', + }); - return ( - -
- -
-
- {name} -
-
- {repo} -
-
-
-
- ); + return ( + +
+ +
+
+ {name} +
+
+ {repo} +
+
+
+
+ ); }; diff --git a/packages/docs/components/DownloadPressRelease.tsx b/packages/docs/components/DownloadPressRelease.tsx index 35ab525cb70..cec2f919b0c 100644 --- a/packages/docs/components/DownloadPressRelease.tsx +++ b/packages/docs/components/DownloadPressRelease.tsx @@ -1,61 +1,61 @@ -import React from "react"; +import React from 'react'; const style: React.CSSProperties = { - textDecoration: "none", - fontWeight: "bold", - flexDirection: "row", - display: "inline-flex", - alignItems: "center", - marginBottom: 15, + textDecoration: 'none', + fontWeight: 'bold', + flexDirection: 'row', + display: 'inline-flex', + alignItems: 'center', + marginBottom: 15, }; const icon: React.CSSProperties = { - height: 20, - marginRight: 10, - marginTop: -3, + height: 20, + marginRight: 10, + marginTop: -3, }; export const DownloadPressRelease: React.FC = () => { - return ( - <> - - - - ); + return ( + <> + + + + ); }; diff --git a/packages/docs/components/Experimental.tsx b/packages/docs/components/Experimental.tsx index d4b63da3c22..49f101c77c8 100644 --- a/packages/docs/components/Experimental.tsx +++ b/packages/docs/components/Experimental.tsx @@ -1,32 +1,32 @@ -import React from "react"; +import React from 'react'; export const ExperimentalBadge: React.FC<{ - readonly children: React.ReactNode; -}> = ({ children }) => { - return ( -
-
- EXPERIMENTAL -
-
{children}
-
- ); + readonly children: React.ReactNode; +}> = ({children}) => { + return ( +
+
+ EXPERIMENTAL +
+
{children}
+
+ ); }; diff --git a/packages/docs/components/FFmpegVideo.tsx b/packages/docs/components/FFmpegVideo.tsx index 8f975526b40..371fe28c9bb 100644 --- a/packages/docs/components/FFmpegVideo.tsx +++ b/packages/docs/components/FFmpegVideo.tsx @@ -1,19 +1,19 @@ -import { useColorMode } from "@docusaurus/theme-common"; -import React from "react"; +import {useColorMode} from '@docusaurus/theme-common'; +import React from 'react'; export const FfmpegVideo: React.FC = () => { - const { colorMode } = useColorMode(); - return ( -