A powerful browser extension that extracts all images from any webpage with one click. Works universally on any website - no domain restrictions. Extract images from img tags, CSS backgrounds, SVG elements, video posters, and even lazy-loaded content.
π Universal - Works on ANY website (Pinterest, Instagram, news sites, etc.)
π Comprehensive - Extracts from img tags, backgrounds, SVG, video posters, srcset, data-* attributes
ποΈ Viewport Detection - Shows which images were visible when extracted
π― Advanced Selection - Shift+Click ranges, Ctrl+Click toggle, select all/none
β‘ Burst Downloads - Download multiple selected images simultaneously
π Text Search - Search alt text when enabled
βοΈ Customizable - Filter by size, format, source type, visibility
π¨ Modern UI - Responsive grid, lightbox preview, hover tooltips
π‘οΈ "On Click" Permissions - Only runs when you explicitly activate it
π« No Background Monitoring - Cannot read websites unless you click the extension
π± Local Processing - All image data stays in your browser
π No Data Collection - No analytics, tracking, or external servers
β‘ Instant Access - No account required, works offline
Single-click extraction with optimal default settings - no configuration needed
Responsive image grid with filtering, sorting, and bulk selection features
Full-size image preview with metadata, download, and copy URL options
- Chrome Web Store - Chrome, Edge, and Chromium browsers
- Mozilla Add-ons - Firefox browser
- Or build from source (see Development section)
- Visit any website with images (works everywhere!)
- Click the extension icon or use
Ctrl+Shift+I
- Extraction starts immediately - opens new tab with all found images
- Filter, select, and download - use the powerful grid interface
- πΌοΈ IMG tags - Standard
<img src="">
elements - π¨ CSS Backgrounds -
background-image
properties - π SVG Graphics - Converted to downloadable formats
- π¬ Video Posters - Thumbnail images from
<video poster="">
- π± Responsive Images -
srcset
attributes with multiple resolutions - π Lazy Loading -
data-src
,data-original
, and 16+ data-* patterns - ποΈ Viewport Detection - Tracks which images were visible during extraction
# Clone and install dependencies
git clone https://github.com/flesler/picpicker
cd picpicker
npm install
# Run full test suite and build
npm run prepack
- Open
chrome://extensions/
- Enable "Developer mode"
- Click "Load unpacked"
- Select the
dist/
folder (NOT project root)
src/
βββ background.ts # Service worker - tab management, session storage
βββ content.ts # DOM scanner - extracts images from any webpage
βββ results.ts # Results page - grid display, filtering, downloads
βββ types.ts # TypeScript interfaces for images and settings
βββ utils.ts # Shared utilities - logging, helpers
βββ public/
βββ manifest.json # Extension manifest (universal domain support)
βββ results.html # Image grid results page
βββ icons/ # Extension icons (16px, 48px, 128px)
Command | Description |
---|---|
npm run build |
Build optimized extension for Chrome |
npm run build:firefox |
Build for Firefox |
npm run prepack |
Complete validation - lint + type check + build + zip |
npm run lint:full |
TypeScript check + ESLint validation |
npm run lint:fix |
Auto-fix linting issues |
- "activeTab" permissions - Only access when user explicitly clicks
- Dynamic injection - Content script loaded only when needed
- No persistent monitoring - Cannot read websites in background
- Session-based data - Image data cleared when results tab closes
- No restrictions - Works on any website when activated
- Cross-browser - Chrome + Firefox support via webextension-polyfill
- Manifest V3 - Modern service worker architecture
- DOM Scanner -
querySelectorAll('*')
for comprehensive coverage - Multi-source - IMG tags, CSS backgrounds, SVG, video posters
- Advanced parsing - srcset attributes, data-* lazy loading patterns
- Performance optimized - Short JSON keys, efficient filtering
Content Script β Background β Results Tab
β β β
DOM Scanning β Session Storage β Grid Display
- In-memory sessions - No persistent storage of image data
- Message passing - Avoids URL length limits for large datasets
- One-time access - Session deleted after results tab loads
- Optimal defaults - 50px minimum, all source types enabled
- Source Types - IMG tags, backgrounds, SVG, video posters
- Alt Text - Enabled for search/tooltips
- Performance - 1000 images max per page, 10s timeout
- Filtering - Format, size, source type, viewport visibility
- Text Search - Alt text search (when enabled)
- Selection Modes - Click, Shift+Click ranges, Ctrl+Click toggle
- Downloads - Individual images or burst download multiple selections
- Lightbox - Full-size preview with metadata
Ctrl+Shift+I
- Quick image extraction from any page
- Strict type checking with webextension-polyfill types
- Zero
any
types - Comprehensive interface coverage - ES2022+ features - Modern JavaScript with full browser support
- tsup + esbuild - Fast, modern bundling with tree-shaking
- Cross-browser builds - Chrome/Firefox from single codebase
- Dynamic manifest - Version sync from package.json
- Source maps - Full debugging support in development
- ESLint + TypeScript - Strict linting with custom rules
- Consistent patterns - DRY utilities, centralized logging
- Performance focused - Optimized JSON payloads, efficient DOM scanning
- Type safety - Comprehensive interfaces prevent runtime errors
- Lint validation -
npm run lint:full
catches issues early - Build verification -
npm run prepack
ensures release readiness
MIT License - Feel free to fork and modify for your image extraction needs!