Alchemist docs
Alchemist documentation

Find a page.

Type at least two characters.

    Docs menu

    Reference

    Configuration Reference

    Full configuration reference for Alchemist.

    Source revision aeebc48

    Default config file location:

    • Linux/macOS: ~/.config/alchemist/config.toml
    • Linux/macOS with XDG: $XDG_CONFIG_HOME/alchemist/config.toml
    • Windows: %APPDATA%\Alchemist\config.toml
    • Override: ALCHEMIST_CONFIG_PATH

    Docker images set ALCHEMIST_CONFIG_PATH=/app/config/config.toml. That is the path inside the container. With a volume such as /data/alchemist/config:/app/config, the same file is stored on the Docker host at /data/alchemist/config/config.toml.

    [appearance]

    FieldTypeDefaultDescription
    active_theme_idstringoptionalSaved web UI color theme/profile identifier

    [updates]

    FieldTypeDefaultDescription
    channelstring"stable"Release channel checked by the About dialog and background update task. Valid values: stable, rc, nightly
    auto_checkbooltrueCheck the configured channel in the background while the server is running
    check_interval_hoursint24Update-check cache interval. Must be between 1 and 168 hours

    Only direct Linux/macOS binary installs are eligible for in-app replacement. Docker, Homebrew, AUR, Windows, and source builds return package-manager or manual update guidance instead.

    [transcode]

    FieldTypeDefaultDescription
    size_reduction_thresholdfloat0.3Minimum predicted size reduction required before a transcode is worth doing
    min_bpp_thresholdfloat0.1Minimum bits-per-pixel threshold used by the planner to decide whether a file is already efficiently compressed
    min_file_size_mbint50Skip files smaller than this size
    concurrent_jobsint1Max jobs Alchemist may run at once before engine-mode overrides
    threadsint0CPU thread count per job; 0 means automatic
    quality_profilestring"balanced"Quality/speed tradeoff preset
    output_codecstring"av1"Target codec: av1, hevc, or h264
    allow_fallbackbooltrueAllow codec fallback when the requested codec is unavailable
    hdr_modestring"preserve"Preserve HDR metadata or tonemap to SDR
    tonemap_algorithmstring"hable"HDR tonemapping algorithm
    tonemap_peakfloat1000.0Tonemap peak luminance target
    tonemap_desatfloat0.2Tonemap desaturation factor
    subtitle_modestring"copy"Subtitle handling: copy, burn, extract, or none

    [transcode.stream_rules]

    FieldTypeDefaultDescription
    strip_audio_by_titlelist[]Remove audio tracks whose title contains any configured case-insensitive substring
    keep_audio_languageslist[]Keep only audio tracks with matching ISO 639-2 language tags; untagged tracks are kept
    keep_only_default_audioboolfalseKeep only the default audio track after other filters run

    [hardware]

    FieldTypeDefaultDescription
    preferred_vendorstringautoPin hardware selection to nvidia, intel, amd, apple, or cpu
    device_pathstringoptionalExplicit render node such as /dev/dri/renderD128 on Linux
    allow_cpu_fallbackbooltrueAllow fallback to CPU when no supported GPU path succeeds
    cpu_presetstring"medium"CPU encoder speed/quality preset
    allow_cpu_encodingbooltrueAllow software encoding at all

    [scanner]

    FieldTypeDefaultDescription
    directorieslist[]Library directories to scan
    watch_enabledboolfalseEnable realtime watch behavior for configured directories
    extra_watch_dirslist[]Extra watch objects with path and is_recursive

    [notifications]

    FieldTypeDefaultDescription
    enabledboolfalseMaster switch for notifications
    allow_local_notificationsboolfalseAllow notification targets to point at local/private network addresses. Off by default for SSRF safety
    daily_summary_time_localstring"09:00"Global local-time send window for daily summary notifications
    quiet_hours_enabledboolfalseSuppress non-critical notifications inside the configured local-time quiet-hours window
    quiet_hours_start_localstring"22:00"Quiet-hours start time in HH:MM local time
    quiet_hours_end_localstring"08:00"Quiet-hours end time in HH:MM local time
    targetslist[]Notification target objects with name, target_type, config_json, events, and enabled

    Supported target_type values and required config_json keys:

    TargetRequired config_json
    discord_webhookwebhook_url
    discord_botbot_token, channel_id
    gotifyserver_url, app_token
    ntfyserver_url, topic; optional access_token
    webhookurl; optional auth_token
    telegrambot_token, chat_id
    emailsmtp_host, from_address, to_addresses

    Supported target events: encode.queued, encode.started, encode.completed, encode.failed, scan.completed, engine.idle, disk.space_low, and daily.summary. disk.space_low fires when the disk-space guardrail holds jobs (see min_free_space_gb).

    [files]

    FieldTypeDefaultDescription
    delete_sourceboolfalseDelete the original file after a verified successful transcode
    output_extensionstring"mkv"Output file extension
    output_suffixstring"-alchemist"Suffix added to the output filename
    replace_strategystring"keep"Replace behavior for output collisions
    output_rootstringoptionalIf set, Alchemist mirrors the source library directory structure under this root path instead of writing outputs alongside the source files

    [schedule]

    FieldTypeDefaultDescription
    windowslist[]Time window objects; each window has start_time, end_time, and days_of_week

    days_of_week uses integers 0-6. The config validator requires at least one day in every window.

    [quality]

    FieldTypeDefaultDescription
    enable_vmafboolfalseRun VMAF scoring after encode
    min_vmaf_scorefloat90.0Minimum acceptable VMAF score
    revert_on_low_qualitybooltrueRevert the transcode if quality falls below the threshold

    [system]

    FieldTypeDefaultDescription
    monitoring_poll_intervalfloat2.0Poll interval for system monitoring and dashboard resource refresh
    conversion_upload_limit_gbint8Maximum allowed upload size for the Convert workflow, in GiB. Must be >= 1. Uploads above this size are rejected before the file is written to disk
    conversion_download_retention_hoursint1Hours to retain a completed Convert output after the user downloads it, before the cleanup pass removes the upload and output. Must be between 1 and 24
    min_free_space_gbint10Disk-space guardrail. Before starting a job, the engine checks free space on that job’s output filesystem; if it is below this many GiB, the engine holds queued jobs (they stay queued and retry) instead of starting an encode that could fill the disk mid-run. The hold and reason are shown in System Status. Set to 0 to disable. Fails open: if free space cannot be determined for a path, the job proceeds
    enable_telemetryboolfalseOpt-in anonymous telemetry switch
    log_retention_daysint30Log retention period in days
    metrics_enabledboolfalseEnable the Prometheus /metrics endpoint
    engine_modestring"balanced"Runtime engine mode: background, balanced, or throughput
    https_onlyboolfalseAdd HSTS when Alchemist is served behind HTTPS. Do not enable for plain HTTP
    trusted_proxieslist[]Explicit reverse proxy IPs whose forwarded headers are trusted. Empty preserves private-range proxy compatibility
    arr_path_translationslist[]Optional path prefix mappings for ARR webhook ingestion, each entry { from, to }; longest matching from prefix wins

    Example

    [transcode]
    size_reduction_threshold = 0.3
    min_bpp_threshold = 0.1
    min_file_size_mb = 50
    concurrent_jobs = 1
    threads = 0
    quality_profile = "balanced"
    output_codec = "av1"
    allow_fallback = true
    hdr_mode = "preserve"
    tonemap_algorithm = "hable"
    tonemap_peak = 1000.0
    tonemap_desat = 0.2
    subtitle_mode = "copy"
    
    [transcode.stream_rules]
    strip_audio_by_title = ["commentary", "description"]
    keep_audio_languages = ["eng"]
    keep_only_default_audio = false
    
    [hardware]
    preferred_vendor = "intel"
    allow_cpu_fallback = true
    cpu_preset = "medium"
    allow_cpu_encoding = true
    
    [scanner]
    directories = ["/media/movies", "/media/tv"]
    watch_enabled = true
    
    [files]
    delete_source = false
    output_extension = "mkv"
    output_suffix = "-alchemist"
    replace_strategy = "keep"
    
    [quality]
    enable_vmaf = false
    min_vmaf_score = 90.0
    revert_on_low_quality = true
    
    [notifications]
    enabled = false
    daily_summary_time_local = "09:00"
    quiet_hours_enabled = false
    quiet_hours_start_local = "22:00"
    quiet_hours_end_local = "08:00"
    
    [updates]
    channel = "stable"
    auto_check = true
    check_interval_hours = 24
    
    [system]
    monitoring_poll_interval = 2.0
    conversion_upload_limit_gb = 8
    min_free_space_gb = 10
    conversion_download_retention_hours = 1
    enable_telemetry = false
    log_retention_days = 30
    metrics_enabled = false
    engine_mode = "balanced"
    arr_path_translations = [
      { from = "/container/media", to = "/mnt/media" }
    ]

    Authoritative source

    This page is generated from the editable Markdown in the Alchemist repository.

    View docs/content/configuration-reference.md at aeebc48

    Documentation © Brooklyn Halmstad. Licensed under CC BY-SA 4.0.

    A Dead Signal Works project.