tomdahne.com

Tom's Card Manager

User Guide — an offline Pokémon TCG catalogue, collection, inventory & sales manager for Windows.
Version 0.9.82  ·  Free · no account · your data stays on your computer

Getting started

Tom's Card Manager is a single program that runs entirely on your own PC. There is nothing to install, no account to create, and nothing to sign up for. Unzip the download to any folder you like — your Documents folder, the Desktop, or a USB stick — and double-click TomCardManager.exe to run it.

  1. Unzip the download. Right-click TomsCardManager.zip, choose Extract All, and pick a folder. Keep all the files together in that folder.
  2. Run the program. Open the folder and double-click TomCardManager.exe. The main window opens showing the full Pokémon card catalogue — over 20,000 cards across 170+ sets, already loaded.
  3. Set up your store details (optional). If you plan to publish a store page, open Store › Store Page Settings… first and fill in your store name and contact line. You can skip this if you only want to track your collection.
First run

The download already includes the full card catalogue, so you do not need to download anything to get started — just open the app and start marking the cards you own. The catalogue holds the card names and set information; it does not yet know which cards you have. That is what you tell it (see Marking your stock).

Windows SmartScreen

Because this is a free app from an independent developer, Windows may show a blue "Windows protected your PC" box the first time you run it. This is normal for new software that is not code-signed. Click More info, then Run anyway. If you would rather check the download first, you can upload the ZIP to a free scanner such as VirusTotal before running it.

The main window

The window has three main parts:

Along the bottom, the status bar tells you how many cards are showing and, when some are hidden, which filter is hiding them (see Finding cards).

Everything is driven from the menu bar:

MenuWhat lives there
Export card list, back up, restore, compact the database, export your inventory, exit.
Generate your store page, self-host images, store page settings.
Record sales, undo sales, sales report.
Wishlist, set-completion and trade-list reports.
Update online, recheck sets, import a card list, and add / edit / delete your own cards.
In stock only, Always on top, Sales / Collection mode, Check all.
Write debug log, About.
Two modes

The app works in two modes, switched under View › Mode: Sales (stock you are selling, with prices) and Collection (your personal collection, no prices). They are kept completely separate — a card can be in both at once. Most of this guide describes Sales mode; see Collection & trading for the differences.

Always on top

View › Always on top keeps the window above everything else — useful when you are typing stock in from a binder on your desk and keep clicking away to a browser. The setting is remembered between sessions.

The catalogue

The catalogue is the master list of Pokémon TCG cards — names, set names, card numbers, rarities and picture links. It comes pre-loaded with the full English catalogue — over 20,000 cards across 170+ sets — so you normally do nothing here. Everything to do with it lives under the Catalogue menu.

Update online — getting newly released cards

Catalogue › Update online… downloads any cards that are not in your catalogue yet and adds them. Run it when a new set is released.

Update only ever adds. It never changes or removes your stock, prices, locations, sale history, or the cards you added yourself. It also never changes the details of a card you already have — that is what Recheck is for, below.

Good to know

An update can take a minute or two and shows a progress box you can cancel. Any cards already added before you cancel are kept, and the status bar tells you how many. If a set fails to download, the app says so and you can simply run Update again to retry.

Recheck — refreshing details you already have

Card data is occasionally corrected upstream: a misspelled name, a wrong rarity, a picture link that changed. Update cannot pick those up, because Update only adds. Recheck is what does.

A recheck refreshes reference details only — names, rarities, numbers and picture links.

What a recheck will never do

It never changes a card's identity, so nothing you have recorded comes unstuck from its card. It never touches your stock, prices, sale history, locations, Want/Trade flags, the cards you added yourself, or any picture you stored. And it never deletes: if a card has disappeared upstream, the app reports it and leaves it alone. A backup is taken before it starts, and that is not optional — if the backup cannot be written, the recheck does not run.

When the app uses the internet

Update online, Recheck, and the optional Store › Self-host images step are the only things that reach the internet, and only when you choose them. Card data comes from a free public source on GitHub; images come from the public card-image server. Nothing is ever uploaded, and the app never phones home — there is no telemetry and no version check.

Adding your own cards

The downloaded catalogue does not have everything. Regional promos, error cards, misprints, sealed oddities, cards from a language the data source does not cover — if you hold it and the catalogue does not list it, you can create it yourself.

Adding a card

  1. Choose Catalogue › Add a card…
  2. Type the card name. This is the only required field. Everything else can be left blank and filled in later.
  3. Pick a set, or don't. The Set dropdown lists every downloaded set. If the card does not belong to one, choose Not in a listed set and type your own set name (and optionally a series) instead.
  4. Fill in what you know. Number, printed total (leave blank for a promo), rarity, card type and language are all optional. Choosing a set fills the printed total in for you, unless you have typed your own — yours is never overwritten.
  5. Add a picture (optional). Click Choose picture… — see below.
  6. Click Add card. The card appears in the grid like any other.

Adding more than a handful this way gets old quickly. If you have a card list in a file — a whole set, say — use Importing a card list instead.

A card you add is an ordinary catalogue row. Stock, conditions, prices, locations, Want/Trade flags, exports, reports and the store page all work on it exactly as they do on a downloaded card. There is nothing second-class about it.

Pictures

Cards you add can carry their own picture — a scan or a phone photo of the card in your hand. Click Choose picture in the card form and pick a JPG, PNG, BMP, GIF or TIFF file.

The app then tidies it up for you:

Pictures are stored inside card_manager.db, not as loose files. There is still exactly one file to back up. They also appear on your generated store page whether or not Store › Self-host images is switched on — a picture that lives on your own machine has no online source to opt out of.

Editing and deleting

Catalogue › Edit this card… and Catalogue › Delete this card… work on the selected card. Both are also on the grid's right-click menu. They are greyed out for downloaded cards — a downloaded card would just come back with the next update, so removing it would achieve nothing.

Editing keeps the card's identity. Correct a name or swap the picture and everything attached to that card — stock, prices, locations, sale history — stays attached.

Deleting

A card with any sale recorded against it cannot be deleted, and the app will say so. Your sales ledger is a record of what actually happened; removing the card would quietly change past totals. Edit the card instead, or set its quantity to zero so it drops out of your stock.

Where a delete is allowed, the app first lists exactly what else will go with it — stock rows, the picture, and so on — then takes a backup, checks that backup is readable, and only then removes everything in a single step. It either all happens or none of it does.

Check my added cards

Over time, a card you created by hand may turn up in the downloaded catalogue. Catalogue › Check my added cards… looks for that: it compares your cards against downloaded ones by name and number, ignoring capitals, punctuation and leading zeros, and lists any matches it finds.

It reports, it never merges

Nothing is changed and nothing is combined automatically. Your stock, prices, locations and sale history stay exactly where they are, on the card you created. If you would rather use the downloaded card, move the stock across yourself and then delete the one you added — that way nothing is lost to a guess the app made on your behalf.

Importing a card list

Adding cards one at a time is fine for a promo or two. When a new set lands and the catalogue does not have it yet, it is not. Catalogue › Import cards from a file… reads a card list and adds only the cards you do not already have.

It reads:

The only thing a file really needs is a column of card names. Set, number, printed total, rarity, card type, language and a picture address are all used when they are there. Headings do not have to match exactly — name, card name and product name all work, and so do set / set name, number / card number, and so on. A column it does not recognise is listed as ignored rather than guessed at.

How it goes

  1. Choose Catalogue › Import cards from a file… and pick your file.
  2. Read the screen. Every card in the file is listed with what would happen to it. Nothing has been written yet, and you can untick any row you do not want.
  3. Click Import. A backup is taken first, automatically, before a single row is written.

Then run the same file again. The second time it will say 0 to add, with every card listed as already in your catalogue — which is the whole point of the screen, and the quickest way to satisfy yourself about what it is actually doing before you trust it with a big list.

What the screen tells you

Each row says one of:

What will happenMeaning
will be addedNot in your catalogue. Ticked, and will be created.
already in your catalogueYou have this card. Named, so you can see which one it matched. Cannot be ticked.
skipped — appears earlier in this fileThe file lists the same card twice.
CHECK — …Something is worth your eye before importing. The row says what.
not imported — …The row could not be read. The line number and the reason are given.

A card counts as one you already have only when its set, number and name all agree. All three, because a card reprinted into a later set keeps its original number — matching on name and number alone would throw away every reprint as a duplicate.

When the file does not say what set the cards are from

Plenty of card lists leave the set out, because whoever made it knew which set it was. The box above the list, Set for cards that don't name one, fills it in. Change it and the whole list re-checks itself immediately, so you can watch cards move between "will be added" and "already in your catalogue" as you get it right.

If you do not know the set, press Scan for set. It compares the cards in the file against every set in your catalogue and shows you what they look like, most likely first, with the share of the file each one accounts for. Pick one and it fills the box in. It never changes anything by itself.

"No set stands out"

If the scan finds nothing, that is usually good news rather than a failure: it means none of these cards are in your catalogue at all, which is exactly what you would expect from a set you do not have yet. Type the set name into the box and carry on.

If the file holds several different sets

One box names one set, so on its own it would file every card from the other sets under that name. The app spots this and says so before you can get it wrong. Press Scan for set and, where it can, Use the sets found — each card that plainly belongs to a set you already hold is given that set, and only the leftovers use the box. The Set column then shows what every row got.

Pictures

If the file lists picture addresses, a tickbox offers to keep them and names the sites they point at. Leave it on and those cards show pictures like any other; turn it off and they are added with none. Nothing is downloaded during the import either way — a picture is only ever fetched later, when you select that card, exactly as it is for every other card.

What it will never do

The guarantees

It never adds a card you already have, and it never imports a row you have unticked. It takes a backup first, and will not run at all if that backup cannot be written. Every card goes in together or none of them do — if anything fails part-way, nothing is written and your database is left exactly as it was. And it never touches your stock, prices, locations, sale history or any card you already had.

Imported cards afterwards

Cards added this way are marked as added by hand, the same as ones you create with Add a card. That is what lets you edit or delete them later — something you cannot do to a downloaded card.

When the public data catches up

Sooner or later the downloaded catalogue will carry the set you imported. Catalogue › Update online will then add its own official copy of those cards, and will not touch yours — so for a while you will have two of each. Catalogue › Check my added cards… lists exactly which ones. Delete the imported copies whenever you like, or leave them; nothing breaks either way. Moving any stock across first is worth doing, because deleting a card takes its stock with it.

Marking your stock

This is the core of the app: telling it which cards you have. Click any card in the grid, then use the detail panel on the right.

  1. Select the card in the grid (use the filters or search to find it — see below).
  2. Pick the variant from the dropdown: Standard, Holo, Reverse Holo, or Other.
  3. Enter quantity and price for each condition you hold — there are three rows: Mint, Near Mint, and Played. Leave a row at zero if you do not have that condition.
  4. Set a location (optional) in the Location box — e.g. "Binder 1" or "Box A". The dropdown remembers locations you have already used, so you can reuse them with one click, or type a new one.
  5. Click Save. The card's held count updates in the grid.

Each variant keeps its own quantities, prices, and location, so a Holo and a Reverse Holo of the same card are tracked separately. Cards you added yourself work exactly the same way.

Quick sell

The panel's Quick Sell button records the sale of one copy at the shown price in a single click — handy for one-off sales. To record several at once, tick the cards in the grid and use Sales › Update Checked Cards Sold… (see Recording sales).

Unsaved changes

If you edit a card and move to another without saving, the app asks whether to Save, Discard, or Cancel — so an edit is never silently lost. If you see that prompt, choose Save to keep your changes.

Finding cards

With 20,000+ cards, the filters are how you get to the one you want. They all combine, so you can narrow down quickly:

FilterWhat it does
Show only cards from one set.
Type any part of a name, set, number, card ID, or rarity. Multiple words all have to match.
Show only one rarity (e.g. Rare Holo).
Show only cards stored in one location. A card matches if any of its variants is in that location, not just the one the grid happens to be showing.
Filter by sale channel where relevant.
Under View — hide every card you do not currently hold. This is remembered between sessions.
Reset Set, Search, Rarity, and Location in one click. (The "In stock only" view is left alone.)

Click a column heading to sort by it. Use View › Check all to tick every visible card at once — useful before a bulk export or sale.

"Where did my card go?"

When a filter is hiding cards, the status bar names it rather than leaving you guessing — for example "19,231 of 20,444 cards — 1,213 hidden (1,200 by ‘in stock only’, 13 by the search box)". If a card you just added seems to have vanished, that line usually tells you why in one glance. Clear filters, and switching off View › In stock only, bring everything back.

Exporting the list

File › Export card list saves what you have ticked in the grid:

Tick nothing and it exports everything you hold. The export follows the mode you are in: prices are included in Sales mode and left out in Collection mode, so the file always matches what is on screen.

Checking eBay prices

The detail panel has an eBay button that opens an eBay search for the selected card in your browser, so you can gauge what it is selling for. Two checkboxes shape the search:

Which eBay site it uses (ebay.com.au, ebay.com, ebay.co.uk, and others) is set under Store › Store Page Settings…. The default is ebay.com.au.

The store page

Tom's Card Manager can build a self-contained web page of your in-stock cards that you upload to your own website — a simple, searchable online store or want-list with no server or database needed.

1. Set your store details

Open Store › Store Page Settings… and fill in:

SettingNotes
Page titleYour store or collection name, shown at the top of the page.
Tagline / subtitleOptional line under the title. Leave blank to hide it.
Announcement bannerOptional strip across the top of the page — "On holiday until the 20th", "Free postage this week". Leave blank to hide it.
Contact lineHow buyers reach you. Leave blank to hide it.
Notes / info blockOptional free text (postage, terms, etc.). Leave blank to hide it.
Accent colourThe page's highlight colour. Click to change it.
eBay siteWhich eBay the detail panel's comps button searches.
Currency code / symbolDrives the money display on the page (default AUD / $).

All of these default to neutral, blank values — the page shows your details, never anyone else's.

These settings do more than decorate

Your page title and tagline are also written into the page's title and description tags — which is what Google shows in search results, and what appears when someone pastes your link into Facebook or a chat. Filling them in properly is worth a minute.

2. Generate the page

  1. Optionally turn on Store › Self-host images if you want the page to include downloaded copies of the card images (rather than linking to them online).
  2. Choose Store › Generate Store Page… and pick an output folder.
  3. Check the folder if it asks. The first time you publish to a folder that already holds an index.html, cards.json or images folder, the app names those files and asks before replacing them. See the warning below.
  4. Upload the result. The app creates index.html and cards.json (plus an images folder if you chose self-host). Upload all of them together to your web host.
Before it replaces anything

Generating writes index.html, cards.json and the images folder using those exact names. If your website folder already has a page called index.html, generating into that folder replaces it, and that cannot be undone.

So the first time you publish to a folder that already holds any of those, the app lists exactly which files would be replaced, shows the full path, and asks. No is the default answer — nothing is written and the folder is not remembered. Choose Yes and that folder is approved from then on, so your normal week-to-week publishing never asks again.

You will not see the prompt when you publish into an empty folder, or back into the folder you have already approved. If you ever see it for a folder you publish to every week, take it seriously — it means you have picked a different one.

Cards you added yourself appear on the page like any other, and any picture you gave them is published with them — self-host or not.

A card with no picture at all gets a tidy "No image available" box rather than a broken-image icon.

Attribution

Generated pages carry a small footer, "Generated with Tom's Card Manager — tomdahne.com". This is how a free tool pays its way — please leave it in place (it is a condition of the licence).

Updating your live store

To update the page later, change your stock in the app and Generate again, then re-upload the files. The page is just static files — there is no database on your server to manage. The app remembers the folder you last generated into, so the second time is one click.

Recording sales

Every sale is recorded so you keep a history and your stock stays accurate.

Right-clicking a card in the grid also offers Update Checked Cards Sold and Recent sales for this card.

Undoing a sale is permanent

There is no redo. Reversing a sale puts the stock back and removes that sale from your ledger — putting it back means entering it again by hand. That is why the app names the sale before it does anything, and why No is the default. Read the card name in the box before you click Yes.

Reports don't land in your upload folder

The app remembers two folders, separately: the one you generate your store page into, and the one you save reports into. A sales report shows what you paid and what you made — it should not end up in the directory you sync to a public web host, and it won't.

Reports are written under fixed names (sales-report.html, wishlist-report.html, trade-list.html, set-completion.html), so the same check described under The store page applies: the first time you save into a folder that already holds one of those, the app asks before replacing it.

Collection & trading

Switch to View › Mode › Collection to track your personal collection separately from your sale stock. Collection entries work the same way (variant, condition, quantity, location) but have no prices — it is what you own, not what you are selling.

The Collection menu produces three HTML reports, each opened in your browser:

ReportShows
The cards you have flagged as wanted.
How complete each set is, including secret rares.
The cards you have flagged as tradable.
How set completion counts your own cards

"Complete" is measured against the downloaded catalogue, so a set does not read as 103% full because you added three promos to it. Cards you added yourself are counted and listed separately, so you can still see them.

Backups, compacting & your data

Everything you enter lives in one file, card_manager.db, next to the program — stock, collection, sales, locations, the cards you added and their pictures. That single file is the thing to protect.

Simplest possible backup

You can also just copy card_manager.db somewhere safe (another drive, cloud folder, USB) at any time the app is closed. That one file is your entire collection, stock, sale history and pictures.

Automatic safety backups

Before anything that rewrites your data — a database upgrade after an update to the app, deleting a card, a recheck, or a compact — the app takes its own backup and verifies it can be read back. If that fails, the operation does not run at all and nothing is changed. Those safety copies go into the same backups folder as the ones you make yourself.

Compacting the database

When you delete rows, the database file does not shrink. The space inside it is marked reusable and the app writes new data into it before growing the file again — which is efficient, but it does mean a file that has had a lot of churn can sit larger on disk than the data in it warrants.

File › Compact database… hands that space back. It shows you three numbers before doing anything:

Say yes and it takes a backup, rebuilds the file, and reports the size before and after. Nothing is deleted — every card, sale, location and picture is kept exactly as it was.

Two things to know before you compact

It needs room to work. Roughly three times the size of your database should be free on that drive while it runs — one copy for the backup, and up to two more for the rebuild. The working space is released when it finishes; the backup is kept on purpose.

It never runs on its own. Compacting only ever happens when you choose it from the menu. If you never use it, nothing about the app changes.

Files & folders

Everything the app uses sits in its own folder, next to the EXE. Nothing is written anywhere else on your PC except the output folder you choose yourself when generating a store page or saving a report.

In the app's folder

ItemWhat it is
TomCardManager.exeThe program itself.
card_manager.dbYour data — catalogue, stock, collection, sales, locations, your own cards and their pictures. Back this up.
settings.iniStore-page settings (title, banner, contact, currency, eBay site).
prefs.iniSmall interface preferences — the toggles you have set, the two output folders the app remembers, and which of those folders you have approved for replacing files in (see The store page).
backups\Timestamped database backups you create, plus the automatic safety copies described above.
cache\Card images downloaded for the detail panel. Safe to delete; it refills. Pictures you added yourself are not here — they are inside the database.
debug.logA diagnostic log of what the app did — counts, set names and the folders it wrote to. No prices and no sale figures. The folder paths do include your Windows user name, so glance at it before sending it to anyone. Written while Help › Write debug log is ticked, which it is by default. Untick it to stop, and delete the file any time.

In the folder you generate into

ItemWhat it is
index.htmlYour store page. This is the file people open.
cards.jsonThe card data the page reads. Upload it alongside the page — the page will not work without it.
images\Card images, when self-hosting is on, plus any pictures you added yourself.
images\_sources.txtA small index of where each self-hosted image came from, so the next run knows what it already has and does not re-download everything. Harmless to upload; nothing needs it.

Troubleshooting

The app won't open

Make sure you extracted the ZIP fully (do not run it from inside the ZIP viewer) and that TomCardManager.exe and its files are together in one folder. If Windows SmartScreen blocked it, see the note under Getting started.

A card I added has disappeared

Almost always a filter. Check the status bar — it names what is hiding cards. The usual culprit is View › In stock only, which hides any card you have not recorded stock against yet, including one you have only just created. Click Clear filters and untick In stock only, then search for the card by name.

The panel says "No cards yet"

That means the catalogue is empty — there are no cards at all, not that a filter is hiding them. The download ships with the full catalogue already loaded, so the usual cause is that card_manager.db has been deleted, renamed, or left behind when the app was copied to another folder. Either put the file back next to TomCardManager.exe, restore a backup, or do what the panel suggests and run Catalogue › Update online… to download the catalogue fresh.

It is asking me about replacing files in my own website folder

That prompt appears the first time you publish into a folder that already contains an index.html, cards.json or images folder. It is asking once, on purpose: those are the names the app writes, so publishing there replaces them. Read the path it shows. If it is your store folder, choose Yes and you will not be asked for it again. If the path is not what you expected — your Desktop, your Documents, somebody else's site — choose No; nothing is written and the folder is not remembered.

If a folder you publish to every week suddenly asks, you have almost certainly picked a different folder in the browse box.

"Your store page settings could not be read"

Something is stopping the app opening settings.ini — most often another program has it open, or the folder is read-only (running the app from inside a ZIP, or from a locked-down location, will do it). The app tells you the reason rather than quietly falling back to a blank shop, because publishing a store page with someone else's default details is worse than not publishing one. Close whatever has the file open, or move the app folder somewhere you have write access, and try again.

My database file keeps getting bigger

That is normal, and mostly it is the pictures — they live inside the database by design, so there is only ever one file to back up. If you have deleted a lot of cards or pictures and want the space back on disk, use File › Compact database… (see above).

An update, recheck or generate seems stuck

All of them show a progress box with a Cancel button. Cancelling is safe — an update keeps the cards already added, a cancelled recheck keeps the sets already done, and a cancelled Generate leaves your existing store page untouched. A recheck of every set downloads one file per set, so several minutes is normal.

Sending a diagnostic log

If you report a problem, make sure Help › Write debug log is ticked, reproduce the issue, then send the debug.log file from the app's folder. It records what the app did — counts, set names and the folders it used. There are no prices and no sale figures in it, but the folder paths do include your Windows user name, so have a look before you send it.

Still stuck?

Support for this free tool is best-effort, from one developer. Get in touch via the feedback link below — bug reports and feature requests are welcome too.