{"record":{"id":"ae8d2aa1122a7128","repo":"immich-app/immich","slug":"config-accel-touppercase-acceleration-is-unsupported","errorCode":null,"errorMessage":"${config.accel.toUpperCase()} acceleration is unsupported","messagePattern":"(.+?) acceleration is unsupported","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/utils/media.ts","lineNumber":137,"sourceCode":"        handler = config.accelDecode\n          ? new QsvHwDecodeConfig(config, interfaces, tune)\n          : new QsvSwDecodeConfig(config, interfaces, tune);\n        break;\n      }\n      case TranscodeHardwareAcceleration.Vaapi: {\n        handler = config.accelDecode\n          ? new VaapiHwDecodeConfig(config, interfaces, tune)\n          : new VaapiSwDecodeConfig(config, interfaces, tune);\n        break;\n      }\n      case TranscodeHardwareAcceleration.Rkmpp: {\n        handler = config.accelDecode\n          ? new RkmppHwDecodeConfig(config, interfaces, tune)\n          : new RkmppSwDecodeConfig(config, interfaces, tune);\n        break;\n      }\n      default: {\n        throw new Error(`${config.accel.toUpperCase()} acceleration is unsupported`);\n      }\n    }\n\n    return handler;\n  }\n\n  getCommand(target: TranscodeTarget, video: VideoStreamInfo, audio?: AudioStreamInfo, format?: VideoFormat) {\n    const options = {\n      inputOptions: this.getBaseInputOptions(video, format),\n      outputOptions: [\n        ...this.getBaseOutputOptions(target, video, audio),\n        ...this.getPresetOptions(),\n        ...this.getBitrateOptions(),\n        ...this.getEncoderOptions(),\n        '-movflags',\n        'faststart',\n        '-fps_mode',\n        'passthrough',","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/immich-app/immich/blob/e55ac299a4ec7cb372e35dbf2c6c05ee9ce77f6c/server/src/utils/media.ts#L119-L155","documentation":"getHWCodecConfig switches on the accel value to build the appropriate hardware config (NVENC, QSV, VAAPI, RKMPP...). An unrecognized accel value reaches the default branch and throws. This happens when an unsupported acceleration method name is stored in the transcoding config.","triggerScenarios":"targetVideoCodec/accel validation bypassed with an accel value outside {nvenc, qsv, vaapi, rkmpp}, e.g. a typo like 'cuda' or 'vdpau' in the config, or a config file from a different application.","commonSituations":"Users writing 'cuda' or 'gpu' as accel expecting generic GPU support; hand-edited config files; version drift where an accel option was renamed or removed.","solutions":["Set ffmpeg.accel to a supported value: nvenc, qsv, vaapi, rkmpp, or disabled","Fix typos like 'cuda'/'nvenc-lookahead' to the canonical enum value","Re-save transcode settings via the admin UI to write a valid enum","Check Immich docs for the exact accel names supported by your version"],"exampleFix":"// before\n{ \"ffmpeg\": { \"accel\": \"cuda\" } }\n// after\n{ \"ffmpeg\": { \"accel\": \"nvenc\" } }","handlingStrategy":"validation","validationCode":"const ACCELS = ['nvenc','qsv','vaapi','rkmpp','disabled'];\nif (!ACCELS.includes(config.accel)) {\n  throw new Error(`accel must be one of ${ACCELS.join(', ')}`);\n}","typeGuard":"const isValidAccel = (a) => ['nvenc','qsv','vaapi','rkmpp','disabled'].includes(a);","tryCatchPattern":"try {\n  const cfg = getHWCodecConfig(config, interfaces);\n} catch (e) {\n  if (/acceleration is unsupported/.test(e.message)) {\n    // set accel to 'nvenc'|'qsv'|'vaapi'|'rkmpp' or disable acceleration\n  }\n}","preventionTips":["Use exact enum names from the Immich docs ('nvenc', not 'cuda')","Rely on the admin UI dropdown rather than free-text config edits","After version upgrades, verify accel values still exist in the enum"],"tags":["video","ffmpeg","hardware-acceleration","config"],"backgroundTag":"invalid-enum-value","analyzedSha":"e55ac299a4ec7cb372e35dbf2c6c05ee9ce77f6c","analyzedAt":"2026-09-15T07:20:19.675Z","contentChangedAt":"2026-09-15T07:20:19.675Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}