remotion-dev/remotion · error · Error
No sequence prop edits to save
Error message
No sequence prop edits to save
What it means
Rejected by saveSequenceProps in @remotion/browser-studio when the request contains nothing to save: `request.edits` is empty, `captionPatches` is empty/absent, and there are no added or moved keyframes, so both the prop-saving step and the keyframe step are skipped and the operation refuses to commit an empty mutation. Unlike most operations here it throws directly (no try/catch inside), so the promise rejects with this message.
Source
Thrown at packages/browser-studio/src/browser-studio-operations.ts:2280
{
fromFrame: keyframe.fromFrame,
toFrame: keyframe.toFrame,
},
],
},
},
],
}));
const keyframeResult =
sequenceMutations.length > 0 || effectMutations.length > 0
? await mutateKeyframesInProject({
project: propResult?.project ?? project,
sequenceMutations,
effectMutations,
})
: null;
if (propResult === null && keyframeResult === null) {
throw new Error('No sequence prop edits to save');
}
const firstTarget = request.edits[0] ?? request.captionPatches?.[0];
controller.applyMutation({
timelineSelection: null,
fileName:
firstTarget?.fileName ??
sequenceMutations[0]?.fileName ??
'Keyframes',
nodePathMutationFiles: null,
mutate: () => keyframeResult?.project ?? propResult!.project,
});
if (propResult) {
return propResult.response;
}
const firstSequenceMutation = keyframeResult?.appliedSequenceMutations[0];
return firstSequenceMutation && keyframeResultView on GitHub (pinned to b2f4e34732)
Solutions
- Only call saveSequenceProps when at least one edit, caption patch, added keyframe, or moved keyframe exists
- Track a dirty flag and skip the call when nothing changed
- Catch the rejection defensively around debounced auto-save
- If you expect edits but get this error, log the request payload — your edit collection logic is dropping changes
Example fix
// before
await operations.saveSequenceProps({
fileName,
edits: [],
addedKeyframes: [],
movedKeyframes: {sequenceKeyframes: [], effectKeyframes: []},
}); // rejects: No sequence prop edits to save
// after
const hasWork =
edits.length > 0 ||
addedKeyframes.length > 0 ||
movedKeyframes.sequenceKeyframes.length > 0 ||
movedKeyframes.effectKeyframes.length > 0;
if (hasWork) {
await operations.saveSequenceProps({fileName, edits, addedKeyframes, movedKeyframes});
} Defensive patterns
Strategy: validation
Validate before calling
const hasWork =
edits.length > 0 ||
(captionPatches?.length ?? 0) > 0 ||
(addedKeyframes?.length ?? 0) > 0 ||
(movedKeyframes?.sequenceKeyframes.length ?? 0) > 0 ||
(movedKeyframes?.effectKeyframes.length ?? 0) > 0;
if (hasWork) {
await operations.saveSequenceProps({fileName, edits, captionPatches, addedKeyframes, movedKeyframes});
} Try / catch
try { await operations.saveSequenceProps(request); } catch (error) { /* empty or malformed request — clear the dirty flag and move on */ } Prevention
- Maintain a dirty flag; skip auto-save when the pending change queue is empty
- In debounced savers, bail out early if the diff is empty
- Log request payloads when this fires unexpectedly — your edit collector is dropping changes
When it happens
Trigger: Calling `saveSequenceProps({edits: [], captionPatches: [], addedKeyframes: [], movedKeyframes: {sequenceKeyframes: [], effectKeyframes: []}})` or omitting all optional arrays; a debounced auto-save firing after the user reverted their last change, sending an empty diff.
Common situations: Auto-save timers in embedding editors that fire even when the change queue was emptied; save buttons enabled with no dirty fields; diff tracking that produces zero edits after normalization.
Related errors
- Could not add sequence keyframe
- Could not add effect keyframe
- Could not update sequence keyframe settings
- Could not update effect keyframe settings
- Emoji ${emoji} not found. Available emojis: ${emojis.map((e)
AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-08-22).
Data as JSON: /api/errors/a06d245000ec7d9b.
Report an issue: GitHub.