{"record":{"id":"d511ab7c03e99e07","repo":"remotion-dev/remotion","slug":"playbackrate-must-be-one-of-commonplaybackrates","errorCode":null,"errorMessage":"playbackRate must be one of: ${commonPlaybackRates.join(', ')}.","messagePattern":"playbackRate must be one of: (.+?)\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/studio/src/components/WebMcp.tsx","lineNumber":1730,"sourceCode":"\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\tplaybackRate: {\n\t\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\t\tenum: commonPlaybackRates,\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t'The playback multiplier. Negative values play backwards.',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequired: ['playbackRate'],\n\t\t\t\t\t\tadditionalProperties: false,\n\t\t\t\t\t},\n\t\t\t\t\tannotations: {readOnlyHint: false},\n\t\t\t\t\texecute: ({playbackRate}) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof playbackRate !== 'number' ||\n\t\t\t\t\t\t\t!commonPlaybackRates.includes(playbackRate)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`playbackRate must be one of: ${commonPlaybackRates.join(', ')}.`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst compositionId = currentCompositionRef.current;\n\t\t\t\t\t\tif (compositionId === null) {\n\t\t\t\t\t\t\tthrow new Error('No composition is currently selected.');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetPlaybackRate(() => playbackRate);\n\t\t\t\t\t\tpersistPlaybackRate(playbackRate);\n\t\t\t\t\t\treturn Promise.resolve({\n\t\t\t\t\t\t\tcurrentContent: currentContentRef.current,\n\t\t\t\t\t\t\tplaybackRate,\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{signal: controller.signal},","sourceCodeStart":1712,"sourceCodeEnd":1748,"githubUrl":"https://github.com/remotion-dev/remotion/blob/b2f4e34732f3c6c222ea029413e22dc402218cd7/packages/studio/src/components/WebMcp.tsx#L1712-L1748","documentation":"The playback-rate MCP tool only accepts rates from the fixed list commonPlaybackRates (e.g. typical Remotion rates like 0.5, 1, 2, 4). Any other number or type throws.","triggerScenarios":"Passing playbackRate such as 1.5, 3, or a string that is not in the allowed set.","commonSituations":"Clients assuming arbitrary rates are supported, or using rates offered by other video players.","solutions":["Pass one of the documented common playback rates listed in the error message"],"exampleFix":"// before\n{\"playbackRate\": 1.5}\n// after\n{\"playbackRate\": 2}","handlingStrategy":"validation","validationCode":"const rates = [0.25, 0.5, 1, 2, 4]; // match commonPlaybackRates\nif (!rates.includes(playbackRate)) throw new Error('unsupported rate');","typeGuard":"const isCommonRate = (v: unknown): v is number => typeof v === 'number' && commonPlaybackRates.includes(v);","tryCatchPattern":null,"preventionTips":["Read the allowed rates from the error message or tool schema","Never assume arbitrary rates are accepted"],"tags":["mcp","validation","playback-rate"],"backgroundTag":"invalid-enum-value","analyzedSha":"b2f4e34732f3c6c222ea029413e22dc402218cd7","analyzedAt":"2026-08-28T15:39:09.316Z","contentChangedAt":"2026-08-28T15:39:09.316Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}