Migre do genanki para o Anki Forge
Ainda está escolhendo uma biblioteca? Leia Anki Forge ou genanki.
O Anki Forge usa chaves de dados estáveis, modelos imutáveis validados, snapshots de mídia que não dependem dos arquivos de origem e operações explícitas de geração e atualização. Trata-se de um novo modelo de criação de conteúdo; ele não emula objetos genanki nem as antigas interfaces Deck e lockfile do Anki Forge.
| Conceito do genanki | Equivalente no Anki Forge |
|---|---|
| Model com ID numérico | NoteType.builder(stable_key)...build() |
| Nomes dos campos usados como identificadores | Chaves Field estáveis e nomes de exibição separados |
| Note contendo strings dos campos | model.note().field(key, content) com um modelo de propriedade da nota |
| Deck como contêiner de notas | Project com baralho padrão; .deck(name) opcional por nota |
| Caminhos dos arquivos de mídia do pacote | Valores independentes de Media.file(path), coletados automaticamente pelo conteúdo tipado |
| Gravação do pacote | project.build(BuildOptions.to(path)) |
| GUID padrão derivado dos campos ou regra personalizada de GUID | Namespace e chave estável da nota explícitos |
from ankiforge import Project, NoteType, Field, Template, BuildOptions
model = (NoteType.builder('vocabulary').name('Vocabulary') .field(Field('word', name='Word', required=True)) .field(Field('meaning', name='Meaning')) .template(Template('recognition', '{{word}}', '{{FrontSide}}<hr>{{meaning}}')) .build())project = Project('vocabulary-course', default_deck='Languages::Vocabulary')project.add('dictionary:cell', model.note().field('word', 'cell').field('meaning', '细胞'))project.build(BuildOptions.to('vocabulary.apkg'))Escolha chaves a partir de identificadores de negócio persistentes. Renomear um nome de exibição ou alterar o texto de uma definição não deve mudar essas chaves. Não use o hash do conteúdo atual dos campos como identidade, a menos que essa seja uma exigência explícita do seu importador. Para dados sem chaves, atribua e armazene as chaves fora do SDK.
As expressões dos templates de cartão usam as chaves dos campos (Field). Os nomes de exibição podem ser traduzidos de forma independente; a biblioteca converte as referências às chaves nos nomes de campo do Anki. A finalização do modelo rejeita declarações ausentes ou conflitantes antes que uma nota possa ser adicionada. A adição de notas coleta automaticamente as dependências dos modelos e rejeita definições conflitantes para uma mesma chave de modelo.
Strings representam texto simples; envolva HTML intencional em Content.html(...). Use media.image() / media.sound() e Content.sequence(...) para compor o conteúdo. As cópias dos arquivos permanecem disponíveis mesmo se o arquivo original for removido ou alterado. Declare explicitamente as dependências referenciadas por HTML, CSS ou scripts com .asset(media) no construtor do modelo ou project.add_asset(media).
Nas versões seguintes do baralho, crie um novo Project com o mesmo namespace e as mesmas chaves de dados e use BuildOptions.to(next_path).update_from(previous_original_apkg). O APKG original fornece evidências completas de identidade. Esse fluxo não recupera a identidade de pacotes antigos arbitrários nem promete a conversão automática dos IDs numéricos ou GUIDs do genanki. Considere a primeira distribuição no novo modelo como uma mudança deliberada de identidade, a menos que uma migração de dados validada separadamente estabeleça a correspondência.
Consulte o início rápido, a referência da API e a política de atualização.