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
89 changes: 89 additions & 0 deletions 2025/RahulHarpal-PictoPy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# PictoPy's Final Report for GSoC'25

## Student Information

- **Name:** Rahul Harpal
- **GitHub:** [rahulharpal1603](https://github.com/rahulharpal1603)
- **Social Profiles:** [Linkedin](https://www.linkedin.com/in/rahulharpal/)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix proper noun capitalization (“LinkedIn”).

Small but user-facing typo.

- - **Social Profiles:** [Linkedin](https://www.linkedin.com/in/rahulharpal/)
+ - **Social Profiles:** [LinkedIn](https://www.linkedin.com/in/rahulharpal/)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **Social Profiles:** [Linkedin](https://www.linkedin.com/in/rahulharpal/)
- **Social Profiles:** [LinkedIn](https://www.linkedin.com/in/rahulharpal/)
🤖 Prompt for AI Agents
In 2025/RahulHarpal-PictoPy.md around line 7, the social profile link text uses
incorrect capitalization "Linkedin"; update the visible link text to the proper
proper noun "LinkedIn" while leaving the URL unchanged, i.e., change the
markdown label to "LinkedIn" so it reads **Social Profiles:**
[LinkedIn](https://www.linkedin.com/in/rahulharpal/).

- **Organization:** [Australian Open Source Software Innovation and Education (AOSSIE)](https://www.aossie.org/)
- **Project:** [PictoPy](https://github.com/AOSSIE-Org/PictoPy)
- **Updated project timeline:** [Link](https://docs.google.com/document/d/1w2nTQ5nLkWb824FT27L6YKCgT6dThwRLa1gt33h7UfM/edit?tab=t.dw71m7dpokgi)
- **GSoC'25 Proposal:** [Link](https://docs.google.com/document/d/1F0HhIUfv1OJQ_D1lViH0wzECE_ueWQtdz8jDvBwu0Vw/edit?tab=t.0)
- **Documentation Site:** [Link](https://aossie-org.github.io/PictoPy/)

## Abstract

For GSoC'25, I aimed at an all-around enhancement to PictoPy by improving its backend scalability, frontend usability, and deployment accessibility. Key backend upgrades include implementing user-named face clusters, optimizing face clustering with dimensionality reduction, upgrading to YOLOv11 for better detection, adding GPU-accelerated inferencing, and redesigning inefficient database schemas. A fresh modern UI using Radix UI will be introduced on the frontend, along with a unified folder selection, an advanced search bar supporting face and object queries, object bounding box display, and user notifications. To ensure broader accessibility, the project will package and publish PictoPy for Windows, macOS, and Linux. This will involve the creation of CI/CD pipelines on the GitHub repository. Comprehensive documentation will encourage new developers to contribute, including contributing guides, API references, and a setup video. These improvements will make PictoPy more user-friendly, scalable, and ready for widespread adoption.
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Use past tense in a final report; tighten phrasing.

Reads like a proposal (“will be introduced”). Recommend past tense to reflect completed work.

-For GSoC'25, I aimed at an all-around enhancement to PictoPy by improving its backend scalability, frontend usability, and deployment accessibility. Key backend upgrades include implementing user-named face clusters, optimizing face clustering with dimensionality reduction, upgrading to YOLOv11 for better detection, adding GPU-accelerated inferencing, and redesigning inefficient database schemas. A fresh modern UI using Radix UI will be introduced on the frontend, along with a unified folder selection, an advanced search bar supporting face and object queries, object bounding box display, and user notifications. To ensure broader accessibility, the project will package and publish PictoPy for Windows, macOS, and Linux. This will involve the creation of CI/CD pipelines on the GitHub repository. Comprehensive documentation will encourage new developers to contribute, including contributing guides, API references, and a setup video. These improvements will make PictoPy more user-friendly, scalable, and ready for widespread adoption.
+For GSoC'25, I delivered all-around enhancements to PictoPy across backend scalability, frontend usability, and deployment accessibility. Key backend upgrades included user‑named face clusters, faster clustering via dimensionality reduction, a detector upgrade (YOLOv11), GPU‑accelerated inference, and a redesigned database schema. On the frontend, a modern UI using Radix UI, unified folder selection, an advanced search bar (face/object queries), object bounding boxes, and user notifications were added. To broaden accessibility, PictoPy was packaged for Windows, macOS, and Linux with CI/CD pipelines. Documentation was expanded (contributing guides, API references, setup video) to onboard new developers, making PictoPy more user‑friendly, scalable, and adoption‑ready.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
For GSoC'25, I aimed at an all-around enhancement to PictoPy by improving its backend scalability, frontend usability, and deployment accessibility. Key backend upgrades include implementing user-named face clusters, optimizing face clustering with dimensionality reduction, upgrading to YOLOv11 for better detection, adding GPU-accelerated inferencing, and redesigning inefficient database schemas. A fresh modern UI using Radix UI will be introduced on the frontend, along with a unified folder selection, an advanced search bar supporting face and object queries, object bounding box display, and user notifications. To ensure broader accessibility, the project will package and publish PictoPy for Windows, macOS, and Linux. This will involve the creation of CI/CD pipelines on the GitHub repository. Comprehensive documentation will encourage new developers to contribute, including contributing guides, API references, and a setup video. These improvements will make PictoPy more user-friendly, scalable, and ready for widespread adoption.
For GSoC'25, I delivered all-around enhancements to PictoPy across backend scalability, frontend usability, and deployment accessibility. Key backend upgrades included user-named face clusters, faster clustering via dimensionality reduction, a detector upgrade (YOLOv11), GPU-accelerated inference, and a redesigned database schema. On the frontend, a modern UI using Radix UI, unified folder selection, an advanced search bar (face/object queries), object bounding boxes, and user notifications were added. To broaden accessibility, PictoPy was packaged for Windows, macOS, and Linux with CI/CD pipelines. Documentation was expanded (contributing guides, API references, setup video) to onboard new developers, making PictoPy more user-friendly, scalable, and adoption-ready.
🤖 Prompt for AI Agents
In 2025/RahulHarpal-PictoPy.md around line 16, the paragraph is written in
proposal/future tense and reads like a plan rather than a final report; rewrite
it into concise past-tense, active-voice statements that summarize completed
work (replace "will" phrases with past verbs, change "will be introduced" to
"was introduced", etc.), tighten wording by collapsing long lists into compact
clauses, and ensure each major change is described briefly as completed rather
than planned.


## Technologies Used

- Frontend: Tauri, ReactJS, and ShadCN
- Backend: FastAPI(Python)
- Database: SQLite
- AI: ONNX Runtime, YOLOv11, FaceNet

## Demos

### Demo Videos
1. [Mid Term Eval Demo](https://www.youtube.com/watch?v=8mgXXvdWQ5U)


### Test Released Desktop Apps:

- [GitHub Releases Page](https://github.com/AOSSIE-Org/PictoPy/releases/latest)

## Project Description

PictoPy is an intelligent photo management application that combines AI-powered features with efficient file organization. Built with a modern tech stack, it provides users with advanced photo discovery and management capabilities.

### Key Features

* **AI-Powered Tagging**: Automatic image classification and tagging using deep learning models
* **Face Recognition**: Intelligent face clustering and recognition for organizing photos by people
* **Smart Albums**: Create and manage photo albums with advanced filtering capabilities
* **File System Sync**: Real-time monitoring and synchronization of photo directories
* **Cross-Platform**: Desktop application built with Tauri for Windows, macOS, and Linux

<img width="2499" height="1932" alt="image" src="https://github.com/user-attachments/assets/4d409bb2-a676-455f-968e-2560508b0749" />






## Relevant Pull Requests (ordered by the date of merge)

1. PR #423: [Added caching in the PictoPy-build-check workflow](https://github.com/AOSSIE-Org/PictoPy/pull/423)
2. PR #426: [Configure auto-updater, Redux toolkit setup, update dependencies](https://github.com/AOSSIE-Org/PictoPy/pull/426)
3. PR #449: [Rename workflows and set up GitHub secrets to generate builds](https://github.com/AOSSIE-Org/PictoPy/pull/449)
4. PR #466: [GSoC 2025 Backend Revamp](https://github.com/AOSSIE-Org/PictoPy/pull/466)
5. PR #484: [Update documentation deployment workflow and add requirements file](https://github.com/AOSSIE-Org/PictoPy/pull/484)
6. PR #486: [Add sync microservice for watching file system events](https://github.com/AOSSIE-Org/PictoPy/pull/486)
7. PR #489: [GSoC 2025 Frontend Revamp](https://github.com/AOSSIE-Org/PictoPy/pull/489)
8. PR #492: [Update build pipeline to support the microservice.](https://github.com/AOSSIE-Org/PictoPy/pull/492)
9. PR #493: [Fix flag error in build pipeline](https://github.com/AOSSIE-Org/PictoPy/pull/493)

## Challenges and Solutions:

1. **Packaging the Desktop App:** Unlike websites, which can be easily hosted and deployed on various platforms, building Desktop apps is a different game altogether. We must consider all the edge cases for each of the three platforms. This was solved by creating a fully customized CI/CD pipeline that generates app builds for each of the platforms, packaging the frontend, backend, and models into a single installer for each platform.
2. **Syncing system folders with the app state:** The app allows users to choose which folders to import photos from. But the challenge is keeping the app synced with the changes to the selected folder. These changes could be the addition/deletion of new folders and images. This was solved by developing a microservice that runs separately and monitors file changes inside the folders using the Python package Watchfiles. Based on the changes that happen, the main backend then updates the SQLite DB.
3. **Keeping the API and DB docs up to date:** Due to many changes happening in the APIs, it was hard to keep the API docs updated manually. So we decided to use Swagger to automatically generate API docs based on the changes made in the Python code. (See this [PR](https://github.com/AOSSIE-Org/PictoPy/pull/483) by Anjali). Similarly, for Database design, we used dbdiagram.io to automatically update our docs site (We embed the link provided by dbdiagram. See this [Link](https://aossie-org.github.io/PictoPy/backend/backend_python/database/))


## Future Plans

1. Implement a notifications system for the desktop app.
2. Complete some minor changes that are pending.
3. Reduce the final app size by only shipping small models first and then downloading the larger ones later based on the user's requirements.
4. Implement the memories feature in the app.
5. Consider further performance improvements for the backend(especially for inferencing DL models).
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix terminology: “inference” (not “inferencing”).

-5. Consider further performance improvements for the backend(especially for inferencing DL models).
+5. Consider further performance improvements for the backend (especially for DL model inference).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
5. Consider further performance improvements for the backend(especially for inferencing DL models).
5. Consider further performance improvements for the backend (especially for DL model inference).
🧰 Tools
🪛 LanguageTool

[grammar] ~79-~79: There might be a mistake here.
Context: ...d(especially for inferencing DL models). 6. Set up proper logging for both frontend ...

(QB_NEW_EN)

🤖 Prompt for AI Agents
In 2025/RahulHarpal-PictoPy.md around line 79, the term "inferencing" is
incorrect; replace it with "inference" to use proper terminology. Update the
sentence to read "Consider further performance improvements for the backend
(especially for inference of DL models)." Also scan the file for any other
occurrences of "inferencing" and replace them with "inference" to ensure
consistent terminology.

6. Set up proper logging for both frontend and backend.
7. Open issues and assign them to new contributors to grow the project.
8. Publicize the app to increase the user base.
9. Publish the app on Snap store, Microsoft store and macOS store (Postponed this because of platform fees)


## Acknowledgements
I sincerely thank my mentor, Pranav Aggarwal at AOSSIE, who was always there to provide me guidance and valuable feedback throughout my GSoC journey.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Grammar fix (“provide me with guidance”).

-I sincerely thank my mentor, Pranav Aggarwal at AOSSIE, who was always there to provide me guidance and valuable feedback throughout my GSoC journey.
+I sincerely thank my mentor, Pranav Aggarwal at AOSSIE, who was always there to provide me with guidance and valuable feedback throughout my GSoC journey.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
I sincerely thank my mentor, Pranav Aggarwal at AOSSIE, who was always there to provide me guidance and valuable feedback throughout my GSoC journey.
I sincerely thank my mentor, Pranav Aggarwal at AOSSIE, who was always there to provide me with guidance and valuable feedback throughout my GSoC journey.
🤖 Prompt for AI Agents
In 2025/RahulHarpal-PictoPy.md around line 87, change the phrase "provide me
guidance" to "provide me with guidance" in the sentence thanking the mentor;
update the wording to read: "I sincerely thank my mentor, Pranav Aggarwal at
AOSSIE, who was always there to provide me with guidance and valuable feedback
throughout my GSoC journey."


### Thank You 🥹