CardPool 1.2.0
See the version list below for details.
dotnet tool install --global CardPool --version 1.2.0
dotnet new tool-manifest
dotnet tool install --local CardPool --version 1.2.0
#tool dotnet:?package=CardPool&version=1.2.0
nuke :add-package CardPool --version 1.2.0
CardPool
Disclaimer: CardPool is an independent fan project and is not affiliated with, endorsed by, or sponsored by Konami Digital Entertainment. Yu-Gi-Oh! is a trademark of Konami. Card text and artwork are the intellectual property of their respective owners.
Card data is fetched from YGOProDeck and errata history from Yugipedia. Users of this tool are responsible for complying with the terms of use of both services. Output files generated by this tool may contain copyrighted card data and should not be publicly redistributed.
Card pool analysis tool for trading card games. Fetches card data from game-specific sources, enriches it with errata history, applies word-count rules, and exports to Excel/CSV.
Current implementation: Yu-Gi-Oh! The goal is to support multiple TCGs — Yu-Gi-Oh! is the first. Cards are fetched from YGOProDeck and enriched with errata history from Yugipedia.
The core purpose: identify cards whose shortest known errata version falls within a word-count threshold (default: ≤25 words).
Installation
Option A — .NET Global Tool (recommended for developers)
Requires .NET 10 SDK.
dotnet tool install -g CardPool
cpool --help
To update: dotnet tool update -g CardPool
To remove: dotnet tool uninstall -g CardPool
Option B — Self-contained executable (no .NET required)
Download the latest zip for your platform from the Releases page:
| Platform | File |
|---|---|
| Windows x64 | cpool-win-x64.zip |
| Windows ARM64 | cpool-win-arm64.zip |
| macOS ARM64 (Apple Silicon) | cpool-osx-arm64.zip |
| macOS x64 (Intel) | cpool-osx-x64.zip |
| Linux x64 | cpool-linux-x64.zip |
Windows: Extract the zip, then run install.ps1 (right-click → Run with PowerShell). Open a new terminal — cpool is now on your PATH.
If PowerShell blocks the script:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
macOS / Linux: Extract the zip, then run bash install.sh. Open a new terminal — cpool is now on your PATH.
To uninstall — Windows: run uninstall.ps1; macOS/Linux: run bash uninstall.sh.
Option C — Run from source
git clone https://github.com/piers-sinclair/cardpool
dotnet run --project src/CardPool.Cli -- export
Sharing with someone without repo access
Build a platform zip and send it (recipient needs no .NET):
# Windows
dotnet publish src/CardPool.Cli -p:PublishProfile=win-x64 -o dist/win-x64
# macOS (Apple Silicon)
dotnet publish src/CardPool.Cli -p:PublishProfile=osx-arm64 -o dist/osx-arm64
# Linux
dotnet publish src/CardPool.Cli -p:PublishProfile=linux-x64 -o dist/linux-x64
Commands
cpool export
Export all card data to Excel (.xlsx) and CSV. Output files are written to ./output/ by default.
cpool export # default: <=25 words, no-materials, no-link, no-pendulum
cpool export --words 20 # <=20 words
cpool export --no-materials false # include full material text in word count
cpool export --extra-deck all # include all Extra Deck types (including Link)
cpool export --extra-deck none # main-deck cards only
cpool export --extra-deck fusion synchro # Fusion + Synchro only
cpool export --no-pendulum false # include Pendulum monsters
cpool export --words 30 --output ~/ygo # <=30 words, custom output dir
| Option | Default | Description |
|---|---|---|
--words |
25 |
Word-count threshold — cards with any printing at or below this limit are included |
--no-materials |
true |
Strip fusion/synchro/xyz/link material requirements from effect text before counting; original materials are preserved in a separate column |
--extra-deck |
fusion synchro xyz |
Extra Deck types to include — valid values: all, none, fusion, synchro, xyz, link (repeatable) |
--no-pendulum |
true |
Exclude Pendulum monsters from output |
--output |
./output |
Directory to write output files to |
cpool inspect
Show all errata versions for a single card with word counts, highlighting the shortest and latest versions.
cpool inspect "Raiza the Storm Monarch"
cpool inspect "Dark Magician"
Global options
cpool --help # show available commands
cpool --version # show installed version
Development
Requirements
Run from source
dotnet run --project src/CardPool.Cli -- export
dotnet run --project src/CardPool.Cli -- export --words 25
dotnet run --project src/CardPool.Cli -- inspect "Raiza the Storm Monarch"
Tests
dotnet test tests/CardPool.Tests
Architecture
flowchart TD
CLI["Program.cs\n(System.CommandLine)"]
EP["ExportPipeline"]
YGO["YgoProDeckClient\n(HTTP)"]
YUG["YugipediaClient\n(HTTP + rate limit)"]
CN["CardNormalizer"]
MS["MaterialStripper\n(--no-materials)"]
WC["WordCounter"]
WTP["WikitextParser\n(AngleSharp)"]
XL["ExcelExporter\n(ClosedXML)"]
CSV["CsvExporter\n(CsvHelper)"]
OUT[("output/*.xlsx\noutput/*.csv")]
HES["HtmlErrataScraper\n(AngleSharp)"]
CLI -->|export| EP
EP --> YGO
EP --> YUG
YUG --> WTP
EP --> CN
CN --> WC
EP -->|"--no-materials"| MS
MS --> WC
EP --> XL
EP --> CSV
XL --> OUT
CSV --> OUT
CLI -->|inspect| YGO
CLI -->|inspect| YUG
YUG -->|inspect| HES
Output Columns
| Column | Description |
|---|---|
id, name, type, race, attribute |
Core card identity |
level, atk, def, scale, linkval, linkmarkers |
Stats |
archetype |
Card archetype |
desc |
Current oracle text (from YGOProDeck) |
shortest_errata |
The errata version with the fewest words; falls back to desc if no Yugipedia page exists |
latest_errata |
The most recent errata version; falls back to desc |
word_count |
Effective word count of shortest_errata, applying game counting rules |
is_eligible |
true if word_count ≤ threshold |
set_name, set_code, set_rarity |
First card set from YGOProDeck |
ban_tcg, ban_ocg |
Current banlist status |
image_url |
Card artwork URL |
The Excel workbook has two sheets: <=N Words and >N Words (where N is the threshold).
Word Counting Rules
| Card Type | What's Counted |
|---|---|
| Normal Monster (no Pendulum) | 0 — all text is flavour |
| Pendulum Normal Monster | Pendulum Effect box only |
| Pendulum Effect Monster | Pendulum Effect box + Monster Effect box |
| All others (Effect Monsters, Spells, Traps) | Full description text |
The shortest errata is selected by fewest raw words across all errata versions; ties go to the latest version. The word count is then the card-type-adjusted count of that text.
Tech Stack
| Component | Technology |
|---|---|
| Runtime | .NET 10 |
| CLI parsing | System.CommandLine |
| HTML parsing | AngleSharp |
| Excel output | ClosedXML |
| CSV output | CsvHelper |
| HTTP | HttpClient + System.Text.Json |
| Tests | xUnit + Shouldly + NSubstitute |
License
MIT — see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.