A desktop language learning application that helps you learn vocabulary from video content using scientifically-proven spaced repetition techniques. Combine entertainment with effective language learning by extracting vocabulary from videos with dual-language subtitles.
- Upload and manage your video library with dual-language subtitles
- Click on any subtitle word to instantly extract vocabulary
- Context-aware learning with sentence examples from actual content
- Review vocabulary using the Ebbinghaus forgetting curve algorithm
- Optimized review schedule: Day 0, 1, 3, 7, 14, 30
- Smart tracking of your learning progress
- Comprehensive analytics dashboard
- Monitor your learning journey over time
- Track vocabulary acquisition and retention rates
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher) - Download
- pnpm (v8 or higher) - Install with
npm install -g pnpm - Rust (latest stable) - Install via rustup
- Tauri Prerequisites - Follow the Tauri prerequisites guide for your operating system
-
Clone the repository:
git clone https://github.com/meatballG1210/loud-mouth-tauri.git cd loud-mouth-tauri -
Install frontend dependencies:
pnpm install
-
Configure environment variables:
Copy the
.env.examplefile to create your own.envfile:cp .env.example .env
Then edit
.envand add your API keys:Required:
VITE_OPENAI_API_KEY- Your OpenAI API key for translation and vocabulary features- Get your API key from OpenAI Platform
- The app uses OpenAI's API for automatic translations and intelligent vocabulary extraction
Important: Never commit your
.envfile to version control. It's already included in.gitignore. -
Set up the database:
The SQLite database will be automatically initialized on first run. Database migrations are handled by Diesel and will run automatically.
Run the application in development mode with hot-reload:
pnpm tauri devThis will:
- Start the Vite development server
- Launch the Tauri application
- Enable hot-reload for both frontend and backend changes
Build the application for production:
pnpm tauri buildThe built application will be available in src-tauri/target/release/bundle/
- Click the "Add Video" button on the home screen
- Select a video file with embedded subtitles (supported formats: MP4, AVI, MKV, MOV)
- The app will automatically:
- Extract embedded subtitle streams from your video
- Detect English and Chinese subtitles
- Generate thumbnails
- Process the video metadata
Recommended Video Specifications:
- Video Codec: H.264/AVC High 10 (10-bit), 1080p, 23.98 fps
- Audio Codec: AAC, 48 kHz, stereo
- Subtitles: mov_text / tx3g (two tracks: Chinese
zhoand Englisheng) - Container Format: MP4, MKV, MOV, or AVI
- Maximum File Size: 4GB
Important Notes:
- Your video must have embedded subtitle streams (not separate subtitle files)
- Both English and Chinese subtitle streams should be embedded in the same video file
- Subtitle streams must be properly tagged with language codes (
engfor English,zho/chi/zhfor Chinese) - Supported embedded subtitle formats: mov_text, tx3g, SRT, ASS, SSA, and other formats supported by FFmpeg
- The app automatically converts extracted subtitles to WebVTT format for internal use
- In order to disable local subtitles on macOS, please refer to this
- Select a video from your library
- Watch the video with dual subtitles displayed
- Click on any word in the subtitles to add it to your vocabulary
- The app automatically captures:
- The word and its translation
- The sentence context
- A timestamp for review
- Navigate to the "Review" section
- The app shows you words due for review based on spaced repetition
- For each word:
- Try to recall the meaning
- Reveal the answer
- Mark whether you remembered correctly
- The app automatically schedules the next review
Visit the "Progress" page to:
- View your learning statistics
- See vocabulary growth over time
- Track review completion rates
- Identify areas for improvement
# Run Vite dev server only
pnpm dev
# Type checking
pnpm tsc
# Build frontend
pnpm build# Run Rust tests
cd src-tauri
cargo test
# Run Rust checks
cargo check
# Create a new database migration
diesel migration generate migration_nameContributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.



