FLICKR to ANY TOOL
by Rob Brown
Copyright (C) 2025 Robert Brown
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
This script is provided as-is, unsupported and unmaintained. No warranty is given. No support is offered. You run this entirely at your own risk. The author accepts zero responsibility for data loss, system damage, corrupted configs, existential dread, or any other outcome resulting from use of this script.
This is a hobby tool. Test it. Read what it does before you run it. Back up your data independently before doing anything irreversible.
Takes a Flickr library and reformats it to various options to allow importing to other tools like Immich, PhotoPrism, Pixelfed, your own computer, etc. It was written primarily to export to a folder format suitable for Immich and PixelFed, but it gives generic outputs and lots of options and therefore is quite agnostic to the tool that is being used next.
- User-friendly GUI interface for easy operation
- Command-line interface for automation and scripting
- Export by date or album organization
- Highlights feature to identify your most engaging photos
- Embedded EXIF metadata preservation
- XMP sidecar files with extended metadata
- Resume functionality for interrupted exports
- Git (for cloning the repository)
- Python 3.10 or higher
- System Dependencies:
- ExifTool (must be in system PATH)
- pip (Python package installer)
- virtualenv (recommended)
- Download Git from git-scm.com
- Run the installer, accepting the default settings
- Open Command Prompt or PowerShell to verify installation:
git --version- Install using Homebrew (recommended):
# First install Homebrew if you don't have it
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Then install Git
brew install gitOr install Xcode Command Line Tools which includes Git:
xcode-select --installsudo apt update
sudo apt install gitsudo dnf install gitsudo pacman -S git- Download Python 3.10 or higher from python.org
- During installation:
- Check "Add Python to PATH"
- Check "Install pip" (usually selected by default)
- Verify installations:
python --version
pip --version- Using Homebrew (recommended):
# Install Homebrew if you don't have it
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Python (includes pip)
brew install python- Verify installations:
python3 --version
pip3 --versionsudo apt update
sudo apt install python3 python3-pipsudo dnf install python3 python3-pipsudo pacman -S python python-pipIt's recommended to upgrade pip to the latest version:
# Windows
python -m pip install --upgrade pip
# macOS/Linux
python3 -m pip install --upgrade pipIf you get a permissions error, try:
# Windows (run as administrator)
python -m pip install --upgrade pip --user
# macOS/Linux
sudo python3 -m pip install --upgrade pipvirtualenv is recommended for creating isolated Python environments:
# Windows
pip install virtualenv
# macOS/Linux
pip3 install virtualenvExifTool (must be in system PATH)
- Ubuntu/Debian: sudo apt-get install libimage-exiftool-perl
- MacOS: brew install exiftool
- Windows: Download from ExifTool website and add to PATH
- Clone the repository:
git clone https://github.com/brownphotographic/Flickr2Any-Tool.git
cd Flickr2Any-Tool- Create and activate a virtual environment (recommended):
python -m venv .venv
source .venv/bin/activate # On Linux/Mac
# OR
.venv\Scripts\activate # On Windows- Install the package locally in editable mode:
pip install -e .- Install required dependencies:
pip install -r requirements.txtThe tool should now be available as flickr-to-any in your virtual environment.
## Usage
### Step 1: Request Your Flickr Data
1. Go to [Flickr Account Settings](https://www.flickr.com/account)
2. Under "Your Flickr Data", request your data export
3. Wait for email notification (can take several days for large accounts)
4. Download all provided zip files
### Step 2: Directory Setup
Create these directories (can be anywhere on your system):
- metadata
- photos
- output
- results
### Step 3: Flickr API Setup (Optional but Recommended)
1. Get your API Key from [Flickr API](https://www.flickr.com/services/api/)
2. Set the environment variable:
```bash
# Linux/Mac
export FLICKR_API_KEY='your_api_key_here'
# Windows CMD
set FLICKR_API_KEY=your_api_key_here
# Windows PowerShell
$env:FLICKR_API_KEY = 'your_api_key_here'
First navigate to the the folder where you installed the script. Open a terminal for that folder. Or if on windows / mac, open terminal / prompt and then navigate to that folder.
navigate to your script directory in terminal.
Then:
source .venv/bin/activateThen activate the flickr API
export FLICKR_API_KEY='your_api_key_here'Run:
flickr-to-anyThe GUI provides an intuitive interface with:
- Step-by-step workflow
- Directory selection dialogs
- Export type options
- Advanced settings configuration
- Progress visualization
(optional) If you made any changes to the script:
pip install -e .Then run the script:
Basic usage:
flickr-to-any-cli --metadata-dir "./metadata" --photos-dir "./photos" --output-dir "./output"Common options:
# Export with zip preprocessing
flickr-to-any-cli --zip-preprocessing --source-dir "./source" --metadata-dir "./metadata" --photos-dir "./photos" --output-dir "./output"
# Export by album organization
flickr-to-any-cli --organization by_album --date-format "yyyy/yyyy-mm-dd"
# Export highlights only
flickr-to-any-cli --export-interesting-only --interesting-period all-time --interesting-count 100- Creates folders matching your Flickr albums
- Note: May create duplicates if photos are in multiple albums
- Unorganized photos go to "00_NoAlbum" with date subfolders
- Organizes photos in date-based folders
- No duplicates
- Album information preserved in metadata
Creates curated collections of your most engaging photos:
- Organized by privacy level (Public, Private, Friends, Family)
- Customizable engagement scoring
- Useful for creating showcase collections
You can fine-tune how "interesting" photos are selected using these parameters:
--fave-weight(default: 10.0): How much to multiply favorites by--comment-weight(default: 5.0): How much to multiply comments by--view-weight(default: 0.1): How much to multiply views by
--min-views(default: 20): Minimum views required--min-faves(default: 0): Minimum favorites required--min-comments(default: 0): Minimum comments required
Example CLI usage:
flickr-to-any-cli --fave-weight 15.0 --comment-weight 7.5 --view-weight 0.2 --min-views 30 --min-faves 1In GUI mode, these parameters can be adjusted in the Export Type section. The final interestingness score for each photo is calculated as:
score = (favorites × fave_weight) + (comments × comment_weight) + (views × view_weight)
Photos must meet at least one of the minimum thresholds (views, favorites, or comments) to be considered for highlights.
- XMP Sidecars: Comprehensive metadata in separate files
- Extended EXIF: Embedded Flickr metadata in photos
- Resume Support: Continue interrupted exports
- API Integration: Enhanced metadata retrieval
- Custom Processing: Flexible organization options
Use the Immich CLI for best results:
- Preserves album structure
- Maintains XMP sidecars
- Retains extended metadata
The organized output is compatible with:
- PhotoPrism
- Pixelfed
- Standard file systems
- Most photo management tools
Common issues and solutions:
- Missing Dependencies: Run
python setup.py installto properly install all dependencies - ExifTool Errors: Ensure ExifTool is properly installed and in PATH
- API Key Issues: Check environment variable setup
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Submit a pull request
GNU General Public License v3.0 - see LICENSE file for details
- GitHub Issues: Report bugs or request features