{"record":{"id":"d0e40683b1cf7fa5","repo":"remotion-dev/remotion","slug":"browser-studio-does-not-support-saving-sequence-ke","errorCode":null,"errorMessage":"Browser Studio does not support saving sequence keyframes yet","messagePattern":"Browser Studio does not support saving sequence keyframes yet","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"warning","filePath":"packages/browser-studio/src/save-sequence-props.ts","lineNumber":77,"sourceCode":"\t\t\t\tJSON.stringify(target.nodePath),\n\t\t\t\ttarget,\n\t\t\t]),\n\t\t).values(),\n\t];\n};\n\nexport const saveSequencePropsInProject = ({\n\tproject,\n\trequest,\n}: {\n\tproject: VirtualProject;\n\trequest: SaveSequencePropsRequest;\n}): {\n\tproject: VirtualProject;\n\tresponse: SaveSequencePropsResponse;\n} => {\n\tif (hasKeyframeChanges(request)) {\n\t\tthrow new Error(\n\t\t\t'Browser Studio does not support saving sequence keyframes yet',\n\t\t);\n\t}\n\n\tif (\n\t\trequest.edits.length === 0 &&\n\t\t(request.captionPatches?.length ?? 0) === 0\n\t) {\n\t\tthrow new Error('No sequence prop edits to save');\n\t}\n\n\tconst mutations = new Map<string, FileMutation>();\n\tfor (const edit of request.edits) {\n\t\tconst absolutePath = findProjectFile({\n\t\t\tfilePath: edit.fileName,\n\t\t\tproject,\n\t\t});\n\t\tgetFileMutation(mutations, absolutePath).edits.push(edit);","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/browser-studio/src/save-sequence-props.ts#L59-L95","documentation":"saveSequencePropsInProject explicitly rejects any SaveSequencePropsRequest that contains keyframe changes (detected via hasKeyframeChanges). Browser Studio has not implemented persisting sequence keyframes yet, so this is a capability gate rather than a user-correctable input error. Non-keyframe prop edits and caption patches are still allowed.","triggerScenarios":"Calling saveSequenceProps with an edits/captionPatches payload that includes keyframe changes — e.g. the user animated a prop and the Studio sent the keyframes to be saved.","commonSituations":"A UI flow that records keyframes (visual-mode timeline editing) attempting to persist them; new feature work that produces keyframe diffs before the save path supports them; client and server capability mismatch after an upgrade.","solutions":["Filter out keyframe-bearing edits before calling saveSequenceProps (only send static prop edits and caption patches).","Disable the keyframe-recording UI in Browser Studio until persistence is supported.","Use the desktop Remotion Studio if keyframe persistence is required.","Track this as a known limitation and surface an in-UI message instead of letting the throw propagate."],"exampleFix":"// before\nsaveSequencePropsInProject({project, request}); // request contains keyframes\n\n// after\nconst stripped = {...request, edits: request.edits.filter((e) => !isKeyframeEdit(e))};\nsaveSequencePropsInProject({project, request: stripped});","handlingStrategy":"validation","validationCode":"// Strip keyframe-bearing edits before calling saveSequenceProps\nconst requestWithoutKeyframes: SaveSequencePropsRequest = {\n  ...request,\n  edits: request.edits.filter((e) => !isKeyframeEdit(e)),\n  captionPatches: (request.captionPatches ?? []).filter((c) => !isKeyframeEdit(c)),\n};\nif (requestWithoutKeyframes.edits.length === 0 &&\n    (requestWithoutKeyframes.captionPatches?.length ?? 0) === 0) {\n  // nothing savable — inform user instead of calling\n}","typeGuard":"const hasNoKeyframeChanges = (req: SaveSequencePropsRequest): boolean =>\n  !hasKeyframeChanges(req);","tryCatchPattern":"try {\n  saveSequencePropsInProject({project, request});\n} catch (err) {\n  if (String(err?.message ?? '').includes('does not support saving sequence keyframes')) {\n    // inform user keyframes can't be saved in Browser Studio yet; do not retry unchanged\n  } else throw err;\n}","preventionTips":["Do not enable keyframe recording in Browser Studio until persistence is supported.","Filter keyframe edits out of save requests before sending.","Surface this as an in-UI 'unsupported feature' notice rather than an error toast.","Use desktop Studio when keyframe persistence is required."],"tags":["browser-studio","keyframes","unsupported-feature","capability-gate"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}