FinalCast is an open-source, full-stack podcasting and video conversation platform built with the MERN stack, WebRTC, and FFmpeg — designed to provide creators with a fully rendered video after every session, without needing to manually edit timeline chunks.
Traditional streaming tools often leave you with a mess of raw footage. FinalCast is different. We are building a platform that doesn't just record; it produces.
By leveraging WebRTC for real-time interaction and FFmpeg for server-side compositing, FinalCast delivers a fully rendered, editor-ready video immediately after your session ends. No more manual stitching. No more syncing headaches.
Our Mission: To democratize professional-grade live broadcasting by combining the flexibility of the web with the power of server-side rendering.
- State & Async:
TanStack Query,Redux Toolkit - Real-time:
Socket.io-clientfor signaling - Styling:
Tailwind CSS+Radix UIPrimitives - Animations:
Framer Motion
- Core:
Node.js+Express - Media Processing:
FFmpeg(Server-side rendering & transcoding) - Storage:
AWS S3(via Multer S3) &Cloudinary - Auth:
Passport.js(Google OAuth) +JWT - AI Integration:
@google/generative-ai
| Feature | Description |
|---|---|
| 🔴 Real-time Studio | Low-latency video calls powered by WebRTC and mesh networking. |
| 🎞️ Cloud Rendering | Automatic, server-side composition of video tracks using FFmpeg. |
| 🤖 AI-Enhanced | Integrated with Google Gemini for smart features. |
| 📁 Smart Storage | Multipart uploads to AWS S3 with robust failure recovery. |
| 🎼 Dynamic Layouts | Auto-adjusting video grids that adapt as participants join. |
| 🔐 Secure Access | OAuth2 Google login and JWT session management. |
| 📡Peer-to-peer | Peer-to=peer media exchange with fallback signaling. |
| 🎙️ Multi-participant | Auto layout (dynamic tiling) |
| 🪄 Visual Timeline Editor | Drag-and-drop layout available. |
We maintain a clean separation of concerns between the client and server.
FinalCast/
├── frontend/ # The Client Application
│ ├── src/
│ │ ├── api/ # API integration points
│ │ ├── components/ # Reusable UI components
│ │ ├── context/ # React Context providers
│ │ ├── hooks/ # Custom Hooks (useWebRTC, etc.)
│ │ ├── pages/ # Application Routes/Pages
│ │ ├── store/ # Redux State Management
│ │ └── utils/ # Helper functions
│ └── package.json
│
├── backend/ # The Server Application
│ ├── DAO/ # Data Access Objects (DB Layer)
│ ├── config/ # Environment & App Configuration
│ ├── controllers/ # Request Handlers
│ ├── models/ # Mongoose Schemas
│ ├── routes/ # API Route Definitions
│ ├── services/ # Business Logic (Recording, Transcoding)
│ ├── socket/ # Real-time Event Handlers
│ ├── recording/ # Media Processing Utilities
│ └── app.js # Server Entry Point
│
└── README.mdReady to run your own studio? Follow these steps.
- Node.js (v18+)
- MongoDB (Local or Atlas)
- FFmpeg installed on your system path.
-
Clone the repository
git clone https://github.com/anothercoder-nik/FinalCast.git cd FinalCast -
Setup Backend
cd backend npm install # Create .env file based on .env.example npm run dev
-
Setup Frontend
cd ../frontend npm install npm run dev -
Go Live! Visit
http://localhost:5173and start creating.
We love contributions! FinalCast is built by the community, for the community.
- Check out our Open Issues to find a task.
- Fork the repo and create a branch:
git checkout -b feature/amazing-feature. - Commit your changes and push.
- Open a Pull Request! 🚀
Built with ❤️ by the FinalCast Team