Skip to main content

Configuration

homescreen-hero stores its settings in config.yaml. Most settings can be managed through the dashboard UI, but you can also edit this file directly. You can also export, import, and revert your config from the Settings page.

Security Tip

Sensitive values like API keys and passwords should be set using environment variables instead of putting them directly in config.yaml.

Example Config

plex:
base_url: "YOUR_PLEX_SERVER_URL" # e.g., "http://192.168.1.100:32400"
# token: "YOUR_PLEX_TOKEN" # RECOMMENDED: Use HSH_PLEX_TOKEN environment variable instead
libraries: # List of Plex libraries to use
- name: Movies
enabled: true
- name: TV Shows
enabled: false

auth:
enabled: true
username: "admin"
# password: "" # RECOMMENDED: Use HSH_AUTH_PASSWORD environment variable instead
# secret_key: "" # RECOMMENDED: Use HSH_AUTH_SECRET_KEY environment variable instead
token_expire_days: 30

rotation:
enabled: true
interval_hours: 12
max_collections: 5
group_order: display_order # display_order, weighted, or random
allow_repeats: false
sync_all_on_rotation: true # Default: true

trakt:
enabled: false
# client_id: "YOUR_TRAKT_CLIENT_ID" # RECOMMENDED: Use HSH_TRAKT_CLIENT_ID environment variable instead
base_url: https://api.trakt.tv
sources:
- name: "TRAKT_COLLECTION_NAME" # This is the name that will show up in Plex
url: "LINK_TO_TRAKT_COLLECTION_OR_LIST" # e.g., https://trakt.tv/users/username/collections/movies
plex_library: "YOUR_PLEX_LIBRARY_NAME" # e.g., "Movies"

letterboxd:
sources:
- name: "LETTERBOXD_LIST_NAME" # This is the name that will show up in Plex
url: "LINK_TO_LETTERBOXD_LIST" # e.g., https://letterboxd.com/username/list/listname/
plex_library: "YOUR_PLEX_LIBRARY_NAME" # e.g., "Movies"

mdblist:
enabled: false
# api_key: "YOUR_MDBLIST_API_KEY" # RECOMMENDED: Use HSH_MDBLIST_API_KEY environment variable instead
base_url: https://api.mdblist.com
sources:
- name: "MDBLIST_LIST_NAME" # This is the name that will show up in Plex
url: "LINK_TO_MDBLIST_LIST" # e.g., https://mdblist.com/lists/username/listname
plex_library: "YOUR_PLEX_LIBRARY_NAME" # e.g., "Movies"

tautulli:
enabled: false
# api_key: "YOUR_TAUTULLI_API_KEY" # RECOMMENDED: Use HSH_TAUTULLI_API_KEY environment variable instead
# Get your API key from: Tautulli Settings → Web Interface → API → API Key
base_url: "http://localhost:8181" # Your Tautulli instance URL
collect_on_rotation: true # Automatically collect analytics after each rotation
collect_interval_hours: 24 # How often to collect analytics snapshots (in hours)

seerr:
enabled: false
# api_key: "YOUR_SEERR_API_KEY" # RECOMMENDED: Use HSH_SEERR_API_KEY environment variable instead
# Get your API key from: Seerr Settings → General → API Key
base_url: "http://localhost:5055" # Your Seerr instance URL

tmdb:
enabled: false
# api_key: "YOUR_TMDB_API_KEY" # RECOMMENDED: Use HSH_TMDB_API_KEY environment variable instead
sources:
- name: "TMDB_COLLECTION_NAME"
url: "https://www.themoviedb.org/list/123456"
plex_library: "Movies"

anilist:
sources:
- name: "ANILIST_COLLECTION_NAME" # This is the name that will show up in Plex
url: "https://anilist.co/user/USERNAME/animelist/Completed" # User list URL
plex_library: "Anime"
- name: "AniList Top 100"
url: "anilist://browse/top-100" # Browse list URL
plex_library: "Anime"
max_items: 100 # 10-500, only applies to browse lists

mal:
enabled: false
# client_id: "YOUR_MAL_CLIENT_ID" # RECOMMENDED: Use HSH_MAL_CLIENT_ID environment variable instead
sources:
- name: "MAL_COLLECTION_NAME"
url: "https://myanimelist.net/animelist/USERNAME"
plex_library: "Anime"

display:
group_display_mode: grouped # "grouped" (clustered by group) or "merged" (round-robin)

logging:
level: INFO

groups:
- name: ExampleGroup
enabled: true
min_picks: 1
max_picks: 1
weight: 1
min_gap_rotations: 0
display_order: 0 # Controls position on homescreen (lower = first)
visibility_home: true # Show collections on server owner's Home page
visibility_shared: false # Show collections on shared users' Home pages
visibility_recommended: false # Show collections on Library Recommended section
target_users: # Optional: restrict to specific Plex users (omit for everyone)
- username1
- username2
collections:
- Example Collection 1
- Example Collection 2

- name: SmartGroupExample
enabled: true
smart: true # Uses filter rules instead of manual collection list
rules:
- field: source
operator: is
values: [trakt]
- field: item_count
operator: gte
values: [10]
min_picks: 1
max_picks: 2

Section Reference

plex

FieldTypeDefaultDescription
base_urlstring-Plex server URL
tokenstringnullPlex API token (prefer env var)
librarieslist-Libraries to manage
libraries[].namestring-Library name in Plex
libraries[].enabledbooltrueWhether this library is active

rotation

FieldTypeDefaultDescription
enabledbooltrueEnable automatic rotation
interval_hoursint12Hours between rotations (min: 1)
max_collectionsint5Max collections on homescreen at once (min: 1)
group_orderstringdisplay_orderHow groups are ordered for processing: display_order, weighted, or random
allow_repeatsboolfalseAllow same collection in consecutive rotations
sync_all_on_rotationbooltrueSync all third-party lists when rotating
blacklisted_collectionslist[]Collections to never select during rotation
auto_rotateobject-Settings for auto-rotate mode
per_library_limitsobjectMaximum collections per library during rotation. Keys are library names, values are max counts

Group Order

Controls how groups are processed during rotation:

  • display_order - Groups processed in their configured display order
  • weighted - Groups sorted by weight (higher = first), so higher-priority groups pick before lower ones
  • random - Groups processed in random order

groups

Groups organize your Plex collections for rotation.

FieldTypeDefaultDescription
namestring-Group name
enabledbooltrueWhether group is active
min_picksint0Minimum collections to pick per rotation
max_picksint1Maximum collections to pick per rotation
weightint1Priority for weighted strategy (higher = more likely)
min_gap_rotationsint0Rotations before reusing a collection from this group
display_orderint0Order groups appear in UI/Plex homescreen
visibility_homebooltrueShow on admin Home page
visibility_sharedboolfalseShow on shared users' Home pages
visibility_recommendedboolfalseShow in Library Recommended section
date_rangeobjectnullRestrict group to a yearly date window
date_range.startstring-Start date in MM-DD format
date_range.endstring-End date in MM-DD format
smartboolfalseUse filter rules instead of a manual collection list
ruleslist[]Smart group filter rules (only when smart: true). See Smart Groups
target_userslistnullPlex usernames who should see this group's collections. Omit for everyone. See Per-User Targeting
collection_selectionstringrandomHow collections are picked: random or lru
collection_orderstringnullDisplay order on homescreen: random or alpha
collection_sortstringnullSort order for items within collections: release or alpha
collectionslist-Plex collection names in this group (ignored when smart: true)

auth

FieldTypeDefaultDescription
enabledboolfalseRequire login to access the dashboard
methodstringpasswordAuth method: password, plex, or both
usernamestringadminLogin username (password method only)
passwordstringnullPassword - plaintext or bcrypt hash (prefer env var)
secret_keystringnullJWT signing secret (prefer env var)
token_expire_daysint30Days before login expires
auto_approve_usersbooltrueAuto-approve new Plex users (Plex auth only)

trakt

FieldTypeDefaultDescription
enabledboolfalseEnable Trakt integration
client_idstringnullTrakt API client ID (prefer env var)
base_urlstringhttps://api.trakt.tvTrakt API base URL
sourceslist[]Trakt list sources to sync
sources[].namestring-Display name (becomes the Plex collection name)
sources[].urlstring-Full Trakt list URL
sources[].plex_librarystring-Target Plex library to sync into

mdblist

FieldTypeDefaultDescription
enabledboolfalseEnable MDBList integration
api_keystringnullMDBList API key (prefer env var)
base_urlstringhttps://api.mdblist.comMDBList API base URL
sourceslist[]MDBList sources to sync
sources[].namestring-Display name (becomes the Plex collection name)
sources[].urlstring-Full MDBList list URL
sources[].plex_librarystring-Target Plex library to sync into

letterboxd

FieldTypeDefaultDescription
enabledboolfalseEnable Letterboxd integration
sourceslist[]Letterboxd list sources to sync
sources[].namestring-Display name (becomes the Plex collection name)
sources[].urlstring-Full or short Letterboxd list URL
sources[].plex_librarystring-Target Plex library to sync into

tautulli

FieldTypeDefaultDescription
enabledboolfalseEnable Tautulli analytics
api_keystringnullTautulli API key (prefer env var)
base_urlstringhttp://localhost:8181Tautulli server URL
collect_on_rotationbooltrueCollect analytics after each rotation
collect_interval_hoursint24Hours between analytics collection

seerr

FieldTypeDefaultDescription
enabledboolfalseEnable Seerr integration
api_keystringnullSeerr API key (prefer env var)
base_urlstringhttp://localhost:5055Seerr server URL

anilist

FieldTypeDefaultDescription
sourceslist[]AniList sources to sync
sources[].namestring-Display name (becomes the Plex collection name)
sources[].urlstring-AniList user list URL or browse URL (e.g., anilist://browse/top-100)
sources[].plex_librarystring-Target Plex library to sync into
sources[].max_itemsint100Max items to fetch (10–500, only applies to browse lists)

tmdb

FieldTypeDefaultDescription
enabledboolfalseEnable TMDb integration
api_keystringnullTMDb API key (prefer env var)
sourceslist[]TMDb list sources to sync
sources[].namestring-Display name (becomes the Plex collection name)
sources[].urlstring-TMDb list URL (e.g., https://www.themoviedb.org/list/123456)
sources[].plex_librarystring-Target Plex library to sync into

mal

FieldTypeDefaultDescription
enabledboolfalseEnable MyAnimeList integration
client_idstringnullMAL API client ID (prefer env var)
sourceslist[]MAL list sources to sync
sources[].namestring-Display name (becomes the Plex collection name)
sources[].urlstring-MAL list URL or seasonal URL (e.g., mal://season/2026/spring)
sources[].plex_librarystring-Target Plex library to sync into

display

FieldTypeDefaultDescription
group_display_modestringgroupedHow collection groups are arranged on the Plex homescreen: grouped (clustered by group) or merged (round-robin across groups)

logging

FieldTypeDefaultDescription
levelstringINFOLog level: DEBUG, INFO, WARNING, ERROR