SaTi is a desktop alarm clock app built with Python and tkinter. It includes:
- alarms
- countdown timers with overdue companion popups
- stopwatches
- floating mini windows
- local JSON-based data storage
- platform-aware config storage with safe fallback
- optional tray and desktop notification support
- bundled alarm sounds with preview controls
- main.py: app entry point
- core: config, logging, sound helpers
- models: alarms, timers, stopwatches, settings
- ui: main window, dialogs, floating windows
- tests: model and persistence tests
- pyproject.toml: package metadata and dependencies
- sounds: bundled alarm/ring tracks
- scripts/build_desktop.py: PyInstaller build helper
- Python 3.10 or newer recommended
tkinteravailable in your Python installationplatformdirsfor platform-native config storage
Optional features:
plyerfor desktop notificationspystrayandpillowfor system tray supportpyinstallerfor desktop packaging
- Open PowerShell in the project folder:
cd C:\Users\StudyAcer\Downloads\new\SaTi- Check Python:
python --version- Install the base dependency:
python -m pip install -e .- Start the app:
satiIf python does not work, try:
py -m pip install -e .
py main.pyOptional desktop extras:
python -m pip install -e .[desktop]- Open a terminal and go to the project folder:
cd /path/to/SaTi- Make sure Python and
tkinterare installed:
sudo apt update
sudo apt install -y python3 python3-tk- Install the base dependency:
python3 -m pip install -e .- Start the app:
satiOptional desktop extras:
python3 -m pip install -e .[desktop]- App data is stored in the platform config directory when available.
- If SaTi cannot write there, it falls back to a local
.sati_data/folder in the project directory. - On Linux, optional audio players such as
ffplay,mpv,mpg123, orcvlccan improve sound playback. - If no sound backend is available, SaTi falls back to a simple beep when possible.
- Closing the main window minimizes SaTi to the tray when tray dependencies are installed.
- Timers continue running even if their floating window is closed, and they resume correctly after app restart.
- When a countdown timer reaches zero, SaTi opens a small topmost overdue popup, starts the configured ring, and counts upward from the completion time.
- Change the countdown/alarm ring from
File > Settings > Soundor theSound Settingsbutton on the Countdown Timers dashboard.
Windows:
- reinstall Python and make sure Tcl/Tk is included
Kali Linux:
sudo apt install -y python3-tkLinux:
sudo apt install -y ffmpeg mpv mpg123 vlcWindows:
.wavplayback should work with the built-in fallback- other formats may need a player such as VLC or FFmpeg installed and available in
PATH
- make sure you are running from the folder that contains
main.py - check that your Python version is modern enough
- run:
python3 -m pip install -e .
satior on Windows:
python -m pip install -e .
satiInstall pytest:
python3 -m pip install -e .[dev]or on Windows:
python -m pip install -e .[dev]Then run:
python3 -m pytestWith the optional desktop tools installed:
python3 -m pip install -e .[desktop]or on Windows:
python -m pip install -e .[desktop]Build with the included PyInstaller spec:
python3 scripts/build_desktop.pyor on Windows:
python scripts\build_desktop.pyAfter installing with python -m pip install -e .[desktop], you can also run:
sati-buildThe build includes bundled files from the sounds/ directory.