Skip to content

Instantly share code, notes, and snippets.

@rahulharpal1603
Last active September 13, 2025 13:19
Show Gist options
  • Select an option

  • Save rahulharpal1603/d4a80718288568f8547ea67f8f3c91dc to your computer and use it in GitHub Desktop.

Select an option

Save rahulharpal1603/d4a80718288568f8547ea67f8f3c91dc to your computer and use it in GitHub Desktop.
PictoPy's Final Report for GSoC'25

PictoPy's Final Report for GSoC'25

Student Information

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 unnormalized database schemas. A fresh modern UI using ShadCN was introduced on the frontend, along with a unified folder selection, an advanced search bar supporting face and object queries. To ensure broader accessibility, the project packages and publishes PictoPy for Windows, macOS, and Linux. This involved 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.

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
  2. Final Demo

Test Released Desktop Apps:

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
image

Relevant Pull Requests (ordered by the date of merge)

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

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

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

Thank You 🥹

@rohan-pandeyy
Copy link

You’re one of the best contributors/mentors I’ve met online while contributing to open source. Supportive, helpful, and quick to guide whenever needed, since the beginning. Congratulations on your final submission @rahulharpal1603!

@rahulharpal1603
Copy link
Author

You’re one of the best contributors/mentors I’ve met online while contributing to open source. Supportive, helpful, and quick to guide whenever needed, since the beginning. Congratulations on your final submission @rahulharpal1603!

Thank you so much @rohan-pandeyy!
I really love to work with you :)

@ssz2605
Copy link

ssz2605 commented Sep 9, 2025

@rahulharpal1603 As a beginner, it was difficult to start, but your guidance helped me learn many new skills and eventually contribute to open source. Thank you so much!

@rahulharpal1603
Copy link
Author

@rahulharpal1603 As a beginner, it was difficult to start, but your guidance helped me learn many new skills and eventually contribute to open source. Thank you so much!

Thank you 🙌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment