# CREDITS

## 1. Visuals

Every pixel in this film is produced by original code written for this cue:
`parts/brush.mjs`, `parts/assets.mjs`, `parts/sketch.mjs`. No third-party shader,
illustration, sprite sheet, texture, or code structure was copied from any other
project. The paper ground, the paper grain, the boil jitter, the hand-drawn brush
ribbons, the flame character, the matchbox, the cel smoke / sparks / star-bursts /
explosion shape and the lettering are all generated procedurally at load time or
per frame.

## 2. Fonts

No font file is redistributed with this demo. The page references **system font
families only**; the operating system resolves them (the render machine is macOS,
as specified by the harness).

| Usage | Family | Source / licence |
|---|---|---|
| `手作` wordmark, `拾光` matchbox brand | Songti SC | macOS system font (`/System/Library/Fonts/Supplemental/Songti.ttc`), used under the macOS system-font licence; not redistributed |
| `一根火柴，十秒魔法` tagline, `火柴 · 拾支装` | Hiragino Sans GB | macOS system font (`/System/Library/Fonts/Hiragino Sans GB.ttc`); not redistributed |
| `MADE BY HAND` | Helvetica Neue | macOS system font; not redistributed |

The wordmark is *not* plain type: its glyphs are rendered to a mask, dilated with a
seeded per-variant ragged edge, tinted, and re-composited as four separate
"drawings" so the lettering boils like ink (see REPORT).

## 3. Libraries

None vendored. The only code imported is the project's own helper module,
`/shared/ease.mjs` (maths + a seeded PRNG), supplied with the harness. No CDN
request is ever made at render time — the page loads only `parts/*.mjs` and
`/shared/ease.mjs` from the local static server.

## 4. Audio

The soundtrack is synthesised from scratch by `audio.py` (pure Python standard
library, no numpy) using the project-supplied `/shared/audio.py` toolkit — sine /
triangle / saw oscillators, filtered noise, ADSR and exponential envelopes, a
Schroeder-ish plate reverb and a soft limiter. **No sample, loop, or recording is
used**, so there is nothing to license. No real instrument recording, no
third-party sample pack.

## 5. Brands & copy

There are no real trademarks or logos in the film. The matchbox brand `拾光`
(SHIGUANG) is invented for this short, as are all other marks. All Chinese and
English copy is original and punctuated to Chinese convention
(`一根火柴，十秒魔法` uses a full-width comma; `火柴 · 拾支装` uses a spaced
middle dot).

## 6. Harness fix

One bug was found and fixed in the shared toolkit (not in this demo):

* `shared/audio.py` — `pad()` accepted a `gain` parameter but never applied it,
  returning the raw (roughly +5× too loud) low-passed saw stack. Fixed to
  `return [v * gain for v in lowpass(t, cutoff)]`.
