The project file

A game you make here is yours, and so is the file it is kept in. Whole project, under Export & import in the editor, downloads all of it as a zip: the cards, how they are laid out, and every picture and font they use. This page says what is in that zip, so that a game can be printed, read by a script or taken to another tool without Card-a-mon. The examples are from the pond game the other guides follow.

What is in the zip

project.jsonThe cards, their layouts and fields, the card size, the game's rules, and the list of the files below. The rest of this page is about it.
images/Every picture in the project's image library, in the format it was uploaded, drawn or picked in.
fonts/The fonts uploaded to the project, as TTF, OTF or WOFF files.
fonts/catalogue/The faces of Card-a-mon's own typefaces that the cards are set in, so that they can be drawn without Card-a-mon's font server.
emoji/The pictures of any emoji in the cards' text, as Twemoji SVGs.
print.htmlA page that draws the cards into images for a print shop, from the zip, in any browser, with no connection.

Open print.html, from the zip or after unzipping it, in a browser, and open the project's zip in it, or drop the zip on the page. It draws every card into images at the resolution you pick, with the same code the editor's image export uses, and it needs nothing but the browser: the code that draws the cards is inside the page, and the pictures and fonts are in the zip. A game kept as a zip can still be printed years from now, whether Card-a-mon is there or not.

project.json

project.json is the project exactly as the editor keeps it, with nothing made up for the export: what the file says is all there is to the cards. It is UTF-8 JSON. The pond game's starts like this, with some cards and fields left out (…):

{
  "format": "card-a-mon-project",
  "version": 2,
  "name": "Who Eats Whom? Pond Chain",
  "exportedAt": "2026-10-23T06:09:13.801Z",
  "cardSet": {
    "width": 63.5,
    "height": 88.9,
    "bleed": 3.175,
    "isTwoSided": true,
    "cardsAllIds": ["card-1", "card-2", "card-3", …, "card-13"],
    "cardsById": {
      "card-1": { "id": "card-1", "count": 2 },
      "card-11": { "id": "card-11", "count": 1, "layoutId": "layout-4" },
      …
    },
    "layouts": [
      {
        "id": "default",
        "name": "Plant cards",
        "fieldsAllIds": ["background", "cost", "title", "art", "type",
                         "rules", "flavour", "back", "back-title"]
      },
      …
      {
        "id": "layout-4",
        "name": "Rules",
        "fieldsAllIds": ["text", "page"],
        "width": 88.9, "height": 127, "cut": "square", "isTwoSided": false
      }
    ],
    "fieldsAllIds": ["background", "cost", "title", …, "text", "page"],
    "fields": {
      "card-1": {
        "title": {
          "id": "title", "type": "text", "value": "Duckweed",
          "x": 15.35, "y": 8.0375, "width": 46.65, "height": 4.125, "angle": 0,
          "fontFamily": "Cinzel", "fontVariant": "700", "fontSize": 3.6,
          "lineHeight": 1.1, "color": "#ffffff", "align": "left",
          "isOnBack": false, "locked": true
        },
        "art": {
          "id": "art", "type": "image",
          "name": "duckweed.jpg",
          "x": 6.95, "y": 15.65, "width": 55.95, "height": 36.138, "angle": 0,
          "imageWidth": 1264, "imageHeight": 816,
          "zoom": 0.0442867, "cx": -0.0142353, "cy": 0,
          "description": "tiny floating green duckweed leaves covering a patch of still pond water",
          "isOnBack": false, "locked": true
        },
        …
      },
      …
    },
    "game": {
      "description": "A quick classroom card game about life in a pond. …",
      "rules": "Competitive, 2 to 4 players, 10 minutes, ages 8 to 11.\n\n## Goal\n…"
    }
  },
  "images": [
    {
      "name": "duckweed.jpg",
      "file": "images/duckweed.jpg"
    },
    …
  ],
  "fonts": [
    { "family": "Cinzel", "variant": "700", "file": "fonts/catalogue/Cinzel-700.ttf", "catalogue": true },
    …
  ],
  "emoji": []
}

Units

The top level

formatAlways card-a-mon-project.
version2. Version 1 had no fonts/catalogue/ and no emoji/; it imports the same.
nameThe project's name.
exportedAtWhen it was downloaded, as an ISO 8601 time.
cardSetThe cards: see below.
imagesEvery picture in the zip: its name, which the cards refer to it by, and its file in the zip. A picture from the icon library has credit: its author and licence. A picture marked as made with AI, as those drawn in Card-a-mon before it stopped drawing them were, has ai: the model and the prompt it was drawn from.
fontsEvery font in the zip: its family, its variant (regular, italic, 700, 700italic and so on) and its file. One with catalogue: true is one of Card-a-mon's own typefaces, there to draw the cards with; the others were uploaded to the project.
emojiThe emoji in the cards' text, each with the file of its picture.

cardSet

width, heightThe cards' size where they are cut, in mm.
bleedThe margin printed round each card and cut away, in mm. The safe area for text is as far in from the cut.
cutThe cards' shape: none for rounded corners, or square, circle, hex or octagon.
isTwoSidedWhether the cards have backs.
snapStepThe editor's snapping grid in mm, when it is not the one picked for the size; 0 for none.
cardsAllIdsThe cards' ids, in order.
cardsByIdEach card by its id: its count, how many copies to print, and its layoutId when it is not of the first layout.
layoutsThe designs the cards are of: see below.
fieldsAllIdsEvery layout's fields' ids, each once.
fieldsEach card's fields, by the card's id and then the field's: see below.
gameThe game's brief: what it is about (description) and its rules (rules, in Markdown).

Layouts

A layout has an id, a name and fieldsAllIds, its fields in the order they are drawn, bottom first. A card with no layoutId is of the one whose id is default, or else the first. A layout of another size than the project's — the pond game's rules pages — has its own width, height, bleed, cut and isTwoSided; without them it is the project's.

Fields

Every card has its own copy of each field of its layout, so fields holds a field once for each card. The editor keeps a field's place and style the same on every card of a layout, and lets each card have its own words or picture. A back is no separate thing: a field with isOnBack: true is on the back.

Every field
idThe field's id, the same on every card, and the column it is in a CSV of the cards.
typetext or image.
x, y, width, heightWhere it is and how big, in mm from the corner of the bleed.
angleHow far it is turned, in radians.
isOnBackWhether it is on the card's back.
lockedKept from being moved, resized or deleted in the editor.
frozenA background: clicked through in the editor, and changed only in what it shows.
shared, ownA shared field says or shows the same on every card of its layout; one with own is a card's own in a shared field.
A text field
valueThe card's words, as HTML. Bold is <b> and italic <i>; a new line is <br>, or <div> when it is aligned on its own; a colour is <font color>. A picture from images set among the words is written as its name in braces: Deal 2 {sword.svg}.
fontFamily, fontVariantThe typeface, from fonts or Card-a-mon's own, and its weight and style.
fontSizeThe size of the text, in mm.
lineHeightThe space from line to line, as a multiple of the size.
color, alignIts colour, and left, center or right.
fontSizeOverrideThis card's size, when it is not the field's: set by hand, or by shrinking to fit.
shrinkToFit, minFontSizeWhether the text shrinks on the cards it does not fit, and how far, in mm.
An image field
nameThe picture on this card, by its name in images; none for an empty field.
imageWidth, imageHeightThe picture's size in pixels.
zoom, cx, cyHow it is cropped. The picture is drawn zoom mm to a pixel, with its top-left corner cx, cy mm from the field's; what falls outside the field is not shown.
shape, cornerRadiusWhat the picture is seen through: none for the field's box, or rounded (with its corner radius in mm), ellipse, circle, hex or octagon.
descriptionThe picture note: what the card's picture shows, or should, for whoever draws it.

Reading it in a script

Nothing but a JSON reader is needed. In Python, the pond game's cards with their copies and titles:

import json

with open("project.json") as f:
    project = json.load(f)
cards = project["cardSet"]
for card_id in cards["cardsAllIds"]:
    title = cards["fields"][card_id].get("title", {}).get("value", "")
    print(card_id, cards["cardsById"][card_id]["count"], title)
card-1 2 Duckweed
card-2 2 Pondweed
card-3 2 Water Lily
card-4 2 Water Snail
…

Download JSON only, beside Download zip, gives project.json on its own: small and readable, to keep in version control and compare from one version to the next.

Bringing it back

A zip, or a project.json with its pictures and fonts, imports into Card-a-mon again: as a new project with Import a project on your projects page, or over an open one in the Whole project dialog. A project.json changed by a script imports the same way, and so does the cardSet on its own, with no images or fonts listed. See the whole project as a file.

Where next

All the guides. Questions or ideas: info@cardamon.lt.