# Credits and asset licensing

## The short version

**All companion art in this extension is original**, generated from character
matrices in `tools/companions.mjs`. Nothing is traced from, derived from, or
generated in the style of any third party asset pack. There is no third party
art in this repository, in `dist/`, or in anything that ships.

That is deliberate, and it is what makes publishing to the Chrome Web Store
possible.

## How it was made, which this document should say out loud

The generators that produce the art, and most of the code in this repository,
were written by Claude working from Abby's direction: her briefs, her
corrections, and her decisions about what each creature is and how it should
read. The shape definitions in `tools/creatures.mjs` are code, and that code was
written the same way the rest of the project was.

This is recorded here because the rest of this file reasons carefully about
where art comes from, and staying quiet about the largest fact of its
provenance would be an odd place to stop.

It does not change the claim above. Nothing is traced from or derived from
anybody's assets, no third party pack was used as reference or as a style to
imitate, and the licences quoted below are respected: the two packs that bar AI
use of their art are barred from this project entirely, art and all.

One caveat worth stating plainly rather than discovering later. In the United
States a work needs meaningful human authorship to be copyrightable, and how
much direction is enough has not been settled for work made this way. Shipping
does not depend on it, since publishing needs no copyright. Stopping somebody
else from copying the sprites might, and that is not a guarantee this project
can currently make.

## Why, since the answer was nearly different

Seven pixel art packs were downloaded from itch.io on 2026-08-07 and evaluated as
candidates. Their licenses were read in full, from both the itch.io pages and any
license file inside the archives.

**Six of the seven forbid redistribution.** Publishing to the Chrome Web Store is
redistribution, and that holds even for an Unlisted listing shared with one
person, because Google distributes the package on your behalf.

| Pack | Author | Redistribute | Modify | Commercial |
| --- | --- | --- | --- | --- |
| Cat Pack - Mochi | ToffeeCraft | **No** | Yes | Yes |
| Free Animated Pixel Art Cave Monsters | AU_pixel | Resale barred | Yes | Yes |
| Little Fantasy - Crypt | Gabry Corti | Not stated | Not stated | Yes |
| Free Halloween Characters | CraftPix | **No** | Yes | Yes |
| Forest Monsters 2D Pixel Art | MonoPixelArt | **No** | **No** | Yes |
| Paws & Whiskers - Isometric Cats | Netherzapdos | **No** | Yes | **No** |
| RPG Tiny Characters | pumpkin585 | Unknown | Unknown | Unknown |

Notes worth keeping:

- **MonoPixelArt forbids modification outright**, so that pack could not even be
  cropped or resized. Unusable under any plan.
- **Paws & Whiskers' free version is non-commercial only**, and its paid version
  still bars redistribution.
- **RPG Tiny Characters ships no license file** and itch.io rate limited every
  attempt to read its page, so it was treated as unusable rather than assumed
  permissive.
- Two packs explicitly bar AI use of their art. AU_pixel: "You may not use these
  assets to train AI." Netherzapdos: "cannot be used as basis for AI-generated
  content." Recreating either pack through an image model was therefore off the
  table on top of being a derivative work.

The packs remain on the developer's machine under `assets-source/`, which is
gitignored and read by nothing. They were useful for judging what reads well at
16 px. No pixel from any of them is in this project.

## The original set

**Fifty four companions**, defined in `tools/creatures.mjs` and listed in
`src/lib/companions.ts`. One shared "dark forest" palette keeps them looking
like a set rather than a pile.

It began as six, and this section said so for a long time after it stopped
being true. The count is deliberately not written out again anywhere it would
have to be maintained by hand: `src/lib/companions.ts` is the list, and a test
asserts it matches exactly what the generator renders, so the two cannot drift.

The first six were cat, owl, moth, toad, bat and serpent, separated by
silhouette. The set has since grown well past what silhouette alone can carry,
through more animals, then the woodland spirits (Mosswisp, Wispling, Veil,
Soot, Ember), then a gothic wing (Scarecrow, Pale Bride, Stitch Doll,
Thornhand, Wraith Hound, Hollow One), and on into things with no obvious genus
at all (Old Hat, Red Letter, Screamroot, Griffonmare).

The design constraint is unchanged and is the reason the set can grow at all: a
companion identifies a **job**, so it has to be recognisable at 16 px, in
peripheral vision, mid task. Silhouette does the work rather than colour, so
the set still reads for anyone with a colour vision deficiency.

One honest exception, worth writing down rather than leaving for somebody to
notice. Three of the fifty four share a silhouette: Cat, Violet Cat and Black
Cat differ only in palette. They are separate entries with no notion of being
variants of one another, so they are the one place the colour rule above does
not hold. Nothing breaks, because you pick a companion by looking at it in a
gallery rather than by telling two apart at 16 px, but a set that grew this far
should say where its own rule stops applying.

**Eleven painted scenes** sit behind them, in `src/lib/backgrounds.ts`: forest
glade, moonlit shore, apothecary, glasshouse, cloister, marsh walk, great
library, moon conservatory, herbalist, fountain court, cottage window.

Sprites are generated at 1x, 2x, and 4x by integer scaling only, so they stay
true pixel art rather than a blurry resize. They are written to
`public/companions/` at build time and are gitignored: the matrices are the
single source of truth, so a committed PNG can never drift from its source.

## Third party code

None in the shipped extension. Zero runtime dependencies.

Build tooling only: Vite, TypeScript, Vitest, ESLint, and typescript-eslint, all
MIT or Apache 2.0 licensed and none of which ships to a user.

The PNG encoder in `tools/png.mjs` is written from scratch against the PNG
specification using Node's built in `zlib`, so even image encoding pulls in no
dependency.

## Free UI Nature Pack, by Qiuro

`public/vendor/free-ui-nature-pack/` holds 19 PNGs from Qiuro's Free UI Nature
Pack: wooden buttons, vine frames, bars, and small icons, pixel art at 16x16
through 64x96.

**The permission, which is the licence.** The archive ships no licence file and
no readme, so the only terms are the ones Qiuro gave in the pack's comments.
Abby asked, on 2026-08-10:

> Hi! I love your Free UI Nature Pack and would like to use some of the
> button/frame artwork in a free Chrome extension called Sporekeeper. The
> assets would only be included as part of the extension UI and would never be
> sold or redistributed as an asset pack. I may crop/modify/recolor them to fit
> the interface. Is bundling those resulting PNG assets inside a Chrome Web
> Store extension permitted under your license?

Qiuro replied:

> Yeah sure go for it!

**What that permits, in the terms it was asked in.** Use inside the extension's
interface, including cropped, modified and recoloured versions, bundled into a
free Chrome Web Store listing. It does not permit selling or redistributing
them as an asset pack, and nothing here does that.

The pack, and the thread the permission was given in:
<https://qiuro.itch.io/free-uinature-pack/comments>

**One thing still to do before publishing.**

A screenshot of the exchange should live in the repo, since a comment thread can
be edited or deleted and a Web Store review can come long after. Put it in
`docs/permissions/` beside this file.

**What is used, and only this.** The buttons. `tools/build-vendor-buttons.mjs`
takes the three states out of `PreetyButton.png` and recolours the wood to
Sporekeeper's plum, keeping the leaves as moss, into `public/ui/btn-*.png`.
The rest of the pack is not shipped: the frames, bars, hearts and icons were
removed rather than carried along unused, since bundling somebody's art you do
not use is neither courteous nor smaller.

## The setup page background

`public/ui/frame.jpg` is a generated illustration supplied by Abby, not
produced from this repo's own tools. It is the one asset in the project that
is not built from `tools/`. Everything else, including the small ornaments in
`public/ui/` used as section marks, is generated by `tools/generate-ornaments.mjs`
and `tools/creatures.mjs`.
