{"record":{"id":"4d4901712bc6b058","repo":"PaddlePaddle/PaddleOCR","slug":"worker-mode-requires-imagebitmap-support-in-this-b","errorCode":null,"errorMessage":"Worker mode requires ImageBitmap support in this browser.","messagePattern":"Worker mode requires ImageBitmap support in this browser\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"paddleocr-js/packages/core/src/platform/browser.ts","lineNumber":109,"sourceCode":"    };\n  }\n\n  const imageBitmap = await sourceToImageBitmap(source as ImageSource);\n  const sourceImage = bitmapToSourceMat(cv, imageBitmap);\n  return {\n    width: imageBitmap.width,\n    height: imageBitmap.height,\n    mat: sourceImage.mat,\n    dispose() {\n      sourceImage.mat.delete();\n      imageBitmap.close();\n    }\n  };\n}\n\nexport async function sourceToWorkerPayload(source: ImageSource): Promise<WorkerPayloadResult> {\n  if (typeof ImageBitmap === \"undefined\" || typeof createImageBitmap !== \"function\") {\n    throw new Error(\"Worker mode requires ImageBitmap support in this browser.\");\n  }\n  const imageBitmap = await sourceToClonedImageBitmap(source);\n  return {\n    payload: {\n      kind: \"imageBitmap\",\n      imageBitmap\n    },\n    transferables: [imageBitmap]\n  };\n}\n","sourceCodeStart":91,"sourceCodeEnd":120,"githubUrl":"https://github.com/PaddlePaddle/PaddleOCR/blob/2661c7c0ef5c613e8f93c6e93b2e052399f0f854/paddleocr-js/packages/core/src/platform/browser.ts#L91-L120","documentation":"Thrown by sourceToWorkerPayload() when worker mode is requested but the runtime exposes neither the ImageBitmap constructor nor createImageBitmap(). The library transfers image data to the OCR worker as an ImageBitmap (transferable, zero-copy), so without this API the worker transport cannot be fed. This is a hard capability gate, not a runtime failure.","triggerScenarios":"Enabling worker mode (e.g. passing worker/workerMode options that route through sourceToWorkerPayload) on browsers predating ImageBitmap support: Safari < 15, legacy Edge, IE11, or older WebViews / embedded browsers.","commonSituations":"Enterprise apps that must support older iOS/Safari versions; Cordova/Electron with old Chromium; feature-detection being skipped because the app assumed 'all modern browsers have ImageBitmap'.","solutions":["Feature-detect before enabling worker mode and fall back to main-thread OCR","Upgrade the browser/WebView to one supporting ImageBitmap (Chrome 50+, Firefox 42+, Safari 15+)","If a legacy target is mandatory, run OCR without the worker transport"],"exampleFix":"// before\nconst ocr = await PaddleOCR.create({ worker: true }); // throws on Safari 14\n\n// after\nconst supportsWorker = typeof ImageBitmap !== \"undefined\" && typeof createImageBitmap === \"function\";\nconst ocr = await PaddleOCR.create({ worker: supportsWorker });","handlingStrategy":"validation","validationCode":"const workerImagesSupported =\n  typeof ImageBitmap !== \"undefined\" && typeof createImageBitmap === \"function\";\n// only enable worker mode when true","typeGuard":"function supportsImageBitmap(): boolean {\n  return typeof ImageBitmap === \"function\" || typeof createImageBitmap === \"function\";\n}","tryCatchPattern":null,"preventionTips":["Feature-detect ImageBitmap before choosing worker mode","Keep a main-thread fallback path in the integration","Track browser support matrices (Safari < 15 lacks full ImageBitmap)"],"tags":["worker","browser-support","imagebitmap","feature-detection"],"backgroundTag":null,"analyzedSha":"2661c7c0ef5c613e8f93c6e93b2e052399f0f854","analyzedAt":"2026-08-14T20:17:30.180Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}