A Python script that helps you re-request all items from an Overseer instance with advanced filtering and migration capabilities. Perfect for migrating your media server setup to a new machine while keeping Overseer on the old server.
- π Smart Request Querying: Automatically fetches all requests from your Overseer instance with pagination support
- π Advanced Analytics: Detailed breakdowns by status, media type, users, and request patterns over time
- π Intelligent Re-requesting: Triggers downloads on your new server setup with error handling and retries
- π‘οΈ Safe Testing Mode: Comprehensive dry-run functionality to preview changes before execution
- π Flexible Date Filtering: Support for date ranges (before/after) with smart handling of legacy requests
- π€ User-Based Filtering: Target specific users or exclude certain requesters from migration
- π¬ Media Type Filtering: Separate handling for movies vs TV series for staged migrations
- β‘ Performance Controls: Configurable request throttling and batch processing to avoid API overload
- π Enhanced Debugging: Detailed progress tracking and comprehensive error reporting
- π§ͺ Testing Features: Limit processing to small batches for safe testing and validation
- βοΈ Zero-Config Setup: Simple credential configuration with automatic validation
- π Migration Analytics: Success/failure tracking with detailed reporting for large migrations
-
Clone the repository:
git clone https://github.com/dannymcc/overseer-rerequester.git cd overseer-rerequester -
Install Python dependencies:
pip install -r requirements.txt
-
Configure the script:
β οΈ Important: The script contains placeholder values. You must update these with your actual Overseer details:Edit the top of
overseer_rerequest.pyto set your Overseer details:# Configuration - Update these values for your setup OVERSEER_URL = "https://your-overseer-instance.com" API_TOKEN = "your-api-token-here" # Set to True to actually re-request items (USE WITH CAUTION!) DRY_RUN = True # Skip confirmation prompt in live mode (USE WITH CAUTION!) SKIP_CONFIRMATION = False # Request throttling - delay in seconds between requests REQUEST_DELAY = 1.0 # For testing - limit number of requests (set to None for no limit) TEST_LIMIT = None # Optional filtering (set to None to disable) FILTER_BEFORE_DATE = None # Example: "2024-12-31" FILTER_AFTER_DATE = None # Example: "2024-01-01" FILTER_MEDIA_TYPE = None # Example: "movie" or "tv" FILTER_BY_USER = None # Example: "username" or 123 INCLUDE_INVALID_DATES = True # Include requests with missing dates
-
Get your API token:
- Log into your Overseer instance
- Go to Settings β General β API Key
- Copy the API key
- Python 3.7 or higher
- Active Overseer instance
- Valid API token with request permissions
- Network access to your Overseer server
The script supports powerful filtering to help you selectively re-request items:
Filter requests by date range:
FILTER_BEFORE_DATE = "2024-12-31" # Only requests before this date
FILTER_AFTER_DATE = "2024-01-01" # Only requests after this date
# Combine both for a date range (Jan 1 - Dec 31, 2024)Use cases:
- Migrate only requests from a specific time period
- Exclude recent requests that might already be processing
- Re-request items from before your server migration
- Process requests in chronological batches
Date Handling:
- Requests with missing/invalid dates are included by default
- Set
INCLUDE_INVALID_DATES = Falseto exclude them
Only re-request items from specific users:
FILTER_BY_USER = "username" # By display name
FILTER_BY_USER = 123 # By user ID
FILTER_BY_USER = "user@example.com" # By email addressUse cases:
- Only re-request items from specific family members
- Re-request items from users who had issues
- Exclude admin test requests
Only re-request specific types of content:
FILTER_MEDIA_TYPE = "movie" # Only movies
FILTER_MEDIA_TYPE = "tv" # Only TV shows
FILTER_MEDIA_TYPE = None # Both movies and TV (default)Use cases:
- Migrate movies and TV shows separately
- Test migration with only one content type first
- Different handling for movies vs TV series
You can combine multiple filters:
FILTER_AFTER_DATE = "2024-01-01"
FILTER_BEFORE_DATE = "2024-12-01"
FILTER_MEDIA_TYPE = "movie"
FILTER_BY_USER = "username"
# Only movies requested by username between Jan-Dec 2024First, run the script in dry run mode to make sure everything works:
# On most systems:
python overseer_rerequest.py
# On macOS, you may need to use python3:
python3 overseer_rerequest.pyThis will:
- β Test your connection to Overseer
- π Show you statistics about your requests
- π Display sample requests
- π Simulate re-requesting without actually doing it
- Change
DRY_RUN = Falsein the script - Run the script again:
# On most systems: python overseer_rerequest.py # On macOS, you may need to use python3: python3 overseer_rerequest.py
- Confirm when prompted that you want to proceed
- Connects to your Overseer instance using the API
- Fetches all requests (movies, TV shows, etc.)
- Analyzes the requests and shows you statistics
- Re-requests each item, which should trigger your download clients
- π Your API token is sensitive - don't share it publicly or commit it to version control
- π‘οΈ The script defaults to dry run mode for safety
- π Review the output carefully before enabling live mode
- π For public repositories: Create a
.envfile or use environment variables for credentials
To see the detailed structure of requests (useful for troubleshooting):
DEBUG_SHOW_REQUEST_STRUCTURE = TrueThis will show you the complete JSON structure of requests, which can help you understand what data is available.
The script includes several features to ensure reliable operation:
- Request throttling - Configurable delay between requests to avoid API overload
- Enhanced error handling - Detailed error messages with specific failure reasons
- Progress tracking - Shows "Processing X/Y" during execution
- Automatic retries - Handles temporary API issues gracefully
For safe testing and incremental migration:
TEST_LIMIT = 10 # Process only first 10 requests
SKIP_CONFIRMATION = True # Skip "yes/no" prompts for automation
REQUEST_DELAY = 2.0 # Increase delay for slower API responsesThe script automatically shows:
- User breakdown - who made the most requests
- Date patterns - requests by month to understand usage trends
- Detailed sample requests - with user and date information
- Success/failure rates - Track migration effectiveness
- Verify your
OVERSEER_URLis correct (includehttps://) - Check that your API token is valid
- Ensure your Overseer instance is accessible
- Check that you have requests in your Overseer instance
- Verify your API token has the correct permissions
- Try enabling debug mode to see the raw data structure
- Date format: Use YYYY-MM-DD format (e.g., "2024-12-31")
- User matching: The script checks display name, email, and user ID
- No matches: Check the user analysis section to see available users
- Missing dates: Old requests may have invalid dates - enable
INCLUDE_INVALID_DATES = True - Media types: Use exact values "movie" or "tv" (case-insensitive)
- Some items might already be requested/available
- Check your Overseer logs for more details
- Ensure your download clients are properly configured
During migration, it's normal to see some failures:
- TMDB 404 errors: Old items removed from The Movie Database
- Data corruption errors: Invalid metadata in Overseer database
- Success rates of 40-60% are typical for older request libraries
- Failed requests usually represent items that needed cleanup anyway
π¬ Overseer Re-request Script
==================================================
β οΈ DRY RUN MODE: No actual re-requests will be made
π Overseer URL: https://your-overseer-instance.com
π½ Active Filters:
π
Before: 2024-12-01
π
After: 2024-01-01
π¬ Media type: movie
π€ User: username
β οΈ Invalid dates: included
β
Connected to Overseer successfully!
Version: 1.34.0
π Fetching requests...
Page 1: Found 50 requests
Page 2: Found 23 requests
π Total requests found: 73
π½ Filtered: 73 β 25 requests
π
Before: 2024-12-01
π
After: 2024-01-01
π¬ Media type: movie
π€ User: username
π Filtering breakdown:
ποΈ Date filtered: 30
β οΈ Invalid dates: 5 (included)
π¬ Media filtered: 8
π€ User filtered: 5
β
Included: 25
π Request Analysis:
Status breakdown:
2: 22
4: 3
Media type breakdown:
movie: 25
tv: 0
π€ Top requesting users:
username (ID: 1): 25 requests
π
Requests by month:
2024-08: 5 requests
2024-09: 8 requests
2024-10: 12 requests
2024-11: 20 requests
π Sample requests:
1. [MOVIE] The Matrix - Status: 2
Created: 2024-11-15T14:30:22.000Z
Requested by: username (ID: 1)
Request ID: 456
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork this repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Test thoroughly with your Overseer instance
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Test your changes with both dry-run and live modes
- Update documentation for new features
- Follow existing code style and patterns
- Add appropriate error handling
This project is licensed under the MIT License - see the LICENSE file for details.
- Overseer team for creating an amazing media request management tool
- The Plex, Radarr, and Sonarr communities for building the ecosystem this tool supports
- Contributors and testers who helped improve this script
- Issues: GitHub Issues
- Documentation: This README and inline code comments
- Community: Overseer Discord for general Overseer support
Made with β€οΈ by Danny McClelland
*Not officially affiliated with Overseer or the arr applications.
