- π‘ About
- π¬ Demo Video
- π» Tech Stack
- π Architecture & Data Model
- π Getting Started
- π§ͺ Linting & Formatting
- π οΈ Standalone Executable
- π€ Contributing
- π License
PhotoShow is a local desktop application for browsing, organizing, and sharing photo collections. Sign in for a personalized, role-based experience.
β¨ Key Features
- π Create and manage albums
- πΈ Upload and view photos
- π Browse community content
- β€οΈ Like and rate photos
- π¬ Comment on photos
- β Add albums to favorites
- π₯ Follow other users
- π Receive in-app notifications
- π€ Customize your profile
- π¨ Set a custom avatar
- π© Report inappropriate content
- π¨βπΌ Admin tools for user management
- π Admin tools for category management
- β Admin review system for reports
A demo video for PhotoShow will be added soon.
Core Technologies
- Python 3.14+ - Main programming language.
- Tkinter - GUI framework.
- Pillow - Image processing library.
- pip - Package manager.
Data & Security
- SQLite - Embedded relational database.
- SQLAlchemy - ORM and database toolkit.
- bcrypt - Password hashing.
Code Quality & Linting
- Black - Code formatter.
- flake8 - Code linter.
- isort - Import sorter.
- yamllint - YAML linter.
- mypy - Static type checker.
Testing
- pytest - Testing framework.
- pytest-mock - Mocking in tests.
- pytest-cov - Coverage reporting.
- codecov - Code coverage reporting service.
Packaging
- PyInstaller - Build standalone executables.
β οΈ The preview below may be slightly outdated and will be refreshed in a later update.
β οΈ The preview below may be slightly outdated and will be refreshed in a later update.
The database model is shown as a DER (Diagram Entity-Relationship) preview so the main entities and relationships stay readable at a glance.
ORM models live in app/core/db/models/ and are implemented with SQLAlchemy. You can check also in app\core\db\models\__init__.py for a quick overview of all the main entities and their relationships.
- Python 3.14.3 β Main programming language (download)
- pip β comes with Python
- Git β for cloning (download)
- (Recommended) Virtual environment support:
python -m venv
Verify your tools are available in the PATH:
python --version pip --version git --version
git clone https://github.com/pedromst2000/PhotoShow.gitcd PhotoShowπ‘ Tip: Can't find the project directory? Open the folder in your code editor and use the integrated terminal.
Create the virtual environment:
python -m venv .venvActivate it on Windows PowerShell:
.venv\Scripts\ActivateActivate it on macOS/Linux:
source .venv/bin/activateTo deactivate the virtual environment:
- On any OS, simply run:
deactivateThis will return you to your system's default Python environment.
Note: Some dependencies may only work correctly inside the
.venvvirtual environment. It is highly recommended to use the virtual environment for all development and testing.
python -m pip install --upgrade pip
pip install --upgrade -r dev-requirements.txtpython main.pyphotoshow.db is created automatically at the project root on first run. Use the commands below to manage the database state.
| Command | Description |
|---|---|
python main.py --backupDB |
Snapshot the current live DB to backups/<timestamp>/ |
python main.py --resetDB |
Auto-backup, then wipe and reseed from seed CSV files |
python main.py --restoreDB |
Restore DB from the latest backup |
python main.py --restoreDB backups/<folder> |
Restore DB from a specific backup snapshot |
When to use each:
--backupDB- before making risky changes or testing destructive operations; saves the current live state--resetDB- returns the app to the initial dummy-data state (useful for local feature testing); always auto-backups first--restoreDB- brings back a previous state after a reset or data loss; defaults to the newest backup
β οΈ Backups may contain sensitive data (e.g., emails, password hashes). Keep thebackups/folder local and out of version control - it is already listed in.gitignore.
Run these checks locally before committing to keep the codebase consistent and avoid CI failures.
Checks CSV seed data files for structural and formatting issues.
python app/scripts/lint_csv.pyAuto-formats CSV seed data files to conform to project standards.
python app/scripts/format_csv.pyChecks that Python imports are correctly ordered according to isort conventions.
python app/scripts/check_imports.pyAuto-formats Python imports to match isort ordering conventions.
python app/scripts/format_imports.pyChecks Python files for style violations and errors (PEP 8 compliance).
python -m flake8 .Auto-formats all Python files using the Black code formatter.
python -m black .Runs static type checks on app/ and main.py using mypy.
python -m mypy app main.pyConfiguration is managed via
mypy.iniat the project root.
Checks YAML configuration files for syntax and formatting issues.
python -m yamllint .Before committing, run the check on your staged changes and (if needed) auto-fix style issues:
Run the check:
python app/scripts/check_changed_files.pyTo auto-fix style-only problems (formatting, imports, CSV structure):
python app/scripts/check_changed_files.py --fixNote: --fix only addresses style issues. Re-run the first command after fixes to confirm everything is clean before committing.
Standalone executable instructions will be added soon.
Your contributions help improve PhotoShow! Whether you're fixing a bug, improving the UI, or adding a new feature β every contribution matters.
- Found a bug? Report it
- Have an enhancement idea? Suggest it
- Ready to code? Follow the workflow below
Follow these conventions for branches and commit messages:
| Type | Purpose | Branch Example | Commit Example |
|---|---|---|---|
feat |
New feature | feat/photo-grid |
feat: add photo grid view |
fix |
Bug fix | fix/login-validation |
fix: resolve login error |
docs |
Documentation | docs/update-readme |
docs: update installation steps |
refactor |
Code restructuring | refactor/album-service |
refactor: simplify album logic |
test |
Testing | test/auth-tests |
test: add auth unit tests |
ci |
CI/CD pipelines | ci/add-lint-workflow |
ci: add lint workflow |
chore |
Maintenance | chore/update-deps |
chore: update dependencies |
- Fork the repository and clone your fork
- Create a branch:
git checkout -b <type>/<short-description>
- Make your changes
- Commit:
git commit -m "<type>: <short description>" - Push:
git push origin <type>/<short-description>
- Open a Pull Request
PR checklist:
- β Title follows naming conventions
- β Description explains changes clearly
- β Passes all linting and formatting checks
- β No merge conflicts
Thanks for contributing! π
This project is licensed under the MIT License. See LICENSE for details.

