Création, montage et lecture de médias haptiques synchronisés
FunStation réunit l'éditeur multipiste FunMaker, le lecteur React FunPlayer et son intégration Streamlit. L'objectif est de couvrir un flux de travail cohérent depuis la composition par patterns jusqu'à la lecture sur les périphériques compatibles Buttplug.io.
This repository contains a shared haptic core and three related products:
- Purpose: Desktop authoring, media editing and deterministic export
- Stack: React, TypeScript, Electron and FFmpeg
- Target: Creators of pattern-based, musical and multi-channel haptic media
- npm package:
funplayer-react - Purpose: Haptic media player and reusable React component library
- Builds: Electron desktop app, React library and standalone web embed
- Target: End users, web developers and direct browser integration
- PyPI package:
streamlit-funplayer - Purpose: Python/Streamlit wrapper for the React component
- Target: Python developers, data scientists, rapid prototyping
Choose your integration path:
For the complete FunStation desktop suite on Debian/Ubuntu:
npm ci
npm run dist:linux
sudo apt install ./dist/funstation-0.1.0-amd64.debThis installs FunMaker and FunPlayer together while keeping two distinct launchers. Both applications can also be packaged and installed independently.
For haptic media creators:
cd funmaker
npm ci
npm run dev→ See /funmaker/README.md for editor usage
For React/JS developers:
npm install funplayer-react→ See /funplayer/README.md for React usage
For Python/Streamlit developers:
pip install streamlit-funplayer→ See /streamlit_funplayer/README.md for Python usage
- 🎯 Multi-format support: Video, audio, streaming (HLS/DASH)
- ⚡ Real-time haptic sync: External-clock scheduler configurable from 1 to 240 Hz
- 🥽 VR ready: Native browser VR support (Quest, Pico)
- 🎮 100+ devices: Compatible through Buttplug.io ecosystem
- 🎨 Professional UI: Real-time visualization and adaptive theming
- 🔧 Modular architecture: Event-driven, decoupled components
📦 FunStation/
├─ 📄 AGENTS.md # Suite-wide engineering rules
├─ 📄 ROADMAP.md # Shared-product roadmap
├─ 📄 package.json # Root development and verification commands
├─ 📄 funplayer.toml # Version source of truth
├─ 📄 deploy.py # Automated dual-package deployment
├─ 📂 distribution/ # Native FunStation bundle assembly
├─ 📂 funmaker/ # Desktop haptic and media authoring application
├─ 📂 packages/haptics-core/ # Deterministic, UI-independent haptic runtime
├─ 📂 packages/haptics-buttplug/ # Headless Intiface/Buttplug adapter
├─ 📂 funplayer/ # React package (funplayer-react)
│ ├─ 📄 package.json
│ ├─ 📂 src/ # React components & business logic
│ ├─ 📂 build/ # Normal build output
│ └─ 📂 build-embed/ # Embed build output
└─ 📂 streamlit_funplayer/ # Streamlit package
├─ 📄 pyproject.toml
├─ 📂 streamlit_funplayer/
│ └─ 📂 frontend/ # Streamlit React wrapper
└─ 📄 funplayer.py # Demo app
# Development
cd funmaker && npm run dev # Editor Electron
cd funplayer && npm start # React dev server
cd streamlit_funplayer && streamlit run funplayer.py # Streamlit demo
# From the repository root
npm run dev:editor
npm run dev:player
npm run check
npm run dist:linux # FunStation Debian bundle
# Production deployment (both packages)
python deploy.py # Full deployment
python deploy.py --dry-run # Test without publishing- Intiface Central for device connectivity
- Compatible haptic device (see Buttplug.io device list)
- HTTPS connection for device access in production environments
- React Integration:
/funplayer/README.md - FunMaker:
/funmaker/README.md - Suite Roadmap:
/ROADMAP.md - Streamlit Integration:
/streamlit_funplayer/README.md - Architecture:
/development_guidelines.md - Haptic core API:
/packages/haptics-core/README.md - Buttplug adapter API:
/packages/haptics-buttplug/README.md - Reliability review:
/docs/reliability-review.md - Native distributions:
/distribution/README.md
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
This license applies to the suite and all first-party packages in this repository. Commercial use requires a separate license.
For commercial licensing, contact: bferrand.math@gmail.com
Built with ❤️ using React, Video.js, Buttplug.io, and Streamlit