mirror of
https://github.com/plexguide/Huntarr.git
synced 2026-02-05 01:58:47 -06:00
Refactor Docusaurus documentation structure and update GitHub Actions workflow for improved deployment
This commit is contained in:
99
.github/workflows/docs.yml
vendored
99
.github/workflows/docs.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Deploy Docusaurus to GitHub Pages
|
||||
name: Deploy Huntarr Documentation
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -7,52 +7,85 @@ on:
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- '.github/workflows/docs.yml'
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'docs/**'
|
||||
# Allow manual trigger
|
||||
workflow_dispatch:
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: write
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Deploy to GitHub Pages
|
||||
build-and-deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v3
|
||||
|
||||
- name: Build Documentation
|
||||
run: |
|
||||
# Ensure nested docs directory exists if it doesn't already
|
||||
mkdir -p docs/assets/css
|
||||
mkdir -p docs/assets/img
|
||||
mkdir -p docs/assets/js
|
||||
mkdir -p docs/assets/logo
|
||||
|
||||
# Copy the assets needed for documentation
|
||||
cp -r frontend/static/css/* docs/assets/css/ || true
|
||||
cp -r frontend/static/js/* docs/assets/js/ || true
|
||||
cp -r frontend/static/img/* docs/assets/img/ || true
|
||||
|
||||
# Copy logo if it exists
|
||||
cp -r assets/logo/* docs/assets/logo/ || true
|
||||
|
||||
# Create .nojekyll file to disable Jekyll processing
|
||||
touch docs/.nojekyll
|
||||
|
||||
# Check if there's a nested docs directory and move files up
|
||||
if [ -d "docs/docs" ]; then
|
||||
# Move content from docs/docs to docs if it doesn't already exist
|
||||
for file in docs/docs/*; do
|
||||
if [ -f "$file" ]; then
|
||||
filename=$(basename "$file")
|
||||
if [ ! -f "docs/$filename" ]; then
|
||||
cp "$file" "docs/"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Move directories from docs/docs to docs if they don't already exist
|
||||
for dir in docs/docs/*/; do
|
||||
if [ -d "$dir" ]; then
|
||||
dirname=$(basename "$dir")
|
||||
mkdir -p "docs/$dirname"
|
||||
cp -r "$dir"* "docs/$dirname/" || true
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
node-version: 18
|
||||
cache: 'npm'
|
||||
cache-dependency-path: docs/package.json
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./docs
|
||||
run: |
|
||||
npm install
|
||||
|
||||
- name: Build website
|
||||
working-directory: ./docs
|
||||
run: |
|
||||
npm run build
|
||||
|
||||
# Popular action to deploy to GitHub Pages:
|
||||
# Docs: https://github.com/peaceiris/actions-gh-pages
|
||||
path: './docs'
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v3
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Build output to publish to the `gh-pages` branch:
|
||||
publish_dir: ./docs/build
|
||||
# Assign commit authorship to the official GH-Actions bot
|
||||
user_name: github-actions[bot]
|
||||
user_email: 41898282+github-actions[bot]@users.noreply.github.com
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v3
|
||||
if: github.event_name != 'pull_request'
|
||||
|
Before Width: | Height: | Size: 355 B After Width: | Height: | Size: 355 B |
|
Before Width: | Height: | Size: 355 B After Width: | Height: | Size: 355 B |
@@ -1,9 +0,0 @@
|
||||
* [Introduction](intro.md)
|
||||
* [Installation](installation.md)
|
||||
* [Configuration](configuration.md)
|
||||
* [Usage](usage.md)
|
||||
* [FAQ](faq.md)
|
||||
* Guides
|
||||
* [Running Multiple Instances](guides/multi-instance.md)
|
||||
* Advanced
|
||||
* [Performance Tuning](advanced/performance-tuning.md)
|
||||
@@ -1,150 +0,0 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Performance Tuning
|
||||
|
||||
Huntarr is designed to be efficient, but there are several ways to optimize its performance based on your specific environment. This guide provides advanced settings and techniques to ensure Huntarr operates smoothly while minimizing resource usage.
|
||||
|
||||
## Understanding Resource Usage
|
||||
|
||||
Huntarr's resource consumption is primarily influenced by:
|
||||
|
||||
1. **API Request Frequency**: How often Huntarr polls your *arr applications
|
||||
2. **Hunt Volume**: The number of items processed in each cycle
|
||||
3. **Command Monitoring**: How often Huntarr checks the status of commands
|
||||
4. **Metadata Operations**: Whether Huntarr refreshes metadata for each item
|
||||
|
||||
## CPU Optimization
|
||||
|
||||
### Reduce API Load
|
||||
|
||||
The most effective way to reduce CPU usage is to optimize API interactions:
|
||||
|
||||
```yaml
|
||||
# Recommended low-CPU settings
|
||||
hunt_missing: 5 # Process fewer items per cycle
|
||||
hunt_upgrades: 5 # Process fewer upgrade items per cycle
|
||||
sleep_duration: 1800 # Longer sleep between cycles (30 minutes)
|
||||
command_wait_delay: 2 # Check command status less frequently
|
||||
command_wait_attempts: 300 # Fewer status checks
|
||||
skip_refresh: true # Skip metadata refresh operations
|
||||
```
|
||||
|
||||
### Stagger Operations
|
||||
|
||||
For systems running multiple *arr applications:
|
||||
|
||||
- Enable only one or two *arr connections at a time
|
||||
- Run Huntarr on a schedule rather than continuously
|
||||
- Use different sleep durations for each type of operation
|
||||
|
||||
## Memory Optimization
|
||||
|
||||
### Reduce State Data Size
|
||||
|
||||
Huntarr maintains state to avoid reprocessing the same items:
|
||||
|
||||
- Periodically clear the state files if memory usage grows
|
||||
- Set lower hunt values to reduce the amount of state data
|
||||
|
||||
### Container Memory Limits
|
||||
|
||||
When running in Docker, you can limit Huntarr's memory usage:
|
||||
|
||||
```bash
|
||||
docker run -d --name huntarr \
|
||||
--restart always \
|
||||
--memory=256m \
|
||||
--memory-swap=256m \
|
||||
-p 9705:9705 \
|
||||
-v /your-path/huntarr:/config \
|
||||
-e TZ=America/New_York \
|
||||
huntarr/huntarr:latest
|
||||
```
|
||||
|
||||
Or in Docker Compose:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
huntarr:
|
||||
image: huntarr/huntarr:latest
|
||||
container_name: huntarr
|
||||
restart: always
|
||||
mem_limit: 256m
|
||||
memswap_limit: 256m
|
||||
ports:
|
||||
- "9705:9705"
|
||||
volumes:
|
||||
- /your-path/huntarr:/config
|
||||
environment:
|
||||
- TZ=America/New_York
|
||||
```
|
||||
|
||||
## Disk I/O Optimization
|
||||
|
||||
### Minimize Metadata Operations
|
||||
|
||||
Metadata operations can cause significant disk activity in your *arr applications:
|
||||
|
||||
- Always enable `skip_refresh` to prevent metadata refreshes
|
||||
- Reduce the frequency of hunting cycles with a longer `sleep_duration`
|
||||
|
||||
### Optimize Log Management
|
||||
|
||||
For systems with limited I/O capacity:
|
||||
|
||||
- Set a lower log retention period
|
||||
- Use an external log management solution
|
||||
- Mount the `/config/logs` directory to a separate volume with better I/O characteristics
|
||||
|
||||
## Network Optimization
|
||||
|
||||
### Reduce API Traffic
|
||||
|
||||
Huntarr can generate significant API traffic to your *arr applications:
|
||||
|
||||
- Increase `sleep_duration` to reduce the frequency of API calls
|
||||
- Lower `hunt_missing` and `hunt_upgrades` values to reduce per-cycle traffic
|
||||
- Set an appropriate `api_hourly_cap` to limit overall traffic
|
||||
|
||||
### Optimize for High-Latency Connections
|
||||
|
||||
If your *arr applications are on a different network or have high latency:
|
||||
|
||||
- Increase `universal_api_timeout` to allow more time for API responses
|
||||
- Use longer `command_wait_delay` values
|
||||
- Consider running Huntarr on the same network as your *arr applications
|
||||
|
||||
## Multi-Instance Performance
|
||||
|
||||
When running multiple Huntarr instances:
|
||||
|
||||
- Distribute connections to different *arr applications across instances
|
||||
- Use staggered `sleep_duration` values to prevent simultaneous processing
|
||||
- Assign different resource limits based on the importance of each instance
|
||||
|
||||
## Docker Host Tuning
|
||||
|
||||
For advanced users, optimize the Docker host for better performance:
|
||||
|
||||
- Use a high-performance filesystem for the configuration volume
|
||||
- Allocate sufficient CPU resources for consistent performance
|
||||
- Consider using host networking mode for better network performance
|
||||
|
||||
## Performance Monitoring
|
||||
|
||||
### Built-in Monitoring
|
||||
|
||||
Huntarr provides:
|
||||
|
||||
- API usage statistics in the dashboard
|
||||
- Detailed logs of operations and timing
|
||||
|
||||
### External Monitoring
|
||||
|
||||
For more comprehensive monitoring:
|
||||
|
||||
- Use container monitoring tools like Prometheus and Grafana
|
||||
- Monitor system resource usage with tools like Netdata or Glances
|
||||
- Set up alerts for excessive resource usage
|
||||
@@ -1,85 +0,0 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Configuration Guide
|
||||
|
||||
After installing Huntarr, you'll need to configure it to connect with your *arr applications and set up its hunting behavior. This guide will walk you through the process.
|
||||
|
||||
## Initial Setup
|
||||
|
||||
1. Access the Huntarr web interface at `http://YOUR_SERVER_IP:9705`
|
||||
2. Create your administrator account
|
||||
3. Optionally enable two-factor authentication for additional security
|
||||
|
||||
## Connecting *Arr Applications
|
||||
|
||||
Huntarr needs to connect to your media management applications to find missing content and quality upgrades.
|
||||
|
||||
### Adding a Sonarr Connection
|
||||
|
||||
1. Navigate to the **Settings** page
|
||||
2. Select the **Sonarr** tab
|
||||
3. Click **Add New Connection**
|
||||
4. Configure the following fields:
|
||||
- **Name**: A descriptive name (e.g., "Sonarr Main")
|
||||
- **URL**: The full URL including port (e.g., `http://10.10.10.1:8989`)
|
||||
- **API Key**: Your Sonarr API key (found in Settings > General in Sonarr)
|
||||
- **Base Path**: Leave blank unless your Sonarr instance uses a custom base path
|
||||
5. Click **Test Connection** to verify settings
|
||||
6. Click **Save** when successful
|
||||
|
||||
### Adding Radarr/Lidarr/Readarr/Whisparr
|
||||
|
||||
Follow the same steps as above, selecting the appropriate tab for each application. Each *arr application requires:
|
||||
|
||||
- A valid URL (without trailing slash)
|
||||
- A valid API key
|
||||
- Proper base path if used
|
||||
|
||||
## General Settings
|
||||
|
||||
Configure global behavior in the **General** tab:
|
||||
|
||||
### Hunt Settings
|
||||
|
||||
- **Hunt Missing**: Number of missing items to search for per run (default: 10)
|
||||
- **Hunt Upgrades**: Number of upgrades to search for per run (default: 10)
|
||||
- **Sleep Duration**: Seconds to wait between cycles (default: 900)
|
||||
- **Minimum Download Queue Size**: Pause hunting when download queue exceeds this value (default: 5)
|
||||
|
||||
### API Management
|
||||
|
||||
- **API Hourly Cap**: Maximum API calls per hour (default: 100)
|
||||
- **Universal API Timeout**: Seconds to wait for API responses (default: 120)
|
||||
- **Skip Series/Movie Refresh**: Enable to reduce disk I/O (recommended)
|
||||
- **Skip Future Items**: Enable to avoid searching for unreleased content (recommended)
|
||||
|
||||
## Advanced Configuration
|
||||
|
||||
### Debug Mode
|
||||
|
||||
Enable Debug Mode temporarily to troubleshoot connection issues by showing detailed API responses in logs.
|
||||
|
||||
### Command Timing
|
||||
|
||||
- **Command Wait Delay**: Seconds to wait between command status checks (default: 1)
|
||||
- **Command Wait Attempts**: Maximum number of attempts to check command status (default: 600)
|
||||
|
||||
## Configuration Tips
|
||||
|
||||
- **URLs**: Omit trailing slashes from URLs (use `http://10.10.10.1:8989` not `http://10.10.10.1:8989/`)
|
||||
- **API Keys**: Double-check API keys if connection tests fail
|
||||
- **Network Access**: Ensure Huntarr can reach your *arr applications via the network
|
||||
- **Rate Limits**: Adjust API hourly caps based on your indexer's rate limits
|
||||
- **Monitored Only**: By default, Huntarr only processes content you've marked as monitored
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If you encounter configuration issues:
|
||||
|
||||
- Check API keys and URLs carefully
|
||||
- Verify network connectivity between Huntarr and your *arr applications
|
||||
- Review logs for specific error messages
|
||||
- Temporarily enable Debug Mode for more detailed logging
|
||||
- Ensure proper permissions for the `/config` directory
|
||||
@@ -1,99 +0,0 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Frequently Asked Questions
|
||||
|
||||
## General Questions
|
||||
|
||||
### What is Huntarr?
|
||||
Huntarr is a specialized utility that automates discovering missing content and upgrading your existing media collection. It connects to your Sonarr, Radarr, Lidarr, Readarr, and Whisparr instances to help maintain your library.
|
||||
|
||||
### How does Huntarr work?
|
||||
Huntarr connects to your *arr applications via their APIs, analyzes your libraries to find missing content and items below your quality cutoff, then initiates searches to fill these gaps or improve quality.
|
||||
|
||||
### Is Huntarr free to use?
|
||||
Yes, Huntarr is free and open source software, released under the GPL-3.0 license.
|
||||
|
||||
### How often is Huntarr updated?
|
||||
Huntarr receives regular updates to improve functionality and fix bugs. You can check the [GitHub releases page](https://github.com/plexguide/Huntarr.io/releases/) for the latest versions.
|
||||
|
||||
## Installation Questions
|
||||
|
||||
### What systems does Huntarr support?
|
||||
Huntarr runs as a Docker container, so it can be deployed on any system that supports Docker, including Linux, macOS, Windows, and NAS devices like Unraid and Synology.
|
||||
|
||||
### What ports does Huntarr use?
|
||||
Huntarr uses port 9705 by default for its web interface.
|
||||
|
||||
### Can I run Huntarr without Docker?
|
||||
Docker is the recommended and officially supported deployment method, but since Huntarr is written in Python, advanced users could potentially run it directly from source.
|
||||
|
||||
## Configuration Questions
|
||||
|
||||
### Do I need to configure all *arr applications?
|
||||
No, you can configure only the applications you use. Huntarr will only process the connections you've set up.
|
||||
|
||||
### How do I find my API keys?
|
||||
API keys can be found in the Settings > General section of each *arr application:
|
||||
- Sonarr: Settings > General > API Key
|
||||
- Radarr: Settings > General > API Key
|
||||
- Lidarr: Settings > General > API Key
|
||||
- Readarr: Settings > General > API Key
|
||||
- Whisparr: Settings > General > API Key
|
||||
|
||||
### What are the recommended settings for a large library?
|
||||
For large libraries:
|
||||
- Increase Sleep Duration to 1800-3600 seconds (30-60 minutes)
|
||||
- Set Hunt Missing and Hunt Upgrades to 15-25 each
|
||||
- Increase Minimum Download Queue Size to 10-15
|
||||
- Enable Skip Series/Movie Refresh to reduce I/O
|
||||
- Set API Hourly Cap based on your indexer's limits (typically 150-300)
|
||||
|
||||
### Can I use Huntarr with multiple instances of the same application?
|
||||
Yes, you can configure multiple connections to the same type of application. This is useful if you have separate Sonarr instances for TV shows and anime, for example.
|
||||
|
||||
## Usage Questions
|
||||
|
||||
### Will Huntarr overwhelm my indexers?
|
||||
No, Huntarr includes sophisticated API rate management that prevents overwhelming your indexers. You can configure the API hourly cap to match your indexer's rate limits.
|
||||
|
||||
### How can I tell if Huntarr is working?
|
||||
The Huntarr dashboard shows statistics on missing content and upgrade hunts. You can also check the logs to see detailed information about each hunt cycle.
|
||||
|
||||
### Can I temporarily disable hunting?
|
||||
Yes, you can pause hunting on the Settings page. Huntarr will complete its current cycle and then pause until you enable hunting again.
|
||||
|
||||
### How does Huntarr handle future releases?
|
||||
By default, Huntarr skips items with future release dates to avoid unnecessary API calls. This can be disabled in settings if needed.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Huntarr can't connect to my *arr application
|
||||
Check the following:
|
||||
- Verify the URL is correct and includes the protocol (http/https) and port
|
||||
- Ensure there is no trailing slash in the URL
|
||||
- Double-check your API key
|
||||
- Confirm network connectivity between Huntarr and the application
|
||||
- Verify your *arr application is up and running
|
||||
|
||||
### API calls keep failing
|
||||
If API calls consistently fail:
|
||||
- Enable Debug Mode to see detailed API responses
|
||||
- Check if your *arr application is rate-limiting requests
|
||||
- Verify your network doesn't have firewall rules blocking the connections
|
||||
- Increase the Universal API Timeout if your server is slower
|
||||
|
||||
### Huntarr isn't finding any missing content
|
||||
This could be because:
|
||||
- Your library is already complete (congratulations!)
|
||||
- You have "Skip Future Items" enabled and the content has future release dates
|
||||
- The items aren't marked as monitored in your *arr application
|
||||
- Your search criteria in the *arr application are too restrictive
|
||||
|
||||
### Huntarr is using too many API calls
|
||||
To reduce API usage:
|
||||
- Increase the Sleep Duration between hunt cycles
|
||||
- Decrease the Hunt Missing and Hunt Upgrades values
|
||||
- Enable Skip Series/Movie Refresh to avoid unnecessary refreshes
|
||||
- Lower the API Hourly Cap to a more conservative value
|
||||
@@ -1,132 +0,0 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Running Multiple Huntarr Instances
|
||||
|
||||
In some scenarios, you may want to run multiple instances of Huntarr to separate different types of media management or distribute the load. This guide explains how to set up and manage multiple Huntarr instances effectively.
|
||||
|
||||
## Use Cases for Multiple Instances
|
||||
|
||||
- **Separate media types**: Dedicate one instance to movies and another to TV shows
|
||||
- **Testing configuration changes**: Run a test instance alongside your production instance
|
||||
- **Different hunting profiles**: Use aggressive settings for some media and conservative settings for others
|
||||
- **Distributed load**: Run instances on different machines to distribute system load
|
||||
|
||||
## Setting Up Multiple Instances
|
||||
|
||||
### Method 1: Using Different Container Names and Ports
|
||||
|
||||
The simplest approach is to run multiple Docker containers with different names, ports, and config volumes:
|
||||
|
||||
```bash
|
||||
# First Huntarr instance (default)
|
||||
docker run -d --name huntarr-main \
|
||||
--restart always \
|
||||
-p 9705:9705 \
|
||||
-v /your-path/huntarr-main:/config \
|
||||
-e TZ=America/New_York \
|
||||
huntarr/huntarr:latest
|
||||
|
||||
# Second Huntarr instance
|
||||
docker run -d --name huntarr-anime \
|
||||
--restart always \
|
||||
-p 9706:9705 \
|
||||
-v /your-path/huntarr-anime:/config \
|
||||
-e TZ=America/New_York \
|
||||
huntarr/huntarr:latest
|
||||
```
|
||||
|
||||
This approach requires:
|
||||
- Unique container names (e.g., `huntarr-main`, `huntarr-anime`)
|
||||
- Different host ports (e.g., 9705, 9706)
|
||||
- Separate configuration volumes
|
||||
|
||||
### Method 2: Using Docker Compose
|
||||
|
||||
For easier management, you can use Docker Compose to define all your instances:
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
services:
|
||||
huntarr-movies:
|
||||
image: huntarr/huntarr:latest
|
||||
container_name: huntarr-movies
|
||||
restart: always
|
||||
ports:
|
||||
- "9705:9705"
|
||||
volumes:
|
||||
- /your-path/huntarr-movies:/config
|
||||
environment:
|
||||
- TZ=America/New_York
|
||||
|
||||
huntarr-tv:
|
||||
image: huntarr/huntarr:latest
|
||||
container_name: huntarr-tv
|
||||
restart: always
|
||||
ports:
|
||||
- "9706:9705"
|
||||
volumes:
|
||||
- /your-path/huntarr-tv:/config
|
||||
environment:
|
||||
- TZ=America/New_York
|
||||
```
|
||||
|
||||
Save this as `docker-compose.yml` and run:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Configuring Multiple Instances
|
||||
|
||||
Each instance should be configured independently:
|
||||
|
||||
1. Access each instance through its unique port (e.g., `http://YOUR_SERVER_IP:9705` and `http://YOUR_SERVER_IP:9706`)
|
||||
2. Set up administrator accounts for each instance
|
||||
3. Configure each instance with the specific *arr connections it should manage
|
||||
|
||||
### Recommended Configuration Strategy
|
||||
|
||||
For multiple instances, consider the following configuration strategy:
|
||||
|
||||
#### Instance 1: Movies
|
||||
- Connect to Radarr instances
|
||||
- Set a higher Hunt Missing value (e.g., 20)
|
||||
- Set a moderate Sleep Duration (e.g., 15 minutes)
|
||||
|
||||
#### Instance 2: TV Shows
|
||||
- Connect to Sonarr instances
|
||||
- Set a moderate Hunt Missing value (e.g., 10)
|
||||
- Set a higher Sleep Duration (e.g., 30 minutes)
|
||||
|
||||
This staggered approach ensures your instances aren't making API calls simultaneously, reducing the load on your systems and indexers.
|
||||
|
||||
## Monitoring Multiple Instances
|
||||
|
||||
To effectively monitor multiple Huntarr instances:
|
||||
|
||||
1. Use a browser with tabs for each instance's dashboard
|
||||
2. Set up different notification settings for each instance if needed
|
||||
3. Consider using a monitoring tool like Uptime Kuma to monitor the status of all instances
|
||||
|
||||
## Troubleshooting Multiple Instances
|
||||
|
||||
### Port Conflicts
|
||||
|
||||
If you see errors like `Error: listen EADDRINUSE: address already in use :::9705`:
|
||||
- Ensure each instance uses a different host port
|
||||
- Check if other applications are using your selected ports
|
||||
|
||||
### Network Issues
|
||||
|
||||
If instances can't connect to the same *arr applications:
|
||||
- Verify network routing between containers
|
||||
- Check for firewall rules that might be blocking specific container connections
|
||||
|
||||
### Resource Contention
|
||||
|
||||
If you notice performance issues:
|
||||
- Stagger the Sleep Duration settings to prevent simultaneous processing
|
||||
- Run instances on different hosts if experiencing resource constraints
|
||||
- Reduce Hunt Missing and Hunt Upgrade values to lower the processing load
|
||||
@@ -1,123 +0,0 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Installation Guide
|
||||
|
||||
Huntarr is distributed as a Docker container, making it easy to deploy on any system that supports Docker. This guide covers different installation methods.
|
||||
|
||||
## Installation Methods
|
||||
|
||||
### Docker Run
|
||||
|
||||
The simplest way to run Huntarr is via Docker (all configuration is done via the web UI):
|
||||
|
||||
```bash
|
||||
# Option 1: DockerHub
|
||||
docker run -d --name huntarr \
|
||||
--restart always \
|
||||
-p 9705:9705 \
|
||||
-v /your-path/huntarr:/config \
|
||||
-e TZ=America/New_York \
|
||||
huntarr/huntarr:latest
|
||||
|
||||
# Option 2: GitHub Container Registry
|
||||
docker run -d --name huntarr \
|
||||
--restart always \
|
||||
-p 9705:9705 \
|
||||
-v /your-path/huntarr:/config \
|
||||
-e TZ=America/New_York \
|
||||
ghcr.io/plexguide/huntarr:latest
|
||||
```
|
||||
|
||||
To check on the status of the program, you can use the web interface at http://YOUR_SERVER_IP:9705 or check the logs with:
|
||||
|
||||
```bash
|
||||
docker logs huntarr
|
||||
```
|
||||
|
||||
### Docker Compose
|
||||
|
||||
For those who prefer Docker Compose, add this to your `docker-compose.yml` file:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
huntarr:
|
||||
# Option 1: DockerHub
|
||||
image: huntarr/huntarr:latest
|
||||
# Option 2: GitHub Container Registry
|
||||
# image: ghcr.io/plexguide/huntarr:latest
|
||||
container_name: huntarr
|
||||
restart: always
|
||||
ports:
|
||||
- "9705:9705"
|
||||
volumes:
|
||||
- /your-path/huntarr:/config
|
||||
environment:
|
||||
- TZ=America/New_York
|
||||
```
|
||||
|
||||
Then run:
|
||||
|
||||
```bash
|
||||
docker-compose up -d huntarr
|
||||
```
|
||||
|
||||
### Unraid Users
|
||||
|
||||
You can install Huntarr using the Unraid App Store.
|
||||
|
||||
If not, you can run this from Command Line in Unraid:
|
||||
|
||||
```bash
|
||||
# Option 1: DockerHub
|
||||
docker run -d --name huntarr \
|
||||
--restart always \
|
||||
-p 9705:9705 \
|
||||
-v /mnt/user/appdata/huntarr:/config \
|
||||
-e TZ=America/New_York \
|
||||
huntarr/huntarr:latest
|
||||
|
||||
# Option 2: GitHub Container Registry
|
||||
docker run -d --name huntarr \
|
||||
--restart always \
|
||||
-p 9705:9705 \
|
||||
-v /mnt/user/appdata/huntarr:/config \
|
||||
-e TZ=America/New_York \
|
||||
ghcr.io/plexguide/huntarr:latest
|
||||
```
|
||||
|
||||
## Configuration After Installation
|
||||
|
||||
After installation, you'll need to:
|
||||
|
||||
1. Access the web interface at `http://YOUR_SERVER_IP:9705`
|
||||
2. Set up your administrator account with optional 2FA
|
||||
3. Configure connections to your *Arr applications
|
||||
4. Adjust search settings for optimal performance
|
||||
|
||||
See the [Configuration Guide](configuration) for detailed setup instructions.
|
||||
|
||||
## Volume Mapping
|
||||
|
||||
To ensure data persistence, make sure you map the `/config` directory to a persistent volume on your host system:
|
||||
|
||||
```
|
||||
-v /your-path/appdata/huntarr:/config
|
||||
```
|
||||
|
||||
This directory will store your:
|
||||
- User credentials
|
||||
- Application settings
|
||||
- Connection configurations
|
||||
- Logs and state information
|
||||
|
||||
## Troubleshooting Installation Issues
|
||||
|
||||
If you encounter problems during installation:
|
||||
|
||||
- Make sure Docker is properly installed and running
|
||||
- Verify the port 9705 is not already in use by another application
|
||||
- Check that the volume mount path exists and has proper permissions
|
||||
- Examine the container logs using `docker logs huntarr`
|
||||
- Ensure your Docker host can access the internet to pull the image
|
||||
@@ -1,56 +0,0 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Huntarr - Find Missing & Upgrade Media Items
|
||||
|
||||

|
||||
|
||||
Huntarr is a specialized utility that automates discovering missing and upgrading your media collection.
|
||||
|
||||
## Key Features
|
||||
|
||||
### 1️⃣ Connect & Analyze
|
||||
|
||||
Huntarr connects to your Sonarr/Radarr/Lidarr/Readarr/Whisparr/Eros instances and analyzes your media libraries to identify both missing content and potential quality upgrades.
|
||||
|
||||
### 2️⃣ Hunt Missing Content
|
||||
|
||||
* 🔍 **Efficient Refreshing:** Skip metadata refresh to reduce disk I/O and database load
|
||||
* 🔮 **Future-Aware:** Automatically skip content with future release dates
|
||||
* 🎯 **Precise Control:** Configure exactly how many items to process per cycle
|
||||
* 👀 **Monitored Only:** Focus only on content you've marked as monitored
|
||||
|
||||
### 3️⃣ Hunt Quality Upgrades
|
||||
|
||||
* ⬆️ **Quality Improvement:** Find content below your quality cutoff settings
|
||||
* 📦 **Batch Processing:** Set specific numbers of upgrades to process per cycle
|
||||
* 🚦 **Queue Management:** Automatically pauses when download queue exceeds your threshold
|
||||
* ⏱️ **Command Monitoring:** Waits for commands to complete with consistent timeouts
|
||||
|
||||
### 4️⃣ API Management
|
||||
|
||||
* 🛡️ **Rate Protection:** Hourly caps prevent overloading your indexers
|
||||
* ⏲️ **Universal Timeouts:** Consistent API timeouts (120s) across all applications
|
||||
* 🔄 **Consistent Headers:** Identifies as Huntarr to all Arr applications
|
||||
* 📊 **Intelligent Monitoring:** Visual indicators show API usage limits
|
||||
|
||||
### 5️⃣ Repeat & Rest
|
||||
|
||||
💤 Huntarr waits for your configured interval (adjustable in settings) before starting the next cycle, ensuring your indexers aren't overloaded while maintaining continuous improvement of your library.
|
||||
|
||||
## Getting Started
|
||||
|
||||
Ready to elevate your media collection management? Get started with Huntarr by following our [installation guide](installation).
|
||||
|
||||
## Supported Applications
|
||||
|
||||
| Application | Status |
|
||||
| ----------- | --------------- |
|
||||
| Sonarr | **✅ Ready** |
|
||||
| Radarr | **✅ Ready** |
|
||||
| Lidarr | **✅ Ready** |
|
||||
| Readarr | **✅ Ready** |
|
||||
| Whisparr v2 | **✅ Ready** |
|
||||
| Whisparr v3 | **✅ Ready** |
|
||||
| Bazarr | **❌ Not Ready** |
|
||||
@@ -1,103 +0,0 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Usage Guide
|
||||
|
||||
Once you've installed and configured Huntarr, it will automatically begin its hunt and upgrade process. This guide explains how to monitor and use Huntarr on a daily basis.
|
||||
|
||||
## The Huntarr Dashboard
|
||||
|
||||
The Huntarr homepage provides real-time statistics and status information:
|
||||
|
||||
- **Hunt Statistics**: Shows the number of missing media items found and upgrade searches performed
|
||||
- **Application Status**: Displays connection status for each configured *arr application
|
||||
- **API Usage**: Visual indicators show API usage for each application relative to your configured limits
|
||||
- **Recent Activity**: Lists the most recent hunt operations and their results
|
||||
|
||||
## Monitoring Hunts
|
||||
|
||||
### Live Logs
|
||||
|
||||
The **Logs** tab provides real-time insight into Huntarr's operations:
|
||||
|
||||
1. Navigate to the **Logs** tab in the web interface
|
||||
2. Use the filter options to focus on specific applications or log levels
|
||||
3. Watch as Huntarr searches for missing content and quality upgrades
|
||||
4. Click the **Refresh** button to update logs manually if auto-refresh is disabled
|
||||
|
||||
### Understanding Hunt Cycles
|
||||
|
||||
Huntarr operates in continuous cycles:
|
||||
|
||||
1. **Connect**: Huntarr connects to each configured *arr application
|
||||
2. **Missing Hunt**: Searches for missing content based on your "Hunt Missing" setting
|
||||
3. **Upgrade Hunt**: Searches for content below quality cutoff based on your "Hunt Upgrades" setting
|
||||
4. **Sleep**: Waits for the configured sleep duration before starting the next cycle
|
||||
|
||||
Each hunt cycle is independent, so if one application has issues, others will still be processed.
|
||||
|
||||
## Manual Controls
|
||||
|
||||
While Huntarr is designed to run autonomously, you can control aspects of its operation:
|
||||
|
||||
### Pausing and Resuming
|
||||
|
||||
To temporarily pause Huntarr:
|
||||
|
||||
1. Navigate to the **Settings** page
|
||||
2. Toggle the **Pause Hunting** switch to ON
|
||||
3. Huntarr will complete its current cycle and then pause
|
||||
4. Toggle the switch back to OFF to resume operations
|
||||
|
||||
### Forcing a Hunt
|
||||
|
||||
To initiate an immediate hunt (bypassing the sleep timer):
|
||||
|
||||
1. Navigate to the **Dashboard**
|
||||
2. Click the **Force Hunt** button
|
||||
3. Huntarr will start a new hunt cycle immediately
|
||||
|
||||
## Working with Results
|
||||
|
||||
Huntarr does not modify your media library directly - it works through your existing *arr applications:
|
||||
|
||||
- Missing content will be added to your *arr application's download queue
|
||||
- Upgrades will be initiated according to your *arr application's quality settings
|
||||
- All actions will be visible in both Huntarr's logs and your *arr application's history
|
||||
|
||||
## Daily Operation Tips
|
||||
|
||||
For the best experience with Huntarr:
|
||||
|
||||
- **Check the dashboard daily** for a quick overview of hunt statistics
|
||||
- **Review logs periodically** to identify any recurring issues
|
||||
- **Adjust hunt settings** if you find download queues getting too large
|
||||
- **Increase sleep duration** if you notice indexers rate-limiting your searches
|
||||
- **Decrease API hourly caps** if your indexers have strict rate limits
|
||||
|
||||
## Monitoring Download Progress
|
||||
|
||||
Since Huntarr initiates downloads through your *arr applications, you should:
|
||||
|
||||
1. Check your *arr applications' download queues to monitor progress
|
||||
2. Use your download client to view active downloads
|
||||
3. Verify that media is being added to your library correctly
|
||||
|
||||
## Maintaining Huntarr
|
||||
|
||||
To keep Huntarr running smoothly:
|
||||
|
||||
- **Update regularly** when new versions are released
|
||||
- **Back up the configuration directory** before major updates
|
||||
- **Check logs periodically** for any errors or warnings
|
||||
- **Adjust settings** as your library size and needs change
|
||||
|
||||
## Understanding API Rate Management
|
||||
|
||||
Huntarr includes sophisticated API rate management:
|
||||
|
||||
- The dashboard shows current API usage for each application
|
||||
- If usage approaches your configured hourly cap, Huntarr will intelligently slow down requests
|
||||
- When the cap is reached, Huntarr will pause that application's hunting until the next hour
|
||||
- Other applications will continue to be processed normally
|
||||
@@ -1,125 +0,0 @@
|
||||
// @ts-check
|
||||
// Note: type annotations allow type checking and IDEs autocompletion
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: 'Huntarr',
|
||||
tagline: 'Find Missing & Upgrade Media Items',
|
||||
favicon: 'img/favicon.ico',
|
||||
|
||||
// Set the production url of your site here
|
||||
url: 'https://plexguide.github.io',
|
||||
// Set the /<baseUrl>/ pathname under which your site is served
|
||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||
baseUrl: '/Huntarr.io/',
|
||||
|
||||
// GitHub pages deployment config.
|
||||
organizationName: 'plexguide', // Usually your GitHub org/user name.
|
||||
projectName: 'Huntarr.io', // Usually your repo name.
|
||||
trailingSlash: false,
|
||||
|
||||
onBrokenLinks: 'warn',
|
||||
onBrokenMarkdownLinks: 'warn',
|
||||
|
||||
// Even if you don't use internalization, you can use this field to set useful
|
||||
// metadata like html lang. For example, if your site is Chinese, you may want
|
||||
// to replace "en" with "zh-Hans".
|
||||
i18n: {
|
||||
defaultLocale: 'en',
|
||||
locales: ['en'],
|
||||
},
|
||||
|
||||
presets: [
|
||||
[
|
||||
'classic',
|
||||
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||
({
|
||||
docs: {
|
||||
sidebarPath: require.resolve('./sidebars.js'),
|
||||
// Please change this to your repo.
|
||||
// Remove this to remove the "edit this page" links.
|
||||
editUrl:
|
||||
'https://github.com/plexguide/Huntarr.io/tree/main/docs/',
|
||||
},
|
||||
blog: false,
|
||||
theme: {
|
||||
customCss: require.resolve('./src/css/custom.css'),
|
||||
},
|
||||
}),
|
||||
],
|
||||
],
|
||||
|
||||
themeConfig:
|
||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||
({
|
||||
// Replace with your project's social card
|
||||
image: 'img/huntarr-social-card.jpg',
|
||||
navbar: {
|
||||
title: 'Huntarr',
|
||||
logo: {
|
||||
alt: 'Huntarr Logo',
|
||||
src: 'img/logo.png',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: 'docSidebar',
|
||||
sidebarId: 'tutorialSidebar',
|
||||
position: 'left',
|
||||
label: 'Documentation',
|
||||
},
|
||||
{
|
||||
href: 'https://github.com/plexguide/Huntarr.io',
|
||||
label: 'GitHub',
|
||||
position: 'right',
|
||||
},
|
||||
],
|
||||
},
|
||||
footer: {
|
||||
style: 'dark',
|
||||
links: [
|
||||
{
|
||||
title: 'Docs',
|
||||
items: [
|
||||
{
|
||||
label: 'Getting Started',
|
||||
to: '/docs/intro',
|
||||
},
|
||||
{
|
||||
label: 'Installation',
|
||||
to: '/docs/installation',
|
||||
},
|
||||
{
|
||||
label: 'Configuration',
|
||||
to: '/docs/configuration',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Community',
|
||||
items: [
|
||||
{
|
||||
label: 'GitHub Issues',
|
||||
href: 'https://github.com/plexguide/Huntarr.io/issues',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'More',
|
||||
items: [
|
||||
{
|
||||
label: 'GitHub',
|
||||
href: 'https://github.com/plexguide/Huntarr.io',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Copyright © ${new Date().getFullYear()} Huntarr.io. Built with Docusaurus.`,
|
||||
},
|
||||
prism: {
|
||||
theme: require('prism-react-renderer/themes/github'),
|
||||
darkTheme: require('prism-react-renderer/themes/dracula'),
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
@@ -21,7 +21,7 @@
|
||||
auto2top: true,
|
||||
homepage: 'README.md',
|
||||
themeColor: '#3498db',
|
||||
basePath: '',
|
||||
basePath: '/',
|
||||
search: {
|
||||
maxAge: 86400000,
|
||||
paths: 'auto',
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"name": "huntarr-docs",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
"start": "docusaurus start",
|
||||
"build": "docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"deploy": "docusaurus deploy",
|
||||
"clear": "docusaurus clear",
|
||||
"serve": "docusaurus serve",
|
||||
"write-translations": "docusaurus write-translations",
|
||||
"write-heading-ids": "docusaurus write-heading-ids"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "^2.4.3",
|
||||
"@docusaurus/preset-classic": "^2.4.3",
|
||||
"@mdx-js/react": "^1.6.22",
|
||||
"clsx": "^1.2.1",
|
||||
"prism-react-renderer": "^1.3.5",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "^2.4.3"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.5%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.14"
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
/**
|
||||
* Creating a sidebar enables you to:
|
||||
- create an ordered group of docs
|
||||
- render a sidebar for each doc of that group
|
||||
- provide next/previous navigation
|
||||
|
||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
||||
|
||||
Create as many sidebars as you want.
|
||||
*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||
tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
|
||||
|
||||
// But you can create a sidebar manually
|
||||
/*
|
||||
tutorialSidebar: [
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Getting Started',
|
||||
items: ['intro', 'installation'],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Configuration',
|
||||
items: ['configuration'],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Usage',
|
||||
items: ['usage'],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Guides',
|
||||
items: [
|
||||
'guides/multi-instance',
|
||||
'guides/scheduling',
|
||||
'guides/api-rate-limiting',
|
||||
'guides/swaparr'
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Advanced',
|
||||
items: [
|
||||
'advanced/stateful-management',
|
||||
'advanced/performance-tuning'
|
||||
],
|
||||
},
|
||||
'faq',
|
||||
],
|
||||
*/
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
||||
@@ -1,55 +0,0 @@
|
||||
import React from 'react';
|
||||
import clsx from 'clsx';
|
||||
import styles from './styles.module.css';
|
||||
|
||||
const FeatureList = [
|
||||
{
|
||||
title: 'Find Missing Content',
|
||||
description: (
|
||||
<>
|
||||
Huntarr intelligently scans your library to discover missing content and initiates searches to fill the gaps.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Quality Upgrades',
|
||||
description: (
|
||||
<>
|
||||
Automatically search for better quality versions of your existing media based on your quality preferences.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: 'Smart API Management',
|
||||
description: (
|
||||
<>
|
||||
Advanced rate limiting and API management prevent overwhelming your indexers while continuously improving your collection.
|
||||
</>
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
function Feature({title, description}) {
|
||||
return (
|
||||
<div className={clsx('col col--4')}>
|
||||
<div className="text--center padding-horiz--md">
|
||||
<h3>{title}</h3>
|
||||
<p>{description}</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function HomepageFeatures() {
|
||||
return (
|
||||
<section className={styles.features}>
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
{FeatureList.map((props, idx) => (
|
||||
<Feature key={idx} {...props} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
.features {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 2rem 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.featureSvg {
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/**
|
||||
* Any CSS included here will be global. The classic template
|
||||
* bundles Infima by default. Infima is a CSS framework designed to
|
||||
* work well for content-centric websites.
|
||||
*/
|
||||
|
||||
/* You can override the default Infima variables here. */
|
||||
:root {
|
||||
--ifm-color-primary: #2e5288;
|
||||
--ifm-color-primary-dark: #29487a;
|
||||
--ifm-color-primary-darker: #274474;
|
||||
--ifm-color-primary-darkest: #203860;
|
||||
--ifm-color-primary-light: #335c96;
|
||||
--ifm-color-primary-lighter: #35609c;
|
||||
--ifm-color-primary-lightest: #3c6cb0;
|
||||
--ifm-code-font-size: 95%;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
/* For readability concerns, you should choose a lighter palette in dark mode. */
|
||||
[data-theme='dark'] {
|
||||
--ifm-color-primary: #3d80e4;
|
||||
--ifm-color-primary-dark: #2471e0;
|
||||
--ifm-color-primary-darker: #1a6ada;
|
||||
--ifm-color-primary-darkest: #1557b3;
|
||||
--ifm-color-primary-light: #568fe8;
|
||||
--ifm-color-primary-lighter: #6599ea;
|
||||
--ifm-color-primary-lightest: #8bb2ef;
|
||||
--ifm-background-color: #121824;
|
||||
--ifm-navbar-background-color: #1a2233;
|
||||
--ifm-footer-background-color: #1a2233;
|
||||
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.footer--dark {
|
||||
--ifm-footer-background-color: #1a2233;
|
||||
}
|
||||
|
||||
.hero--primary {
|
||||
--ifm-hero-background-color: #1a2233;
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
import React from 'react';
|
||||
import clsx from 'clsx';
|
||||
import Link from '@docusaurus/Link';
|
||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||
import Layout from '@theme/Layout';
|
||||
import HomepageFeatures from '@site/src/components/HomepageFeatures';
|
||||
|
||||
import styles from './index.module.css';
|
||||
|
||||
function HomepageHeader() {
|
||||
const {siteConfig} = useDocusaurusContext();
|
||||
return (
|
||||
<header className={clsx('hero hero--primary', styles.heroBanner)}>
|
||||
<div className="container">
|
||||
<h1 className="hero__title">{siteConfig.title}</h1>
|
||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
||||
<div className={styles.buttons}>
|
||||
<Link
|
||||
className="button button--secondary button--lg"
|
||||
to="/docs/intro">
|
||||
Get Started with Huntarr
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Home() {
|
||||
const {siteConfig} = useDocusaurusContext();
|
||||
return (
|
||||
<Layout
|
||||
title={`${siteConfig.title}`}
|
||||
description="Find Missing & Upgrade Media Items - Huntarr connects to your *arr applications to find missing content and improve quality">
|
||||
<HomepageHeader />
|
||||
<main>
|
||||
<HomepageFeatures />
|
||||
</main>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
/**
|
||||
* CSS files with the .module.css suffix will be treated as CSS modules
|
||||
* and scoped locally.
|
||||
*/
|
||||
|
||||
.heroBanner {
|
||||
padding: 4rem 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 996px) {
|
||||
.heroBanner {
|
||||
padding: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
Reference in New Issue
Block a user