# 09-collage — CREDITS

**拼贴日报 / THE COLLAGE DAILY** — a 10-second cut-and-paste animated short.
All motion, type, props, paper, sound and code in this demo were authored for this
project. Nothing was copied from another demo, and no third-party brand appears.

## Photography (the only external assets)

| File | Source | Credit | Licence |
|---|---|---|---|
| `parts/elder.jpg` | Wikimedia Commons — *Elderly Man; Full Face* (MET 37.14.52) | The Metropolitan Museum of Art, New York | **CC0 / public domain** (MET Open Access) |
| `parts/nebula.jpg` | Wikimedia Commons — *Eta Carinae Nebula 1* | NASA / ESA, Hubble Space Telescope | **Public domain** (NASA imagery) |

Both were downloaded once with `curl` into a scratch directory and copied into
`parts/`; the render never touches the network. The portrait is converted at
runtime into a duotone halftone plate (`halftoneSprite`, two passes at 6 px and
3 px cells); the nebula is converted into a colour halftone plate
(`colorHalftone`) for the head cavity and the planets. The photographs are used
as *raw material for a collage*, not reproduced as pictures: everything that
appears on screen is redrawn from them and re-composed.

## Type

System faces only, loaded through `document.fonts.load` — nothing is fetched:

* PingFang SC, Songti SC, Hiragino Sans GB — the Chinese copy
* Futura Condensed ExtraBold, DIN Condensed Bold, Arial Narrow — the Latin kickers
* Arial Black, Didot / Bodoni 72, American Typewriter Condensed — available to the
  type stack and loaded up front, used where a face is missing and the fallback
  chain takes over

The masthead wordmark **拼贴日报 / THE COLLAGE DAILY**, the imprint **第 9 号 ·
脑洞特辑** and the review line **NO.09 10 SEC. CUT · PASTE · REPEAT** are invented
for this film. There is no real newspaper, studio or product referenced anywhere.

## Sound

`audio.py` is pure Python: every sample is synthesised numerically at render time
from `shared/audio.py` primitives (`kick`, `snare`, `hat`, `tone`, `pad`, `stab`,
`pop`, `whoosh`, `riser`, `impact`, `bell`, `blip`, `noise`) plus hand-written
noise envelopes for the paper rips, roller hiss and scissor snips. No sample pack,
no library, no recording. The score is a 100 BPM boom-bap bed in D minor with a
16-note walking bass; the sound design is cut to the same cue sheet as the picture.

## Engine

`index.html` + `parts/*.mjs`, plain Canvas 2D, no framework, no shader, no
vendored library. Every frame is a pure function of `t` (seeded `mulberry32`
everywhere, `Math.random`/`Date.now` never called), which is what makes the
render reproducible frame-for-frame.
