refactor(cli): unify RenderOptions on browserGpuMode tri-state

Initial PR carried a backwards-compat shim where RenderOptions had both
`browserGpu?: boolean` (for docker) and `browserGpuMode?` (for local).
Since renderLocal/renderDocker have no external callers, simplify to a
single field. The boolean → docker-args conversion now happens inline at
the one site that needs it (`browserGpu: options.browserGpuMode === "hardware"`
when handing off to dockerRunArgs).

No behaviour change. 535/535 engine + 256/256 CLI still pass.
This commit is contained in:
James
2026-05-06 17:33:55 +00:00
parent 67bb56c703
commit 2221647728
2 changed files with 11 additions and 14 deletions
+5 -5
View File
@@ -60,7 +60,7 @@ describe("renderLocal browser GPU config", () => {
quality: "standard",
format: "mp4",
gpu: false,
browserGpu: false,
browserGpuMode: "software",
hdrMode: "auto",
quiet: true,
});
@@ -98,7 +98,7 @@ describe("renderLocal browser GPU config", () => {
quality: "standard",
format: "mp4",
gpu: false,
browserGpu: true,
browserGpuMode: "hardware",
hdrMode: "auto",
quiet: true,
});
@@ -134,7 +134,7 @@ describe("renderLocal browser GPU config", () => {
quality: "standard",
format: "mp4",
gpu: false,
browserGpu: false,
browserGpuMode: "software",
hdrMode: "auto",
quiet: true,
variables: { title: "Hello", count: 3 },
@@ -150,7 +150,7 @@ describe("renderLocal browser GPU config", () => {
quality: "standard",
format: "mp4",
gpu: false,
browserGpu: false,
browserGpuMode: "software",
hdrMode: "auto",
quiet: true,
});
@@ -172,7 +172,7 @@ describe("renderLocal browser GPU config", () => {
quality: "standard",
format: "mp4",
gpu: false,
browserGpu: true,
browserGpuMode: "hardware",
hdrMode: "auto",
quiet: true,
exitAfterComplete: true,
+6 -9
View File
@@ -401,7 +401,7 @@ export default defineCommand({
format,
workers,
gpu: useGpu,
browserGpu: browserGpuMode === "hardware",
browserGpuMode,
hdrMode: args.sdr ? "force-sdr" : args.hdr ? "force-hdr" : "auto",
crf,
videoBitrate,
@@ -436,14 +436,11 @@ interface RenderOptions {
workers?: number;
gpu: boolean;
/**
* For local renders: tri-state ("auto" | "hardware" | "software"). "auto"
* probes WebGL availability on first launch and falls back to software.
* Docker renders use the boolean `browserGpu` field instead because the
* docker run-args wire the inner CLI's `--no-browser-gpu` flag.
* Chrome WebGL backend mode. "auto" probes on first launch and falls back
* to "software" if no usable GPU. Defaults to "software" when omitted to
* stay backwards-compatible with callers that pre-date the tri-state.
*/
browserGpuMode?: "auto" | "hardware" | "software";
/** Docker-only: true → host GPU passthrough, false → forced software. */
browserGpu?: boolean;
hdrMode: "auto" | "force-hdr" | "force-sdr";
crf?: number;
videoBitrate?: string;
@@ -737,7 +734,7 @@ async function renderDocker(
format: options.format,
workers: options.workers,
gpu: options.gpu,
browserGpu: options.browserGpu ?? false,
browserGpu: options.browserGpuMode === "hardware",
hdrMode: options.hdrMode,
crf: options.crf,
videoBitrate: options.videoBitrate,
@@ -807,7 +804,7 @@ export async function renderLocal(
workers: options.workers,
useGpu: options.gpu,
producerConfig: producer.resolveConfig({
browserGpuMode: options.browserGpuMode ?? (options.browserGpu ? "hardware" : "software"),
browserGpuMode: options.browserGpuMode ?? "software",
}),
hdrMode: options.hdrMode,
crf: options.crf,