iArt.ai
AI motion graphics software — the After Effects alternative anyone can use. Create animations and explainer videos from a text prompt in minutes.
A night-time theme park in 3D: seven lands around a still lake, a monorail, and ten thousand paper lanterns. Tour it, explore it or walk it in the browser.
MediaJavaScript · PythonGitHub @sh1ftmakerOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Lanternfall, a fictional night-time theme park, as a three.js fly-around you can also explore and walk through
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A fictional night-time theme park you can fly over, orbit and walk through in the browser.
Seven lands ring a still, black lake. A needle tower stands on an island in the middle, a monorail loops over
every land, and at eleven ten thousand paper lanterns come down onto the water.
Press H or the eye button to hide the controls for an unobstructed view; H, Esc or the faint button in the corner brings them back.Read the full README ↗A fictional night-time theme park you can fly over, orbit and walk through in the browser.
Live: https://sh1ftmaker.github.io/lanternfall-3d/
Seven lands ring a still, black lake. A needle tower stands on an island in the middle, a monorail loops over every land, and at eleven ten thousand paper lanterns come down onto the water.
| Mode | What it does | Mouse and keyboard | Touch |
|---|---|---|---|
Tour (1) | A 2½-minute guided flight over the gate, the Spire, each land and the monorail, on a loop | Drag to take over | Drag to take over |
Explore (2) | Free orbit; the place chips fly you to each land | Drag, scroll, right-drag; arrows or WASD, +/-, Shift+arrows to pan | Drag, pinch, two-finger pan |
Walk (3) | On the ground as Wick the lamplighter (third person), or in first person (P or the lantern-pole button switches; the choice is remembered); the chips drop you at each land | Wick: see Platformer below. First person: WASD or arrows, drag to look, Shift to run, Space to hop. Esc to leave | Wick: stick under the left thumb, Jump / Crouch / Swing buttons. First person: left thumb walks, right thumb looks, Hop button |
Press H or the eye button to hide the controls for an unobstructed view; H, Esc or the faint button in the corner brings them back.
F toggles full screen. The settings button (top right) has the picture quality (Fast, HD, Cinematic),
switches for fireworks, lake mist and searchlights, and Reduce motion (also taken from the system setting).
Cinematic is the default on computers, HD on phones.
Choices are remembered in the browser. Until a picture setting has been chosen, the page lowers quality by itself if
frames run slow (resolution, the mirror, effects; never the guests). Choosing Fast, HD or Cinematic gives exactly that
setting and holds it.
A journal (the pill under the title, or B) keeps track of everything below; progress is saved in the browser.
E), counted land by land; and a
lamplighter who came before. At the lake rail you can write a wish and send up a lantern of your own.O): frame, focus, pick a look, keep the picture.Each is a module in fx/game/<name>/ on a small shared core (fx/game/core.js, contract in fx/game/API.md);
#no-game turns them all off, #no-<name> one of them.
The Wanderers' Hall (the Paper Doors, the Signing Tables, the gallery) and the Brine & Barrel taproom on Brinewatch Wharf (bar, hearth, barrel tables; doors to the promenade, the deck and the wharf) can be walked into, and the Guildhollow castle courtyard and the centre of the Rose Maze are open. It does not rain indoors.
About 2,400 guests walk the park in ones, pairs and small groups. They stroll the promenades, queue
at stalls, sit on benches, take photos and line the lake rail to watch the lanterns. The figures are generated in
code (fx/guests/assets.js), animated in the vertex shader and lit by where they stand; the crowd simulation
(fx/guests/sim.js) runs in a Worker on the walk grid, using benches, stall fronts and viewpoints extracted from
the Blender model (data/guests.json, generator in tools/guests/). A "Guests" switch is in the settings sheet.
Walk mode's player is Wick, a lamplighter you steer in third person (the lantern-pole button in the top bar, or P,
swaps to a first-person walker and back; #fp in the address starts in first person): run, triple jump, long jump, backflip, wall kick, ledge grab, ground pound, dive, crawl
and swim across Stillwater. On a keyboard: WASD, Space to jump, Shift to crouch, E to swing the lantern pole, drag to
turn the camera. On a phone: a stick under the left thumb, Jump, Crouch and Swing buttons under the right, drag
elsewhere to turn the camera. Gamepads work too. The movement ticks 30 times a second and is drawn interpolated
at the display's rate.
The movement runs on libsm64 compiled to a 122 KB WebAssembly module with every
ROM, model, texture and audio path removed; it needs no ROM. The character, its rig and all of its animations were
made for this project, and collision comes from the park's own geometry. What exactly is in the module, and its
licences, are listed in fx/platformer/CREDITS.md. Nothing of it is downloaded until
Walk is first entered.
Everyone on the site shares one park. In Walk, the other visitors who are walking show up where they are as
lamplighters with their lanterns, each with a small generated name over them ("Quiet Moth", "Amber Lantern"). Visitors
on the Tour or in Explore count, but are not drawn. The settings sheet has an Other visitors switch (remembered,
on by default) and says how many others are in the park. #solo in the address turns it all off for that visit.
Other visitors are only something to see. They do not bump into you, and they cannot use rides, prompts or secrets for you.
Privacy: there are no accounts and nothing to type. Names are made up by the server for each visit. Only your position,
heading and animation in the park are sent, and only while you walk. Nothing is stored: the server keeps who is here
right now and forgets them when they leave. If the server cannot be reached, the page works exactly as before.
The server is a small relay in party/ that runs on Cloudflare Workers with partyserver (deploying, running it locally and the
wire format: party/README.md); the client is fx/multiplayer/.
Frame-time reports. To learn how the park runs on real phones, the page sends a short report to the same server
(POST /api/frames): when it opens, after 15 seconds, after a minute, every four minutes and when you leave. A report
holds a random id made for this visit (kept only in the page's memory, so the next visit has another), the kind of
device (phone or computer), operating system and browser with their major versions, the graphics chip the browser
names, the number of processor cores and the memory class, screen and canvas size, the picture setting and whether you
chose it, how far the page lowered quality by itself, how smooth the frames were (median and slowest frame times),
how long the park took to load, and up to five script error messages. Nothing else: no accounts, no cookies, nothing
saved on your device, no position in the park, nothing you type; the server does not keep addresses or headers, and it
keeps reports for 30 days at most (party/frames.ts). #notelemetry or #solo turns the reports off for a visit;
they are never sent from local addresses or automated browsers. Reading them: tools/telemetry/read.mjs.
The weather changes by itself every two minutes: it starts clear, then rain, storm, mist, clear again, snow, and
round. The Weather row in the settings sheet holds one of Clear, Mist, Rain, Storm or Snow instead (or lets it change
again); the choice is remembered, and #weather=rain in the address holds that weather. Rain falls only under open sky (a height map of the park is rendered once
from above), wets the paving, fills puddles that pick up the nearby lamps and neon, and rings the lake. Storm adds
wind and slow, soft lightning with thunder that arrives late by distance; with Reduce motion there are no flashes.
Snow settles on surfaces that face the sky. With sound on, rain sounds different on open paving, at the lake shore
and under cover.
Press the speaker button (or M) for sound; headphones are best. Every land has its own ambience and music, placed
in the world: music comes from the bandstand, the tavern or the dance floor and fades with distance, the monorail
passes overhead, the carousel organ circles with the carousel, and fireworks arrive a moment after the flash.
Nothing audio is downloaded until sound is switched on. All music is synthesised from code (tools/audio/);
ambiences mix synthesis with CC0 field recordings credited in fx/audio/CREDITS.md. Volume and separate Music and
Ambience switches are in the settings sheet.
Add these after # in the address, separated by commas, then reload.
| Token | Effect |
|---|---|
fx=hd | The Cinematic post chain: ambient occlusion, mip bloom, temporal anti-aliasing (same as the setting) |
fx=ultra | The above plus tilt-shift on aerial tour shots and light streaks |
ratio=2 | Draw at pixel ratio 2 instead of 1 (every setting draws at 1, smoothed by temporal anti-aliasing), for comparison |
traa=0 | No temporal anti-aliasing (for debugging; it is on in every setting) |
fx=legacy | The HD chain (bloom), whatever the saved setting |
nodetail | Turn off the procedural paving, plank, masonry and roof detail |
noshadow | Turn off moon shadows |
aurora | Aurora in the night sky |
no-guests | Hide the guests |
weather=mist, rain, storm, snow | Start in that weather |
fp | Walk mode starts in first person |
guests=N | Set the number of guests |
no-motes, no-fireworks, no-beams, no-mist, no-carousel | Turn individual effects off |
nosim, noboat | No ripple simulation on the lake, no punt |
solo | No other visitors: nothing connects (no frame-time reports either) |
notelemetry | No frame-time reports for this visit |
mp=host[:port] | Use another visitors server for this visit (for example a local wrangler dev) |
fx/surface.js): each vertex carries a surface class
(paving, wood, masonry, roof, organic) that selects setts, planks, block courses or tile rows.data/*.bin (about 33 MB in total).
The browser unpacks it with DecompressionStream; there is no build step (the only WebAssembly is the
optional platformer's movement module).app.js plus small modules in fx/:
the lake (planar mirror and ripple simulation), the lantern fall, particles, depth-precision handling, the post
chain, the settings sheet and WebGL context-loss recovery.data/nav.bin) instead of mesh collision.Any static file server works:
python3 -m http.server 8765
Then open http://localhost:8765/.
Lanternfall is a fictional park. This repository contains only the 3D park model and the viewer.