# Social Media Collection Downloader Automatically downloads TikTok collections and Instagram saved posts, then unsaves them. ## Requirements - Python 3.10+ - Chrome, Firefox, or Edge (for cookie extraction or headless automation) ## Quick Start ```bash # 1. Install dependencies pip install -r requirements.txt playwright install chromium # 2. Run the interactive setup wizard (recommended) python setup.py # 3. Or run directly if config already exists python downloader.py ``` --- ## Getting Your Cookies (Required for Private Content) TikTok and Instagram require you to be logged in. The app needs your session cookies. ### Option A — Export from browser (recommended) 1. Install the **"Get cookies.txt LOCALLY"** extension: - [Chrome](https://chrome.google.com/webstore/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc) - [Firefox](https://addons.mozilla.org/en-US/firefox/addon/cookies-txt/) 2. Log into tiktok.com and/or instagram.com 3. Click the extension icon → choose **JSON** format → Export 4. Save the files somewhere safe (e.g. `config/tiktok_cookies.json`) 5. Enter the paths during `setup.py` ### Option B — Auto-read from browser During setup, choose option `2` (browser auto-read) and enter your browser name (`chrome`, `firefox`, `edge`). > ⚠ Your browser must be **closed** (or using a separate profile) when this runs. --- ## Finding Your Collection URLs ### TikTok 1. Go to your profile → tap **Collections** (bookmark icon) 2. Open the collection you want to download 3. Copy the URL from your browser — it looks like: `https://www.tiktok.com/@yourhandle/collection/MyVideos-1234567890` ### Instagram 1. Go to your profile → tap the **bookmark icon** (Saved) 2. Open the collection you want to download 3. Copy the URL — it looks like: `https://www.instagram.com/yourhandle/saved/my-collection/1234567890/` --- ## Configuration Edit `config/config.json` directly, or use `setup.py` to regenerate it. See `config/config.example.json` for all available options. Key options: | Option | Description | |---|---| | `enabled` | Enable/disable a platform | | `cookies_file` | Path to exported cookies JSON | | `cookies_from_browser` | Auto-read from `chrome`/`firefox`/`edge` | | `collections` | List of collection URLs to process | | `unsave_after_download` | Remove posts after downloading | | `headless` | Hide browser window during unsaving | | `delay_between_downloads` | Seconds between each download (avoid rate limits) | | `delay_between_unsaves` | Seconds between each unsave click | --- ## Downloaded Files Files are saved to: ``` downloads/ tiktok/ Username - Video Title [video_id].mp4 Username - Video Title [video_id].info.json instagram/ Username - Post Title [post_id].mp4 Username - Post Title [post_id].jpg ``` --- ## Scheduling (run automatically) ### Windows Task Scheduler Create a task that runs: ``` python C:\path\to\social-dl\downloader.py ``` ### macOS / Linux (cron) ```bash # Run every day at 9am 0 9 * * * cd /path/to/social-dl && python downloader.py ``` --- ## Troubleshooting **yt-dlp says "login required"** → Your cookies are missing or expired. Re-export them from your browser. **Unsave doesn't work / button not found** → TikTok/Instagram may have updated their UI. Set `"headless": false` to watch the browser and inspect what's happening. Open an issue with a screenshot. **Rate limited / banned temporarily** → Increase `delay_between_downloads` to `5` or more. **Instagram downloads fail** → Instagram heavily restricts scraping. Use fresh cookies from a recently-logged-in session. Try `cookies_from_browser` with your browser open to Instagram. --- ## Notes - Downloads are skipped if the file already exists (`--no-overwrites`) - Logs are saved to `logs/session_YYYYMMDD_HHMMSS.log` - The unsave step opens a browser window (unless `headless: true`) — this is normal - This tool uses your own account cookies; it does not share or store credentials anywhere