NiiVue 封装生态把脑影像查看直接嵌进 VS Code 里

2026-09-13

围绕共享 NiiVue 渲染核做 VS Code、Jupyter 与 Python 封装,质控不必再导出文件;截至 2026 年 1 月,VS Code 约 2.2 万独立用户,iPyNiiVue 约 3.1 万次下载,核心每周约 2200 次。

这篇在解决什么

神经影像分析要看体积数据、皮层网格、纤维束和连接组,工具却长期锁在 AFNI、FSLeyes、FreeSurfer、MRIcroGL 这类桌面 OpenGL 程序里。笔记本、云端、VS Code 远程会话打不开它们,质控时只能把文件导出再开另一个软件。nilearn、ggseg 这类脚本化包能出图,改一个窗宽就要改代码重跑,交互几乎为零。Chopra 等人盘过 R/Python/MATLAB 的程序化可视化,常见数据类型被拆在一堆语言专用包里,没有统一的原地查看。

NiiVue 本身是 TypeScript 写的浏览器渲染核,WebGL 2.0 与 WebGPU 双后端。这篇不重做渲染器。工作是把同一核嵌进研究者每天待的环境:编辑器、笔记本、桌面、网页。

方法

四类封装共用 npm 包 @niivue/niivue,解析、绘制、基本交互都在宿主 webview 里完成,不另起查看器进程。

核心把完整场景序列化成 NVDocument,一份 CBOR 文档记下体积、网格、相机、色图、阈值、绘图和标注。换封装打开仍是同一场景,可视化这一步本身可以进版本库。格式覆盖 NIfTI、GIfTI、TCK/TRK 以及 FreeSurfer、MRtrix、AFNI 的家底;DICOM、MINC、TIFF 走插件。可选的 niimath 是 fslmaths 的精简再实现,编成 WebAssembly,目前只接到桌面应用,做阈值、平滑、掩膜。

结果

没有与 FSLeyes 或 MRIcroGL 的对照实验。给出的是测试覆盖与装机数字,统计截至 2026 年 1 月。

组件自动测试采用
NiiVue 核心单测 + 像素级回归 + coveragenpm 约 2200 次/周
VS Code 扩展单测 + coverageMarketplace 约 2.2 万独立用户,Open VSX 另 2900 次下载
JupyterLab 扩展基本功能 + coverage与 VS Code 共用 Preact 层
iPyNiiVue多 Python/OS 单测,gallery 全量 e2e约 3.1 万次下载
PWA单测 + 大量 e2e未公布用量
Electron 桌面单测 + 回归未公布用量
Apple 原生无约 1.5 万次曝光、700 次安装
Niivue.jl仅单测—
FreeBrowse、niivuer无niivuer 接到颅内脑电框架 RAVE 与 YAEL

外部项目接入超过 30 个。CI 对核心做两类回归:解析层核对头字段、体素强度、几何变换和派生统计;渲染层在无头浏览器里把复杂场景与提交的参考图逐像素对比。

为什么重要

对跑 fMRI 或 DTI 管线的人,直接少一次「导出再开查看器」。远程集群上可以在 VS Code 里看配准,笔记本里改掩膜立刻看到,HTML 附件把可复现场景交给合作者。渲染或格式支持改一次,所有封装一起吃到,这和每家桌面软件各自维护一套 OpenGL 查看器相反。

这是工程整合,不是新的配准或分割算法。判断它有没有用,看的是你现在是不是还在 scp 一个 NIfTI 再开 FSLeyes。

局限与存疑

作者点出共享核心是单点故障,所以核心测试最重,封装各自再加测试和真实用户。Apple 原生、FreeBrowse、R 绑定当时没有自动测试;PWA 与 Electron 没有用量。封装还在迁到新版核心。没有可用性对照实验,2.2 万 VS Code 用户不能说明比 FSLeyes 更快或更准。临床场景只被顺口提到,没有法规或诊断验证。前瞻里写了 Streamlit、MATLAB webview、BIDS 溯源和把 niimath 接到更多封装,都还没做成。

术语

原文与代码

社区讨论

全部论文解读