从你的数据
批量生成 Anki 卡片。

Anki Forge 是开源 Anki APKG 生成库,以 Rust 为核心,提供 Rust、Python 和 Node.js 接口。打包媒体、使用自定义模板,并在分发前检查更新。

四种卡片,一个 Anki 牌组。

选择开发语言

使用 Anki Forge 0.3.1 导出 spanish.apkg。导出牌组无需安装 Anki。

Python

CPython 3.11+
python -m pip install ankiforge==0.3.1
用 Python 开始

让 AI 帮你编写牌组程序

选择开发语言,描述任务,再把任务说明粘贴给 AI 编程助手。

Rust

给 AI 的任务说明 · Anki Forge 0.3.1
请帮助我在 Rust 项目中使用 Anki Forge 0.3.1。
运行时要求:Rust 1.92+

只使用该版本公开文档中的 `ankiforge` 包和公开 API。不要使用 git/path
依赖、内部工具、仅源码可用的 API、未发布方法或猜测出来的方法。

我的目标:
<描述你的需求>

请按以下要求完成:
1. 先检查现有项目,再决定需要新增或修改哪些文件。
2. 给出准确的安装命令:cargo add ankiforge@0.3.1
3. 生成最小但完整、可以直接运行的程序,列出新增或修改的文件。
4. 输出持久化的 `.apkg`,并使用稳定的 namespace 和 note key。
5. 给出运行命令、预期输出和验证步骤。
6. 如果涉及媒体、自定义模板、图片遮挡或牌组更新,请遵循文档中的流程,
   不要自行猜测 API。更新时保留上一份原始分发 APKG 作为基线,不使用 Anki 重新导出的包。
7. 只有在语言、输入格式、输出路径或身份规则无法判断时才提问。

快速开始文档:https://ankiforge.dev/zh-cn/docs/quickstart/
Rust 1.92+
cargo add ankiforge@0.3.1

Node / TypeScript

给 AI 的任务说明 · Anki Forge 0.3.1
请帮助我在 Node / TypeScript 项目中使用 Anki Forge 0.3.1。
运行时要求:Node.js 22.13+

只使用该版本公开文档中的 `ankiforge` 包和公开 API。不要使用 git/path
依赖、内部工具、仅源码可用的 API、未发布方法或猜测出来的方法。

我的目标:
<描述你的需求>

请按以下要求完成:
1. 先检查现有项目,再决定需要新增或修改哪些文件。
2. 给出准确的安装命令:npm install --include=optional ankiforge@0.3.1
3. 生成最小但完整、可以直接运行的程序,列出新增或修改的文件。
4. 输出持久化的 `.apkg`,并使用稳定的 namespace 和 note key。
5. 给出运行命令、预期输出和验证步骤。
6. 如果涉及媒体、自定义模板、图片遮挡或牌组更新,请遵循文档中的流程,
   不要自行猜测 API。更新时保留上一份原始分发 APKG 作为基线,不使用 Anki 重新导出的包。
7. 只有在语言、输入格式、输出路径或身份规则无法判断时才提问。

快速开始文档:https://ankiforge.dev/zh-cn/docs/node-quickstart/
Node.js 22.13+
npm install --include=optional ankiforge@0.3.1

Python

给 AI 的任务说明 · Anki Forge 0.3.1
请帮助我在 Python 项目中使用 Anki Forge 0.3.1。
运行时要求:CPython 3.11+

只使用该版本公开文档中的 `ankiforge` 包和公开 API。不要使用 git/path
依赖、内部工具、仅源码可用的 API、未发布方法或猜测出来的方法。

我的目标:
<描述你的需求>

请按以下要求完成:
1. 先检查现有项目,再决定需要新增或修改哪些文件。
2. 给出准确的安装命令:python -m pip install ankiforge==0.3.1
3. 生成最小但完整、可以直接运行的程序,列出新增或修改的文件。
4. 输出持久化的 `.apkg`,并使用稳定的 namespace 和 note key。
5. 给出运行命令、预期输出和验证步骤。
6. 如果涉及媒体、自定义模板、图片遮挡或牌组更新,请遵循文档中的流程,
   不要自行猜测 API。更新时保留上一份原始分发 APKG 作为基线,不使用 Anki 重新导出的包。
7. 只有在语言、输入格式、输出路径或身份规则无法判断时才提问。

快速开始文档:https://ankiforge.dev/zh-cn/docs/python-quickstart/
CPython 3.11+
python -m pip install ankiforge==0.3.1

导出耗时实测

Rust Project API / genanki 0.13.1 · 每组 1,000 条 Basic 笔记

52.7 ms导出 1,000 条纯文本笔记
45.7–53.9%五个实测工作负载的耗时降幅

Rust Project API · Apple M1 Pro · 10 次运行中位数

文本、图片、音频,
五种场景都更快。

每组测试包含 1,000 条 Basic 笔记。五组测试覆盖纯文本、独立媒体和共享媒体等场景。Anki Forge Rust API 的导出耗时比 genanki 低 45.7–53.9%。

Anki Forge Rustgenanki
纯文本耗时低 49.8%

52.7 ms / 105.0 ms

不重复图片耗时低 52.9%

150.7 ms / 320.2 ms

不重复音频耗时低 53.3%

128.7 ms / 275.4 ms

图片与音频,不共享文件耗时低 53.9%

110.5 ms / 239.5 ms

图片与音频,共享文件耗时低 45.7%

61.4 ms / 112.9 ms

这些结果测量牌组生成,不代表 Anki 导入或复习速度;其他硬件与工作负载可能不同。 测量方法与原始数据(英文)

查看代码,预览卡片。

切换可运行的 Rust 示例、翻转卡片预览,并下载对应牌组。

Rust 源码 → 浏览器预览
let (front, back) = ("hola", "hello");
let mut project = Project::new("spanish")?.default_deck("Spanish");
project.add("es:hola", Note::basic(front, back))?;
let built = project.build(BuildOptions::to(output.join("spanish.apkg")))?;

Spanish
西班牙语 → 英语

hola

它是什么意思?

已显示问题。

这里是导出内容的浏览器预览;导入 APKG 后可在 Anki 中检查。

让笔记持续完善,
保留原有笔记 ID。

修正定义或补充示例时,保留稳定的笔记 ID,并使用上一版分发时的原始 APKG,让 Anki Forge 在再次导出时识别原有笔记。

了解牌组更新
稳定笔记 IDes:hola
正面

hola

背面

hello

试着修改内容。

比较结果: RISK.NOTE_CHANGED (low). 发布策略: 允许本次更改.

下载 v1下载 v2比较报告

请保留原始分发 APKG。导入设置与较新的本地编辑会影响更新。 更新指南

导出前发现问题。

通过诊断检查缺失字段、媒体和模板问题,让校验成为构建流程的一部分。

了解校验

你的卡片,你的模板。

从 Basic 和 Cloze 开始,或定义自己的笔记类型。把 HTML、CSS 和媒体放入可复用的模板包。

了解模板

从第一个牌组到下一次更新

从 CSV 表格、JSON 数据或 AI 起草的卡片开始,按完整教程导出牌组,再添加媒体并检查更新。