Self-Hosted Virtual Tours

Home›Hosting your virtual tour

Hosting your virtual tour yourself: what you need, and the one trap

A virtual tour delivered as static files can be hosted anywhere you can drop a folder: shared hosting, Netlify, GitHub Pages, a NAS. It needs no PHP, no database and no Node.

Updated 2026-08-17

What the delivered folder contains

You receive a ZIP archive. Unzipped, it is an ordinary folder:

  • index.html — the tour itself, the file to open.
  • app.js and vendor/ — the 3D engine, bundled in. No remote resource whatsoever: no CDN, no Google font, no analytics script.
  • tours/tour/ — your panoramas, the depth maps, the floor plan, the 3D model and the configuration file.
  • start-windows.bat, start-macos.command, start-linux.sh — the launchers to open the tour locally.
  • edit.html, edit.js, serve.py, serve.php — the owner-only editor and its small local server (see below: delete them before publishing if you would rather not ship them).
  • README.txt — the same instructions, inside the folder.

The one real trap: double-clicking does not work

If you double-click index.html you will get a blank or frozen page. That is not a fault in the tour. Browsers forbid pages opened from disk (file://) from loading the neighbouring files a 3D application needs. It is a security rule and it applies to everyone.

There are two ways to open the tour, and both work:

  1. Locally: double-click the launcher for your system (start-windows.bat, start-macos.command — right-click then "Open" the first time on macOS — or start-linux.sh). It starts a small local server and opens the tour at http://localhost:8724/. Nothing to install: it uses Python or PHP, already present on most machines.
  2. Online: copy the folder as-is to your hosting and open the matching address. There everything behaves normally — it is the intended use.

If you are testing several tours

Every local tour opens at the same address (localhost:8724). Close the previous server window before launching another, and force a reload (Ctrl+Shift+R, Cmd+Shift+R on Mac): otherwise the browser may show images cached from another tour.

Where to host it

The tour needs nothing: no PHP, no database, no Node, no server-side rendering. Anywhere that can serve files will do — which means just about anywhere.

WhereHowWorth knowing
Shared hosting (cPanel, Plesk…)FTP or the file manager, in a subfolder of your siteSimplest if you already have a site. Check your disk quota.
Netlify, Vercel, Cloudflare PagesDrag and drop the folder, or connect a repositoryHTTPS and global delivery included. Mind the free-tier size limits.
GitHub PagesPush the folder to a repository, enable PagesFree, but repository size is capped: better for smaller tours.
NAS (Synology, QNAP) or a local serverShared folder of the built-in web serverIdeal for internal use or an on-site kiosk, with no internet at all.
Object storage (S3, Backblaze…)Upload the folder, enable static website modeEconomical for large tours, provided you serve over HTTPS.
USB stick or drive, offlineCopy the folder, use the launcherWorks with no connection at all: trade show, client meeting, kiosk.

The size to expect

This is the only real constraint, and it depends on the source format — a tour built from a full survey carries a richer 3D model than one built from photos alone.

Source formatPer viewpoint30 viewpoints130 viewpoints
360° panoramas only≈ 1.3 MB≈ 40 MB≈ 170 MB
Visites-virtuelles backup≈ 1.8 MB≈ 55 MB≈ 235 MB
Visites-virtuelles link or hybrid≈ 5.4 MB≈ 160 MB≈ 700 MB

Orders of magnitude measured on real tours. Visitors do not download all of it: panoramas load as they move through the tour.

Embedding it in a page of your site

Upload the folder, then call it in a frame. The tour is an ordinary web page:

<iframe src="/virtual-tour/index.html"
        style="width:100%; aspect-ratio:16/9; border:0"
        allowfullscreen
        title="3D virtual tour"></iframe>

Serve the container page and the tour both over HTTPS: an http:// frame inside an https:// page is blocked by the browser. And give the frame a real height — a 3D tour in a 200-pixel-tall frame is unusable.

Removing the editor before publishing

The folder contains an owner-only edit mode: it lets you show or hide the dollhouse view, the floor plan and the colour controls, choose the starting view, and move the exterior panoramas. It only runs locally, through the launcher, at http://localhost:8724/edit.html.

A visitor can never change anything: on a web host the editor cannot save at all, it only offers the modified files as downloads. If you would rather it were not published, delete edit.html, edit.js, serve.py and serve.php before uploading: the tour keeps working without them.

Set the tour up before publishing it

The choices made in the editor (starting view, which features are shown) are stored inside the folder and follow the tour once copied online. Make them locally, once, then publish.

Download it, and keep a copy

The service is not a storage space. The files of an unpaid project are deleted 7 days after the quote is issued, and a delivered tour stays downloadable for a few days only — the exact terms are in the retention policy. A reminder email goes out the day before the deadline, but do not rely on it: download your archive on arrival and file it like any other deliverable. It is your master copy.

Once the archive is in your hands, nothing depends on us any more. That is the whole point of the method — and it is also why backing it up is on you.

Frequently asked questions

Do I need a special server to host a virtual tour?

No. A tour delivered as static files needs no PHP, no database and no Node: any hosting able to serve files will do, including entry-level shared hosting, GitHub Pages or a NAS.

Why is the tour black when I open index.html?

Because the file was opened by double-clicking, from disk. Browsers forbid file:// pages from loading the neighbouring files a 3D application needs. Use the launcher provided to open it locally, or upload the folder to a host.

How big is a 3D virtual tour?

About 1.3 MB per viewpoint for a tour built from 360° panoramas alone, 1.8 MB from a Visites-virtuelles backup, and up to 5.4 MB in link or hybrid mode. That is roughly 40 to 160 MB for thirty viewpoints.

Can it be embedded in a WordPress site?

Yes: upload the folder to the same hosting, then call index.html in an iframe from any page or post. No plugin is needed, and both the container page and the tour must be served over HTTPS.

Does the tour work without an internet connection?

Yes, entirely. It contains no remote resource and no tracker: opened from a drive or a USB stick with the launcher provided, it behaves exactly as it does online.

See what a delivered tour looks like

The demos run on the same engine as delivered tours, down to the same files. What you see is what you get.