Common Issues
Troubleshooting guide for Lambda-based rendering issues
This page lists common problems with self-managed Lambda renders and the fixes for them. For the setup steps, see Getting Setup.
Missing AWS credentials
Symptom: The deploy or the render fails at once with a credential or permission error.
Fix:
- Make sure that your
.envfile contains these names:
REMOTION_AWS_ACCESS_KEY_ID=your_key
REMOTION_AWS_SECRET_ACCESS_KEY=your_secret- Make sure that your server loads the
.envfile. - Validate the user and role policies:
npx remotion lambda policies validateIf both variables are missing, the SDK deploy() helper shows a message and stops without a deploy.
Function not found or wrong region
Symptom: The render does not start, and the error says that the function does not exist.
Fix: The function name and the region are arguments of renderMediaOnLambda() and getRenderProgress(). They are not settings in remotion.config.ts.
- Run
npx remotion lambda functions lsand copy the function name. - Make sure that your routes use the same region as the deploy. The
deploy()helper usesus-east-1by default.
await renderMediaOnLambda({
functionName: 'remotion-render-4-0-481-mem3009mb-disk10240mb-240sec',
region: 'us-east-1',
// ...
});Composition not found
Symptom: The render fails with an error that says that no composition has the requested id.
Cause: The SDK sends the editor projectId as id. Your render route passes it as composition. The id does not match the id in remotion/root.tsx.
Fix: Do one of these:
- Set the composition id to your
projectId. - Pass one fixed composition id in your render route.
Deploy the site again after the change.
Keyframed items do not move
Symptom: Items with keyframes stay at one position, size, or opacity in the server output. The editor shows the animation.
Cause: Your composition does not render items inside LayerBox.
Fix: Wrap each item in LayerBox from @reactvideoeditor/react-video-editor/remotion/layer-box. Give it the zIndex from layerZIndex(trackIndex). See Custom compositions.
Shapes or Lottie animations are missing
Symptom: Shape items or Lottie items do not appear in the output.
Fix:
- Add the
ItemType.SHAPEcase withShapeLayerContentto your layer content. - Add the
ItemType.LOTTIEcase withLottieLayerContent. - Install
@remotion/lottiewith the same version as the other@remotion/*packages. If it is missing, Lottie items render as empty and no error shows. - Deploy the site again.
If your composition still imports StickerLayerContent, delete that import and its case. The export is removed.
Wrong output size, duration, or frame rate
Symptom: The video has a fixed size such as 1920×1080, or the wrong length. A larger export resolution does not change the output.
Cause: The composition uses fixed values.
Fix: Use calculateMetadata to read width, height, durationInFrames, and fps from inputProps. Multiply the width and the height by inputProps.scale when it is present. See Custom compositions.
Text uses the wrong font
Symptom: Text and captions use Roboto in the output.
Cause: On the server, the text components cannot fetch font data from your app.
Fix: Add fontInfos to the inputProps in your render route. See Fonts.
Old composition code
Symptom: The output does not show your recent changes to the composition.
Fix: Deploy the site again with node deploy.mjs or npx remotion lambda sites create. If you use the same site name, the new code replaces the old code at the same Serve URL.
Memory or timeout errors
Symptom: The render stops with an out-of-memory error or a timeout.
Fix:
- Deploy the function with more memory and a longer timeout. With the SDK helper, set
ram(MB) andtimeout(seconds). WithdeployFunction(), setmemorySizeInMbandtimeoutInSeconds. - Lower the work for each function call:
await renderMediaOnLambda({
framesPerLambda: 40,
// ...
});A new function has a new name that includes the memory, disk, and timeout. Update REMOTION_FUNCTION_NAME after the deploy.
Media does not load
Symptom: Images, videos, or sounds are missing in the output.
Fix:
- Make sure that each media URL is public, or that it has a signed URL that is valid for the full render.
- Do not use
localhostURLs. The Lambda function cannot get them. - If an upload is not complete, the SDK stops the render before it sends the request. Wait for the upload, then render again.
The editor shows no progress
Symptom: The render starts, but the progress stays at 0 or the editor shows an error.
Fix: The progress route must return one of these shapes:
| { type: 'progress'; progress: number } // from 0 to 1
| { type: 'done'; url: string; size: number }
| { type: 'error'; message: string }Do not return the raw result of getRenderProgress(). Map it to one of these shapes. See the progress route.