GL4SS (The Looking Glass): a spatiotemporal image and video engine that runs entirely in your browser
the looking glass — spatiotemporal image + video engine
At a glance
- What is it?
- GL4SS, also written as The Looking Glass, turns a map pin, a year and an hour into a generated still or a short film with sound. It is a single Vite page with no backend, and it spends money only when you pull the lever.
- Who is it for?
- GL4SS suits people who want a fast, account-free way to see a place at a chosen year and hour, and who are comfortable bringing their own OpenRouter key and paying per generated frame. It is the wrong tool if you need a hosted service, a server-side API, or reproducible output that does not depend on a third-party model staying available.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 60 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What GL4SS actually does with a place, a year and an hour
The README opens with a claim it immediately qualifies: "it's not a time machine. i checked. but it does feel time-machine-adjacent!" The instrument it describes is narrower than that joke. You point it at a coordinate on Earth, dial a year, pick an hour, and it develops an image of what was standing at that spot in that year at that hour. If you want more, it renders the frame as a short film with sound.
The problem it addresses is a familiar one. You stand somewhere old and try to picture the street before the street, the harbour before the concrete. The README puts it as your brain reaching for the image and coming back with mush, "because it has never been given anything to reach with." GL4SS is the thing to reach with, at least as far as a generative model can supply one.
The intended user is someone who wants to browse deep time and recent history on one page, without an account, without a server, and without a subscription. The README states the design position plainly: "One page. No backend. No account. Your key, your browser, your archive." That sentence also defines the audience. If you want a hosted product where someone else holds the API key and the bill, this is not aimed at you.
The dial, the sundial and the lever: how the engine is put together
The temporal axis is not a continuous slider. Time is quantised into 284 stations, spaced by how much actually changes. The README describes 25-million-year strides through the age of dinosaurs and one-year steps through living memory, with a rung at each of the eleven places the scale changes gear. The stated reason is that 284 evenly spaced ticks would be a scale that lies. The year field accepts typed input such as 1969, 500 BC, 66 mya or 20000 years ago.
The sundial is a separate control that rides the outside of the dial and is dragged around the sky. Cross the horizon and it becomes a moon that walks a lunar progression. Dawn and sunset sit at 9 and 3 o'clock so the horizon line runs through the disc and the sun reads as half-risen and half-set. The README attributes this to geometry rather than masking.
The lever is the only control that spends money unless you opt in to something else. Browsing is free and the current picture stays up until you throw the lever. The README notes that an earlier version fired on a timeout after you stopped scrubbing, which made pausing to think a billable event. Settings contains one opt-in that generates the next station ahead of you for instant stepping, and the README says it is off until you turn it on.
The wait state is a raw WebGL fragment shader rather than a spinner: a 1/r tunnel of flowing fractal noise with per-channel chromatic aberration and radial filaments, wrapped so the angular seam closes. Direction sets the palette and distance sets the speed, so a one-station nudge and a plunge into the Cretaceous are described as visibly different journeys. The dependency list backs this up. The runtime dependencies are leaflet, react, react-dom and three, and the README states the backend is NONE.
Installing GL4SS and pulling the lever for the first time
The repository is a Vite application with a TypeScript build step. The README gives two commands to run it locally, and package.json confirms the scripts they map to. Node versions are pinned by the engines field to ^20.19.0 or >=22.12.0, and there is a .nvmrc at the repository root if you use nvm.
npm install
npm run devnpm install resolves the four runtime dependencies and the Vite, TypeScript and ESLint toolchain. npm run dev starts the Vite dev server, which serves index.html and the src/ tree. The README does not state a port, so take the URL the dev server prints on startup.
Before anything generates, you need an OpenRouter key. The README says it lives in your browser and goes only to OpenRouter, and that a strict CSP pins connect-src so a compromised dependency has nowhere to ship it. Settings has a test button that checks the key against OpenRouter for free and reports your remaining balance, so you find out a key is wrong before spending a lever pull discovering it. Use that button first.
npm run build
npm run previewThe build script runs tsc -b before vite build, so type errors fail the build rather than shipping. npm run preview serves the built output. There is also a wrangler.jsonc at the root, which is the Cloudflare Workers configuration file, so deploying the built assets to Cloudflare is the path the repository layout implies. The README does not document a deploy command, so treat that as the thing to check before you assume a hosting story.
Once the page is up, the README's worked example is a pin on the Bay of Naples, the year AD 79, and an afternoon sun. That is the shape of a first run: place, year, hour, lever.
Five failure sentences, and the one that is not in the app
The README is unusually specific about error handling. When something goes wrong, the app says which of five things it was: no key, wrong key, no credit, too fast, or model retired. Each comes with a sentence and the one button that fixes it. That list is a real design decision, because four of those five are conditions of the OpenRouter account rather than bugs in the page.
The failure mode the app cannot catch is the one the README does not discuss: output quality. The stills stage defaults to x-ai/grok-imagine-image-quality and is swappable across five models, and the film stage defaults to bytedance/seedance-2.0 across five more. Those are generative models. A frame of a Roman harbour in AD 79 is a plausible image, not a sourced one, and nothing in the README claims otherwise. If your use case needs an image that can be defended as evidence about the past, this is the wrong instrument, and no amount of model swapping changes that.
The second gap is cost predictability. Browsing history is free and the lever is explicit, which is good. But the README does not state a per-pull price, and the price depends on which model is selected in Settings and on OpenRouter's own rates. The balance check tells you what you have, not what the next pull will cost.
The third is that the README does not document rollback or history. If a generated frame is bad, the documented recovery is to generate again, which spends again.
How GL4SS differs from a plain image-generation front end
The obvious alternative is a general image generation interface pointed at the same models. Those tools take a text prompt and return an image. GL4SS takes a coordinate, a year and an hour, and builds the prompt from them, which is the whole product. The dial, the 284 stations and the 55 curated journeys exist to constrain the input so you are not writing a prompt from scratch.
The second alternative is a historical map or reconstruction project. Those show you a documented reconstruction with sources attached. GL4SS generates a new image per request. The difference matters when you need to cite something.
The third is a self-hosted pipeline that calls OpenRouter from a server. That would let you share one key across a team and log every request. GL4SS deliberately does not do that. The key stays in the browser and the CSP restricts where it can go, which is a privacy gain and an operational loss at the same time. There is no server-side audit trail because there is no server.
The fourth is simply looking at the place. The README's own framing is that the tool gives your imagination something to reach with. It does not claim to replace the record.
Licence, maintenance and what an upgrade costs you
The repository is licensed AGPL-3.0 and package.json declares AGPL-3.0-or-later. That is a strong copyleft licence with a network clause: if you run a modified version as a network service, the AGPL's terms reach the users of that service. This is not legal advice. If you plan to host a modified GL4SS for other people, read the licence text in LICENSE and get your own advice about what the network clause requires of you.
The last push to the repository was on 2026-07-31. The repository is not archived. There are no retrieved releases, so there is no versioned artifact to pin against. That combination means you track the main branch, and an upgrade is a git pull plus npm install plus npm run build. The build runs tsc -b first, so a breaking change in the TypeScript surface fails loudly rather than silently.
The cost that matters more than the code is the model configuration. The README lists a default scene-planning model, five swappable still models and five swappable film models, all reached through OpenRouter. Model IDs move. The app already has a failure sentence for a retired model, which tells you the authors expect this. Budget for the fact that the defaults in the README will not be the defaults OpenRouter serves forever.
Editorial conclusion
GL4SS suits people who want a fast, account-free way to see a place at a chosen year and hour, and who are comfortable bringing their own OpenRouter key and paying per generated frame. It is the wrong tool if you need a hosted service, a server-side API, or reproducible output that does not depend on a third-party model staying available. Before adopting it, read src/ to confirm how the OpenRouter key is stored and sent, check the model IDs in Settings against OpenRouter's current catalogue, and run npm run build to see the TypeScript and Vite pipeline complete on your machine.
Frequently asked questions
What does GL4SS (The Looking Glass) do?
It is a spatiotemporal image and video engine. You point it at a place on Earth, dial a year and pick an hour, and it develops an image of what was standing there at that time, optionally rendering it as a short film with sound.
How does GL4SS (The Looking Glass) work?
It is a single Vite page with no backend. A dial quantises time into 284 stations, a sundial sets the hour, and the lever sends the request to OpenRouter using your own key, which the README says stays in your browser.
How do I install GL4SS (The Looking Glass)?
The README gives npm install followed by npm run dev. package.json pins Node to ^20.19.0 or >=22.12.0 and lists leaflet, react, react-dom and three as the runtime dependencies.
Does GL4SS (The Looking Glass) need an API key?
Yes. You bring your own OpenRouter key, which the README says lives in your browser and goes only to OpenRouter. Settings has a test button that checks the key for free and reports your remaining balance.
Which models does GL4SS (The Looking Glass) use?
The README lists google/gemini-3-flash-preview for scene planning, x-ai/grok-imagine-image-quality as the default still model with five swappable options, and bytedance/seedance-2.0 as the default film model with five swappable options.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/elder-plinius-gl4ss)