Skip to content
Open
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
131 changes: 95 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,46 +1,76 @@
# PictoPy
<!-- Don't delete it -->
<div name="readme-top"></div>

<!-- Organization Logo -->
<div align="center" style="display: flex; align-items: center; justify-content: center; gap: 16px;">
<a href="https://aossie.org">
<img src="https://aossie.org/logo1.png" alt="AOSSIE Logo" width="200"/>
</a>
</div>

&nbsp;

<!-- Organization Name -->
<div align="center">

[![Static Badge](https://img.shields.io/badge/aossie.org/PictoPy-228B22?style=for-the-badge&labelColor=FFC517)](https://aossie.org/)

</div>

<!-- Organization/Project Social Handles -->
<p align="center">
<!-- Email -->
<a href="mailto:aossie.oss@gmail.com" title="Email">
<img src="https://img.shields.io/badge/Email-D14836?style=flat&logo=gmail&logoColor=white" alt="Email"/>
</a>
<!-- 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>
Comment on lines +27 to +28
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for Telegram references and context in the README
rg -i "telegram|t\.me|stability" --type md -C 3

Repository: AOSSIE-Org/PictoPy

Length of output: 2007


🏁 Script executed:

#!/bin/bash
# Search for StabilityNexus or Stability references to understand context
rg -i "stability" --type-list | head -20
echo "---"
# Search all files for StabilityNexus
rg "StabilityNexus" -C 2
echo "---"
# Search for any configuration or metadata about social links
rg -i "social|channel|telegram" --type md --type json --type yaml

Repository: AOSSIE-Org/PictoPy

Length of output: 3763


🏁 Script executed:

#!/bin/bash
# Check mkdocs.yml for social configuration
cat mkdocs.yml | grep -A 10 "social"
echo "---"
# Search for any documentation about project social channels
fd "README" -t f | head -5 | xargs cat | grep -i "social\|channel\|contact" -A 2 -B 2 || echo "No additional docs found"

Repository: AOSSIE-Org/PictoPy

Length of output: 807


🏁 Script executed:

#!/bin/bash
# Check if there are any GitHub issues or discussions mentioning StabilityNexus
git log --all --oneline --grep="StabilityNexus\|Stability" 2>/dev/null | head -10 || echo "No git history found for StabilityNexus"
echo "---"
# Check for any configuration files that might list official channels
fd "\.md$\|\.json$\|\.yaml$\|\.yml$" | xargs grep -l "official\|channel\|social" 2>/dev/null | head -5

Repository: AOSSIE-Org/PictoPy

Length of output: 65


Verify and correct the Telegram and Medium links for brand consistency.

The Telegram link points to t.me/StabilityNexus and the Medium link points to news.stability.nexus/, both using "Stability" branding instead of "AOSSIE". This is inconsistent with all other social links (email: aossie.oss@gmail.com, X: @aossie_org, Discord: AOSSIE, LinkedIn: /company/aossie/, YouTube: @AOSSIE-Org) and neither link appears in the official social section of mkdocs.yml. Confirm whether these channels are official AOSSIE channels or if they should be corrected/removed.

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

In `@README.md` around lines 27 - 28, The README contains incorrect brand links:
replace the Telegram URL 'https://t.me/StabilityNexus' and the Medium URL
'news.stability.nexus/' with the official AOSSIE channels (or remove them if
they are not official), and then add or update these entries in the social
section of mkdocs.yml to match the other identifiers (email
aossie.oss@gmail.com, X `@aossie_org`, Discord AOSSIE, LinkedIn /company/aossie/,
YouTube `@AOSSIE-Org`); locate the Telegram link in README.md and the social
config in mkdocs.yml and either swap the URLs to the correct AOSSIE
Telegram/Medium endpoints or delete the entries if they are not official.

&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>
Comment on lines +39 to +40
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for Medium links and AOSSIE branding in the codebase
rg -i "medium|stability\.nexus|aossie" --type md -C 2

Repository: AOSSIE-Org/PictoPy

Length of output: 7226


🏁 Script executed:

#!/bin/bash
# Check if there are any comments or documentation about the Medium link
cd README.md 2>/dev/null || true
cat README.md | grep -A 5 -B 5 "news.stability.nexus"

# Also check for any other Medium references or docs
rg "medium" -i --type md

Repository: AOSSIE-Org/PictoPy

Length of output: 1468


🌐 Web query:

AOSSIE organization official Medium profile

💡 Result:

I couldn’t find any official AOSSIE organization account/publication on Medium (i.e., a Medium profile clearly owned and linked by AOSSIE). Searches only turn up individual authors’ posts mentioning AOSSIE, not an org-owned Medium profile. [1], [2]

If you’re looking for AOSSIE’s official long-form posts instead, their official blog is hosted outside Medium:

Sources:
[1] https://medium.com/%40sarthakd/the-guide-to-aossie-slagora-58f5ec8d5410
[2] https://medium.com/%40kukkadapusushma12/sushma-kukkadapu-google-summer-of-code-2018-aossie-e6134a055046
[3] https://aossie.github.io/2016/02/02/aossie-announcement.html
[4] https://github.com/AOSSIE-Org/AOSSIE-Blogs


🌐 Web query:

news.stability.nexus AOSSIE Medium

💡 Result:

  • news.stability.nexus is a Medium-hosted publication titled “Articles” (shows Medium sign-in, “Follow”, subscriber prompts, etc.), i.e., it’s essentially a Medium publication under the Stability Nexus brand. [1]
  • Some Medium posts (e.g., in the Djed Alliance Medium publication) explicitly state they were “Originally published at https://news.stability.nexus”, indicating cross-posting/syndication between Medium and news.stability.nexus. [2]
  • AOSSIE is connected via Stability Nexus activities: Stability Nexus documentation lists AOSSIE as a sponsoring organisation for the “Unstoppable Hackathon” alongside Stability Nexus (and others). [3]

Sources: [1] [2] [3]


Update Medium link to reflect official AOSSIE presence or clarify intent.

The link https://news.stability.nexus/ points to a Stability Nexus publication, not an official AOSSIE Medium account. AOSSIE has no official Medium profile; the organization's official blog is published at https://aossie.github.io/. Either update the link to point to AOSSIE's official blog (https://aossie.github.io/) to maintain consistent branding, or add a comment clarifying that this link directs to partner organization content.

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

In `@README.md` around lines 39 - 40, Replace the current Medium badge link anchor
(<a href="https://news.stability.nexus/"> with its image) so it either points to
AOSSIE's official blog (https://aossie.github.io/) or add an explicit clarifying
note next to the badge that it links to a partner/third‑party Stability Nexus
publication; update the href URL and/or the surrounding text/alt text
accordingly and ensure the badge still renders (the <a> anchor and the <img> alt
text are the symbols to update).

&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&logoSize=auto&labelColor=FF0000&color=FF0000" alt="Youtube Badge"></a>
</p>

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? 😄

&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.

# Architecture

### Frontend

- **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
---

### Backend (Python)
<div align="center">
<h1>PictoPy</h1>
</div>

- **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
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. It offers efficient data handling, parallel processing, and a privacy-focused design that keeps your data entirely offline.

### Backend (Rust via Tauri)
---

Handles file system operations and provides a secure bridge between the frontend and local system.
## 🚀 Features

## Features
- **Smart Tagging**: Automatic tagging of photos based on detected objects, faces, and their recognition.
- **Album Management**: Traditional gallery features for organizing and managing photo albums.
- **Advanced Image Analysis**: Object detection and facial recognition powered by YOLO and FaceNet.
- **Privacy-Focused**: Fully offline functionality keeping your data on your device.
- **Smart Search & Retrieval**: Efficient search across your photo library.
- **Performance**: Efficient data handling and parallel processing for smooth operations.
- **Cross-Platform**: Compatible across major desktop operating systems.

- 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
---

## Technical Stack
## 💻 Tech Stack

| Component | Technology |
| ----------------- | -------------------- |
Expand All @@ -52,6 +82,7 @@ Handles file system operations and provides a secure bridge between the frontend
| Image Processing | OpenCV, ONNX Runtime |
| Object Detection | YOLOv11 |
| Face Recognition | FaceNet |
| Clustering | DBSCAN |
| API Framework | FastAPI |
| State Management | Redux Toolkit |
| Styling | Tailwind CSS |
Expand All @@ -62,4 +93,32 @@ Handles file system operations and provides a secure bridge between the frontend

---

Our Code of Conduct: [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md)
## 🏗️ Architecture

### Frontend
- **Tauri**: Enables building the secure, lightweight desktop application.
- **React**: Used for creating the dynamic user interface.
- **Rust**: Powers the system-level backend, which the frontend communicates with through Tauri's API.

### Backend (Python)
- **FastAPI**: Serves as the high-performance API framework.
- **SQLite**: Database for storing metadata and embeddings.
- **YOLO**: Used for precise object detection.
- **FaceNet**: Generates face embeddings for recognition.
- **ONNX Runtime**: Runs the ML models efficiently.
- **DBSCAN**: Performs clustering for face embeddings to group similar faces.

### Backend (Rust via Tauri)
Handles file system operations and provides a secure bridge between the frontend and the local system.

---

## 🔗 Repository Links

1. [Main Repository](https://github.com/AOSSIE-Org/PictoPy)
2. [Frontend](https://github.com/AOSSIE-Org/PictoPy/tree/main/frontend)
3. [Backend](https://github.com/AOSSIE-Org/PictoPy/tree/main/backend)

---
Copyright (C) 2026 AOSSIE (Australian Open Source Software Innovation and Education)