Add a new Remotion CLI or config option by creating an AnyRemotionOption, registering CLI parsing, wiring config setters, and updating documentation. Use when adding or converting command-line flags or Remotion options.
73
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
How to convert a hardcoded CLI flag into a proper AnyRemotionOption, or add a brand new one.
Create packages/renderer/src/options/<name>.tsx:
import type {AnyRemotionOption} from './option';
let myValue = false; // module-level default state
const cliFlag = 'my-flag' as const;
export const myFlagOption = {
name: 'Human-readable Name',
cliFlag,
id: cliFlag,
description: () => <>Description shown in docs.</>,
ssrName: null, // or 'myFlag' if used in SSR APIs
docLink: 'https://www.remotion.dev/docs/options/my-flag',
type: false as boolean, // TypeScript type witness; defaults are resolved in getValue
getValue: ({commandLine}) => {
if (commandLine[cliFlag] !== undefined) {
return {value: commandLine[cliFlag] as boolean, source: 'cli'};
}
return {value: myValue, source: 'config'};
},
setConfig(value) {
myValue = value;
},
} satisfies AnyRemotionOption<boolean>;The type in AnyRemotionOption<T> and type: <value> as T determines the option's value type. Use boolean, string | null, number | null, etc.
The id must be unique and contain only lowercase letters, digits, and hyphens. It determines the /docs/options/<id> page and the <Options id="..." /> value. It usually matches cliFlag, but shared flags can have distinct option IDs.
Set docLink to https://www.remotion.dev/docs/options/<id>.
For negating flags (like --disable-ask-ai → askAIEnabled = false), handle the inversion in getValue.
packages/renderer/src/options/index.tsx:
allOptions objectThis makes it available as BrowserSafeApis.options.myFlagOption throughout the codebase.
packages/cli/src/parsed-cli.ts:
BrowserSafeApis.options.myFlagOption.cliFlag to the BooleanFlags arraypackages/cli/src/parse-command-line.ts:
BrowserSafeApis.optionsCommandLineOptions type, add: [myFlagOption.cliFlag]: TypeOfOption<typeof myFlagOption>;Instead of reading parsedCli['my-flag'] directly, resolve via:
const myFlag = myFlagOption.getValue({commandLine: parsedCli}).value;For Studio options, this is typically in packages/cli/src/studio.ts. For render options, in the relevant render command file.
If the option is consumed by Studio, read ../studio-config-option-lifecycle/SKILL.md completely before wiring it. Classify the option as startup-fixed or reloadable across all Studio consumers; mixed behavior is not allowed. If any consumer requires startup-fixed behavior, pass the startup snapshot to every consumer.
packages/cli/src/config/index.ts:
BrowserSafeApis.optionsFlatConfig type (either in the RemotionConfigObject global interface or the FlatConfig intersection)Config object: setMyFlagEnabled: myFlagOption.setConfigThis step is mandatory. Every new option must have its docs updated to use <Options id="..." /> so the description is pulled from the option definition automatically (single source of truth). If converting an existing hardcoded flag, replace any hand-written description with the <Options> component.
CLI command pages (check all that apply — cli/render.mdx, lambda/cli/render.mdx, cloudrun/cli/render.mdx, cli/benchmark.mdx):
### \--my-flag`` section<Options id="my-flag" /> as the description body (no import needed — it's globally available)id must match the option's id valueCLI help metadata: Add the flag to each supported command's option list in packages/cli/src/print-help.ts, packages/lambda/src/cli/help.ts, or packages/cloudrun/src/cli/help.ts. The generated option page uses the help entries' optionIds to list supported commands; ensure shared flags resolve to the correct option ID.
API pages: Document each public parameter under its own heading so the generated page can link to it.
packages/docs/docs/config.mdx:
## \setMyFlagEnabled()`` section with:
<Options id="my-flag" /> for the description/docs/options/<id> noting that the CLI flag takes precedenceFollow the pattern of nearby entries (e.g., setAskAIEnabled, setEnableCrossSiteIsolation).
Generated option reference: Generate packages/docs/docs/options/<id>.mdx and the options index using the commands below. Edit the option definition and API/config docs rather than the generated MDX. Option pages are added to the sidebar automatically.
# From the repository root
bun run build
cd packages/docs
bun run generate-option-docs
bun run render-cards
bun run check-option-docsVerify /docs/options/<id> includes the description, supported commands, and relevant API/configuration links. Commit the generated page and index, the article catalog (packages/docs/src/data/articles.ts), and the new social preview card.
packages/renderer/src/options/option.tspackages/renderer/src/options/ask-ai.tsx (boolean, studio-only)packages/renderer/src/options/index.tsxpackages/cli/src/parsed-cli.tspackages/cli/src/parse-command-line.tspackages/cli/src/config/index.tsremotion-dev/remotion
97b942c
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.