Liza Daly
A Physical Book makes a digitized book “physical” by rendering it in a simulated space where properties like gravity, friction, and velocity all apply. The program randomly perturbs the letters, then takes a snapshot at a point in time, re-assembling the images into a new, “un-digitized” book.
The raw, uncorrected scanned text of The Up-To-Date Sandwich Book: 400 Ways to Make a Sandwich (1909) is re-imagined as this 251 page (50,964 words) book:
Install dependencies and run the dev server:
npm install
npm run dev
To build the library for embedding in another site:
npm run build
This produces ESM and UMD bundles in dist/. Import and call createPhysicalBook:
import { createPhysicalBook } from 'a-physical-book'
const game = createPhysicalBook('#container', {
text: 'Your plain text here...', // text content to render
effect: 'splatter' // effect name (optional, random if omitted)
})Available effects: normal, splatter, squish, bump, rain, wind, spin, springy, crunch, slantLeft, slantRight, splitX, splitY, drift. If no effect is specified, one is chosen at random. You can also import effectNames for the full list.
A Physical Book uses the web-based game engine Phaser CE. Each page of the book is rendered into an invisible <div> (to produce correct leading and line-height), then copied into the Phaser game world with each letter instantiated as a distinct addressable sprite.
For each page, one of a dozen transformations is applied to give the text varying physical properties, such as mass, acceleration, collision, or spin.
On page load, the provided text is rendered, the transformation is assigned, and the world is allowed to run. A Selenium wrapper script calls all 500 pages in succession, taking a screenshot at a random point in the animation:
The final book is rendered in a two-page spread PDF.
Full 50,000+ word, 250 page PDF (55MB)
In a hilarious bit of recursion, it is also being hosted on The Internet Archive, where the book scan originated.





