A professional-grade intercom system for broadcast productions built with Nuxt 3. This application provides real-time audio communication between production team members with features like push-to-talk, program sound distribution, and group management.
- Real-time Communication: Low-latency audio communication between team members
- Push-to-Talk (PTT): Intuitive push-to-talk functionality with lock option
- Program Sound Distribution: Dedicated channels for program audio
- Group Management: Create and manage multiple communication groups
- User-friendly Interface: Clean, responsive UI with dark mode support
- Customizable Settings: Personalize audio processing and interface preferences
- Persistent Settings: User preferences are saved locally
- WebRTC Integration: Uses Janus WebRTC Gateway for audio streaming
- Frontend: Vue.js 3 with Nuxt 3
- UI Framework: Tailwind CSS
- State Management: Pinia with persistence
- Real-time Communication: Socket.IO
- WebRTC: Janode library for Janus WebRTC Gateway integration
- Database: SQLite for server-side storage
- Backend: Node.js with Nitro server
- Node.js 18+ and npm
- Janus WebRTC Gateway server (for production use)
-
Clone the repository:
git clone https://github.com/yourusername/broadcast-intercom.git cd broadcast-intercom -
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open your browser and navigate to
http://localhost:3000
-
Build the Docker image:
docker build -t broadcast-intercom . -
Run the container:
docker run -p 3000:3000 -v $(pwd)/data:/app/data -e JANUS_URL=ws://your-janus-server:8188/ broadcast-intercom -
Access the application at
http://localhost:3000
-
Build the application:
npm run build
-
Start the production server:
node .output/server/index.mjs
This application requires a Janus WebRTC Gateway server for audio streaming. You can set up Janus in several ways:
docker run --name janus -p 8188:8188 -p 8088:8088 -p 8089:8089 -p 8889:8889 -p 8000:8000 -p 7088:7088 -p 7089:7089 canyan/janus-gatewayFollow the official Janus installation guide.
Make sure the AudioBridge plugin is enabled in your Janus configuration.
The application can be configured using environment variables:
JANUS_URL: URL of the Janus WebRTC server (default:ws://localhost:8188/)JANUS_API_SECRET: Secret for Janus API (optional)SOCKET_URL: Custom Socket.IO server URL (optional, defaults to same host)
components/: Vue componentscomposables/: Reusable Vue composition functionslayouts/: Page layoutspages/: Application pages and routesplugins/: Nuxt pluginspublic/: Static assetsserver/: Server-side codeapi/: API endpointsdatabase/: Database modulesplugins/: Server pluginsutils/: Utility functions
stores/: Pinia storestypes/: TypeScript type definitions
- Enter the production access code
- Enter your display name
- Click "Join Production"
- Push-to-Talk: Press and hold the "TALK" button to speak
- Lock Mode: Click the lock icon to keep the microphone open
- Volume Control: Adjust the vertical slider to change volume
- Mute: Click the speaker icon to mute a channel
Access the admin panel at /admin to:
- Create and manage productions
- Configure communication groups
- Customize email templates for invitations
- Monitor system activity
This project is licensed under the MIT License - see the LICENSE file for details.
- Nuxt.js
- Vue.js
- Tailwind CSS
- Socket.IO
- Janus WebRTC Server
- Janode - Janus API client for Node.js