A Chrome Extension for seamless image link conversion and cloud uploads
LinkCaster transforms how you work with images online. Convert screenshot links from services like Lightshot into permanent, shareable URLs on your preferred cloud storage. Upload images and videos directly to Google Drive, Catbox, or vgy.me with a single click.
- Batch Processing - Convert multiple image links simultaneously
- Smart Detection - Automatically extracts direct image URLs from Lightshot pages
- Multiple Destinations - Upload to Catbox.moe, vgy.me, or Google Drive
- Parallel Processing - Concurrent uploads with intelligent rate limiting
- Folder Monitoring - Auto-detect new screenshots from selected folders
- Time Filtering - Show only files from the last N minutes
- Batch Selection - Upload multiple images with one click
- Upload History - Track all uploads with one-click link copying
- Google Drive Integration - Direct video uploads with auto-generated shareable links
- Large File Support - Handles videos up to Google Drive's limits
- Progress Tracking - Real-time upload progress indicators
| Layer | Technology |
|---|---|
| Frontend | Vanilla JavaScript (ES6 Modules), HTML5, CSS3 |
| Extension | Chrome Manifest V3, Service Workers |
| Backend | Node.js, Express.js |
| Cloud APIs | Google Drive API, Catbox.moe API, vgy.me API |
| Storage | Chrome Storage API, IndexedDB |
| Deployment | Railway (backend) |
LinkCaster/
├── manifest.json # Chrome extension manifest (MV3)
├── background.js # Service worker for API calls & OAuth
├── popup.html/css # Extension popup UI
├── js/
│ ├── popup.js # Main entry point
│ └── modules/ # ES6 module architecture
│ ├── convertTab.js # Link conversion logic
│ ├── uploadImageTab.js # Image upload handling
│ ├── uploadVideoTab.js # Video upload handling
│ ├── uploadServices.js # Cloud service integrations
│ ├── storage.js # Chrome storage abstraction
│ ├── fileMonitoring.js # File System Access API
│ └── ...
└── backend/
└── server.js # OAuth proxy & token refresh
- Manifest V3 - Future-proof architecture using service workers instead of background pages
- ES6 Modules - Clean separation of concerns with explicit imports/exports
- IndexedDB for File Handles - Persist folder access permissions across sessions
- Token Refresh Locking - Prevents race conditions during OAuth token refresh
- Exponential Backoff - Graceful retry logic for failed uploads
-
Clone the repository
git clone https://github.com/yourusername/LinkCaster.git
-
Open Chrome and navigate to
chrome://extensions/ -
Enable Developer mode (top right toggle)
-
Click Load unpacked and select the
LinkCasterfolder -
The extension icon will appear in your browser toolbar
-
Navigate to the backend directory
cd backend npm install -
Create a
.envfile with your Google OAuth credentialsGOOGLE_CLIENT_ID=your_client_id GOOGLE_CLIENT_SECRET=your_client_secret GOOGLE_REDIRECT_URI=your_redirect_uri
-
Start the server
npm start
- Click the LinkCaster icon in your browser toolbar
- Paste image links into the text area (one per line or space-separated)
- Select your destination service (Catbox, vgy.me, or Google Drive)
- Click Replace Links
- Copy the converted URLs from the output
- Switch to the Upload Img tab
- Either:
- Select a folder to monitor for new screenshots, or
- Use the file picker to select images directly
- Check the files you want to upload
- Click Upload
| Service | Example URL |
|---|---|
| Lightshot | https://prnt.sc/abc123 |
| Direct Images | https://example.com/image.png |
| Direct Videos | https://example.com/video.mp4 |
- Create an account at vgy.me
- Get your user key from Account Details
- Enter the key in LinkCaster settings
- Click Connect to Google Drive in the extension
- Authorize the application
- Files upload to a
LinkCasterfolder in your Drive
python scripts/build/build.pyThis creates a build/ directory with the packaged extension.
| Directory | Purpose |
|---|---|
js/modules/ |
Core business logic as ES6 modules |
backend/ |
OAuth proxy server for Google Drive |
docs/user/ |
End-user documentation |
scripts/build/ |
Build automation |
- No data collection - All processing happens locally in your browser
- No tracking - No analytics or telemetry
- Minimal permissions - Only requests permissions necessary for functionality
- Secure OAuth - Tokens stored locally, never transmitted to third parties
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your 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
This project is licensed under the MIT License - see the LICENSE file for details.
Built with JavaScript, powered by cloud APIs