Files
media-sort/config.example.yaml
T
2026-09-30 23:06:14 -04:00

109 lines
3.8 KiB
YAML

# =====================================================================
# Media Sorter Production Configuration
# =====================================================================
general:
dry_run: true # Safe default: always preview before modifying
confidence_threshold: 0.75 # Score required to organize (0.0 - 1.0)
worker_count: 4 # Parallel processing workers
min_file_age_seconds: 300 # Ignore files modified within 5 minutes (active downloads)
action: move # move | copy | link | hardlink
preserve_permissions: true # Preserve POSIX/Windows timestamps and attributes
log_level: INFO # DEBUG | INFO | WARNING | ERROR | CRITICAL
storage:
source_dirs:
- "incoming"
- "downloads/completed"
destination_base: "organized"
destination_dirs:
movies: "Movies"
tv: "TV Shows"
anime: "Anime"
music: "Music"
audiobooks: "Audiobooks"
podcasts: "Podcasts"
home_videos: "Home Videos"
photos: "Photos"
archives: "Archives"
quarantine: "Quarantine"
conflicts:
policy: rename_unique # skip | rename_unique | quarantine | error | replace_if_higher_quality
allow_overwrite: false # Never overwrite existing files
backup_dir: ".backup" # Backup folder if replace is configured
filters:
include_patterns:
- "*"
exclude_patterns:
- ".*" # Hidden files
- "*.part"
- "*.crdownload"
- "*.!qB"
- "Thumbs.db"
- "desktop.ini"
- "@eaDir"
- "$RECYCLE.BIN"
- "*.txt"
templates:
movie: "{title} ({year})/{title} ({year}) [{resolution} {codec}].{ext}"
tv: "{title}/Season {season:02d}/{title} - S{season:02d}E{episode:02d} - {episode_title}.{ext}"
anime: "{title}/Season {season:02d}/{title} - S{season:02d}E{episode:02d} [{group}].{ext}"
music: "{artist}/{album} ({year})/{disc:01d}{track:02d} - {title}.{ext}"
audiobook: "{author}/{title}/{track:02d} - {chapter}.{ext}"
podcast: "{show}/{year}/{show} - {date} - {title}.{ext}"
home_video: "{year}/{year}-{month:02d} - {event}/{filename}.{ext}"
photo: "{year}/{year}-{month:02d}/{year}{month:02d}{day:02d}_{time}_{camera}.{ext}"
archive: "Archives/{filename}.{ext}"
quarantine: "Quarantine/{reason}/{filename}.{ext}"
sidecars:
enabled: true
subtitles:
match_video_basename: true
preserve_language_code: true
artwork:
match_parent_folder: true
extras:
detect_trailers: true
trailer_suffix: "-trailer"
providers:
enable_online_metadata: false # Query TMDB / MusicBrainz online
tmdb_api_key: null # Your TheMovieDB API key
tvdb_api_key: null # Your TVDB API key
rate_limit_per_second: 2.0 # API throttle limit
cache_expiry_hours: 72 # Cache duration for API metadata
notifications:
enabled: false # Send webhook on batch completion
webhook_url: null # Webhook URL (Slack, Discord, generic)
notify_on_complete: true
notify_on_failure: true
symlinks:
follow_symlinks: false # Traversal into symlink directories
handle_broken_symlinks: skip # skip | quarantine
permissions:
preserve_attributes: true # Preserve mtime, mode, flags
file_mode: null # e.g. "0644"
dir_mode: null # e.g. "0755"
owner: "YOUR_DISCORD_USER_ID" # Discord user ID of bot owner
group: null # System group or GID
quarantine:
move_to_quarantine_folder: true # Physically isolate low confidence files
directory: "Quarantine"
database:
path: "media_sorter.db"
wal_mode: true
server:
host: "127.0.0.1"
port: 8080
enabled: true