{"record":{"id":"9759a13650b9eade","repo":"remotion-dev/remotion","slug":"studio-server-port-should-be-a-number-between-1-an","errorCode":null,"errorMessage":"Studio server port should be a number between 1 and 65535. Got ${port}","messagePattern":"Studio server port should be a number between 1 and 65535\\. Got (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cli/src/config/preview-server.ts","lineNumber":23,"sourceCode":"\nlet studioPort: number | undefined;\nlet rendererPort: number | undefined;\n\nconst validatePort = (port: number | undefined) => {\n\tif (!['number', 'undefined'].includes(typeof port)) {\n\t\tthrow new Error(\n\t\t\t`Studio server port should be a number. Got ${typeof port} (${JSON.stringify(\n\t\t\t\tport,\n\t\t\t)})`,\n\t\t);\n\t}\n\n\tif (port === undefined) {\n\t\treturn;\n\t}\n\n\tif (port < 1 || port > 65535) {\n\t\tthrow new Error(\n\t\t\t`Studio server port should be a number between 1 and 65535. Got ${port}`,\n\t\t);\n\t}\n};\n\n/**\n *\n * @param port\n * @deprecated Use the `setStudioPort` and `setRendererPort` functions instead\n * @returns\n */\nexport const setPort = (port: number | undefined) => {\n\tsetStudioPort(port);\n\tsetRendererPort(port);\n};\n\nexport const setStudioPort = (port: number | undefined) => {\n\tvalidatePort(port);","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/cli/src/config/preview-server.ts#L5-L41","documentation":"After the type check, `setStudioPort` validates that the port is within the valid TCP range (1-65535). Ports outside that range — including common mistakes like `0`, negative numbers, or 70000 — are rejected with a clear message.","triggerScenarios":"Calling `Config.setStudioPort(0)`, `setStudioPort(-1)`, `setStudioPort(70000)`, or `setStudioPort(65536)`. Also `setStudioPort(Number('abc'))` which yields `NaN` (NaN comparisons are false, but `NaN < 1` is false so it slips — except NaN is caught by the earlier type check since `typeof NaN === 'number'`; in practice the range check catches 0 and out-of-range integers).","commonSituations":"Typing a placeholder like `0` meaning 'any port'; mis-typed config (`setStudioPort(800000)`); copy-paste from a URL that includes the path; treating a Unix-only high port (>65535) as valid.","solutions":["Pick a port in 1-65535 (commonly 3000, 8080), or pass `undefined` to let Remotion choose.","If the source is dynamic, clamp or validate before calling."],"exampleFix":"// before\nConfig.setStudioPort(0);\n// after\nConfig.setStudioPort(undefined);","handlingStrategy":"validation","validationCode":"const port = Number(process.env.STUDIO_PORT);\nif (!Number.isInteger(port) || port < 1 || port > 65535) {\n  throw new Error(`STUDIO_PORT must be an integer in 1..65535, got ${process.env.STUDIO_PORT}`);\n}\nConfig.setStudioPort(port);","typeGuard":"const isValidPort = (v: number): boolean =>\n  Number.isInteger(v) && v >= 1 && v <= 65535;","tryCatchPattern":null,"preventionTips":["Use `undefined` to opt out of specifying a port rather than `0`.","Centralize port validation in a helper used everywhere ports enter the app."],"tags":["config","validation","studio","port"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}