OpenScreen 离线字幕怎么打包?Whisper 模型预置全流程
OpenScreen 离线字幕怎么打包Whisper 模型预置全流程【免费下载链接】openscreenCreate stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio.项目地址: https://gitcode.com/GitHub_Trending/open/openscreen要交付一个自动字幕断网也能用的 OpenScreen 安装包前提是先把 Whisper 模型与 onnxruntime wasm 铺进resources/caption-assets/——打包后应用从file://协议加载页面运行时既连不到 HuggingFace也拉不到 CDN 上的 wasm。本文按预置 → 校验 → 出包三步把这条链路讲清。原理链路从协议判断到资源落位的一条单向流离线转写读取的资产不是散落的运行时按一条固定链路流动每一步都可查证渲染进程判断协议src/lib/captioning/transcribe.ts 检测到window.location.protocol file:即打包后的状态时置useLocalModels true并把window.electronAPI.assetBaseUrl一并传给 workerdev 的 http 环境不走本地资产。worker 配置环境变量src/lib/captioning/transcribe.worker.ts 在useLocalModels时把env.localModelPath指到caption-assets/models/、env.backends.onnx.wasm.wasmPaths指到caption-assets/ort/置env.allowRemoteModels false并固定numThreads 1——file://下拿不到 SharedArrayBuffer线程版 wasm 永远不会加载。主进程给出资源根electron/windows.ts 在打包后取process.resourcesPath以--asset-base-urlfile:// URL传给 preloadelectron/preload.ts 解析出assetBaseUrl暴露给渲染进程。打包资源落位electron-builder.json5 的extraResources把caption-assets/整个拷入打包后的 resources与运行时读取路径对齐。也就是说运行时只认resources/caption-assets/下的models/与ort/两个子目录缺任何一个里的文件离线转写都跑不起来。 动手前环境与依赖核对表脚本的失败来源只有两类依赖缺失、网络不可达。先核对三项再执行任何命令检查项要求缺失时的报错或后果node / npm 版本对齐 package.json 的enginesnode 22.22.1、npm 10.9.4依赖解析漂移脚本与构建行为不可预期xenova/transformers依赖node_modules/xenova/transformers/dist下的 wasm 文件存在Missing ... — is xenova/transformers installed? Run npm ci first.外网可达 HuggingFace构建机能访问huggingface.co重试耗尽后退出码 1依赖未装好时先补齐npm ci主线三步预置、校验、出包第一步·预置跑 fetch-caption-model 写入资产脚本幂等手动先跑一遍能把网络错误暴露在打包之前而不是卡进打包流程node scripts/fetch-caption-model.mjs副作用边界写入全部落在仓库根的caption-assets/该目录已被.gitignore忽略不进 git。从node_modules/xenova/transformers/dist只拷两个非线程版 wasmort-wasm.wasm、ort-wasm-simd.wasm到caption-assets/ort/线程版不加载省约 20MB。从Xenova/whisper-tiny下载 13 个文件到caption-assets/models/Xenova/whisper-tiny/11 个配置/分词元数据加 2 个量化 ONNX 权重。已存在的非空文件直接跳过重跑只补缺失部分。关键输出中间下载行截断Fetching caption assets → caption-assets/ ONNX Runtime wasm: copied ort/ort-wasm.wasm copied ort/ort-wasm-simd.wasm Whisper model (Xenova/whisper-tiny): ↓ models/Xenova/whisper-tiny/onnx/encoder_model_quantized.onnx (7.4 MB) ... Caption assets ready.可观察信号日志以Caption assets ready.收尾即视为预置完成。第二步·校验重跑即校验不需要单独的校验命令。再执行一次node scripts/fetch-caption-model.mjs每个已就位且非空的文件打印✓ cached 相对路径而不触发下载结尾仍是Caption assets ready.即代表ort/与models/Xenova/whisper-tiny/结构完整。若某行出现↓新下载说明该文件此前不完整重跑直到全部变成cached即可。第三步·出包beforePack 钩子与 extraResources 映射决定资产能否进安装包的是 electron-builder.json5 里两处配置beforePack: scripts/before-pack.cjsscripts/before-pack.cjs 在每次打包本地npm run build:*或 CI 的裸electron-builder前同步执行预置脚本资产已就位时这一步是 no-op。extraResources中{ from: caption-assets, to: caption-assets }一条负责把目录整体拷入 resources。按平台选打包命令输出统一落在release/${version}npm run build:mac # 先构建 ScreencaptureKit 录制助手再 electron-builder --mac npm run build:win # 先构建 Windows WGC 原生助手再 electron-builder --win npm run build:linux # tsc vite build electron-builder --linux AppImage deb pacmanbuild:mac与build:win把对应平台的原生录制助手构建编进了流程出包时不要单独拆掉这几步。报错速查依赖缺失、限流与重试现象原因处置Missing ... — is xenova/transformers installed? Run npm ci first.node_modules/xenova/transformers/dist下找不到 wasm执行npm ci后重跑脚本日志出现… HTTP 429, retry n/5 in Xs408/425/429/500/502/503/504 同理HuggingFace 限流CI 矩阵并行构建时常见或服务端瞬态错误脚本自动重试至多 6 次指数退避2s 起、上限 60s带Retry-After头时遵循其值fetch-caption-model failed: 错误信息退出码 1重试耗尽或遇到不可重试状态码稍后重跑幂等性保证只补未下完的部分网络/DNS 错误日志网络不可达与限流共用自动重试 退避机制网络恢复后重跑边界什么不生效、什么不能改本地资产只在file://打包后环境生效npm run dev的 http 环境走远程 CDNcaption-assets/不会被读取。模型固定为Xenova/whisper-tinyworker 中 pipeline 与模型 ID 写死为automatic-speech-recognitionXenova/whisper-tiny换模型需同步改脚本的MODEL_FILES与 worker 代码不在本脚本参数范围内。打包资产不含output_attentions修订版权重——该变体在某些环境会导致推理回退空 chunk、抛错worker 只使用默认 tiny 权重。caption-assets/不入 git每台构建机含 CI首次构建都需要外网访问 HuggingFace之后依赖幂等缓存。验收清单打包后逐条核对重跑node scripts/fetch-caption-model.mjs所有文件显示✓ cached以Caption assets ready.收尾。release/${version}/下生成对应平台安装包mac 为 dmg、win 为 nsis、linux 为 AppImage/deb/pacman。安装包内resources/caption-assets/下同时存在非空的models/与ort/两个子目录。断网启动安装包自动字幕仍能从本地加载模型与 wasm产出带时间戳的字幕片段。【免费下载链接】openscreenCreate stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio.项目地址: https://gitcode.com/GitHub_Trending/open/openscreen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考