--- name: high-quality-image-downloader description: Skill for downloading high-quality images from free stock photo websites with fallback strategies --- ## Purpose Download high-resolution images from free stock photo websites (Pexels, Unsplash, etc.) with multiple fallback strategies when direct downloads fail. ## When to Use - User requests high-quality images for reference, learning, or documentation - Need to download multiple images from free stock photo sites - Direct download methods fail due to website restrictions ## Prerequisites - Internet connection - Access to free stock photo websites - Sufficient disk space for downloads ## Steps ### 1. Primary Download Strategy (Pexels) ```bash # Navigate to temp directory cd /tmp # Try downloading from Pexels (most reliable) curl -s "https://www.pexels.com/search/{search_query}/" \ | grep -o 'https://images.pexels.com/photos/[^\"]*\.jpg\?auto=compress' \ | head -{number_of_images} \ | sed 's/\\?auto=compress//g' \ | xargs -I {} curl -s -O {} ``` ### 2. Secondary Download Strategy (Unsplash) ```bash # If Pexels fails, try Unsplash curl -s "https://unsplash.com/s/photos/{search_query}" \ | grep -o 'https://images.unsplash.com/photo[^\"]*\.jpg' \ | head -{number_of_images} \ | xargs -I {} curl -s -O {} ``` ### 3. Tertiary Download Strategy (Google Images) ```bash # As last resort, try Google Images (may be blocked) curl -s "https://www.google.com/search?q={search_query}&tbm=isch" \ | grep -o 'https://[^\"]*\.jpg' \ | head -{number_of_images} \ | xargs -I {} curl -s -O {} # Alternative: Use Bing Images curl -s "https://www.bing.com/images/search?q={search_query}" \ | grep -o 'https://[^\"]*\.jpg' \ | head -{number_of_images} \ | xargs -I {} curl -s -O {} ``` ### 4. File Verification ```bash # Verify downloaded files ls -la /tmp/*.jpg | head -{number_of_images} file /tmp/*.jpg | head -{number_of_images} ``` ## Error Handling ## Error Handling ### Common Issues and Solutions: 1. **Website blocking requests**: Use different User-Agent headers 2. **Rate limiting**: Add delays between requests 3. **Incomplete downloads**: Retry failed downloads 4. **Wrong file formats**: Convert to standard formats 5. **WeChat sending failures**: Provide local file paths instead 6. **Large file sizes**: Use compressed formats (WebP) when possible ### Retry Logic: ```bash # Retry failed downloads up to 3 times for attempt in {1..3}; do if [ -s "filename.jpg" ]; then echo "Download successful" break else echo "Download failed, retrying ($attempt/3)" sleep 2 fi done # Handle WeChat-specific failures grep -q "Weixin send failed" error.log && { echo "WeChat sending failed. Files saved to /tmp/" ls -la /tmp/*.jpg } ``` ### Retry Logic: ```bash # Retry failed downloads up to 3 times for attempt in {1..3}; do if [ -s "filename.jpg" ]; then echo "Download successful" break else echo "Download failed, retrying ($attempt/3)" sleep 2 fi done ``` ## Verification Steps 1. Check file sizes (should be > 1KB for valid images) 2. Verify file format with `file` command 3. Confirm expected number of files downloaded 4. Test image displayability 5. Verify WeChat sending capability (if applicable) 6. Check file sizes for WeChat compatibility ## WeChat Integration Notes - Direct file sending to WeChat may time out due to large file sizes - Use `MEDIA:/path/to/file` format for file sharing - Consider file size limits (typically 20MB for images) - If sending fails, provide file paths for user to access locally - WebP format may not display properly in all WeChat clients ## Performance Tips - Use parallel downloads for faster processing - Cache successful search results - Clean up failed downloads automatically - Monitor disk space usage - Use WebP format for smaller file sizes when possible ## Example Usage ```bash # Download 10 high-quality back exercise images cd /tmp curl -s "https://www.pexels.com/search/back%20exercises/" \ | grep -o 'https://images.pexels.com/photos/[^\"]*\.jpg\?auto=compress' \ | head -10 \ | sed 's/\\?auto=compress//g' \ | xargs -I {} curl -s -O {} # Verify downloads ls -la /tmp/*.jpg | head -10 file /tmp/*.jpg | head -10 # If WeChat sending fails, provide local paths echo "Files saved to /tmp/" ls -la /tmp/*.jpg ```