Skip to content

About

Procedural risograph films in single HTML files (Window Seat, Roost and more), with the Claude Code skills, docs and tools to make your own.

Topics

Resources

Stars

304 stars

Watchers

1 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

riso-windowseat

Procedural risograph films and prints, each a single index.html of Canvas 2D and Web Audio: no libraries, fonts, images or network calls. The sampled scores carry their recordings inside the file. The repo began as the release of Window Seat. Making it, and the two shorts before it, produced a reusable kit of Claude Code skills, craft docs and a render harness. Every film and print since was made with that kit.

Watch the films · Download the MP4s · Make your own

Window Seat, dawn from the viaduct

Films

All are 1080 × 1080, 30 fps, and each is an MP4 on the v1.0 release. Every film except Standby also plays at seveneves.ai/riso. To watch the source instead, open any index.html in a browser and press Play; sound starts off and has its own toggle.

Film Length
Window Seat 78 s A night train journey through one window, scored for piano
Roost 70 s One take of a starling murmuration from sunset to roost, scored for strings
Held 70 s A kite that flies only while something holds its line, scored for found instruments
Nonpareil 70 s Paper marbling from the first drop to the one print it makes, scored for handpan
Eclosion 36 s A monarch leaves its chrysalis, pumps its wings full and flies, in one take, scored for vibraphone, clarinet and horn
Passenger 36 s A butterfly draws itself in the fog on a train window and comes alive at sunrise, scored procedurally
Standby 52 s A DVD player's idle logo bounces round a bedroom TV around 2001 until it hits the corner, scored as slow 90s lo-fi
Lumen 28 s A seed that contains a sun; the first short, in the call-and-response Resonance form
Emergence 28 s Lumen's sibling in the same form: how machines learned to listen, as nine worlds

Window Seat

A night train journey seen through one fixed window with a glass of water on the sill. Every pixel and every sound except the piano is procedural.

Time Passage
0–19 s Golden departure from a platform, fields, a red truss bridge, a conifer cutting, a tunnel
19–38 s A night city with a canal and a level crossing; another train overtakes, passengers in its windows
38–57 s Fireworks over a far town, reflected in a lake; sleeper hours with star trails; pre-dawn fog
57–78 s Dawn from a viaduct, rain streaming back along the glass, a lakeside halt under a rainbow

The score, "A Light Left in the Window", is an original piano piece in 6/8 whose phrasing follows the picture's timeline. The glass of water leans with every acceleration and is the last thing to settle.

Contact sheet of Window Seat's shots

Roost

Roost: the flock over the sun, the falcon strike, starlings pouring past, the roost A murmuration over a marsh in one fixed view. Each starling is a 2–3 px ink dot, so the flock is the halftone: where the sheet turns edge-on, the birds pile into dark printed ribbons. A falcon stoops through it and the flock pours into the reeds at nightfall. The string score is timed from the picture.


Held

Held: the kite on the hill, the line parting, the church vane, the sloop's catch A paper kite's line frays and parts at a hillside stake. Loose, it can only tumble; it falls across a harbour town, is snagged for a moment by a church weathervane, and over the water its line catches on a sloop's forestay, so the kite climbs again, held by the boat sailing into dusk. Its tail and loose line are simulated ropes. The score uses CC0 mbira, harp, glockenspiel, chimes, strings and flute, with every cue read from the picture's events.


Nonpareil

Nonpareil: drops landing, the comb crossing, a bullseye pulled into a flower, the sheet peeling back Paper marbling seen straight down into the bath. Drops of colour land on the beat and push each other outward; a rake and a fine comb drag them into the nonpareil pattern, and a flower is dropped and pulled into the middle. A sheet unrolls across the bath, is peeled back toward the lens like a turning page, and lands face up and mirrored beside the emptied tray. The marbling is closed-form geometry, so every frame is exact. The drops are the handpan's notes, over a slow cello and contrabass line.


Eclosion

Eclosion: the case splitting, the butterfly swinging out, the full display, the flight One monarch's first morning, in one continuous macro take. A jade chrysalis clears and splits; the butterfly drops out, hangs from the empty shell and pumps its crumpled wings full in six slow pulses while its swollen abdomen shrinks. It turns, opens its wings twice and flies, and the camera returns to the empty case, framed as the chrysalis was in the first second. The wings are a planar 3D model whose pattern was measured from a specimen photograph, layered by depth so the body reads right from the side, from behind and in flight. A slow trio in F for vibraphone, clarinet and horn shares the picture's clock.


Passenger

Passenger: the drawing in the fog, sunrise and ink, lift-off, the wings opening on the glass A child of this repo and alexgreensh/anidoodle: Window Seat's window and glass of water, and anidoodle's drawing that makes itself and then comes alive. Before dawn a butterfly draws itself in the fog on a train window, stroke by stroke in the order a finger would. Its clear lines are windows, so lamps slide through the drawing and the dawn fills its wings. The sunrise warms it off the glass and the camera pulls back from the pane to the seat. It lands on the rim of the glass of water and drinks, and the butterfly-shaped hole it left stays in the fog. The score is procedural, from the shared kit: every mark of the drawing is a note, and the opening motif is answered as the wings open.


Standby

Standby: a near miss at the screen's corner, the hit in pink, the raster collapsing to a dot, headlights sweeping the stars A kid's bedroom around 2001, long after bedtime. The DVD player has idled so long that its logo bounces round the dark CRT, taking a new ink at every edge and lighting the room in it. From the bed we wait for the logo to land exactly in a corner; it nearly does three times, each miss closer, and the camera leans in after each. When it lands, the screen flares pink, and the sleep timer switches the set off: the picture collapses to a line, then a dot. In the dark the glow stars come up, the DVD/VCR blinks 12:00, and a passing car sweeps the blind stripes across the wall. The room is a per-pixel raycast feeding the plates. In the score the logo's two wall rhythms are its two voices, drifting into phase at the corner.


Prints

Still series driven like a film (each integer time is one print) and exported as native 2160 × 2160 PNGs with tools/still.mjs.

Cabinet: five plates from an imaginary natural-history cabinet (a sectioned nautilus, arranged diatoms, a luna moth, a cut agate, a sunflower), each built from its own growth geometry and cut as fine line over screened colour.

Cabinet, plates I–V

Sceneries: a curved viaduct in fog, a cliff village at dusk over its own reflection, and a stepped canyon at sunrise.

Sceneries: viaduct, harbour, canyon

How they're made

I directed each work; Claude Code (Anthropic's coding agent) wrote the code, using the skills, rules and docs in this repo. A work is designed in its FILM.md or PRINT.md, its hardest frame is proved first, and then it is inspected as frame strips, 1:1 crops and loudness sheets rendered by tools/. Every frame is a pure function of time (seek(t)), so any moment can be inspected exactly and the MP4 cannot drop frames. Each record keeps the design decisions and measurements; from Window Seat on, each also lists the work's remaining weaknesses.

Make your own

You need Node.js 18 or later and Claude Code.

git clone https://github.com/sevenevesai/riso-windowseat
cd riso-windowseat/tools
npm install && npm run setup && npm test

npm install brings playwright-core and a bundled ffmpeg. npm run setup downloads the Chromium and Firefox builds the harness drives; the released MP4s are Firefox renders (render.mjs --engine firefox). npm test runs the harness's self-tests and exits 0 when they pass.

Then open Claude Code in the repo root and ask, for example:

  • "Make a 40 second riso film of a lighthouse keeper's night."
  • "Make a riso poster of a heron on a pier at dusk."
  • "Score this film" or "The rain at 66 s is too loud."
  • "Extend Window Seat with a snowy mountain pass after the lake."

CLAUDE.md gives the session the contract and commands. The riso-film, riso-still and riso-score skills in .claude/skills/ carry the workflow and gates. Each skill's examples.md points to the routines in the shipped films that are worth reusing. After each edit to a film, a hook flags any Math.random() call and a missing window.__riso.

What's inside

Path Contents
films/ One folder per film: index.html and its FILM.md; sampled films add AUDIO-SOURCES.md and the script that rebuilds their sample bank
prints/ Cabinet and Sceneries with their PRINT.md, and Workings, which donates the print kit new works start from
docs/ The craft: brief (which doc to read when), visual development, drawing, characters, scene space, motion, live plates, sound, quality bar, and the optional Resonance form
studies/ The drawing, composition, scene-space and sound kits as interactive A/B study pages
tools/ Scaffolding, verification, contact sheets, still and MP4 export, audio analysis (README)
.claude/ Skills, the ink-plate rule and the determinism hook

License

The code, films and prints are MIT, see LICENSE, except the third-party material below. THIRD_PARTY_NOTICES.md sets out the two parts with terms beyond MIT: Window Seat's piano recordings (CC BY 3.0; keep the credit when you redistribute the film or its exports), and Eclosion's wing geometry, measured from "Danaus plexippus MHNT dos.jpg" by Didier Descouens (Wikimedia Commons, CC BY-SA 4.0) and offered under that license.

Each sampled film's AUDIO-SOURCES.md credits its recordings and pins their source commits. CC0 asks for no credit, so for those recordings the credit is provenance.

Film Recordings License
Window Seat Salamander Grand Piano V3, Alexander Holm CC BY 3.0
Roost Strings from VSCO 2 Community Edition, Versilian Studios CC0 1.0
Held Instruments from Versilian Studios' VCSL and VSCO 2 CC0 1.0
Nonpareil Handpan from GAMEDRIX974's HandPan pack on Freesound; cello and contrabass from VSCO 2 CC0 1.0
Eclosion Vibraphone from VCSL; clarinet and horn from VSCO 2 CC0 1.0
Standby Electric piano (Yamaha TX81Z), upright piano, kalimba, bass drum, hi-hat and shaker from VCSL CC0 1.0

About

Procedural risograph films in single HTML files (Window Seat, Roost and more), with the Claude Code skills, docs and tools to make your own.

Topics

Resources

Stars

304 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages