Skip to content

Repository files navigation

FunStation

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.

License: CC BY-NC-SA 4.0

🏗️ Project Structure

This repository contains a shared haptic core and three related products:

🎛️ FunMaker (/funmaker/)

  • 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

▶️ FunPlayer (/funplayer/)

  • 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

📦 Streamlit Package (/streamlit_funplayer/)

  • PyPI package: streamlit-funplayer
  • Purpose: Python/Streamlit wrapper for the React component
  • Target: Python developers, data scientists, rapid prototyping

🚀 Quick Start

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.deb

This 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

✨ Key Features

  • 🎯 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

🛠️ Development

Repository Layout

📦 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

Build & Deploy

# 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

📋 Requirements

  • Intiface Central for device connectivity
  • Compatible haptic device (see Buttplug.io device list)
  • HTTPS connection for device access in production environments

📖 Documentation

📄 License

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

About

React component for synchronized media and haptic playback with VR support (video.js + buttplug.js)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages