{"id":15193932,"url":"https://github.com/mindful/cardbuilder","last_synced_at":"2025-09-01T17:46:40.825Z","repository":{"id":43482888,"uuid":"336510744","full_name":"Mindful/cardbuilder","owner":"Mindful","description":"Making flashcard construction effortless and vocabulary acquisition (slightly) less painful 🎴","archived":false,"fork":false,"pushed_at":"2024-09-22T20:59:31.000Z","size":487,"stargazers_count":15,"open_issues_count":11,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-28T08:46:06.595Z","etag":null,"topics":["anki","anki-flashcards","flashcard-generator","flashcards","language-learning"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/cardbuilder/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mindful.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-06T10:25:02.000Z","updated_at":"2025-07-24T08:22:39.000Z","dependencies_parsed_at":"2024-10-11T14:01:16.591Z","dependency_job_id":"3ac21218-5eec-4996-a9d6-7f4d376c1f2e","html_url":"https://github.com/Mindful/cardbuilder","commit_stats":{"total_commits":128,"total_committers":2,"mean_commits":64.0,"dds":0.015625,"last_synced_commit":"19127345da32735098f9f55028434c6385833848"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Mindful/cardbuilder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mindful%2Fcardbuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mindful%2Fcardbuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mindful%2Fcardbuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mindful%2Fcardbuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mindful","download_url":"https://codeload.github.com/Mindful/cardbuilder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mindful%2Fcardbuilder/sbom","scorecard":{"id":94587,"data":{"date":"2025-08-11","repo":{"name":"github.com/Mindful/cardbuilder","commit":"2699cf43b8abb3d2527c8a4af2362ea437c0defd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 1/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: pipCommand not pinned by hash: docs/demo/generate_demo.sh:20","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":3,"reason":"7 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-55x5-fj6c-h6m8","Warn: Project is vulnerable to: PYSEC-2021-19 / GHSA-jq4v-f5q6-mjqq","Warn: Project is vulnerable to: PYSEC-2022-230 / GHSA-wrxv-2j5q-m38w","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: GHSA-g7vv-2v7x-gj9p"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T08:38:59.331Z","repository_id":43482888,"created_at":"2025-08-15T08:38:59.331Z","updated_at":"2025-08-15T08:38:59.331Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273166747,"owners_count":25057178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-01T02:00:09.058Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anki","anki-flashcards","flashcard-generator","flashcards","language-learning"],"created_at":"2024-09-27T22:08:15.449Z","updated_at":"2025-09-01T17:46:40.789Z","avatar_url":"https://github.com/Mindful.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Cardbuilder\nA command line tool and Python library for creating language learning flashcards in a wide variety of languages.\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://pypi.org/project/cardbuilder/\"\u003e\n        \u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/cardbuilder\"\u003e\n    \u003c/a\u003e\n    \u003ca href='https://cardbuilder.readthedocs.io/en/latest/?badge=latest'\u003e\n        \u003cimg src='https://readthedocs.org/projects/cardbuilder/badge/?version=latest' alt='Documentation Status' /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/Mindful/cardbuilder/blob/main/LICENSE.txt\"\u003e\n        \u003cimg alt=\"License\" src=\"https://img.shields.io/badge/license-MIT-green\"\u003e\n    \u003c/a\u003e\n    \u003cbr/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://cardbuilder.readthedocs.io/en/latest\"\u003eDocumentation\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/Mindful/cardbuilder#what-can-i-do-with-cardbuilder\"\u003eUses\u003c/a\u003e\n  ·\n  \u003ca href=\"https://github.com/Mindful/cardbuilder#supported-languages\"\u003eSupported Languages\u003c/a\u003e\n\u003c/p\u003e\n\n## Quick Start\n\nCardbuilder can output flashcards in several different formats, but the quick start will focus on [Anki](https://apps.ankiweb.net/). If the content below looks confusing to you, please see the [gentler installation guide](https://cardbuilder.readthedocs.io/en/latest/installation.html).\n\n```\npip install cardbuilder\nprintf \"暗記\\nカード\\n作る\" \u003e words.txt\ncardbuilder ja_to_en --input words.txt --output cards\n```\n\nThat's it - cards built! Just import `cards.apkg` into Anki and you're good to go.\n\n![](docs/demo/demo.gif)\n\n\nNote that the first time you run Cardbuilder it will need to download data which may take some time, but this only has to be done once.\n\n## What can I do with Cardbuilder?\n\nCardbuilder is a tool for building flashcards, which it does in three steps:\n1. Compiling a list of input words\n2. Looking up necessary information about each of these words\n3. Formatting that information into flashcards\n\nThe built-in console commands such as [ja_to_en](https://cardbuilder.readthedocs.io/en/latest/scripts/ja_to_en.html) just use Cardbuilder abstractions to do all of this for you, and if you just want to generate flashcards for a supported language pair, they will likely be more than sufficient. In that case, Cardbuilder is a command line tool for generating flashcards. \n\nThat said, Cardbuilder is designed so that its code is easy to reuse for generating flashcards however you'd like. The above three steps in particular are the responsibilities of the [input](https://cardbuilder.readthedocs.io/en/latest/input/input.html), [lookup](https://cardbuilder.readthedocs.io/en/latest/lookup/lookup.html) and [resolution](https://cardbuilder.readthedocs.io/en/latest/resolution/resolution.html) packages respectively. If you want more control over how your flashcards are generated, Cardbuilder can be used as a library for generating flashcards. More details can be found in Cardbuilder's [documentation](https://cardbuilder.readthedocs.io/en/latest/scripts/ja_to_en.html).\n\nCardbuilder is **not** a flashcarding application or a tool for reviewing flashcards. There are many excellent tools for this already, such as [Anki](https://apps.ankiweb.net/). The objective of Cardbuilder is to automate the flashcard creation process by generating files that can be imported into these existing applications.\n\n## Supported Languages \n\n| Learning Language | From Language | \n|----------|:-------------:|\n| Japanese |  English \n| Esperanto | English   \n| 英語 | 日本語\n\n\n## Contributing\n\nCardbuilder welcomes contributions, and in particular we're always looking for help supporting new languages. Detailed information about how best to contribute can be found in the [contributing](https://cardbuilder.readthedocs.io/en/latest/contributing/contributing.html) page of the documentation.\n\n\n## FAQ\n\n### Who owns the data Cardbuilder uses?\n\nThe data used by Cardbuilder is owned by a wide variety of organizations and people, and made available under various licenses. All of the data used by Cardbuilder is licensed, at minimum, for educational use. If you want to use the data for something commercial, it is up to you to figure out which licenses allow that.\n\n### Can you add support for `\u003clanguage\u003e` or `\u003cdata source\u003e`? \n\nProbably! You're welcome to [open an issue](https://github.com/Mindful/cardbuilder/issues/new) requesting support for a new language and/or new source of data, although in both cases it really helps if you can point to the location of a publicly available web API or dictionary file. Alternatively, we welcome pull requests implementing new [data sources](https://cardbuilder.readthedocs.io/en/latest/contributing/contrib_data_source.html).\n\n### Can you add support for `\u003cflashcard app\u003e`?\n\nAs with new languages, it's likely possible and you're welcome to [open an issue](https://github.com/Mindful/cardbuilder/issues/new) or submit a PR yourself for a new Resolver.\n\n### Is this like [genanki](https://github.com/kerrickstaley/genanki)?\n\nNo, `genanki` is a great library and Cardbuilder depends on it to output Anki decks, but the two packages serve different purposes. `genanki` is specifically for taking data and transforming it into the format that Anki uses, while Cardbuilder attempts to simplify the process of going from a list of words to a set of complete flashcards with all the required information. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindful%2Fcardbuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmindful%2Fcardbuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindful%2Fcardbuilder/lists"}