Not in the top 1,000 by GitHub stars

Mran/anki-deck-builder

Claude skill: turn any study material (PDF/Word/PPT/web/video) into beautiful, editable Anki decks · 把任何学习材料变成好看、可随时修改的 Anki 卡包

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

42f16e1cde35 → 42f16e1cde35

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 42f16e1cde35

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 42f16e1cde35b7063442be8ceaa83bcdcde4a2c4

5GitHub stars
2stars in 7 days
1skill in this repository
1commit in 30 days

Heat

4.8
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 29, 2026Nov 6, 20265

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

anki-deck-builder

When your agent uses it

把任何学习材料(PDF、Word/docx、PPT/pptx、txt/markdown、网页链接、YouTube/B站视频、本地音视频、字幕、图片、epub)转化为可直接导入 Anki 的 .apkg 卡包,支持翻转卡、双向卡、填空卡(cloze)、选择题(单选/多选)、判断题、输入答案卡,并带有精心设计、适配夜间模式和手机端的卡片样式。整个设计过程(知识点、卡片、样式、决策日志)保存在一个项目文件夹里,之后可以随时换风格、换卡片类型、增删卡片而不丢失 Anki 复习进度。只要用户提到 Anki、记忆卡、闪卡、flashcard、间隔重复、"把这份资料做成卡片/题目来背",或想修改之前生成的 Anki 卡包的样式/题型,就使用这个 skill——即使用户没有明确说"Anki"。

What it loads into context

Frontmatter

245 tokens

Always available to the agent

SKILL.md

2,690 tokens

When the skill is activated

Reference documents

10,569 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 为什么要分层
  2. 工作流程
  3. 后续修改

Scripts executed separately

  • assets/js/mcq.js
  • assets/js/tf.js
  • evals/pptx-to-flip-and-mcq/place-files.sh
  • evals/restyle-and-add-truefalse/place-files.sh
  • evals/txt-to-cloze-truefalse-paper/place-files.sh
  • scripts/_common.py
  • scripts/anki_connect.py
  • scripts/build.py
  • scripts/ingest.py
  • scripts/project.py

Files

  • .gitattributesasset46 bytes
  • .gitignoreasset39 bytes
  • LICENSEasset1,061 bytes
  • README.mddoc9,176 bytes
  • SKILL.mdcore9,059 bytes
  • SKILL.mdcore9,059 bytes
  • SKILL.mdcore9,059 bytes
  • SKILL.mdcore9,059 bytes
  • SKILL.mdcore9,059 bytes
  • SKILL.mdcore9,059 bytes
  • assets/base.cssasset7,665 bytes
  • assets/i18n.jsonasset1,413 bytes
  • assets/js/mcq.jsruns4,046 bytes
  • assets/js/tf.jsruns1,664 bytes
  • assets/note_types/basic/back.htmlasset319 bytes
  • assets/note_types/basic/front.htmlasset115 bytes
  • assets/note_types/basic/model.jsonasset156 bytes
  • assets/note_types/cloze/back.htmlasset256 bytes
  • assets/note_types/cloze/front.htmlasset120 bytes
  • assets/note_types/cloze/model.jsonasset162 bytes
  • assets/note_types/mcq/back.htmlasset643 bytes
  • assets/note_types/mcq/front.htmlasset446 bytes
  • assets/note_types/mcq/model.jsonasset185 bytes
  • assets/note_types/reversed/back.htmlasset325 bytes
  • assets/note_types/reversed/back2.htmlasset325 bytes
  • assets/note_types/reversed/front.htmlasset121 bytes
  • assets/note_types/reversed/front2.htmlasset120 bytes
  • assets/note_types/reversed/model.jsonasset245 bytes
  • assets/note_types/truefalse/back.htmlasset726 bytes
  • assets/note_types/truefalse/front.htmlasset487 bytes
  • assets/note_types/truefalse/model.jsonasset176 bytes
  • assets/note_types/typein/back.htmlasset278 bytes
  • assets/note_types/typein/front.htmlasset176 bytes
  • assets/note_types/typein/model.jsonasset160 bytes
  • assets/themes/minimal.cssasset1,341 bytes
  • assets/themes/nord.cssasset1,264 bytes
  • assets/themes/paper.cssasset1,292 bytes
  • assets/themes/vivid.cssasset1,412 bytes
  • docs/themes-night.pngasset221,512 bytes
  • docs/themes.pngasset253,626 bytes
  • docs/types.pngasset202,112 bytes
  • evals/pptx-to-flip-and-mcq/case.yamlasset355 bytes
  • evals/pptx-to-flip-and-mcq/files/tcp-lecture.pptxasset40,424 bytes
  • evals/pptx-to-flip-and-mcq/graders/01-an-importable--apkg-exists-and.mddoc117 bytes
  • evals/pptx-to-flip-and-mcq/graders/02-the-deck-contains-both-basic.mddoc108 bytes
  • evals/pptx-to-flip-and-mcq/graders/03-multiple-choice-notes-outnumber-basic-fl.mddoc91 bytes
  • evals/pptx-to-flip-and-mcq/graders/04-cards-cover-at-least-4.mddoc153 bytes
  • evals/pptx-to-flip-and-mcq/graders/05-at-least-one-card-uses.mddoc171 bytes
  • evals/pptx-to-flip-and-mcq/graders/06-every-multiple-choice-note-has-a.mddoc97 bytes
  • evals/pptx-to-flip-and-mcq/graders/07-card-css-defines-night-mode-styling.mddoc105 bytes
  • evals/pptx-to-flip-and-mcq/graders/08-single-answer-mcq-correct-answers-are.mddoc136 bytes
  • evals/pptx-to-flip-and-mcq/graders/09-multiple-choice-cards-are-interactive--o.mddoc155 bytes
  • evals/pptx-to-flip-and-mcq/graders/10-output-keeps-the-design-process.mddoc145 bytes
  • evals/pptx-to-flip-and-mcq/place-files.shruns62 bytes
  • evals/pptx-to-flip-and-mcq/prompt.mddoc334 bytes
  • evals/restyle-and-add-truefalse/case.yamlasset415 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/DESIGN_LOG.mddoc123 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/build/history.jsonlasset269 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/cards.yamlasset1,829 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/knowledge.yamlasset833 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/project.yamlasset380 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/sources/cell-2.mddoc147 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/sources/cell.mddoc192 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/sources/sub.mddoc105 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/style/brief.mddoc103 bytes
  • evals/restyle-and-add-truefalse/files/cell-biology/style/theme.cssasset1,341 bytes
  • evals/restyle-and-add-truefalse/graders/01-an-importable--apkg-exists-and.mddoc117 bytes
  • evals/restyle-and-add-truefalse/graders/02-project-yaml-uid-is-unchanged.mddoc72 bytes
  • evals/restyle-and-add-truefalse/graders/03-all-7-original-notes-keep.mddoc150 bytes
  • evals/restyle-and-add-truefalse/graders/04-existing-note-type-ids-are.mddoc137 bytes
  • evals/restyle-and-add-truefalse/graders/05-at-least-one-new-true-false.mddoc176 bytes
  • evals/restyle-and-add-truefalse/graders/06-the-default-non-night--card-background.mddoc109 bytes
  • evals/restyle-and-add-truefalse/graders/07-card-css-contains-both-a.mddoc109 bytes
  • evals/restyle-and-add-truefalse/graders/08-design-log-md-has-a-new-entry.mddoc95 bytes
  • evals/restyle-and-add-truefalse/graders/09-the-previous-style-is-kept.mddoc126 bytes
  • evals/restyle-and-add-truefalse/place-files.shruns62 bytes
  • evals/restyle-and-add-truefalse/prompt.mddoc441 bytes
  • evals/txt-to-cloze-truefalse-paper/case.yamlasset335 bytes
  • evals/txt-to-cloze-truefalse-paper/files/tang-notes.txtdoc1,106 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/01-an-importable--apkg-exists-and.mddoc117 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/02-the-deck-contains-both-cloze.mddoc98 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/03-at-least-2-false-statements.mddoc155 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/04-true-and-false-statements-are.mddoc123 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/05-every-cloze-deletion-is-a.mddoc103 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/06-card-css-uses-a-serif.mddoc90 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/07-card-css-defines-night-mode-styling.mddoc105 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/08-true-false-cards-are-interactive--true-f.mddoc153 bytes
  • evals/txt-to-cloze-truefalse-paper/graders/09-output-keeps-the-design-process.mddoc145 bytes
  • evals/txt-to-cloze-truefalse-paper/place-files.shruns62 bytes
  • evals/txt-to-cloze-truefalse-paper/prompt.mddoc308 bytes
  • examples/cell-biology/DESIGN_LOG.mddoc123 bytes
  • examples/cell-biology/cards.yamlasset1,829 bytes
  • examples/cell-biology/knowledge.yamlasset833 bytes
  • examples/cell-biology/project.yamlasset380 bytes
  • examples/cell-biology/sources/cell-2.mddoc147 bytes
  • examples/cell-biology/sources/cell.mddoc192 bytes
  • examples/cell-biology/sources/sub.mddoc105 bytes
  • examples/cell-biology/style/brief.mddoc103 bytes
  • examples/cell-biology/style/theme.cssasset1,341 bytes
  • references/card-types.mddoc6,122 bytes
  • references/ingestion.mddoc3,074 bytes
  • references/project-format.mddoc2,876 bytes
  • references/styling.mddoc7,439 bytes
  • requirements.txtdoc136 bytes
  • scripts/_common.pyruns6,994 bytes
  • scripts/anki_connect.pyruns2,682 bytes
  • scripts/build.pyruns15,554 bytes
  • scripts/ingest.pyruns15,796 bytes
  • scripts/project.pyruns4,573 bytes
Read SKILL.md

# Anki Deck Builder

把材料 → 知识点 → 卡片 → 样式 → `.apkg`,并且每一层都落盘,方便以后只改其中一层。

## 为什么要分层

用户以后最常见的诉求是"换个风格"或"把这些翻转卡改成选择题"。如果卡片是一次性从材料直接生成的,任何修改都要从头再来,还会产生新的 note,导致 Anki 里的复习记录丢失。所以本 skill 把产物拆成四层,每层独立可改:

| 层 | 文件 | 改它意味着 |
|---|---|---|
| 来源 | `sources/*.md`, `media/` | 加新材料 |
| 知识点(与题型无关) | `knowledge.yaml` | 改"学什么" |
| 卡片(题型 + 字段) | `cards.yaml` | 改"怎么考" |
| 样式 | `style/theme.css`, `style/overrides.css`, `style/brief.md`, 可选 `style/templates/` | 改"长什么样" |
View the complete source on GitHub

Skills included

  • anki-deck-builder

Repository facts

License
MIT
Created
Oct 28, 2026
Last pushed
Oct 28, 2026
Forks
0
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 4, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 5 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 24 signals by file

README.md

  • Network accessline 36
    git clone https://github.com/Mran/anki-deck-builder.git ~/.claude/skills/anki-deck-builder
  • Network accessline 78
    https://www.youtube.com/watch?v=xxxx 这个视频讲的内容帮我做成 anki 卡片
  • Network accessline 172
    # 导入材料 python scripts/ingest.py 讲义.pdf 课件.pptx https://example.com/article --project 我的卡包
  • Network accessline 173
    python scripts/ingest.py 讲义.pdf 课件.pptx https://example.com/article --project 我的卡包

assets/js/mcq.js

  • Executable scriptline 1
    Executable file

assets/js/tf.js

  • Executable scriptline 1
    Executable file

evals/pptx-to-flip-and-mcq/place-files.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

evals/restyle-and-add-truefalse/place-files.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

evals/txt-to-cloze-truefalse-paper/place-files.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

references/ingestion.md

  • Network accessline 21
    python $SKILL/scripts/ingest.py lecture.pptx notes.pdf https://example.com/article --project ./我的牌组
  • Network accessline 22
    python $SKILL/scripts/ingest.py "https://www.youtube.com/watch?v=..." --project ./我的牌组 --lang zh

scripts/_common.py

  • Executable scriptline 1
    Executable file

scripts/anki_connect.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 18
    URL = "http://127.0.0.1:8765"
  • Network accessline 22
    body = json.dumps({"action": action, "version": 6, "params": params}).encode("utf-8")     try:         with urllib.request.urlopen(urllib.request.Request(URL, body), timeout=10) as r:
  • Network accessline 23
    try:         with urllib.request.urlopen(urllib.request.Request(URL, body), timeout=10) as r:             res = json.loads(r.read())
  • Network accessline 24
    with urllib.request.urlopen(urllib.request.Request(URL, body), timeout=10) as r:

scripts/build.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/ingest.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 216
    def h_url(url, ctx, stem):     req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0 (ankiskill ingest)"})
  • Network accessline 217
    req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0 (ankiskill ingest)"})
  • Network accessline 218
    with urllib.request.urlopen(req, timeout=30) as r:
  • Possible obfuscationline 238
    text = text.lstrip("<U+FEFF>")

scripts/project.py

  • Executable scriptline 1
    #!/usr/bin/env python3

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Signal confidence: 24 facts

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.