A visual drag-and-drop interface for creating and managing shows in OpenSpace. This application allows users to create, edit, and playback multi-page presentations with various interactive components that control and interact with the OpenSpace app.
- React
- Vite
- Zustand (State Management)
- Shadcn
- ESLint & Prettier
- OpenSpace js api (v0.1.6)
- Node.js (Latest LTS version recommended)
- Package manager (npm, yarn, or pnpm)
- OpenSpace instance running
# Clone the repository
git clone [repository-url]
cd OpenSpace-ShowComposer
# Install dependencies
npm install
# or
yarn install- Start the development server:
npm run dev
# or
yarn devIn development mode, certain features will have limited functionality:
- Project saving/loading
- Image upload/loading
This is because these features expect specific API endpoints that are only available in the production environment. The application will still run, but these features will not work as expected.
- Build the application:
npm run build
# or
yarn build- The built application should be placed in the
user/showcomposerfolder in the production environment.
In production, the application expects:
-
OpenSpace Connection:
- OpenSpace instance running and accessible
- WebSocket connection to OpenSpace (configurable via settings)
- Default connection settings:
- Host: Configurable via settings
- Port: Configurable via settings
-
API Endpoints:
-
Project Management:
POST /api/projects/save- Save project dataPOST /api/projects/load- Load project dataGET /api/projects- List available projectsPOST /api/projects/confirm-import- Confirm project import
-
Image Management:
GET /api/images- Fetch gallery imagesPOST /api/upload- Upload new images
-
Project Export:
POST /api/package- Export project as ZIP file
-
These components provide static content and information:
- Title - Add text headers to your show
- Rich Text - Add formatted text content
- Image - Display images in your show
- Video - Embed video content
These components control OpenSpace visualization:
- Multi - Group multiple components together
- Set Focus
- Fade
- Fly To
- Set Time - Control the simulation time
- Set Navigation State - Configure navigation parameters
- Session Playback - Play back recorded sessions
- Action - Trigger OpenSpace actions
- Page -Navigate to pages in your show
- Script - Execute custom LUA scripts
These components control specific OpenSpace properties:
- Number - Control numerical properties
- Boolean - Toggle boolean properties
- Trigger - Execute trigge properties
- Create and manage multiple layouts
- Drag and drop components into layouts
- Resize and reposition components
- Minimize/maximize panels
- Time Panel - Control simulation time
- Navigation Panel - Control camera and camera movement properties
- Status Panel - View Simualtion Time and Lat/Lng/Alt
- Record Panel - Create and Playback recordings
- Log Panel - View realtime OpenSpace logs
- Multi-page show organization
- Page navigation
- Present mode for show playback
- Project saving and loading
- Image gallery management
The application integrates with openspace-api-js to provide visualization capabilities:
- Automatic reconnection handling
- Connection state management
- Error handling and recovery
- Property subscription system
The application uses a store-based architecture with Zustand:
useSettingsStore- Manages application settingsuseBoundStore- Manages project-specific data and componentsuseOpenSpaceApiStore- Manages OpenSpace api integration
Editor.tsx- Main application interfaceDraggableComponent- Handles component draggingDroppableWorkspace- Manages component placementLayoutContainer- Manages component layoutsComponentModal- Component property editingLayoutEditModal- Layout configurationComponents/types/preset/*- Action, Fade, FlyTo, Focus, Go to Page, Script, SessionPlayback, Nvationagion adn Set Time componentsComponents/types/property/*- Boolean, Number and Trigger componentsComponents/types/static/*- Helper Panels (Log,Sessions,Timedate,FlightContoller), as well as Image,Video,Title and RichText Components