A focused, distraction-free desktop timer for managing up to 4 parallel tasks — built for makers, developers, and deep workers.
Features • Installation • Usage • Configuration • Build
Multi-Task Timer lets you track up to 4 countdown timers simultaneously — each named, independently controllable, and fully configurable. Ideal for time-boxing your coding sessions, meetings, study blocks, or any workflow where you juggle multiple tasks at once.
Unlike generic timer apps, each task has its own full UI card with start/pause/reset, manual time editing, and a "minutes already used" shortcut — keeping you accurate without friction.
- 🔢 4 independent countdown timers — each with its own state machine (
IDLE → RUNNING → PAUSED → FINISHED) - ✏️ Click-to-edit timer — tap the display to type in
mm:ssdirectly - ⚡ "Minutes Used" shortcut — enter minutes already elapsed to auto-calculate remaining time
- 🔔 Sound alerts — plays a Windows system sound or your custom
.wav / .mp3 / .oggon finish - 🪟 Desktop notification popup — non-blocking card-style popup with auto-dismiss timeout
- 🔦 Taskbar flash — Windows taskbar flashes until you re-focus the app (never miss a timer)
- ⚙️ Settings dialog — rename tasks, change base duration, pick notification sound
- 🔄 Auto-save config — settings persist in
%APPDATA%\MultiTaskTimer\config.jsonwith automatic.bakbackup - 🖥️ HiDPI aware — proper scaling on high-resolution displays
4 task cards, each at 60:00 and IDLE. Click ▶ Start to begin any task.
| Dependency | Version | Notes |
|---|---|---|
| Python | 3.10+ | Required |
| PySide6 | 6.6+ | UI framework |
| pygame | latest | Audio playback |
Note: Full feature support on Windows 10/11. Linux/macOS: UI works, but system sounds and taskbar flash are unavailable.
# 1. Clone the repo
git clone https://github.com/an-tc2912/multi-task-timer.git
cd multi-task-timer
# 2. Create and activate a virtual environment
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux / macOS
# 3. Install dependencies
pip install -r requirements.txt
# 4. Run
python main.py| Action | How |
|---|---|
| Start a timer | Click ▶ Start on any task card |
| Pause | Click ⏸ Pause on a running card |
| Reset | Click ↺ Reset |
| Edit time directly | Click the mm:ss display → type a new value |
| Set by time already used | Enter elapsed minutes in the "Minutes Used" field |
| Start all 4 timers at once | Click ▶ Start All in the footer |
| Stop / reset all timers | ⏸ Stop All or ↺ Reset All in the footer |
| Open settings | Click the ⚙ gear icon (top right) |
Settings are saved automatically to:
%APPDATA%\MultiTaskTimer\config.json
| Key | Default | Description |
|---|---|---|
task_names |
["Task 1"…"Task 4"] |
Labels shown on each card |
base_minutes |
60 |
Countdown duration in minutes |
sound_path |
"" (system default) |
Path to a .wav/.mp3/.ogg audio file |
sound_enabled |
true |
Toggle completion sound on/off |
popup_timeout_seconds |
10 |
Auto-dismiss timeout for notification popup |
💡 A
.bakbackup is written before every config save. If the file is corrupted on startup, the app automatically falls back to defaults and shows a toast notification.
Build a standalone .exe (no Python required on target machine):
pip install pyinstaller
pyinstaller App_Timer_Miner.specOutput will be in dist/.
multi-task-timer/
├── main.py # App entry point
├── requirements.txt # Python dependencies
├── App_Timer_Miner.spec # PyInstaller build config
└── src/
├── config.py # Config read/write (%APPDATA%)
├── models.py # TaskTimer state machine
├── audio.py # Sound player (pygame.mixer)
├── styles.py # Qt stylesheet tokens & constants
├── utils/
│ └── logger.py # File logger (%APPDATA%\app.log)
└── widgets/
├── main_window.py # Main dashboard window
├── task_card.py # Individual timer card widget
├── settings_dialog.py # Settings popup
├── notif_popup.py # Task completion notification
└── toast.py # In-app toast messages
- macOS system sound & dock bounce support
- Global hotkeys (start/pause all without focusing window)
- Task history log with export to CSV
- Light mode / theme switcher
- Pomodoro mode integration
Pull requests are welcome! For major changes, please open an issue first to discuss what you'd like to change.
