Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# 🌟 Contributing to PictoPy
# Contributing to PictoPy

Hi there! Thank you for considering contributing to **PictoPy** – we’re excited to collaborate with you. Whether you're fixing a bug, improving documentation, or suggesting a new feature — you're welcome here!

NOTE: Please do not open a PR for the issue which is not yet reviewed and labelled by the maintainer. Wait for the maintainer to give a green light.

# 🛠 Setting Up the Project
# Setting Up the Project

## Setup

Expand Down
2 changes: 1 addition & 1 deletion COPYRIGHT.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright © 2025 AOSSIE <br />
Copyright © 2026 AOSSIE <br />
All rights reserved.

All works in this repository may be used according to the conditions
Expand Down
123 changes: 88 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,53 +1,75 @@
# PictoPy

PictoPy is an advanced desktop gallery application that combines the power of Tauri, React, and Rust for the frontend with a Python backend for sophisticated image analysis and management.

# Want to Contribute? 😄
<!-- Don't delete it -->
<div name="readme-top"></div>

<p align="center">
<img src="docs/assets/banner.png" alt="PictoPy Banner" width="100%"/>
</p>

<!-- Organization/Project Social Handles -->
<p align="center">
<!-- Telegram -->
<a href="https://t.me/StabilityNexus">
<img src="https://img.shields.io/badge/Telegram-black?style=flat&logo=telegram&logoColor=white&logoSize=auto&color=24A1DE" alt="Telegram Badge"/></a>
&nbsp;&nbsp;
<!-- X (formerly Twitter) -->
<a href="https://x.com/aossie_org">
<img src="https://img.shields.io/twitter/follow/aossie_org" alt="X (formerly Twitter) Badge"/></a>
&nbsp;&nbsp;
<!-- Discord -->
<a href="https://discord.gg/hjUhu33uAn">
<img src="https://img.shields.io/discord/1022871757289422898?style=flat&logo=discord&logoColor=white&logoSize=auto&label=Discord&labelColor=5865F2&color=57F287" alt="Discord Badge"/></a>
&nbsp;&nbsp;
<!-- Medium -->
<a href="https://news.stability.nexus/">
<img src="https://img.shields.io/badge/Medium-black?style=flat&logo=medium&logoColor=black&logoSize=auto&color=white" alt="Medium Badge"></a>
&nbsp;&nbsp;
<!-- LinkedIn -->
<a href="https://www.linkedin.com/company/aossie/">
<img src="https://img.shields.io/badge/LinkedIn-black?style=flat&logo=LinkedIn&logoColor=white&logoSize=auto&color=0A66C2" alt="LinkedIn Badge"></a>
&nbsp;&nbsp;
<!-- Youtube -->
<a href="https://www.youtube.com/@AOSSIE-Org">
<img src="https://img.shields.io/youtube/channel/subscribers/UCKVVLbawY7Gej_3o2WKsoiA?style=flat&logo=youtube&logoColor=white%20&logoSize=auto&labelColor=FF0000&color=FF0000" alt="Youtube Badge"></a>
</p>

&nbsp;&nbsp;&nbsp;<a href="https://discord.gg/hjUhu33uAn"><img src="https://github.com/user-attachments/assets/3ed93273-5055-4532-a524-87a337a4fbba" height="40"></a>

1. First, join the **[Discord Server](https://discord.gg/hjUhu33uAn) (Go to Projects->PictoPy)** to chat with everyone.
2. For detailed setup instructions, coding guidelines, and the contribution process, please check out our [CONTRIBUTING.md](./CONTRIBUTING.md) file.
# PictoPy

# Architecture
**PictoPy is an open-source, privacy-first AI photo management application built for the desktop - featuring on-device face recognition, object detection, and smart search, with zero data leaving your machine.**

### Frontend
PictoPy brings the intelligence of modern AI photo management to your local machine, without the privacy trade-offs of cloud-based alternatives. Built as a fully offline desktop application with Rust, React, and Python, PictoPy automatically groups faces across your library, tags photos with detected objects, and lets you search your pictures with simple words - all powered by state-of-the-art on-device models, without an internet connection or a subscription.

- **Tauri**: Enables building the desktop application
- **React**: Used for creating the user interface
- **Rust**: Powers the backend, which the frontend communicates with through Tauri's API
Find out more at [https://pictopy.aossie.org/](https://pictopy.aossie.org/).

### Backend (Python)
## Features

- **FastAPI**: Serves as the API framework
- **SQLite**: Database for storing metadata and embeddings
- **YOLO**: Used for object detection
- **FaceNet**: Generates face embeddings
- **ONNX Runtime**: Runs the models efficiently
- **DBSCAN**: Performs clustering for face embeddings
**AI-powered**
* Smart tagging based on detected faces and objects
* Advanced image analysis with object detection and facial recognition
* Smart search and retrieval

### Backend (Rust via Tauri)
**Gallery management**
* Album management with traditional gallery features
* Cross-platform compatibility

Handles file system operations and provides a secure bridge between the frontend and local system.
**Privacy & performance**
* Privacy-focused design with fully offline functionality
* Efficient data handling and parallel processing

## Features
## Demonstration

- Smart tagging of photos based on detected objects, faces, and their recognition
- Traditional gallery features of album management
- Advanced image analysis with object detection and facial recognition
- Privacy-focused design with offline functionality
- Efficient data handling and parallel processing
- Smart search and retrieval
- Cross-platform compatibility
<p align="center">
<a href="https://youtu.be/RWp-9xT9jow?si=c1vNO5cDgI4GYM6y">
<img src="docs/assets/demo.png" alt="PictoPy Demonstration">
</a>
</p>

## Technical Stack
## Technology Stack

| Component | Technology |
| ----------------- | -------------------- |
| Frontend | React |
| Desktop Framework | Tauri |
| Rust Backend | Rust |
| Python Backend | Python |
| Backend | Rust, Python |
| Database | SQLite |
| Image Processing | OpenCV, ONNX Runtime |
| Object Detection | YOLOv11 |
Expand All @@ -60,6 +82,37 @@ Handles file system operations and provides a secure bridge between the frontend
| Build Tool | Vite |
| Type Checking | TypeScript |

---
## High Level Architecture

<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/architectual-design-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="docs/assets/architectual-design-light.svg">
<img src="docs/assets/architectual-design-light.svg" alt="PictoPy architecture diagram">
</picture>
</div>

## Want to Contribute?

<a href="https://discord.gg/hjUhu33uAn"><img src="https://img.shields.io/discord/1022871757289422898?style=flat&logo=discord&logoColor=white&logoSize=auto&label=Discord&labelColor=5865F2&color=57F287" height="30"></a>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add alt text to the Discord badge image.

Line 97’s <img> is missing an alt attribute (also flagged by markdownlint MD045).

As per coding guidelines, "Confirm that the code meets the project's requirements and objectives."

🧰 Tools
🪛 markdownlint-cli2 (0.22.0)

[warning] 97-97: Images should have alternate text (alt text)

(MD045, no-alt-text)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 97, The Discord badge <img> element in README.md is
missing an alt attribute; update the <img
src="https://img.shields.io/discord/1022871757289422898?style=flat&logo=discord&logoColor=white&logoSize=auto&label=Discord&labelColor=5865F2&color=57F287"
height="30"> tag to include a concise alt text (e.g., alt="Discord server") to
satisfy markdownlint MD045 and accessibility guidelines.


1. First, join the **[Discord Server](https://discord.gg/hjUhu33uAn) (Go to Projects->PictoPy)** to chat with everyone.
2. For detailed setup instructions, coding guidelines, and the contribution process, please check out our [CONTRIBUTING.md](./CONTRIBUTING.md) file.

Don't forget to star this repository if you find it useful! ⭐

Our Code of Conduct: [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)


## License

This project is licensed under the GNU General Public License v3.0.
See the [LICENSE](LICENSE) file for details.

## Thanks To All Contributors

Thanks a lot for spending your time helping TODO grow. Keep rocking 🥂
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Replace the placeholder “TODO” in contributor thanks text.

Line 114 currently says “helping TODO grow,” which reads like an unfinished placeholder in user-facing docs.

As per coding guidelines, "Suggest code completions when seeing a TODO or FIXME comment."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 114, Replace the placeholder string "TODO" in the
contributor thank-you sentence that currently reads "helping TODO grow" with the
actual project name (or a neutral phrase like "this project") so the user-facing
README text is not left as an unfinished placeholder; locate the exact
occurrence of "helping TODO grow" in README.md and update it to "helping
<project-name> grow" or "helping this project grow" and search for any other
"TODO" placeholders in the same file to correct them similarly.


[![Contributors](https://contrib.rocks/image?repo=AOSSIE-Org/PictoPy)](https://github.com/AOSSIE-Org/PictoPy/graphs/contributors)

© 2026 AOSSIE
4 changes: 4 additions & 0 deletions docs/assets/architectual-design-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions docs/assets/architectual-design-light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/banner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 20 additions & 0 deletions docs/assets/database_architecture.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/demo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 4 additions & 15 deletions docs/backend/backend_python/database.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,8 @@
PictoPy uses several SQLite databases to manage various aspects of the application. This document provides an overview of each database, its structure, and its primary operations.

## Database Schema
<p align="center">
<img src="../../assets/database_architecture.svg" alt="PictoPy Banner" width="100%"/>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Update image alt text to match the actual content.

Line 9 uses alt="PictoPy Banner", but this is a database schema image. Please use a descriptive alt text like Database architecture diagram.

As per coding guidelines, "Verify that documentation and comments are free of spelling mistakes."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/backend/backend_python/database.md` at line 9, Update the img tag's alt
attribute in the documentation (the <img
src="../../assets/database_architecture.svg" .../> element) so the alt text
accurately describes the image content; replace alt="PictoPy Banner" with a
descriptive phrase such as "Database architecture diagram" (or similar) to
reflect that it is a database schema image and fix the spelling/grammar if
necessary.

</p>

You can view the interactive DB schema below:
<br>
<br>

<iframe
src="https://dbdiagram.io/e/685704c4f039ec6d364647e1/68701a53f413ba350850acf9"
width="100%"
height="700px"
style="border: 1px solid #ccc; border-radius: 8px;"
loading="lazy"
allowfullscreen>
</iframe>
<br>

Alternatively, [click here to open the DB diagram in a new tab](https://dbdiagram.io/d/PictoPy-685704c4f039ec6d364647e1).
Alternatively, [click here to view the interactive DB schema diagram in a new tab](https://dbdiagram.io/d/PictoPy-685704c4f039ec6d364647e1).
Loading