Top-level flags

Usage: festivald [OPTIONS] [COMMAND + OPTIONS] [ARGS...]

Arguments passed to `festivald` will always take
priority over configuration options read from disk.

Commands:
  signal  Send a signal to a `festivald` running on the same machine
  help    Print this message or the help of the given subcommand(s)

Options:
      --ip <IP>
          The IPv4 address `festivald` will bind to [default: 127.0.0.1]

      --port <PORT>
          The port `festivald` will bind to [default: 18425]
          
          Using port `0` will select a random port.

      --max-connections <NUMBER>
          Max amount of connections [default: unlimited]
          
          The max amount of connections `festivald`
          will serve at any given moment.
          `0` means unlimited.
          
          Note that 1 client doesn't necessarily mean
          1 connection. A single web browser client for
          example can make many multiple connections
          to `festivald`.

      --exclusive-ip <IP>
          Only accept connections from these IPs
          
          `festivald` will only serve connections coming
          from these IPs. If there's no value given or
          any of the values is "0.0.0.0", `festivald`
          will serve all IP ranges.
          
          To allow multiple IPs, use this flag per IP.
          
          Example: `festivald --exclusive-ip 127.0.0.1 --exclusive-ip 192.168.2.1`

      --tls
          Enable HTTPS
          
          You must also provide a PEM-formatted X509 certificate
          and key in the below options for this to work.
          
          Example: `festivald --tls --certificate /path/to/cert.pem --key /path/to/key.pem`

      --certificate <FILE>
          The PEM-formatted X509 certificate file used for TLS

      --key <FILE>
          The PEM-formatted key file used for TLS

      --authorization <USER:PASS or FILE>
          Enforce a `username` and `password` for connections to `festivald`
          
          Only process connections to `festivald` that have a
          "authorization" HTTP header with this username and password.
          
          If either the `--no-auth-rpc` or `--no-auth-rest` options are
          used, then every RPC call/REST endpoint _NOT_ in those lists
          will require this authorization.
          
          TLS must be enabled or `festivald` must be started
          on `localhost` for this feature to work or `festivald`
          will refuse to start.
          
          To set authorization EVEN IF TLS IS DISABLED,
          See `--confirm-no-tls-auth`.
          
          This value must be:
            1. The "username"
            2. Followed by a single colon ":"
            3. Then the "password", e.g:
          ```
          festivald --authorization my_user:my_pass
          ```
          An empty string disables this feature.
          
          Alternatively, you can input an absolute PATH to a file
          `festivald` can access, containing the string, e.g:
          ```
          festivald --authorization "/path/to/user_and_pass.txt"
          ```
          In this case, `festivald` will read the file and attempt
          to parse it with the same syntax, i.e, the file should contain:
          ```
          my_user:my_pass
          ```

      --confirm-no-tls-auth
          Allow `--authorization` even without TLS
          
          This will let you set the authorization
          setting even if TLS is disabled.
          
          This means your `user:pass` will be sent in clear-text HTTP,
          unless you are wrapping HTTP in something else, like SSH
          port forwarding, or Tor.

      --no-auth-rpc <METHOD>
          Allow specified JSON-RPC calls without authorization
          
          If a JSON-RPC method is listed in this array,
          `festivald` will allow any client to use it,
          regardless of authorization.
          
          This allows you to have `authorization` enabled
          across the board, but allow specific JSON-RPC
          calls for public usage.
          
          For example, if only `toggle` is listed, then
          clients WITHOUT authorization will only be
          allowed to use the `toggle` method, for every
          other method, they must authenticate.
          
          The method names listed here must match the
          exact names when using them, or shown in the
          documentation, see here:
          
          <https://docs.festival.pm/daemon/json-rpc/json-rpc.html>
          
          OR WITH
          
          ```
          festivald data --docs
          ```
          
          To allow multiple methods, use this flag per method.
          
          Example: `festivald --no-auth-rpc toggle --no-auth-rpc volume`

      --no-auth-rest <RESOURCE>
          Allow specified REST resources without authorization
          
          REST resources:
            - `collection`
            - `playlist`
            - `artist`
            - `album`
            - `song`
            - `art`
          
          If a REST resource is listed in this array,
          `festivald` will allow any client to use it,
          regardless of authorization.
          
          For example, if only `art` is listed, then
          clients WITHOUT authorization will only be
          allowed to use the `art` related endpoints
          (/rand/art, /current/art, etc). For every
          other endpoint (/rand/song, /collection, etc),
          they must authenticate.
          
          To allow multiple methods, use this flag per method.
          
          Example: `festivald --no-auth-rest art --no-auth-rest song`

      --no-auth-docs
          Allow documentation to be served without authorization

      --sleep-on-fail <MILLI>
          Sleep before responding to a (potentially malicious) failed connections
          
          Upon a failed, potentially malicious request, instead of
          immediately responding, `festivald` will randomly sleep
          up to this many milliseconds before responding to the connection.
          
          This includes:
            - Authentication failure
            - IPs not in the `exclusive_ips` list
            - IPv6 connections
          
          If 0, `festivald` will immediately respond. This may
          not be wanted to due potential DoS and timing attacks.
          
          If you're hosting locally (127.0.0.1), you can set this
          to 0 (unless you don't trust your local network?).

      --collection-path <PATH>
          Default PATHs to use for the `Collection`
          
          Upon a `collection_new` JSON-RPC method call, if the
          `paths` parameter is empty, these PATHs will be scanned
          instead.
          
          If this is not set, the default OS `Music` directory will be scanned.
          
          If `festivald` is running on Windows, you can use
          Windows-style PATHs: `C:\\Users\\User\\Music`.
          
          To set multiple PATHs, use this flag per PATH.
          
          Example: `festivald --collection-path /my/path/1 --collection-path /my/path/2`

      --direct-download
          Enable direct downloads via the REST API for browsers
          
          By default, accessing the REST API via a browser
          will open the resource in the browser (audio player,
          image viewer, etc)
          
          Using this flag will make browsers download
          the file directly, without opening it.

      --filename-separator <SEPARATOR>
          When files are downloaded via the REST API, and the
          file is a nested object referencing multiple things
          (e.g, an _album_ owned by an _artist_), we must include
          that information, but what string should separate them?
          
          The default separator is " - ", e.g:
          ```
          Artist Name - Album Title.zip
          ```
          it can be changed to any string, like "/":
          ```
          Artist Name/Album Title.zip
          ```
          or left empty "" for no separator at all.
          
          This cannot include a slash: `/`
          as that is the legal PATH separator in ZIP files.

      --disable-cache-clean
          Enable/disable cleaning up cache
          
          When serving `ZIP` files via the REST API, `festivald`
          will first write them to disk, then serve those files
          instead of directly storing everything in memory,
          as to not get OOM-killed on more than a few requests.
          
          Setting this to `false` will make `festivald`
          never clean those files up, ever.
          
          This will make `cache_time` not do anything and will
          also prevent `festivald` from the usual startup/shutdown
          cache cleaning that it does.

      --cache-time <SECONDS>
          Set the REST API cache time limit
          
          This option sets the time limit on how many seconds
          `festivald` will hold onto this cache for.
          
          Once the time limit is up, `festivald` will remove the
          file. This cache is also reset on startup and shutdown.
          
          This does nothing if `--disable-cache-clean` is passed.

      --disable-restore-audio-state
          Disable audio state restoration
          
          Upon startup, `festivald` (by default) will recover
          audio state (volume, exact position in song, queue, etc).
          
          Using this option disables this.

      --disable-watch
          Disable watching the filesystem for signals
          
          The way a newly launched `festivald` communicates to
          an already existing one (e.g, `festivald signal --play`) is
          by creating a file in `festivald`'s `signal` directory.
          
          `festivald signal --FLAG` just creates a file in that directory,
          which an existing `festivald` will notice and do the appropriate task.
          
          Using `--disable-watch` will disable that part of the system so that
          filesystem signals won't work, e.g, `festivald signal --play` will not work.

      --disable-media-controls
          Disable OS media controls
          
          `festivald` plugs into the native OS's media controls so that signals
          like `play/pause/stop` and/or keyboard controls can be processed.
          
          `--disable-media-controls` disables this.

      --disable-rest
          Disable the REST API
          
          This is responsible for the `/rest` API that
          serves image, audio, and other heavy resource data.
          
          `--disable-rest` will disable this part of the system,
          and will only leave the JSON-RPC API available.

      --disable-docs
          Enable/disable serving documentation
          
          By default, `festivald` serves a markdown book
          of it's own documentation, accessible at the
          root `/` endpoint, e.g:
          ```
          http://localhost:18425/
          ```
          
          `--disable-docs` will disable that.

      --log-level <OFF|ERROR|INFO|WARN|DEBUG|TRACE>
          Set filter level for console logs

      --dry-run
          Print the configuration `festivald` would have used, but don't actually startup
          
          This will go through the regular process of:
            - Reading disk for config
            - Reading command-line
            - Merging options together
            - Validating options
          
          and then print them out as JSON, and exit.

      --docs
          Open documentation locally in browser
          
          This opens `festivald'`s documentation in a web
          browser, and does not start `festivald` itself.

      --path
          Print the PATHs used by `festivald`
          
          All data saved by `festivald` is saved in these directories.
          For more information, see: <https://docs.festival.pm/daemon/disk.html>

      --reset-config
          Reset the current `festivald.toml` config file to the default
          
          Exits with `0` if everything went ok, otherwise shows error.

      --reset-cache
          Reset the `festivald` cache folder
          
          This deletes all currently existing `REST` resource cache.

      --delete
          Delete all `festivald` files that are on disk
          
          This deletes all `daemon` Festival folders.
          The PATHs deleted will be printed on success.

      --methods
          Print all the JSON-RPC methods available

  -v, --version
          Print version

  -h, --help
          Print help (see a summary with '-h')