Upload images to Google Photos with a simple right-click
- Quick Upload - Right-click any image on the web to upload to Google Photos
- Album Management - Select or create albums to organize your uploads
- Upload History - Track your recent uploads with thumbnails
- Side Panel - Convenient side panel interface for managing uploads
- User Profile - Display your Google account info after authentication
- Modern UI - Clean interface built with React 19 and TypeScript
- Manifest V3 - Built with the latest Chrome Extension standards
- HMR Development - Hot Module Replacement for fast development
Coming soon
Before using this extension, you need:
- Node.js 22+ (LTS recommended)
- Google Cloud Project with OAuth 2.0 credentials
- Google Photos Library API enabled
- Chrome browser (version 88 or later)
-
Clone this repository
git clone https://github.com/hank00111/meme-photo.git cd meme-photo -
Install dependencies
npm install
-
Configure OAuth credentials
Create OAuth 2.0 credentials in Google Cloud Console:
- Go to APIs & Services > Credentials
- Click Create Credentials > OAuth client ID
- Select Chrome Extension as application type
- Update
manifest.jsonwith your Client ID:"oauth2": { "client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com", ... }
-
Build the extension
npm run dev # Development with HMR # or npm run build # Production build
-
Load in Chrome
- Open
chrome://extensions/ - Enable Developer mode
- Click Load unpacked
- Select the
dist/folder
- Open
To use this extension, you need to set up Google OAuth 2.0:
- Go to Google Cloud Console
- Create a new project or select an existing one
- Go to APIs & Services > Library
- Search and enable Google Photos Library API
- Go to APIs & Services > OAuth consent screen
- Select External user type
- Fill in the required information
- Add these scopes:
https://www.googleapis.com/auth/photoslibrary.appendonlyhttps://www.googleapis.com/auth/photoslibrary.readonly.appcreateddatahttps://www.googleapis.com/auth/userinfo.profile
- Go to APIs & Services > Credentials
- Click Create Credentials > OAuth client ID
- Select Chrome Extension
- Enter your extension ID (found in
chrome://extensions/) - Copy the Client ID and update
manifest.json
| Technology | Version | Purpose |
|---|---|---|
| React | 19.2.3 | UI Framework |
| TypeScript | 5.9.3 | Type Safety |
| Vite | 7.3.0 | Build Tool |
| CRXJS | 2.3.0 | Chrome Extension Plugin |
| ESLint | 9.39.x | Code Linting |
src/
├── background/ # Service Worker (Manifest V3)
├── popup/ # Extension popup UI
├── sidepanel/ # Side panel UI
├── content/ # Content scripts
├── components/ # Shared React components
│ ├── AlbumSelector.tsx
│ ├── AlbumSelectorModal.tsx
│ ├── AuthOverlay.tsx
│ ├── ErrorBoundary.tsx
│ ├── ThumbnailImage.tsx
│ ├── UploadHistory.tsx
│ ├── UploadRecordCard.tsx
│ └── UserAvatar.tsx
├── utils/ # Utility functions
├── types/ # TypeScript type definitions
└── styles/ # Global styles
public/
├── icons/ # Extension icons
├── content/ # Content script assets
└── styles/ # Content script styles
npm run dev # Start dev server with HMR
npm run build # Production build
npm run lint # Run ESLint
npm run preview # Preview production build
npm run clean # Clean build outputs| Permission | Purpose |
|---|---|
identity |
Google OAuth authentication |
storage |
Store user preferences and upload history |
contextMenus |
Right-click menu integration |
sidePanel |
Side panel UI |
scripting |
Content script injection |
- Service Worker: Click "Service Worker" link in
chrome://extensions/ - Popup: Right-click extension icon > Inspect popup
- Side Panel: Open side panel > Right-click > Inspect
Contributions are welcome! Here's how you can help:
- Fork this repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow existing code style
- Write clear commit messages
- Test your changes before submitting
- Update documentation if needed
- Ensure CI checks pass
This project is licensed under the MIT License - see the LICENSE file for details.
Made with love by hank00111