# FastDL High-Resolution Download Mode ## Overview The high-resolution download mode solves the problem where FastDL profile downloads return low-resolution images (640x640). By searching individual Instagram post URLs instead of downloading from the profile grid, we can get the original high-resolution images. ## How It Works ### The Workflow: 1. **Load Profile** → Search username on FastDL to get the profile grid 2. **Extract Media IDs** → Extract Instagram media IDs from FastDL's proxied URLs 3. **Convert to Instagram URLs** → Convert media IDs to Instagram shortcodes 4. **Search Each URL** → Search individual Instagram URLs on FastDL 5. **Download High-Res** → Get high-resolution versions instead of thumbnails ### Technical Details: FastDL URLs contain Instagram media IDs in this format: ``` 561378837_18538674661006538_479694548187839800_n.jpg ^^^^^^^^^^^^^^^^^^^^ This is the media ID ``` We convert the media ID `18538674661006538` to Instagram shortcode `BB3NONxpzK` using Instagram's custom base64 alphabet, then search for `https://www.instagram.com/p/BB3NONxpzK/` on FastDL. ## Usage ### Python API: ```python from fastdl_module import FastDLDownloader # Create downloader with high_res=True downloader = FastDLDownloader( headless=True, use_database=True, high_res=True # Enable high-resolution mode ) # Download high-res posts count = downloader.download( username="username", content_type="posts", output_dir="downloads/highres", max_downloads=10 ) print(f"Downloaded {count} high-resolution items") ``` ### Command Line: ```bash # Using media-downloader.py with --high-res flag ./media-downloader.py --platform fastdl --username evalongoria --posts --high-res --limit 10 ``` ## Important Limitations ### ⚠️ Old Posts May Fail FastDL may not be able to fetch very old Instagram posts (e.g., from 2016). When this happens, you'll see: ``` FastDL encountered an error fetching this post (may be deleted/unavailable) ``` The downloader will skip these posts and continue with the next one. ### ⏱️ Slower Download Speed High-res mode is significantly slower than regular profile downloads because: - Each post requires a separate search on FastDL (~10-15 seconds per post) - Regular mode downloads all items in batch from one page - High-res mode: ~10-15 seconds per post - Regular mode: ~2-5 seconds per post **Example timing:** - 10 posts in regular mode: ~30 seconds - 10 posts in high-res mode: ~2-3 minutes ### 📊 When to Use Each Mode **Use High-Res Mode (`high_res=True`) when:** - Image quality is critical - Downloading recent posts (last few years) - Willing to wait longer for better quality - Need original resolution for professional use **Use Regular Mode (`high_res=False`, default) when:** - Speed is more important than max quality - Downloading many posts (50+) - 640x640 resolution is acceptable - Downloading stories/highlights (already optimized) ## Resolution Comparison | Mode | Resolution | Speed | Best For | |------|-----------|--------|----------| | Regular | 640x640px (thumbnail) | Fast | Bulk downloads, previews | | High-Res | Up to 1440x1800px (original) | Slow | Professional use, archiving | ## Testing Test the high-res mode with a recent Instagram post: ```python #!/usr/bin/env python3 import os os.environ['PLAYWRIGHT_BROWSERS_PATH'] = '/opt/media-downloader/.playwright' import sys sys.path.insert(0, '/opt/media-downloader/modules') from fastdl_module import FastDLDownloader # Test with a recent post downloader = FastDLDownloader(headless=True, high_res=True, use_database=False) count = downloader.download( username="evalongoria", # Or any public profile content_type="posts", output_dir="test_highres", max_downloads=2 # Test with just 2 posts ) print(f"Downloaded {count} items") ``` ## Troubleshooting ### No download links found - Post may be too old or deleted - Instagram may have changed their URL structure - Check if the post is accessible on Instagram ### "Something went wrong" error - FastDL couldn't fetch the post from Instagram - Common with old posts (2+ years) - Downloader will skip and continue with next post ### Timeout errors - Increase timeout in settings - Check internet connection - Try with fewer posts first ## Implementation Files - **fastdl_module.py** - Main module with high-res implementation - `_media_id_to_shortcode()` - Converts media IDs to shortcodes - `_extract_media_ids_from_fastdl_url()` - Extracts IDs from URLs - `_search_instagram_url_on_fastdl()` - Searches individual URLs - `_download_content_highres()` - High-res download workflow - **instagram_id_converter.py** - Standalone converter utility ## Future Improvements Potential optimizations: - Parallel URL searches (currently sequential) - Caching of Instagram URL → download link mappings - Batch processing for better performance - Automatic fallback to regular mode for old posts --- Generated on 2025-10-12