# @fireants/fireants 中文文档

规范地址：https://npmcn.com/package/%40fireants/fireants/

版本：0\.1\.20260913
npm 元数据更新时间：2026-09-14T03:37:36.274Z
中文译文更新时间：2026-11-14T19:24:57.620Z
软件包许可：SEE LICENSE IN LICENSE

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40fireants/fireants
原文对照：https://npmcn.com/package/%40fireants/fireants/?lang=original
项目主页：https://github.com/neurolabusc/cfireants#readme
源码仓库：https://github.com/neurolabusc/cfireants

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.2 MB，20 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-09-13T20:53:48.337Z
- 最新版本发布：2026-09-13T20:53:48.595Z
- 近 30 天下载量：7023（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 1 个）

## 中文简介

浏览器医疗图像注册 -- -- 刚性、外形、SYN和可变形的贪婪 -- -- 是一个主题模块,在页面被交叉原生隔离的地方被线接通。 一个C口的FireANTs.

## 安装

```sh
npm install @fireants/fireants
```

也可以使用：`pnpm add @fireants/fireants`、`yarn add @fireants/fireants`、`bun add @fireants/fireants`

## README

# @ 消防员/ 消防员

浏览器中的医疗图像注册:僵硬、相亲、SYN和贪婪 线性CPU或WebGPU后端可变形对齐. 两个NIfTI `ArrayBuffer`进入,扭曲的移动图像出来.

> **这是经过修改的衍生作品.** 模块汇编自 `cfireants`,纯 C 重新执行 [消防员](https://github.com/rohitrango/FireANTs) —— 说 **文件已经 已更改**,原始的Python没有被结转,这个包是 未经FireANTs作者认可。 在FireANTs下分发 许可证 v1.0 (`LICENSE`),其第4节要求版权通知, 许可文本和书目与之一同旅行;见 [第三次议会 NoTICES.md](https://npmcn.com/package/%40fireants/fireants/THIRD_PARTY_NOTICES.md),带有 引证. **如果您使用此方式发表作品,请引用 FireANTs 的论文.**
> 
> **在再分配审查之前,公开出版的成套出版物将封口.** 节次 4(a) 列举了允许的再分配形式,npm包是 无论是原始寄存器还是软件包管理器上的轮子 项目文件。 4(a)(三)(经修订的保留通知和 参考文献目录)是本套件所依赖的条款. 发布工作流程将 建造并测试柏油丸,但不会公布于 npm 或公开附加 直到仓库变量 `CFIREANTS_NPM_REDISTRIBUTION_APPROVED` 实值 明确设置为 `true` 书面许可或经审查的解释后 已记录.

## 安装

一旦再分配批准被记录,请从 npm 安装软件包 :

```sh
npm install @fireants/fireants
```

软件包已经命名 `fireants`· ; `cfireants` 原产地C的名称 可执行和内部WebAssembly资产。 每个 [GitHub 发布](https://github.com/neurolabusc/cfireants/releases) 还携带 无法改变的 npm 沥青球和 SHA-256 文件 `.github/workflows/release-npm.yml`。 。 。 .

```js
import { register } from '@fireants/fireants'

const { image, elapsedMs, variant } = await register(
  await fixedFile.arrayBuffer(),   // .nii or .nii.gz
  await movingFile.arrayBuffer(),
)
// image is gzipped if the moving input was
```

## CPU 线程和 WebGPU

三个造船厂 自动选择两个 CPU 变体; WebGPU 以 `backend: 'webgpu'`数字 :

| 变体 | 需求 | 小的2毫米对 | 质量 |
| --- | --- | --- | --- |
| `mt` | (单位:千美元) **跨原生个体** 页 次 | **13.6 会 议** | 0.9555 (英语) |
| `st` | 无 | **84.9s (中文(简体) )** | 0.9555 (英语) |
| `gpu` | `navigator.gpu` —— 说 **无隔离** | **15.7s (韩语)** | 0.9557 (中文(简体) ) |

Chrome,14个核心;质量是全球NCCC对照模板. **WebGPU 不是一个 目前为快的.** 如此大小的悬浮状态和部件仍然同步 cPU(尤其是SyN曲速倒置)上的成本比GPU所保存的还要高—— 同样的跑道是6.4 s土生土长。 它买的是它需要的 **无交叉来源 隔离**:在无法发送COOP/COEP的宿主上,比较不是15.7 s 对13.6s,对15.7s,对84.9s.

1毫米口径的单条大脑需要几分钟,这就是为什么 `st` 超时默认为30分钟 `mt`15岁.

线性构造是 `-pthread`,因此它导入了共享内存,并导入了一个页面 并非跨原生隔离 **无法即兴表演 失败.** 标志性游泳池的产卵 `DataCloneError: SharedArrayBuffer transfer requires self.crossOriginIsolated` 所以工厂既不决意也不拒绝 这个 因此,一揽子问题 _在此之前_ 它会得到任何东西, 安静地 带 `st` 当答案为否时——在 GitHub Pages 上无法设置的页面 这些头,仍然工作. `result.variant` 说哪一个跑.

为了得到 `mt`,服务于 **顶级文档** 改为:

```
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
```

把他们放在 `.wasm` 反之则无所作为:孤立是一种 属性。 注意费用,这是部署的通常原因 关闭隔离: 在 `require-corp` 每一个跨源子资源 页面加载 —— 图像、 字体、 分析、 嵌入 —— 必须自己发送 `Cross-Origin-Resource-Policy` 或被封锁.

在向用户保证快速运行前先询问:

```js
import { checkSupport } from '@fireants/fireants'

const { threaded, variant, threads, reasons } = checkSupport()
if (!threaded) console.warn(`falling back to ${variant}: ${reasons.join('; ')}`)
```

WebGPU 被单独询问, 因为唯一的诚实答案需要 `requestAdapter()` 并因此成为同步—— `navigator.gpu` 存在于浏览器中 然后把任何适配器递回去:

```js
import { checkWebgpuSupport, register } from '@fireants/fireants'

if (await checkWebgpuSupport()) await register(fixed, moving, { backend: 'webgpu' })
```

`backend: 'webgpu'` 永不退缩。 在没有设备的地方,它扔 `CfireantsError` 与 `code: 'no-webgpu'`所以有个叫GPU的人 发现而不是被交给 CPU 的结果标签为一个。 GPU建设 是单行本,因为它没有在设备上工作,所以 `threads` 实值 在那里是无意义的,是被拒绝的; `result.variant` 实值 `'gpu'`。 。 。 .

## API 密码

```ts
register(
  fixed: ArrayBuffer | ArrayBufferView,
  moving: ArrayBuffer | ArrayBufferView,
  options?: RegisterOptions,
): Promise<RegisterResult>

checkSupport(): SupportReport
checkWebgpuSupport(): Promise<boolean>
```

`RegisterResult` 实值 `{ image: ArrayBuffer, elapsedMs: number, variant: 'mt' | 'st' | 'gpu', threads: number, log: string }` —— 说 `elapsedMs` 是模块内的时间, `log` 是它写给studt and stderr的所有东西.

`SupportReport` 实值 `{ supported, threaded, variant, threads, reasons }`数字 : `supported` 只有在没有网络大会的情况下才有假, `threaded` 说 是否为 `mt` 可用,且 `reasons` 说为什么不是.

| 选项 | 默认 | 含义 |
| --- | --- | --- |
| `backend` | `'cpu'` | `'cpu'` 或者说 `'webgpu'`; WebGPU 清晰且永不悄悄倒回 |
| `transform` | `'syn'` | 预设阶段序列 : `'rigid'`, (中文(简体) ), `'affine'`, (中文(简体) ), `'syn'`, (中文(简体) ), `'greedy'` |
| `stages` | —— 说 | 明确阶段,顺序; 覆盖 `transform` |
| `verbose` | `0` | 0无声,一取一取一取一取二取入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入出出出入入入入入入入入入出出入入入入入入入入入入入入入入入入入入入入入入入出出出入入入入入出入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入入. `onLog` 只看这发出什么 |
| `gzip` | 匹配移动输入 | gzip 返回缓冲器 |
| `worker` | `true` 地点 `Worker` 已存在 | 运行在网络工作。 唯一真实的取消。 节点没有,所以它默认是假的 |
| `assetPath` | 此模块的目录 | 地点 `cfireants.js`编号 :`cfireants.wasm` 从 |
| `threads` | `true` | 仅限 CPU : `false` 部队 `st`;正整数封顶通过 `--threads` |
| `timeoutMs` | `900000` (单位:千美元)`mt`编号 :`gpu`) (中文(简体) ) `1800000` (单位:千美元)`st`(中文(简体) ) | 放弃等待。 SYN是分钟,不是秒 |
| `onLog` | —— 说 | 接收模块的输出线 |
| `signal` | —— 说 | `AbortSignal`; 下节 `worker: true` 终止模块 |
| `args` | —— 说 | 原文附在原文后 |

### 阶段

舞台是CLI自己的弦,通过未分出. **没有外壳**, (中文(简体) ), 故你应当记录他们 `SyN[0.1,0.5,1.0]`永远 `'SyN[0.1,0.5,1.0]'` 与 引用字符串内的内容.

```js
await register(fixed, moving, {
  verbose: 2,
  onLog: (line) => console.log(line),
  stages: [
    { transform: 'Rigid[0.003]',      metric: 'MI[32]', convergence: '[200x100x50,1e-6,10]', shrinkFactors: '4x2x1' },
    { transform: 'Affine[0.001]',     metric: 'MI[32]', convergence: '[200x100x50,1e-6,10]', shrinkFactors: '4x2x1' },
    { transform: 'SyN[0.1,0.5,1.0]',  metric: 'CC[5]',  convergence: '[200x100x50,1e-6,10]', shrinkFactors: '4x2x1' },
  ],
})
```

`metric` 线性阶段默认为MI,可变形阶段默认为CC, 匹配可执行文件。 如果两个图像都是脑部提取的,通过 `CC[5]` 时间 换句话说,在这样一对舞台上,它既准确又快。 时 `verbose: 2` 模块将进度写入 stderr, 哪个 `onLog` 按行接收 :

```
  SyN scale 2: 96x114x96
    iter 50/100 loss=-0.789890
```

如果您想要进度栏, 请分析它; 原始行也被加入 `result.log`。 。 。 .

### 齐普

主题模块链接 **无zlib** - C读写简单 `.nii` 仅 -- 因此所有压缩都发生在 TypeScript 中,通过 `DecompressionStream` 财务报告和审定财务报表 `CompressionStream`输入是由魔法字节而不是由文件名所嗅出,所以 `.nii` 这真的被咬了 仍然工作。 没有这些溪流的环境 获得一个 `no-compression-streams` 与其拒绝,不如拒绝.

### 线索

线状池的大小 `navigator.hardwareConcurrency`积极 整数封顶通过 CLI `--threads` 旗帜——14个核心是13.6 s 小2毫米对相机, `threads: 4` 是 29.8 s —— 仍然选择了线形构造, 因为单行本不能遵守任何价值,只能遵守1. `threads: false` 强迫单行道在孤立的一页上建立起来 这是值得的 当你宁愿离开核心 在页面.

节点豁免隔离规则:它拥有共享箭头缓冲器,不需要 头来使用它,然后以全宽运行线被构建.

### 炸弹

标记胶体在运行时由 URL 上载并定位它自己的 `.wasm` b. 通过其本身 `import.meta.url`,所以这两个文件必须留下 **邻接和 无污名**。Vite和Rollup既不重写该 URL ,也不释放资产. 复制 `cfireants-mt.js`, (中文(简体) ), `cfireants-mt.wasm`, (中文(简体) ), `cfireants.js`, (中文(简体) ), `cfireants.wasm`, (中文(简体) ), `cfireants-gpu.js`, (中文(简体) ), `cfireants-gpu.wasm`,以及 `worker.js` 离开这个包 `dist/` 进入某处服务,和指点 `assetPath` 写着:

```js
await register(fixed, moving, { assetPath: '/cfireants/' })
```

`assetPath` 必须是同源的: 它能提供动态 `import()` (单位:千美元) `new Worker()`,否则其中任何一方会运行第三方的代码与 访问病人的卷.

## 图像大小和内存

峰值内存跟踪 **已固定** 图像,不是移动的。 SYN 分配其 移动场、选择性瞬间和相通性中间体 图像的网格,所以超大小的移动量只花费它自己的存储.

| 固定 | 移动 | 峰顶 | 14行长墙 |
| --- | --- | --- | --- |
| 182x218x182, 1mm 模板 | 182x218x182 (英语) | 1.80 GB 数字 | 46.7s (单位:千美元) |
| 182x218x182, 1mm 模板 | 256x256x256 (英语) | 1.92 GB 数字 | 56.3s (韩语) |
| 256x256x256 (英语) | 182x218x182 (英语) | 3.88 GB (英语) | 185.1s (单位:千美元) |

asm32在 4 GB 时封住堆积, 浏览器标签给出的比节点少, 所以 最后一行没有头室,更大的固定图像会失败。 登记册 **改为** (单位:千美元) 1mm 的模板,然后通过大音量为 `moving`。 。 。 .

这个 **gpu (英语)** 建筑更紧:它的堆积是固定的 1 GiB,因为 标注的 WebGPU 端口不能与 `ALLOW_MEMORY_GROWTH`。它也会 需要适配器 `maxStorageBufferBindingSize` 适合最大的单 绑定:SyN的五道相关工作空间(144 MB用于1mm模板), 或三个贪婪和线性相(87 MB,128 MiB内部)的通道 基线)。 包装器要求适配器自己报告的尺寸限制,所以 有能力的GPU得到它们.

开始前,包装器从NIfTI两个标题读取 dim\[1..3\],工作 并对照 `maxStorageBufferBindingSize` 而上传最多的 `maxBufferSize`。 。 。 . 如果失败, 则指定需要的字节和拒绝的限度 . 这就是全部: **基线适配器随消息快速失效 行动,它没有获得运行1毫米SYN的能力.** 铺平工作空间是 修补它,它不会写。 使用贪婪、 CPU 后端或 a 这种设备上的更小的固定图像 .

## 错误

每一次拒绝都会扔出一个 `CfireantsError` 带有 `code` 您可以在 :

| 代码 | 何时 |
| --- | --- |
| `bad-input` | 不为矩阵缓冲/ 类型数组, 或为空 |
| `no-compression-streams` | gzip 需要,但是 `DecompressionStream`编号 :`CompressionStream` 缺席 |
| `unsupported-environment` | 没有网络大会。 一个没有交叉来源隔离的页面是 **没有** 错误 —— CPU 默默地获得单线段构建 |
| `no-webgpu` | `backend: 'webgpu'` 请求,没有 `navigator.gpu`,没有适配器,也没有设备。 从未默默降级到CPU |
| `unsupported-option` | 一个不好的选项, 一个跨源 `assetPath`,或 `threads` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}不能尊重它的建筑 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}我对它感到骄傲 |
| `timeout` | 模块未创建或未完成 `timeoutMs` |
| `registration-failed` | 或未写入输出 |
| `aborted` | 页:1 `AbortSignal` 发射 |

`error.log` 当失败来自内部时, 包含模块本身的输出 这个 没有任何退步:无声无息的登记 降级后,会还原出错的量.

## 大楼

```sh
npm install
npm run checkVersion
npm run build      # build the wasm, stage it into dist/, emit types, bundle
npm run typecheck
npm run smokePackage -- . ../validate/small
npm run smokeWebgpu -- .  # Chrome: packaged CPU/WebGPU Rigid→Affine→SyN parity
```

`npm run build` 运行 `build-wasm.sh` 首先,需要标注在 `PATH` ( 6. 0.2 是 CI 的指针) 并且从母库中的 C 源来构建. `scripts/copy-wasm.mjs` 然后是阶段 所有六件文物都出来了 `js/wasm/` 输入 `dist/`; 设置 `CFIREANTS_WASM_DIR` 如果写在别的地方.

`src/main.c`, (中文(简体) ), `package.json`,在 `package-lock.json`, (中文(简体) ), 而释放标记必须带有相同的版本。 CI 检查这个而不是 重写释放元数据 。 调用请求和推 运行本地测试,建设, 和烟雾测试两种CPU变体 从包装的柏油球。 浏览器 CPU/WebGPU 本地对等检查 `npm run smokeWebgpu`。 。 。 .

## 出版

第一次出版需要一次性的靴子 因为Npm信任的出版商 从已有软件包的设置中配置 :

1.  记录再分配审批并设置 GitHub 仓库变量 `CFIREANTS_NPM_REDISTRIBUTION_APPROVED=true`。 。 。 .
2.  添加颗粒 npm 发布令牌为 GitHub 动作密钥 `NPM_TOKEN`。 。 。 .
3.  提交版本为 `src/main.c`, (中文(简体) ), `js/package.json`,以及 `js/package-lock.json`,标记以相同的 `v`\- 前缀版本, 并发布"GitHub"发行.
4.  在新软件包的 npm 设置中, 添加 GitHub 动作信任的发布器 页:1 `neurolabusc/cfireants`工作流程 `release-npm.yml`直接 `npm publish` 允许。 然后删除 `NPM_TOKEN` 暗号.

该版本从源头构建,验证版本,运行原生和包装 WASM 烟雾测试,出版 `@fireants/fireants` 有出处,有随从 确切的柏油球加上它的SHA-256校验和到GitHub发行. 未来 以短寿命的 OIDC 证书向 npm 发布认证,不需要 npm 符号 .

## 常见问题

### @fireants/fireants 是什么？

浏览器医疗图像注册 -- -- 刚性、外形、SYN和可变形的贪婪 -- -- 是一个主题模块,在页面被交叉原生隔离的地方被线接通。 一个C口的FireANTs\.

### 如何安装 @fireants/fireants？

在项目目录运行 npm install @fireants/fireants，或使用 pnpm add / yarn add / bun add。

### @fireants/fireants 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @fireants/fireants 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @fireants/fireants 可以商用吗？

@fireants/fireants 使用 SEE LICENSE IN LICENSE 许可。许可条款写在包内的独立文件中，请阅读该文件确认可否商用。以上为概括，不构成法律意见，请以许可原文为准。

### @fireants/fireants 的下载量有多少？

根据 npm 官方下载统计，@fireants/fireants 在 2026/10/15 – 2026/11/13 这 30 天内被下载 7,023 次，日均约 234 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @fireants/fireants 还在维护吗？

最新版本 0\.1\.20260913 发布于 2026/09/14（2 个月前）；至今共发布 1 个版本，其中过去 12 个月发布了 1 个；首次发布于 2026/09/14。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

