A professional Vue3 countdown timer application designed specifically for streamers to use as a browser source in OBS Studio. Features customizable appearance, URL parameters for quick setup, and optimized performance for live streaming.
- โฑ๏ธ Customizable countdown duration (1-120 minutes)
- ๐จ Multiple preset durations (1, 5, 10, 15, 30 minutes)
โถ๏ธ Start, pause, resume, and reset controls- ๐ Auto-loop option for continuous countdowns
- ๐ Audio notification when timer reaches zero
- ๐ญ Multiple background themes and gradients
- ๐ Custom background colors and images
- ๐ค Customizable text and colors
- ๐ Adjustable font sizes (24-144px)
- ๐ Optional progress bar with animations
- ๐ Transparent background support for overlays
- ๐ฅ๏ธ Full-screen display optimized for streaming
- ๐ฑ Responsive design (1920x1080, 1280x720, etc.)
- ๐ URL parameters for instant setup
- ๐ฏ No scrollbars or browser chrome
- โก Lightweight and performance optimized
- ๐ฑ๏ธ Auto-hide cursor after inactivity
- ๐พ Local storage for settings persistence
- ๐๏ธ Custom preset management
- โจ๏ธ Keyboard shortcuts for control
- ๐ Particle effects on timer completion
- ๐ง Debug mode for troubleshooting
- ๐ One-click URL generation for OBS
- Node.js 18+
- npm or yarn package manager
- Clone or download the project
git clone <repository-url>
cd countdowntimer-app- Install dependencies
npm install- Start development server
npm run dev- Open in browser
http://localhost:5173
npm run buildThe built files will be in the dist folder, ready for deployment.
- Open the timer application in your browser
- Configure your desired settings on the setup page
- Click "Copy" next to the generated browser source URL
- In OBS Studio:
- Add a new Browser Source
- Paste the copied URL
- Set Width: 1920, Height: 1080 (or your stream resolution)
- Enable Shutdown source when not visible
- Enable Refresh browser when scene becomes active
You can create a browser source URL directly with parameters:
http://localhost:5173/#/display?minutes=10&text=STARTING%20SOON&backgroundColor=%23667eea&textColor=%23ffffff&fontSize=72&autoStart=true&transparent=false
| Parameter | Description | Example |
|---|---|---|
minutes |
Timer duration in minutes | 10 |
text |
Display text | STARTING%20SOON |
backgroundColor |
Background color (hex) | %23667eea |
textColor |
Text color (hex) | %23ffffff |
fontSize |
Font size in pixels | 72 |
autoStart |
Auto-start timer | true |
transparent |
Transparent background | false |
Note: URL encode special characters (# becomes %23, spaces become %20)
- Width: 1920px (or your stream width)
- Height: 1080px (or your stream height)
- FPS: 30 (sufficient for smooth countdown)
- CSS: Leave empty
- Shutdown source when not visible: โ Enabled
- Refresh browser when scene becomes active: โ Enabled
- Duration slider/input: Set timer length
- Preset buttons: Quick duration selection
- Text input: Customize display message
- Color pickers: Choose colors and backgrounds
- Start/Pause/Reset: Control timer state
- Save Preset: Save current settings as custom preset
- Click: Toggle control panel visibility
- Mouse movement: Show controls temporarily
- Spacebar: Start/Pause timer
- R: Reset timer
- S: Go to settings
- F: Toggle fullscreen
- C: Toggle controls visibility
- D: Toggle debug mode
- Preset Gradients: Choose from 6 built-in gradient themes
- Custom Colors: Use color picker for solid backgrounds
- Transparent: Enable for overlay on stream content
- Custom Images: Upload your own background image (future feature)
- Font Size: 24px to 144px range
- Colors: Full color picker support
- Custom Text: Personalize your countdown message
- Font Weight: Bold, modern typography
- Smooth Transitions: Timer changes with scale animation
- Progress Bar: Animated shimmer effect
- Particle Effects: Celebration particles when timer ends
- Fade Animations: Smooth element transitions
src/
โโโ components/ # Reusable Vue components
โ โโโ SetupView.vue # Timer configuration page
โ โโโ DisplayView.vue # Full-screen countdown display
โโโ stores/
โ โโโ timerStore.ts # Pinia store for state management
โโโ router/
โ โโโ index.ts # Vue Router configuration
โโโ assets/ # Static assets
- Vue 3: Modern reactive framework with Composition API
- TypeScript: Type-safe development
- Pinia: State management
- Vue Router: Navigation and routing
- Vite: Fast build tool and dev server
- CSS3: Modern styling with animations
# Development
npm run dev # Start dev server
npm run build # Build for production
npm run preview # Preview production build
# Code Quality
npm run lint # Run ESLint
npm run format # Format code with Prettier
# Testing
npm run test # Run unit tests
npm run test:e2e # Run end-to-end testsTimer not starting:
- Check browser console for errors
- Ensure JavaScript is enabled
- Try refreshing the browser source in OBS
Audio not playing:
- Browser might require user interaction first
- Check browser audio permissions
- Ensure volume is not muted
Display cut off:
- Verify OBS browser source dimensions
- Check CSS zoom level in OBS
- Ensure responsive scaling is working
Performance issues:
- Reduce font size and effects
- Disable progress bar animations
- Check CPU usage in OBS
Press D in display view to enable debug mode, which shows:
- Current timer state
- Settings configuration
- Performance metrics
- Error messages
- Chrome/Edge: Full support โ
- Firefox: Full support โ
- Safari: Full support โ
- OBS Browser: Optimized โ
- Test before going live: Always test your timer setup before streaming
- Use presets: Create presets for different stream segments
- Transparent backgrounds: Great for overlaying on gameplay
- Auto-start: Use URL parameters for instant timer start
- Multiple scenes: Create different OBS scenes with different timer configs
- Bookmark setup page for quick timer management
- Use keyboard shortcuts for fast control
- Monitor debug info if issues arise
- Use lower font sizes for better performance
- Disable particle effects for minimal CPU usage
- Consider transparent backgrounds for better stream integration
This project is open source and available under the MIT License.
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
If you encounter any issues or need help setting up the timer for your stream, please:
- Check this README for solutions
- Enable debug mode to diagnose issues
- Create an issue with detailed information about your setup
Happy Streaming! ๐ฅโจ