A comprehensive full-stack web application for learning English by mimicking actors from movies. Import your favorite videos, practice recording yourself, and export comparison videos to track your progress.
- Import Videos: Drag-and-drop or file picker upload (MP4, WebM, MKV, AVI, MOV)
- Automatic Thumbnails: Generate thumbnails from uploaded videos
- Video Metadata: Extract duration, resolution, and codec information
- Subtitle Support: SRT, VTT, and ASS subtitle formats
- Dual Mode Interface: Switch between PLAY MODE and RECORD MODE with a single spacebar
- Webcam Recording: Record yourself with audio and video
- Playback Controls: Full video player with custom controls
- Playback Speed: Adjust from 0.5x to 2x speed
- Session Management: Organize your practice sessions
- Recording Chunks: View all recorded segments
- Reorder Recordings: Drag and drop to reorder chunks
- Delete Individual Chunks: Remove unwanted recordings
- Preview Mode: Watch any recording before export
- Two Export Types:
- Solo Recording: Just your performance
- Comparison Video: Original movie interleaved with your recordings
- Quality Options: 480p, 720p, 1080p
- Format Selection: MP4 or WebM
- FPS Control: 24, 30, or 60 frames per second
- Download History: Track all exported videos
- Theme Toggle: Dark/light mode
- Device Selection: Choose microphone and camera
- Audio Output: Select playback device
- Data Management: Clear local data and cache
- App Information: Version and details
- React 18 with TypeScript and Strict Mode
- Tailwind CSS for styling
- Framer Motion for animations
- Zustand for state management
- React Router for navigation
- Axios for API communication
- Node.js with Express.js
- TypeScript with strict mode
- SQLite3 database
- FFmpeg for video processing
- Multer for file uploads
- Winston for logging
- Zod for validation
- Docker for containerization
- Docker Compose for local development
- ESLint for linting
- Prettier for code formatting
- Node.js 18+ and npm 9+
- FFmpeg and FFprobe installed
- Docker (optional, for containerized development)
-
Clone the repository:
git clone <repository-url> cd movie-mimic
-
Install dependencies:
npm install
-
Set up environment variables:
cp .env.example .env
Edit
.envwith your configuration (or use defaults for development). -
Install FFmpeg:
- Ubuntu/Debian:
sudo apt-get install ffmpeg - macOS:
brew install ffmpeg - Windows: Download from ffmpeg.org
- Ubuntu/Debian:
-
Start the application:
# Start both frontend and backend npm run dev # Or use Docker npm run docker:up
-
Open your browser:
- Frontend: http://localhost:5173
- Backend API: http://localhost:5000/api/health
- Click "Import Video" on the dashboard
- Drag and drop a video file or click to browse
- Wait for upload and thumbnail generation
- Your video appears in the dashboard
- Click on a video card
- A new session is created
- PLAY MODE: Watch the movie with subtitles
- Press Spacebar to switch to RECORD MODE
- Record yourself mimicking the actor
- Press Spacebar again to stop recording and switch back
- Repeat as needed
- Navigate to the Session Review page
- See all recording chunks in order
- Preview individual chunks
- Delete unwanted recordings
- Reorder chunks if needed
- Rename the session
- Go to the Export page
- Choose export settings (quality, format, FPS)
- Export either:
- Solo Recording: Just your performance
- Comparison Video: Movie + your recordings interleaved
- Wait for processing to complete
- Download your exported videos
| Shortcut | Action |
|---|---|
Space |
Toggle between PLAY and RECORD modes |
Esc |
Exit current session |
Arrow Left/Right |
Seek backward/forward (in video player) |
movie-mimic/
├── frontend/ # React frontend application
│ ├── src/
│ │ ├── components/ # Reusable React components
│ │ ├── pages/ # Page components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── services/ # API services
│ │ ├── store/ # State management (Zustand)
│ │ ├── utils/ # Utility functions
│ │ └── types/ # TypeScript types
│ ├── public/ # Static assets
│ └── package.json
├── backend/ # Node.js/Express backend
│ ├── src/
│ │ ├── config/ # Configuration files
│ │ ├── database/ # Database setup and migrations
│ │ ├── middleware/ # Express middleware
│ │ ├── routes/ # API routes
│ │ ├── services/ # Business logic
│ │ └── utils/ # Utility functions
│ └── package.json
├── shared/ # Shared types and constants
│ ├── types/
│ └── constants/
├── uploads/ # Uploaded files (gitignored)
│ ├── videos/
│ ├── subtitles/
│ ├── recordings/
│ ├── exports/
│ └── thumbnails/
├── data/ # Database files (gitignored)
├── docker-compose.yml # Docker configuration
├── package.json # Root package.json
└── README.md
See API.md for complete API documentation.
GET /api/health- Health checkGET /api/config- Application configurationPOST /api/videos/upload- Upload a videoGET /api/videos- List all videosPOST /api/sessions- Create a new sessionGET /api/sessions/:id- Get session detailsPOST /api/sessions/:id/recordings- Upload recordingPOST /api/sessions/:id/export- Export session as video
# Run linter
npm run lint
# Run linter with auto-fix
npm run lint:fix
# Format code
npm run format# Build all packages
npm run build
# Build frontend only
npm run build:frontend
# Build backend only
npm run build:backend# Run migrations
npm run db:migrate
# Seed database (for testing)
npm run db:seed# Start all services
npm run docker:up
# View logs
npm run docker:logs
# Stop all services
npm run docker:down-
Build the Docker images:
docker-compose build
-
Start the services:
docker-compose up -d
-
Configure reverse proxy (nginx, traefik, etc.) for HTTPS
If you see "FFmpeg not found" error:
- Linux:
sudo apt-get install ffmpegorsudo yum install ffmpeg - macOS:
brew install ffmpeg - Windows: Download from ffmpeg.org and add to PATH
Change the port in .env:
PORT=5001
Check:
- File size is under 2GB limit
- File format is supported (MP4, WebM, MKV, AVI, MOV)
- Uploads directory has write permissions
- FFmpeg is properly installed
Reset the database:
rm -f data/movie-mimic.sqliteThe database will be recreated on next restart.
- User authentication and accounts
- Cloud storage (S3, Google Cloud)
- Speech recognition for accuracy scoring
- Pose detection for gesture analysis
- Accent analysis and feedback
- Emotion detection from facial expressions
- Collaborative recording sessions
- Analytics and progress tracking
- Mobile apps (iOS, Android)
- Social sharing features
The application is designed to support future AI features:
- Speech-to-text for accuracy measurement
- Real-time feedback on pronunciation
- Gesture and emotion analysis
- Personalized learning recommendations
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Make your changes
- Run linter and formatter
- Submit a pull request
MIT License - see LICENSE for details.
For issues, questions, or suggestions:
- Check the troubleshooting section
- Review the API documentation
- Check the setup guide
- Open an issue on GitHub
Built with ❤️ for language learners worldwide.
Happy Practicing! 🎬🎤