Virtual Tour Creator — Desktop App
Features • Prerequisites • Getting Started • Building • Structure • Contributing
Vetour is a cross-platform desktop application for creating, editing, and presenting immersive 360° virtual tours. Built with Tauri 2, React 19, and Photo Sphere Viewer, it offers a smooth, native experience for crafting interactive walkthroughs from panoramic images.
- 360° Panorama Viewer — Full-screen panorama exploration with smooth navigation.
- Hotspots & Links — Add clickable info markers and navigation links between scenes.
- Interactive Markers — Rich hotspot actions: show images, videos, text, or play audio.
- Virtual Tour Mode — Seamlessly connect scenes into a guided walkthrough.
- Asset Manager — Import and manage images, audio, video, and documents.
- Present Mode — Separate full-screen presentation window with a clean interface.
- Project File (.vetour) — Save and load projects in a custom file format with compression.
- Multi-Resolution Processing — Automatic panorama resizing (low, medium, high) to WebP.
- Media Conversion — Automatic audio/video conversion for optimized playback.
- File Locking — Safe concurrent access to project files across windows.
- Drag & Drop Hotspots — Reposition markers by dragging in the viewer.
- Theme Support — Light, dark, and black themes.
Note: The deploy/publishing feature is maintained as a separate private module and is not included in this open-source build.
Before you begin, ensure you have the following installed:
# Clone the repository
git clone https://github.com/fazelllyyy/vetour.git
cd vetour
# Install JavaScript dependencies (also downloads ffmpeg sidecar)
bun install
# Run the app in development mode
bun run tauri devThe app will launch with hot-reload enabled. The Tauri window will open automatically once the Vite dev server is ready on port 1420.
Audio/video conversion requires ffmpeg as a Tauri sidecar. During bun install, the postinstall hook automatically downloads the correct binary for your platform.
Download priority:
- GitHub Release assets — direct binary, no extraction needed
- Canonical sources (gyan.dev, evermeet.cx, johnvansickle.com) — extracted automatically
- System
ffmpeginPATH
First-time setup: Create a GitHub Release (
v1.0.0) and upload the ffmpeg binaries as release assets. This enables the fastest download path for all users.
| Command | Description |
|---|---|
bun run dev |
Start Vite dev server only |
bun run build |
Build the frontend for production |
bun run tauri dev |
Run the full Tauri desktop app in dev mode |
bun run tauri build |
Build the desktop app for distribution |
bun run check |
Run TypeScript type checking |
bun run lint |
Run ESLint on all source files |
bun run sidecar:download |
Manually download/re-download the ffmpeg sidecar |
To create a distributable package for your platform:
bun run tauri buildThe output binaries will be placed in src-tauri/target/release/bundle/.
- Identifier:
com.fazli.vetour - File Association:
.vetour— virtual tour project files - Supported Targets: Windows (NSIS installer), macOS (.dmg), Linux (.deb, .AppImage)
| Layer | Technology |
|---|---|
| Desktop Shell | Tauri 2 |
| Frontend | React 19, TypeScript |
| Styling | Tailwind CSS 4 |
| State Management | Zustand |
| UI Components | Radix UI, Framer Motion |
| Panorama Rendering | Photo Sphere Viewer |
| Image Processing | image crate (Rust) |
| Packaging | Bun |
vetour/
├── src/ # Frontend source (React + TypeScript)
│ ├── components/ # React components
│ │ ├── Editor/ # Main editor (panorama, hotspots, assets)
│ │ ├── Home/ # Home screen and project list
│ │ ├── Present/ # Presentation mode (separate window)
│ │ ├── Settings/ # Settings modal
│ │ └── ui/ # Shared UI primitives
│ ├── lib/ # Utilities and helpers
│ ├── store/ # Zustand stores
│ ├── types/ # TypeScript type definitions
│ ├── contexts/ # React contexts (theme)
│ └── constants.ts # Centralized constants
├── src-tauri/ # Tauri backend (Rust)
│ ├── src/
│ │ ├── lib.rs # App entry point and command registration
│ │ ├── image_processor.rs # Panorama processing (resize, WebP)
│ │ ├── media_processor.rs # Audio/video conversion (FFmpeg)
│ │ └── file_lock.rs # File locking for project files
│ ├── Cargo.toml
│ └── tauri.conf.json # Tauri configuration
├── package.json
├── tsconfig.json
└── vite.config.ts
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License — see LICENSE for details.
- Photo Sphere Viewer for the excellent panorama rendering library.
- Tauri for the lightweight, secure desktop runtime.
- All contributors and users who support this project.
Created by Zulfazli (fazelstudio)