Balance Separator is a fast, offline desktop application built with Python and PyQt6. It is designed to effortlessly calculate group expenses, figure out everyone's fair share, and generate precise pairwise settlements so you know exactly who owes whom.
Perfect for road trips, shared house expenses, or collaborative projects.
- Custom Avatars: Upload profile pictures for teammates. Images are automatically compressed and circularly cropped to keep the app lightweight.
- Inline Editing: Right-click to edit names, descriptions, or update/remove profile pictures.
- Persistent State: All project data and teammates are automatically saved to a local JSON file (
projects.json).
- Smart Input Navigation: Typing numbers in the description field automatically jumps to the Amount field. Typing letters in an empty Amount field jumps to the Description.
- Enter-to-Save: Press
Enterin the amount field to instantly record the expense. - Inline Editing: Double-click any expense description in the table to quickly fix typos without deleting the entry.
- Zero Precision Errors: All background calculations are performed in integers (cents) to prevent floating-point rounding errors.
- Pairwise Settlements: The algorithm calculates exact proportional debts between specific individuals (e.g., "Person A owes Person B exactly RM12.36").
- Payment Tracking: Tick the checkbox next to a settlement to mark it as paid. This state is saved automatically and crosses out the text visually without altering the math.
- Light & Dark Mode: Toggle seamlessly between themes via the settings menu.
- Customizable Layout: The interface features resizable splitters for the sidebar and content columns. Your layout preferences are saved automatically (
config.json). - Clean Interface: Scrollbars are completely hidden for a sleek, modern look (mouse-wheel/trackpad scrolling remains fully functional).
- PDF Export: Generates a 2-page clean PDF report containing the balance summary, settlements, and a detailed list of all expenses.
- Excel Export: Exports data cleanly into formatted Excel (
.xlsx) sheets for further accounting.
This project does not have strict Python version limits (Tested on Python 3.14) but requires a modern Python 3.x environment.
git clone https://github.com/arinltte/Balance-Separator.git
cd balance-separatorFor macOS/Linux:
python3 -m venv venv
source venv/bin/activateFor Windows:
python -m venv .venv
.venv\Scripts\Activate.ps1Install the required libraries using pip:
pip install PyQt6 pandas openpyxlor
pip install -r requirements.txtNote: PyQt6 is used for the Graphical User Interface. pandas and openpyxl are required for exporting data to Excel.
python balance_gui.pybalance_gui.py: Contains all UI rendering, stylesheets, event handling, and window logic.balance_logic.py: The backend brain. Handles dataclasses, file saving/loading, and the core mathematical settlement algorithms.projects.json: Auto-generated file where all your project data is stored.config.json: Auto-generated file storing your layout sizes and theme preferences.
Contributions, issues, and feature requests are welcome! Feel free to check the issues page.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.
2026 Developed by Chen Jin Shen, cjshen00@gmail.com
