OCR 隐私识别会自动侦测画面中的敏感文字,并自动标记需要遮蔽的区域。但开发过程中我们发现 OCR 仍有它的先天极限,偶有识别不到或识别错的地方,但我们并不继续 push 工具必须完美。
Nova 想让识别错误不止于工具的失败告终,而是成为协作的交接点。
我们让隐私遮蔽的马赛克变成浮动图层,并可以手动调整范围大小:OCR 没盖到的,用户接力调整。
识别失误从「错误」变成「分工」,工具的不完美仍无损用户的控制权。
OCR 可能只能完成自动化 90% 的任务,但用户轻轻一拉手动马赛克就可以完成本来 100% 都得自己手动的任务。
而且遮错了也没关系——马赛克是独立的浮动对象,undo 一键删除。没有任何结果是不可逆的。
扫 QR Code 这件事,表面上只有「扫到」和「没扫到」两种结果。但 VAS 不这样看——它看的是用户意图,然后根据意图决定下一步要做什么。
这也是一种人机协作:用户用截图的姿态说话,工具读懂了。不需要语言,不需要按钮,不需要菜单——你怎么框,就是你想要什么。工具在读的不是指令,是行为语言。
我们判断当用户想精准侦测 QR Code 时,自然会尽可能在选取框中完整而且仅有框 QR Code——这个动作本身就是意图的宣告。QR Code 被框得占选取区域越大,识别越准,信心度越高,工具越能直接行动。用户与工具之间,形成了一种不需要言语的默契。
工具不应该在自己不确定的时候假装确定。确定你要 QR Code,就直接行动打开链接;信心度模糊,就先问你是否要打开链接;信心度太低,静默打开编辑器交给你判断。每一个阈值背后,都是一个「我知道自己知道多少」的诚实设计。
VAS 的呼吸灯不只是等待的象征——它在侦测环境。当用户复制了一个网址靠近,呼吸灯会轻轻询问:「要帮你截这个网页吗?」用户同意,截图完成,编辑器打开。
而当用户拖着一个文件或从浏览器复制一张图片靠近呼吸灯时,呼吸灯就会像张开双手拥抱文件一样,展开工具栏收纳文件或立刻展开编辑器,等待用户下一步的操作。
最好的工具不让你切换到「工具模式」。它待在你的环境里,读懂你在做什么,然后再用行动回应。
* 呼吸灯截取网页、开启复制图片为 Tauri 专属功能;Electron 版仅提供拖曳图片于工具栏开启功能。
当我们开发出了「延迟截图」后,全屏幕截图功能在双屏幕模式时提供的 Apple 原生菜单反而变成了摩擦力。
延迟截图是为了捕捉鼠标事件——报错状态、hover 效果、debug 瞬间而诞生的功能。用户设定倒数等待时,鼠标必须留在屏幕的某个角落。
但原生的双屏幕菜单在读秒结束后,却会从工具栏跳出来要求用户在截图前先回去工具栏选择要截哪个屏幕——就像你自拍已经设定好相机秒数,结果相机结束读秒时却在预览屏幕问你「你要拍哪边?」一样荒谬。
VAS 舍弃 Apple 原生菜单,改用自制图层遮罩覆盖全屏幕:没有延迟时点哪个屏幕就截哪个,按 Enter 直接合并成双屏幕截图。
更进一步:当用户设了延迟规则,VAS 会默认截取鼠标当下所在的屏幕——连选都不用选,工具自己判断。用户根本不会意识到这个决策在背景发生过。
当工具种类越来越多——点、线、面、文字、符号——每个对象都有颜色、线条、大小、方向这些属性。重复叠加的属性变成隐形技术债,功能可以用,但结构像拼装车。
Tauri VAS 的重构计划历经 11 个 Sprint,走过六个架构面向:座标系统统一、渐层系统整合、资料模型规范化、TOOL_SCHEMA 属性面板框架(覆盖全 10 种工具)、几何逻辑与渲染管线重写、Undo/Redo 记忆体管理。
这项工作仍在进行中——会持续到我们从 KM 中汲取的教训被完全转化在系统重构里。
Sprint 27,對話氣泡工具加入。透明度、陰影、漸層——那些其他工具早就有的屬性,在這裡直接繼承,不用重造任何一個輪子。這才是真正的完成信號。不是一份宣告,而是一個新工具,被架構自然接住的那一刻。
这次重构也连带让 Electron 版受惠——底层统一,两个平台都跑在同一套逻辑上,稳定性自然提升。
Electron 虽然不再新增功能,但也需保持功能完整、免费、稳定,让用户有机会先信任 VAS,再决定要不要升级 Tauri。一次重构,把整个双平台长期营运策略都撑起来了。