### Start Frontend Development Server Source: https://jessielw.github.io/Reclaimerr/getting-started/installation Navigate to the frontend directory and start the development server using npm. ```bash cd frontend npm run dev ``` -------------------------------- ### Install Reclaimerr from Source Source: https://jessielw.github.io/Reclaimerr/getting-started/installation Clone the repository, install Python dependencies using uv, and set up Node.js dependencies for frontend development. ```bash git clone https://github.com/jessielw/Reclaimerr.git cd Reclaimerr uv sync cd frontend npm install cd .. uv run uvicorn --reload --reload-dir backend backend.api.main:app ``` -------------------------------- ### Clone Repository and Install Dependencies Source: https://jessielw.github.io/Reclaimerr/development/contributing Clone the Reclaimerr repository and install backend and frontend dependencies using uv and npm. ```bash git clone https://github.com/jessielw/Reclaimerr.git cd Reclaimerr uv sync cd frontend npm install cd .. ``` -------------------------------- ### Example AND/OR Condition Group Source: https://jessielw.github.io/Reclaimerr/usage/rules This example demonstrates how to combine AND and OR groups to identify old, unwatched movies that are either large or have multiple versions. It uses specific numerical values for size and version count. ```plaintext AND Never watched is true Days since added >= 180 OR Size > 21474836480 Movie version count > 1 ``` -------------------------------- ### Example Docker Compose Configuration Source: https://jessielw.github.io/Reclaimerr/deployment/docker A basic Docker Compose file to set up and run the Reclaimerr service. Ensure your .env file is in the same directory. ```yaml services: reclaimerr: image: ghcr.io/jessielw/reclaimerr:latest container_name: reclaimerr restart: unless-stopped env_file: .env volumes: - ./data:/app/data - /media:/media ports: - "8000:8000" ``` -------------------------------- ### Run Backend Development Server Source: https://jessielw.github.io/Reclaimerr/development/contributing Start the Reclaimerr backend API in development mode with automatic reloading. ```bash uv run --reload --reload-dir backend backend.api.main:app ``` -------------------------------- ### Create a Protection Source: https://jessielw.github.io/Reclaimerr/reference/api This example demonstrates how to create a protection for a media item, preventing both automatic and manual operations. It specifies the media type, TMDB ID, and a reason for the protection. ```curl curl -X POST \ -H "Authorization: Bearer $RECLAIMERR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"media_type":"movie","tmdb_id":550,"reason":"Keep for event"}' \ "https://reclaimerr.example/api/v1/protections" ``` -------------------------------- ### List Movies with Filters Source: https://jessielw.github.io/Reclaimerr/reference/api Example of how to list movies using the API, filtering by media type and TMDB ID. Ensure your bearer token has the necessary read scope. ```curl curl -H "Authorization: Bearer $RECLAIMERR_TOKEN" \ "https://reclaimerr.example/api/v1/candidates?media_type=movie&tmdb_id=550" ``` -------------------------------- ### Cancel a Candidate with Idempotency Source: https://jessielw.github.io/Reclaimerr/reference/api This example shows how to cancel a candidate, suppressing automatic deletion. It includes an Idempotency-Key header for safe retries and specifies a reason for the action. ```curl curl -X POST \ -H "Authorization: Bearer $RECLAIMERR_TOKEN" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: home-assistant-550-keep" \ -d '{"reason":"Requester chose Keep"}' \ "https://reclaimerr.example/api/v1/candidates/42/cancel" ``` -------------------------------- ### Regex Example for Stale Tags Source: https://jessielw.github.io/Reclaimerr/usage/rules This example uses regex operators to select items that have a '-stale' variant but no active base tag. It combines 'matches_any_regex' to find stale variants and 'not_matches_any_regex' to exclude active tags. ```plaintext AND matches_any_regex tag-.*-stale$ not_matches_any_regex ^tag-.*(?