2026-04-22 โ— work in progress 260422-zoomlayout

Zoom layout

Pre-computed zoom states that expand composite events in place โ€” so one ipm graph stays readable from a coarse overview all the way down to full detail.

Collapsed 'around' zoom state: a handful of composite events.
aroundcoarse overview
Intermediate zoom state: one composite event expanded into its sub-events inside a container.
around + detailone event expanded in place
Fully expanded zoom state: the whole nested event tree with things and concepts.
detailfully expanded

scroll  around → around + detail → detail  (same murder-full graph)

The idea

An ipm story is nested: a coarse event hides a whole leads-to chain of sub-events, each of which hides more. Rather than redraw the graph at every step, the layout pre-computes a handful of zoom states and grows the diagram outward โ€” expanding a chosen composite event into a container of its parts while everything around it holds its place.

The toolchain

.ipmt

An ipm graph in text form โ€” the source story.

zoomlayout-gen

Compiles the graph into a .zoomlayout.json: a set of zoom states and node positions. Zoom inputs can be given explicitly or auto-detected from the graph.

ipm-server canvas

Serves the states as pre-rendered SVG on an infinite canvas, with live node expansion via a small API.

On the canvas

Offline export

A whole canvas can be baked into a single self-contained .zoom.html โ€” every zoom state, node position and pre-rendered SVG inlined, no server required. Open it straight from disk and the scroll / click / expand interactions still work fully offline. Every model in the SSTorytime corpus links its own .zoom.html export.

The previews above are three of the pre-rendered states for the murder-full example. This is early sandbox tooling โ€” the layout, state model, and canvas are all still moving. Expect rough edges.

← back to the lab