โœฆ The Winding Gallery

The Winding
Gallery

Your photographs, hung along an endless winding sky‑path.

A moonlit cobblestone causeway winds between lanterns and framed photographs, floating in a starry night sky
Plate Ithe causeway, two hundred paces in

What is this?

A place, not a page

Point it at any directory of photos โ€” one command, no build step โ€” and walk a moonlit causeway adrift among floating islands. Every photograph becomes a gold-framed plate on its own stone plinth, lit by lanterns and fireflies, with a brass plaque bearing its name.

แ›Ÿ

An endless path

The causeway is conjured ahead of you and dissolved behind you, winding and gently climbing forever. When the collection runs out, it simply begins again.

โœฆ

Every photo, a plate

Landscape or portrait, each image is framed to its true aspect, numbered in Roman numerals, and hung under its own soft glow โ€” as is proper for a wizard's collection.

๐Ÿฎ

Behold, up close

Look at a plate and press E โ€” the view flies in and a parchment panel names it. Press Esc and drift back to the path exactly where you left it.

แ›ƒ

The Keeper's Tour

Press T and a glowing wisp leads a self-playing exhibition, plate to plate, forever. Pair ?auto&tour for a kiosk or TV slideshow.

แšน

Wings & waygates

Subfolders become wings of the gallery โ€” each hangs together on the path, announced by a stone waygate carved with its name in gold.

แ›ž

The Wayfarer's Map

Press M: every wing listed with its plate count and a you are here mark. Choose one and the night fades โ€” you arrive walking through its gate.

Quick start

Hang your own photographs

From npm

# any folder of jpg / png / webp / gif / avif โ€” scanned recursively
npm i -g the-winding-gallery
winding-gallery ~/Pictures/landscapes

From source

# Node 24 LTS recommended
git clone https://github.com/acaylor/the-winding-gallery.git
cd the-winding-gallery
pnpm install
pnpm run samples   # conjure 8 sample plates
pnpm start -- ~/Pictures/landscapes

Then open localhost:4173 and step onto the path.

Walking the path

The walker's grimoire

Clicktake hold of the view
WASD + mousewalk and look โ€” Shift to hurry
Scrollglide along the path, hands-free
E / Click a platebehold it up close, name and number revealed
Tthe keeper's tour โ€” a wisp leads, any key hands the path back
Mthe wayfarer's map โ€” step to any wing of the gallery
Escreturn to the path
Htoggle the hints

Under the moonlight

How the magic works

แš 

No build step, one dependency. A tiny zero-dependency Node server scans your photo directory and serves the app; Three.js is served straight from node_modules.

แšข

A path that cannot knot. The causeway is a heading integrated over gentle overlapping sine curvatures โ€” tested to wander and climb forever without ever turning back on itself.

แšฆ

An infinite walk stays lean. Segments are built ahead and dissolved behind; photos decode off-thread, downscale to 2048 px, and are reference-counted.

แ›Ÿ

Real stone and real lanterns. CC0 cobblestone, rock and bark from ambientCG; the lantern is the Khronos glTF sample model, slimmed from 9.6 MB to 271 KB; the floating islands are Poly Haven photoscans. The windswept pines are grown procedurally โ€” no asset at all.

Every bundled asset is CC0 โ€” catalogued in ASSETS.md. Tested with node --test on every push.