
桌面应用文档音视频OCR【免费下载链接】flyingmouse-format飞鼠格式 FlyingMouse Format - Windows 免费文件格式转换工具离线可用内置 FFmpeg/LibreOffice/Poppler/Tesseract。图片/文档/表格/PPT/PDF/音视频/WPS 格式互转 OCR 批量转换音频仅支持普通格式。作者牢蜂LaoFeng仅供个人免费使用禁止商业售卖/转卖/套壳项目地址https://gitcode.com/gh_mirrors/fl/flyingmouse-format点击查看免费下载FlyingMouse Format飞鼠格式是一个 Windows Electron 离线文件转换器内置 FFmpeg/LibreOffice/Poppler/Tesseract 等引擎支持图片、文档、表格、PPT、PDF、音视频与 WPS 格式互转及 OCR 批量转换。本文以仓库根目录的 AGENTS.md 为骨架结合 package.json、server.js、config.js、electron-main.js 等真实源码系统拆解该项目从模块职责到转换路由再到打包发布的整套工程规范。读完本文你将能理解飞鼠格式的源码组织、格式转换与资源预算边界、Electron 安全基线、运行时路径体系以及 Windows/Store/Win7 多通道打包的完整约束可直接用于代码维护、二次开发或构建验收。项目边界飞鼠格式是什么、不是什么AGENTS.md 首先划定了项目边界FlyingMouse Format 是 Windows Electron 离线文件转换器主产品必须使用原版鼠鼠 UI。它与鼠鼠打印是两个独立项目禁止跨项目修改或混合发布物。当前技术栈0.7.10为Electron 43、Windows 10/11 x64、鼠鼠 UI、中英文切换、批量转换、偏好与保存目录记忆。现役版本、渠道状态与产物来源统一以 docs/REPAIR-0.7.10.md 为准——这是 AGENTS.md 反复强调的第一原则不要用后续测试或文档提交改写已验收二进制的构建来源GitHub 发布、本地 MSIX、商店认证和客户端安装必须分别验证。两个值得注意的平台约束Windows 7 支持Windows 7 SP1 x64 只通过独立 staging 派生 Electron 22.3.27见后文 Win7 构建一节禁止降低根 manifest 的主线依赖。OFD 专属链路OFD国标 GB/T 33190仅通过ofd-convert.js转 PDF不走 LibreOffice。这一点在 config.js 中有注释与ofdOnlyPdfTargets [pdf]常量直接对应。从源码结构看产品的主干链路是electron-main.js桌面生命周期→ 本地 Express 服务server.js→ 各转换模块 → 渲染器保存。任何新增功能若涉及服务端引用都必须同步登记到package.json的build.files白名单否则源码可运行也不代表进入了安装包。源码地图一次看懂模块职责AGENTS.md 的 Source map 给出了完整的模块职责清单下面按层次归纳并补充源码细节层次文件职责服务与能力server.js、config.js、utils.jsExpress 本地转换服务、能力检测、目标格式判断、上传与下载路由、引擎路径解析桌面生命周期electron-main.js、preload.js、electron-security.js启动本地服务、创建窗口、打包引擎路径、保存 IPC、导航与外链信任策略渲染层public/index.html、public/styles.css、public/app.js鼠鼠 UI、批量队列、进度、状态与保存交互语言与偏好public/i18n.js、public/conversion-preferences.jszh-CN/en-US语言持久化按规范化源扩展名记忆目标格式设置settings-store.js在 ElectronuserData/settings.json原子保存最近目录Office 链office-readiness.js、store-engine-cache.js、store-engine-worker.jsOffice 准备状态、Store 可写缓存与后台验证退出与清理desktop-shutdown.js、owned-tasks.js有界退出、所属进程/Worker 收尾及临时目录身份校验OCR/字幕ocr.js、subtitles.js带质量/方向诊断的 OCR、多页 TIFF 和字幕时间轴转换资源与文本resource-policy.js、text-conversion.js统一图片/批量/PDF/OCR 资源上限与稳定错误码统一 ATX/Fenced Turndown 与严格 CSV 解析PDF 表格pdf-table-extractor.js、pdf-table-runtime.js复杂 PDF 表格几何识别、OCR 回退与工作簿模型元数据工具pe-metadata.js、scripts/inspect-pe.js读取 PE32/PE32 目标 OS 版本发布时检查解包应用 EXE构建脚本win7-build-profile.js、scripts/build-win7.js派生并构建隔离的 Windows 7 manifest补充几个从源码确认的细节Store 缓存根路径Store 默认逻辑缓存根使用%LOCALAPPDATA%/FMF/e和短目录名lo-加内容摘要前 32 个十六进制字符目的是避免 AppData 重定向后的路径溢出但完整内容键与 51 项清单校验不得因目录缩短而删减见 docs/ARCHITECTURE.md 的 Store Office 准备一节。图标来源build/icon.png是 NSIS、EXE、任务栏和快捷方式的 512×512 鼠鼠图标必须由 public/assets/mouse-format/mouse-idle.png 生成不可随意替换。引擎目录bin/存放本地转换引擎除bin/avs3/外被 Git 忽略换机时必须单独准备且大引擎通过extraResources打包而非作为普通源码提交。产品不变量UI、品牌与交互红线AGENTS.md 列出了一组不可破坏的产品约束这些约束直接映射到public/下的前端实现属于验收时最容易被忽略的部分保留鼠鼠品牌页面必须包含mouseMascot和鼠鼠状态图覆盖上传、识别、普通转换、批量、OCR、PDF、成功与失败 8 种状态打包图标必须是鼠鼠不得恢复闲鱼版橙色闪电或中性 UI。mouse-assets.test.js等测试会对这些资产做完整性校验。动作姿态约束胸前 V/U 是默认合拢双手动作姿态必须删除该 V/U 且只保留一对动作手带已知胸前手部冲突的工坊场景图不得作为正向参考。注意UI 插件文件完整性验证不等于角色画法正确。主题与真实内容外观支持浅色、深色、随系统三种模式尊重用户选择且不反色处理真实文档/图片内容不得用固定工坊场景替代文件转换工作流。DOM 安全用户运行时文本必须使用 DOM API /textContent禁止重新引入动态innerHTML与 electron-security.js 的同源信任策略配合。交互细节长文件名、错误和按钮文案必须可换行避免窄窗口溢出批量转换只显示所有选中文件都支持的目标格式交集输出名称保留原文件 basename含中文等非 ASCII 字符。保存语义单文件和批量保存均使用 Electron 对话框只有成功保存后才更新最近目录目标格式按源扩展名分别记忆用户修改后覆盖该源格式的默认目标首次语言跟随系统手动选择后使用flyingmouse.language.v1持久化。这些约束在 electron-main.js 的save-converted-file/save-converted-filesIPC 中有直接实现文件名先经path.basename收敛、下载地址必须通过trustedDownloadUrl校验、保存成功后才写回lastSaveDirectory。转换边界格式路由与资源预算转换边界是 AGENTS.md 中技术密度最高的一节与 server.js、config.js、resource-policy.js 的实现一一对应。PDF 分流与降级策略PDF → DOCX/XLSX先由pdf-classifier.js分类扫描/混合页尝试docstructure高级结构引擎。DOCX 仅在pdf.js允许的错误码下回退 OCR 段落并提示版式损失扫描 XLSX 不伪造成功或输出空表。原生 PDF → DOCX优先docengine并检查内容完整性DOCX 容器、引用资源、可编辑内容及原生文字覆盖失败回退 PDF.js/OCR。原生 PDF → XLSX使用 pdf-table-extractor.js 的文字坐标/表格模型按表格分工作表并处理跨页续表。PDF → PNG/JPG使用 Poppler多页输出 ZIP。轻量版、Win7、macOS 的可用引擎不同必须按能力检测呈现目标与降级说明。资源预算Admission Budgetsresource-policy.js 在进程加载时按totalmem/freemem计算有限预算核心算法为const workingBytes Math.max(16 * MiB, Math.min(GiB, Math.floor(total / 4), Math.floor(free / 2))); const maxImagePixels Math.floor(workingBytes / 16);由此得到maxImagePixels、maxImagePdfPixels、maxBatchBytes32 GiB、maxUploadBytes16 GiB、maxUploadFiles1000、maxPdfPages至少 64 页等限制。超预算明确报错ResourceLimitError含中英文双语消息不跳页、不自动降采样、不修改源文件Sharp 不得使用limitInputPixels: false保留解码像素保护。高级结构识别另有独立预算见 docs/ARCHITECTURE.md 与 AGENTS.md最多 500 页、单页 5,000 万像素50MP、每批最多 8 页且累计 1 亿像素144 DPI使用STRUCTURED_PDF_LIMITS与 PythonDEFAULT_LIMITSJS 串行分批且限制同时运行的完整识别请求每个原生进程启动前将 OMP/MKL 线程预算设为可用逻辑处理器数的一半至少 1、最多 4并要求至少 5 GiB 当前可用物理内存。不得宣称无限制或保证任意文件 1:1 还原。OCR、字幕与音频边界图片或扫描 PDF → TXT 使用 Tesseract OCR先校正方向和倾斜质量不足时尝试其他布局或旋转图片 DOCX/Markdown 与 PDF Markdown 需传递质量和重排版式提示。多页 TIFF 逐页识别动画仅识别首帧时明确提示。SRT/VTT/ASS/SSA 互转及 TXT 导出保留时间轴和 Unicode样式/位置/精度损失要提示不能静默丢弃无法表示的绘图或事件。音频边界音频源不得暴露 MP4/WebM/MKV/MOV 等视频容器目标音频仅支持普通格式MP3/WAV/FLAC/AAC/OGG/OPUS/WMA不支持任何音乐平台加密特殊格式NCM/KGG/mflac/mgg/kgma/mmp4/kwm/vpr 等 DRM 规避格式已下架存在法律风险见 docs/分发与合规规范.md。这一点在 config.js 中有明确注释。安全边界Electron 加固与同源信任AGENTS.md 的 Security boundaries 定义了不可妥协的安全基线全部可以在源码中找到对应实现沙箱三件套contextIsolation: true、nodeIntegration: false、sandbox: true见 electron-main.js 的webPreferences。精确同源校验渲染器导航和 IPC sender 必须匹配本次启动的精确127.0.0.1origin。electron-security.js 的isTrustedRendererUrl要求协议为http:、hostname 严格等于127.0.0.1且 URL 不含 username/passwordassertTrustedIpc用event.senderFrame?.url校验每个 IPC 请求。下载白名单下载只允许同源/downloads/id及/downloads/id/asset/id关联资源且不允许带 query 或 hash外部打开只允许无凭证 HTTPSisAllowedExternalUrl。文件名收敛文件名进入路径前继续使用path.basename收敛配合sanitize-filename与uniqueDestination防目录穿越与覆盖。签名与密钥本地安装包当前未签名signExecutable: false不得把证书、密码、令牌或私钥写入仓库。PDF.js 约束必须只从当前应用自己的node_modules/pdfjs-dist加载旧版入口回退不得借用父目录依赖所有getDocument调用保持isEvalSupported: false禁用动态求值Win7 派生运行时同样如此。运行时路径与诊断环境变量、日志定位Electron 启动时electron-main.js 的configureRuntime会设置一组环境变量AGENTS.md 与 runtime-paths.js 共同定义环境变量默认来源说明FLYINGMOUSE_RUNTIME_DIR%TEMP%\flyingmouse-format-runtime-pid每个进程独立的临时工作目录旧版固定目录在多开时互删产物已改为 PID 后缀隔离FLYINGMOUSE_FFMPEG_PATHresourcesPath/ffmpeg/ffmpeg.exeFFmpeg 可执行文件FLYINGMOUSE_AVS3_DECODER_PATHresourcesPath/avs3/avs3RM0Decoder.exeAVS3 解码器macOS 为 nullFLYINGMOUSE_LIBREOFFICE_PATHresourcesPath/libreoffice/.../soffice.comLibreOfficeStore 环境会先解析到每用户可写缓存FLYINGMOUSE_LOG_FILEuserData/debug.log分级日志文件FLYINGMOUSE_PDFTOPPM_PATH开发/测试覆盖resourcesPath/poppler/.../pdftoppm.exePoppler 栅格化FLYINGMOUSE_TESSDATA_PATH开发/测试覆盖resourcesPath/tessdataTesseract 语言数据PORT5177独立运行node server.js时的端口日志位置桌面日志位于%APPDATA%\FlyingMouse Format\debug.log独立运行node server.js时默认写%TEMP%\flyingmouse-format-debug.log若设置了FLYINGMOUSE_LOG_FILE则优先使用该文件见 server.js。logger.js是主进程、服务端和渲染器共用的分级日志渲染器通过log-eventIPC 把未捕获错误/console 诊断汇入同一个 debug.log。诊断导出界面提供导出诊断报告export-diagnosticsIPC生成包含版本、平台、引擎工具链、日志全文与环境的FlyingMouse-Format-diagnostics.txt写入同样走.partial暂存 rename 发布失败不会截断用户已有文件。命令速查开发、测试、打包AGENTS.md 给出了完整的 PowerShell 命令清单全部可以在 package.json 中找到对应脚本npm install # 安装依赖 npm run desktop # 启动 Electron 桌面应用electron . npm test # 运行完整测试套件node --test 指定大量测试文件 npm run test:ci # CI 等价测试 npm audit --omitdev # 生产依赖审计 npm run dist # electron-builder 打包 Windows NSIS--publish never npm run dist:lite # 生成移除 docstructure 的轻量版 npm run dist:appx # 生成 Microsoft Store APPXpowershell build-appx.ps1 node scripts/build-win7.js --prepare-only # 仅准备 Win7 staging npm run dist:win7 # 构建 Windows 7 Legacy 包 node scripts/inspect-pe.js output/win7-stage/dist/win-unpacked/FlyingMouse Format.exe npm audit --omitdev --prefix output\win7-stage几个关键注意点测试范围npm test的 pretest 阶段会先运行pdf-structure-engine、pdf-office-docx、pdf-office-xlsx、pdf-structure-score四组结构引擎测试完整测试列表覆盖格式转换、资源策略、安全加固、打包、进度、OCR、字幕、设置同步等近百个用例文件。沙箱 EPERM沙箱限制 Node 子进程时可能出现spawn EPERM这不是转换代码失败真实转换测试和打包应在普通 Windows PowerShell、cmd 或 CI 中运行。CI 触发条件.github/workflows/ci.yml 在 main push 或 PR 时恢复锁定引擎并运行npm test普通修复分支 push 不触发release.yml在v*标签或手动 dispatch 时进入构建/发布流程。引擎资产必须同时匹配ci-engines-v1.json与原生引擎锁不要跳过锁校验。打包与发布多通道构建约束这是 AGENTS.md 中篇幅最长、约束最细的部分涉及 Windows 完整版、轻量版、Win7 Legacy 与 Microsoft Store 四套产物。Windows 完整版NSIS win-unpackedbuild.files是显式白名单package.json新增被服务端引用的根目录 JS 模块时必须同步加入——docs/ARCHITECTURE.md 明确新根模块必须登记到build.files白名单源码可运行不代表模块已进入安装包。完整版按package.json打包 FFmpeg、AVS3、LibreOffice、Poppler、tessdata、Pandoc、docengine 和 docstructure 等引擎extraResourcesWindows OCR core 保留在app.asar.unpacked/node_modules/tesseract.js-core不得另加重复资源。保持signExecutable: false不要使用signAndEditExecutable: false——后者会跳过图标嵌入。npm run dist当前生成 NSIS 安装包和dist/win-unpacked不要假设 APPX 已同步生成dist/win-unpacked是本机开发/验收入口公开交付使用 Release 安装包。launcher 时序Windows 10/11 x64 使用native/launcher.cpp兼容启动入口afterSign完成原 Electron EXE 的 ASAR 绑定后将其改名为FlyingMouse Format Runtime.exe再安装主入口对应 scripts/attach-windows-launcher.js。禁止在afterPack提前替换需要 MSVC x64/Windows SDKWin7 派生禁用该 hookmacOS 跳过。重建纪律改动包内内容后必须整体重建 EXE 与 ASAR完整性哈希绑定不能只替换 ASAR签名包需重签名。源码说明更新不等于现有安装包已重建详见 docs/RELEASE.md。轻量版dist:litewindows-lite-profile.js 通过createWindowsLiteProfile从完整配置派生仅移除docstructure的extraResources写入engineProfile: lite产物名为${productName}-Lite-Setup-${version}-${arch}.${ext}。轻量版保留普通 PDF、轻量 OCR、Office、音视频、字幕及图片文字输出但高级扫描表格需完整版Word 可按规则回落 OCR。Win7 Legacy独立 staging只允许使用 Node.js 18–22推荐 22 LTS和专用win7-package-lock.json经npm ci重建output/win7-stage/派生运行时为 Electron 22.3.27、Sharp 0.32.6、PDF.js 2.16.105、turndown 7.2.0见 win7-build-profile.js根 manifest 的主线依赖不被改写。staging 测试由win7-build-profile.js的STAGING_EXCLUDED_TESTS过滤出能在 staging 自洽运行的文件排除conversion.test.js、pe-metadata.test.js、pandoc-engine.test.js等依赖根专属引擎的用例根专属真实引擎/打包管线测试由主线执行。产物写入精确的dist/FlyingMouse Format-Setup-version-win7-x64.exe脚本必须锁定 staging manifest/lockfile校验本地 builder 与extraResources各自在允许根目录内的 canonical containment 并拒绝 reparse point测试可以清理 staging不得覆盖标准安装包或移动既有版本标签。Win7 发布证据必须同时记录主线测试、staging 测试、内层 EXE PE 5.2用scripts/inspect-pe.js校验、当前系统冒烟、旧依赖审计及真实 Win7 设备待验收。Microsoft StoreAPPX/MSIXStore 使用同一鼠鼠 UI 源码单独构建的 Windows 10/11 x64 APPX/MSIX不得上传 NSIS也不得提交 Win7 Legacy 包。上传前必须校验 Identity、Publisher、版本、架构、包内模块、鼠鼠图标和 SHA-256对应 scripts/check-appx.py 与 scripts/check-public-package.js 的检查思路。Partner Center 的包验证通过认证通过公开发布是不同状态外部状态只能按现场回读结果和绝对日期记录不能由本地构建或上传成功推断参见 docs/REPAIR-0.7.10.md 的渠道状态表。Store 的 LibreOffice 可写化MSIX 安装目录C:\Program Files\WindowsApps\...对应用只读LibreOfficePortable 无法在只读目录初始化。因此electron-main.js的configureWritableLibreOfficeForStore会在加载服务配置前就确定每用户可写路径窗口创建后由 worker 异步复制与验证复制、校验、CSV→PDF 冒烟均通过失败才发布准备状态为pending/ready/failedOffice 转换等待准备图片、文本、字幕等独立路径可先工作office-readiness.js。Store settings 写入必须保留 settings-store.js 的EXDEV跨卷回退同卷用原子 rename跨卷先备份 recovery 再 copy主文件损坏时可重新读取。发布前检查清单发布前必须检查完整测试、当前能力表中实际支持格式的真实转换样本、npm audit --omitdev、ASAR 文件、引擎资源、EXE 产品版本、安装包 SHA-256、鼠鼠内嵌图标、桌面快捷方式、GitHub 资产摘要。AV3A 和平台加密音频不在当前输入能力表内遗留 AVS3 资源或环境变量不能作为转换支持的证据。文档地图与合规红线AGENTS.md 的 Documentation map 将仓库文档分成面向用户、面向开发者与面向商店三类README.md面向用户的中英文介绍、下载与格式范围。docs/ARCHITECTURE.md运行架构、状态和数据边界。docs/RELEASE.md本机测试、打包、桌面同步与 GitHub 发布清单。docs/HANDOFF.md恢复工作入口分渠道状态、来源与剩余风险指向 docs/REPAIR-0.7.10.md。docs/privacy-policy.html面向用户和 Microsoft Store 的隐私政策。docs/微软商店上架清单.md、docs/上架材料包.md商店渠道资料外部审核状态必须写绝对日期并注明是否已现场复核。著作权与许可2026-08-14 起强制执行作者为牢蜂LaoFeng所有公开发布物README、Release、安装包、UI、诊断文件、商店材料必须保留作者署名许可证为非商用——禁止销售、转卖、收费服务、电商平台倒卖、套壳换皮重新发布LICENSE 已从 MIT 更换为非商用许可。包内版本号、README 当前版本、当次 release notes、package-lock/win7-package-lock 必须与 package.json 的version同步历史 release notes 保留所属版本不能机械替换。结语一套可执行、可验收的工程契约AGENTS.md 表面上是给 AI Agent 的维护说明实质是飞鼠格式项目的工程契约它用 Source map 定义模块边界用 Product invariants 守住品牌与交互红线用 Conversion boundaries 约束格式路由与资源诚实性用 Security boundaries 固化 Electron 加固基线用 Packaging and release 规范多通道产物的一致性。无论你是要修改转换逻辑、排查启动故障还是构建发布新版本都可以先回到这份文件核对这条约束对应哪个模块、哪段源码、哪个测试再动手——这正是项目能长期保持离线可用、格式诚实、通道可追溯的关键。赞分享桌面应用文档音视频OCR【免费下载链接】flyingmouse-format飞鼠格式 FlyingMouse Format - Windows 免费文件格式转换工具离线可用内置 FFmpeg/LibreOffice/Poppler/Tesseract。图片/文档/表格/PPT/PDF/音视频/WPS 格式互转 OCR 批量转换音频仅支持普通格式。作者牢蜂LaoFeng仅供个人免费使用禁止商业售卖/转卖/套壳项目地址https://gitcode.com/gh_mirrors/fl/flyingmouse-format点击查看免费下载相关推荐x402 Bazaar 扩展实战用 Go 与 Gin 构建可被自动发现的付费 API动态路由 402 声明x402 Bazaar 扩展实战用 Go 与 Gin 构建可被自动发现的付费 API动态路由 402 声明 本篇技术指南以仓库中 examples/g桌面应用文档音视频OCRWand-Enhancer 教程本地打补丁3 个场景免费点亮 Wand 全部灰色 Pro 选项Wand Enhancer 教程本地打补丁3 个场景免费点亮 Wand 全部灰色 Pro 选项 Wand Enhancer 是一个完全免费、全程不联网的本地桌面应用文档音视频OCRiptvnator Stalker 系列季标记Season Marker显示修复剧集季号解析、进度保留与并发防串台实现解析iptvnator Stalker 系列季标记Season Marker显示修复剧集季号解析、进度保留与并发防串台实现解析 导读 本文基于 iptvnat桌面应用文档音视频OCR上一篇EmDash 沙箱插件评论管理读懂 comments:read 与 comments:moderate 能力的设计与实现下一篇Salt 项目 salt-run 命令完全指南在 Master 上执行 Salt Runner 的前端工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考