#########################################
#
#  Database configuration
#
#########################################

##
## Database configuration with separate parameters.
## This setting is MANDATORY, unless 'database_url' is used.
##
db:
  user: kemal
  password: kemal
  host: localhost
  port: 5432
  dbname: invidious

##
## Database configuration using a single URI. This is an
## alternative to the 'db' parameter above. If both forms
## are used, then only database_url is used.
## This setting is MANDATORY, unless 'db' is used.
##
## Note: The 'database_url' setting allows the use of UNIX
## sockets. To do so, remove the IP address (or FQDN) and port
## and append the 'host' parameter. E.g:
##   postgres://kemal:kemal@/invidious?host=/var/run/postgresql
##
## Accepted values: a postgres:// URI
## Default: postgres://kemal:kemal@localhost:5432/invidious
##
#database_url: postgres://kemal:kemal@localhost:5432/invidious

##
## Enable automatic table integrity check. This will create
## the required tables and columns if anything is missing.
##
## Accepted values: true, false
## Default: false
##
#check_tables: false



#########################################
#
#  Server config
#
#########################################

# -----------------------------
#  Network (inbound)
# -----------------------------

##
## Port to listen on for incoming connections.
##
## Note: Ports lower than 1024 requires either root privileges
## (not recommended) or the "CAP_NET_BIND_SERVICE" capability
## (See https://stackoverflow.com/a/414258 and `man capabilities`)
##
## Accepted values: 1-65535
## Default: 3000
##
#port: 3000

##
## When the invidious instance is behind a proxy, and the proxy
## listens on a different port than the instance does, this lets
## invidious know about it. This is used to craft absolute URLs
## to the instance (e.g in the API).
##
## Note: This setting is MANDATORY if invidious is behind a
## reverse proxy.
##
## Accepted values: 1-65535
## Default: <none>
##
#external_port:

##
## Interface address to listen on for incoming connections.
##
## Accepted values: a valid IPv4 or IPv6 address.
## default: 0.0.0.0  (listen on all interfaces)
##
#host_binding: 0.0.0.0

##
## Domain name under which this instance is hosted. This is
## used to craft absolute URLs to the instance (e.g in the API).
## The domain MUST be defined if your instance is accessed from
## a domain name (like 'example.com').
##
## Accepted values: a fully qualified domain name (FQDN)
## Default: <none>
##
domain:

##
## Tell Invidious that it is behind a proxy that provides only
## HTTPS, so all links must use the https:// scheme. This
## setting MUST be set to true if invidious is behind a
## reverse proxy serving HTTPs.
##
## Accepted values: true, false
## Default: false
##
https_only: false

##
## Enable/Disable 'Strict-Transport-Security'. Make sure that
## the domain specified under 'domain' is served securely.
##
## Accepted values: true, false
## Default: true
##
#hsts: true


# -----------------------------
#  Network (outbound)
# -----------------------------

##
## Disable proxying server-wide. Can be disable as a whole, or
## only for a single function.
##
## Accepted values: true, false, dash, livestreams, downloads, local
## Default: false
##
#disable_proxy: false

##
## Size of the HTTP pool used to connect to youtube. Each
## domain ('youtube.com', 'ytimg.com', ...) has its own pool.
##
## Accepted values: a positive integer
## Default: 100
##
#pool_size: 100

##
## Enable/Disable the use of QUIC (HTTP/3) when connecting
## to the youtube API and websites ('youtube.com', 'ytimg.com').
## QUIC's main advantages are its lower latency and lower bandwidth
## use, compared to its predecessors. However, the current version
## of QUIC used in invidious is still based on the IETF draft 31,
## meaning that the underlying library may still not be fully
## optimized. You can read more about QUIC at the link below:
## https://datatracker.ietf.org/doc/html/draft-ietf-quic-transport-31
##
## Note: you should try both options and see what is the best for your
## instance. In general QUIC is recommended for public instances. Your
## mileage may vary.
##
## Note 2: Using QUIC prevents some captcha challenges from appearing.
## See: https://github.com/iv-org/invidious/issues/957#issuecomment-576424042
##
## Accepted values: true, false
## Default: false
##
#use_quic: false

##
## Additional cookies to be sent when requesting the youtube API.
##
## Accepted values: a string in the format "name1=value1; name2=value2..."
## Default: <none>
##
#cookies:

##
## Force connection to youtube over a specific IP family.
##
## Note: This may sometimes resolve issues involving rate-limiting.
## See https://github.com/ytdl-org/youtube-dl/issues/21729.
##
## Accepted values: ipv4, ipv6
## Default: <none>
##
#force_resolve:


# -----------------------------
#  Logging
# -----------------------------

##
## Path to log file. Can be absolute or relative to the invidious
## binary. This is overridden if "-o OUTPUT" or "--output=OUTPUT"
## are passed on the command line.
##
## Accepted values: a filesystem path or 'STDOUT'
## Default: STDOUT
##
#output: STDOUT

##
## Logging Verbosity. This is overridden if "-l LEVEL" or
## "--log-level=LEVEL" are passed on the command line.
##
## Accepted values: All, Trace, Debug, Info, Warn, Error, Fatal, Off
## Default: Info
##
#log_level: Info


# -----------------------------
#  Features
# -----------------------------

##
## Enable/Disable the "Popular" tab on the main page.
##
## Accepted values: true, false
## Default: true
##
#popular_enabled: true

##
## Enable/Disable statstics (available at /api/v1/stats).
## The following data is available:
##   - Software name ("invidious") and version+branch (same data as
##     displayed in the footer, e.g: "2021.05.13-75e5b49" / "master")
##   - The value of the 'registration_enabled' config (true/false)
##   - Number of currently registered users
##   - Number of registered users who connected in the last month
##   - Number of registered users who connected in the last 6 months
##   - Timestamp of the last server restart
##   - Timestamp of the last "Channel Refresh" job execution
##
## Warning: This setting MUST be set to true if you plan to run
## a public instance. It is used by api.invidious.io to refresh
## your instance's status.
##
## Accepted values: true, false
## Default: false
##
#statistics_enabled: false


# -----------------------------
#  Users and accounts
# -----------------------------

##
## Allow/Forbid Invidious (local) account creation. Invidious
## accounts allow users to subscribe to channels and to create
## playlists without a Google account.
##
## Accepted values: true, false
## Default: true
##
#registration_enabled: true

##
## Allow/Forbid users to log-in. This setting affects the ability
## to connect with BOTH Google and Invidious (local) accounts.
##
## Accepted values: true, false
## Default: true
##
#login_enabled: true

##
## Enable/Disable the captcha challenge on the login page.
##
## Note: this is a basic captcha challenge that doesn't
## depend on any third parties.
##
## Accepted values: true, false
## Default: true
##
#captcha_enabled: true

##
## List of usernames that will be granted administrator rights.
## A user with administrator rights will be able to change the
## server configuration options listed below in /preferences,
## in addition to the usual user preferences.
##
## Server-wide settings:
##   - popular_enabled
##   - captcha_enabled
##   - login_enabled
##   - registration_enabled
##   - statistics_enabled
## Default user preferences:
##   - default_home
##   - feed_menu
##
## Accepted values: an array of strings
## Default: [""]
##
#admins: [""]

##
## Enable/Disable the user notifications for all users
##
## Note: On large instances, it is recommended to set this option to 'false'
## in order to reduce the amount of data written to the database, and hence
## improve the overall performance of the instance.
##
## Accepted values: true, false
## Default: true
##
#enable_user_notifications: true

# -----------------------------
#  Background jobs
# -----------------------------

##
## Number of threads to use when crawling channel videos (during
## subscriptions update).
##
## Notes: This setting is overridden if either "-c THREADS" or
## "--channel-threads=THREADS" is passed on the command line.
##
## Accepted values: a positive integer
## Default: 1
##
channel_threads: 1

##
## Time interval between two executions of the job that crawls
## channel videos (subscriptions update).
##
## Accepted values: a valid time interval (like 1h30m or 90m)
## Default: 30m
##
#channel_refresh_interval: 30m

##
## Forcefully dump and re-download the entire list of uploaded
## videos when crawling channel (during subscriptions update).
##
## Accepted values: true, false
## Default: false
##
full_refresh: false

##
## Number of threads to use when updating RSS feeds.
##
## Notes: This setting is overridden if either "-f THREADS" or
## "--feed-threads=THREADS" is passed on the command line.
##
## Accepted values: a positive integer
## Default: 1
##
feed_threads: 1

##
## Enable/Disable the polling job that keeps the decryption
## function (for "secured" videos) up to date.
##
## Note: This part of the code generate a small amount of data every minute.
## This may not be desired if you have bandwidth limits set by your ISP.
##
## Note 2: This part of the code is currently broken, so changing
## this setting has no impact.
##
## Accepted values: true, false
## Default: false
##
#decrypt_polling: false


jobs:

  ## Options for the database cleaning job
  clear_expired_items:

    ## Enable/Disable job
    ##
    ## Accepted values: true, false
    ## Default: true
    ##
    enable: true

  ## Options for the channels updater job
  refresh_channels:

    ## Enable/Disable job
    ##
    ## Accepted values: true, false
    ## Default: true
    ##
    enable: true

  ## Options for the RSS feeds updater job
  refresh_feeds:

    ## Enable/Disable job
    ##
    ## Accepted values: true, false
    ## Default: true
    ##
    enable: true


# -----------------------------
#  Captcha API
# -----------------------------

##
## URL of the captcha solving service.
##
## Accepted values: any URL
## Default: https://api.anti-captcha.com
##
#captcha_api_url: https://api.anti-captcha.com

##
## API key for the captcha solving service.
##
## Accepted values: a string
## Default: <none>
##
#captcha_key:


# -----------------------------
#  Miscellaneous
# -----------------------------

##
## custom banner displayed at the top of every page. This can
## used for instance announcements, e.g.
##
## Accepted values: any string. HTML is accepted.
## Default: <none>
##
#banner:

##
## Subscribe to channels using PubSubHub (Google PubSubHubbub service).
## PubSubHub allows Invidious to be instantly notified when a new video
## is published on any subscribed channels. When PubSubHub is not used,
## Invidious will check for new videos every minute.
##
## Note: This setting is recommended for public instances.
##
## Note 2:
##  - Requires a public instance (it uses /feed/webhook/v1)
##  - Requires 'domain' and 'hmac_key' to be set.
##  - Setting this parameter to any number greater than zero will
##    enable channel subscriptions via PubSubHub, but will limit the
##    amount of concurrent subscriptions.
##
## Accepted values: true, false, a positive integer
## Default: false
##
#use_pubsub_feeds: false

##
## HMAC signing key used for CSRF tokens and pubsub
## subscriptions verification.
##
## Accepted values: a string
## Default: <none>
##
#hmac_key:

##
## List of video IDs where the "download" widget must be
## disabled, in order to comply with DMCA requests.
##
## Accepted values: an array of string
## Default: <none>
##
#dmca_content:

##
## Cache video annotations in the database.
##
## Warning: empty annotations or annotations that only contain
## cards won't be cached.
##
## Accepted values: true, false
## Default: false
##
#cache_annotations: false

##
## Source code URL. If your instance is running a modified source
## code, you MUST publish it somewhere and set this option.
##
## Accepted values: a string
## Default: <none>
##
#modified_source_code_url: ""

##
## Maximum custom playlist length limit.
##
## Accepted values: Integer
## Default: 500
##
#playlist_length_limit: 500

#########################################
#
#  Default user preferences
#
#########################################

##
## NOTE: All the settings below define the default user
## preferences. They will apply to ALL users connecting
## without a preferences cookie (so either on the first
## connection to the instance or after clearing the
## browser's cookies).
##

default_user_preferences:

  # -----------------------------
  #  Internationalization
  # -----------------------------

  ##
  ## Default user interface language (locale).
  ##
  ## Note: When hosting a public instance, overriding the
  ## default (english) is not recommended, as it may
  ## people using other languages.
  ##
  ## Accepted values:
  ##   ar      (Arabic)
  ##   da      (Danish)
  ##   de      (German)
  ##   en-US   (english, US)
  ##   el      (Greek)
  ##   eo      (Esperanto)
  ##   es      (Spanish)
  ##   fa      (Persian)
  ##   fi      (Finnish)
  ##   fr      (French)
  ##   he      (Hebrew)
  ##   hr      (Hungarian)
  ##   id      (Indonesian)
  ##   is      (Icelandic)
  ##   it      (Italian)
  ##   ja      (Japanese)
  ##   nb-NO   (Norwegian, Bokmål)
  ##   nl      (Dutch)
  ##   pl      (Polish)
  ##   pt-BR   (Portuguese, Brazil)
  ##   pt-PT   (Portuguese, Portugal)
  ##   ro      (Romanian)
  ##   ru      (Russian)
  ##   sv      (Swedish)
  ##   tr      (Turkish)
  ##   uk      (Ukrainian)
  ##   zh-CN   (Chinese, China)  (a.k.a "Simplified Chinese")
  ##   zh-TW   (Chinese, Taiwan) (a.k.a "Traditional Chinese")
  ##
  ## Default: en-US
  ##
  #locale: en-US

  ##
  ## Default geographical location for content.
  ##
  ## Accepted values:
  ##   AE, AR, AT, AU, AZ, BA, BD, BE, BG, BH, BO, BR, BY, CA, CH, CL, CO, CR,
  ##   CY, CZ, DE, DK, DO, DZ, EC, EE, EG, ES, FI, FR, GB, GE, GH, GR, GT, HK,
  ##   HN, HR, HU, ID, IE, IL, IN, IQ, IS, IT, JM, JO, JP, KE, KR, KW, KZ, LB,
  ##   LI, LK, LT, LU, LV, LY, MA, ME, MK, MT, MX, MY, NG, NI, NL, NO, NP, NZ,
  ##   OM, PA, PE, PG, PH, PK, PL, PR, PT, PY, QA, RO, RS, RU, SA, SE, SG, SI,
  ##   SK, SN, SV, TH, TN, TR, TW, TZ, UA, UG, US, UY, VE, VN, YE, ZA, ZW
  ##
  ## Default: US
  ##
  #region: US

  ##
  ## Top 3 preferred languages for video captions.
  ##
  ## Note: overriding the default (no preferred
  ## caption language) is not recommended, in order
  ## to not penalize people using other languages.
  ##
  ## Accepted values: a three-entries array.
  ## Each entry can be one of:
  ##   "English", "English (auto-generated)",
  ##   "Afrikaans", "Albanian", "Amharic", "Arabic",
  ##   "Armenian", "Azerbaijani", "Bangla", "Basque",
  ##   "Belarusian", "Bosnian", "Bulgarian", "Burmese",
  ##   "Catalan", "Cebuano", "Chinese (Simplified)",
  ##   "Chinese (Traditional)", "Corsican", "Croatian",
  ##   "Czech", "Danish", "Dutch", "Esperanto", "Estonian",
  ##   "Filipino", "Finnish", "French", "Galician", "Georgian",
  ##   "German", "Greek", "Gujarati", "Haitian Creole", "Hausa",
  ##   "Hawaiian", "Hebrew", "Hindi", "Hmong", "Hungarian",
  ##   "Icelandic", "Igbo", "Indonesian", "Irish", "Italian",
  ##   "Japanese", "Javanese", "Kannada", "Kazakh", "Khmer",
  ##   "Korean", "Kurdish", "Kyrgyz", "Lao", "Latin", "Latvian",
  ##   "Lithuanian", "Luxembourgish", "Macedonian",
  ##   "Malagasy", "Malay", "Malayalam", "Maltese", "Maori",
  ##   "Marathi", "Mongolian", "Nepali", "Norwegian Bokmål",
  ##   "Nyanja", "Pashto", "Persian", "Polish", "Portuguese",
  ##   "Punjabi", "Romanian", "Russian", "Samoan",
  ##   "Scottish Gaelic", "Serbian", "Shona", "Sindhi",
  ##   "Sinhala", "Slovak", "Slovenian", "Somali",
  ##   "Southern Sotho", "Spanish", "Spanish (Latin America)",
  ##   "Sundanese",  "Swahili", "Swedish", "Tajik", "Tamil",
  ##   "Telugu", "Thai", "Turkish", "Ukrainian", "Urdu",
  ##   "Uzbek", "Vietnamese", "Welsh", "Western Frisian",
  ##   "Xhosa", "Yiddish", "Yoruba", "Zulu"
  ##
  ## Default: ["", "", ""]
  ##
  #captions: ["", "", ""]


  # -----------------------------
  #  Interface
  # -----------------------------

  ##
  ## Enable/Disable dark mode.
  ##
  ## Accepted values: "dark", "light", "auto"
  ## Default: "auto"
  ##
  #dark_mode: "auto"

  ##
  ## Enable/Disable thin mode (no video thumbnails).
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #thin_mode: false

  ##
  ## List of feeds available on the home page.
  ##
  ## Note: "Subscriptions" and "Playlists" are only visible
  ## when the user is logged in.
  ##
  ## Accepted values: A list of strings
  ## Each entry can be one of: "Popular", "Trending",
  ##    "Subscriptions", "Playlists"
  ##
  ## Default: ["Popular", "Trending", "Subscriptions", "Playlists"]  (show all feeds)
  ##
  #feed_menu: ["Popular", "Trending", "Subscriptions", "Playlists"]

  ##
  ## Default feed to display on the home page.
  ##
  ## Note: setting this option to "Popular" has no
  ## effect when 'popular_enabled' is set to false.
  ##
  ## Accepted values: Popular, Trending, Subscriptions, Playlists, <none>
  ## Default: Popular
  ##
  #default_home: Popular

  ##
  ## Default number of results to display per page.
  ##
  ## Note: this affects invidious-generated pages only, such
  ## as watch history and subscription feeds. Playlists, search
  ## results and channel videos depend on the data returned by
  ## the Youtube API.
  ##
  ## Accepted values: any positive integer
  ## Default: 40
  ##
  #max_results: 40

  ##
  ## Show/hide annotations.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #annotations: false

  ##
  ## Show/hide annotation.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #annotations_subscribed: false

  ##
  ## Type of comments to display below video.
  ##
  ## Accepted values: a two-entries array.
  ## Each entry can be one of: "youtube", "reddit", ""
  ##
  ## Default: ["youtube", ""]
  ##
  #comments: ["youtube", ""]

  ##
  ## Default player style.
  ##
  ## Accepted values: invidious, youtube
  ## Default: invidious
  ##
  #player_style: invidious

  ##
  ## Show/Hide the "related videos" sidebar when
  ## watching a video.
  ##
  ## Accepted values: true, false
  ## Default: true
  ##
  #related_videos: true


  # -----------------------------
  #  Video player behavior
  # -----------------------------

  ##
  ## Automatically play videos on page load.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #autoplay: false

  ##
  ## Automatically load the "next" video (either next in
  ## playlist or proposed) when the current video ends.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #continue: false

  ##
  ## Autoplay next video by default.
  ##
  ## Note: Only effective if 'continue' is set to true.
  ##
  ## Accepted values: true, false
  ## Default: true
  ##
  #continue_autoplay: true

  ##
  ## Play videos in Audio-only mode by default.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #listen: false

  ##
  ## Loop videos automatically.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #video_loop: false


  # -----------------------------
  #  Video playback settings
  # -----------------------------

  ##
  ## Default video quality.
  ##
  ## Accepted values: dash, hd720, medium, small
  ## Default: hd720
  ##
  #quality: hd720

  ##
  ## Default dash video quality.
  ##
  ## Note: this setting only takes effet if the
  ## 'quality' parameter is set to "dash".
  ##
  ## Accepted values:
  ##    auto, best, 4320p, 2160p, 1440p, 1080p,
  ##    720p, 480p, 360p, 240p, 144p, worst
  ## Default: auto
  ##
  #quality_dash: auto

  ##
  ## Default video playback speed.
  ##
  ## Accepted values: 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0
  ## Default: 1.0
  ##
  #speed: 1.0

  ##
  ## Default volume.
  ##
  ## Accepted values: 0-100
  ## Default: 100
  ##
  #volume: 100

  ##
  ## Allow 360° videos to be played.
  ##
  ## Note: This feature requires a WebGL-enabled browser.
  ##
  ## Accepted values: true, false
  ## Default: true
  ##
  #vr_mode: true

  # -----------------------------
  #  Subscription feed
  # -----------------------------

  ##
  ## In the "Subscription" feed, only show the latest video
  ## of each channel the user is subscribed to.
  ##
  ## Note: when combined with 'unseen_only', the latest unseen
  ## video of each channel will be displayed instead of the
  ## latest by date.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #latest_only: false

  ##
  ## Enable/Disable user subscriptions desktop notifications.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #notifications_only: false

  ##
  ## In the "Subscription" feed, Only show the videos that the
  ## user haven't watched yet (i.e which are not in their watch
  ## history).
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #unseen_only: false

  ##
  ## Default sorting parameter for subscription feeds.
  ##
  ## Accepted values:
  ##   'alphabetically'
  ##   'alphabetically - reverse'
  ##   'channel name'
  ##   'channel name - reverse'
  ##   'published'
  ##   'published - reverse'
  ##
  ## Default: published
  ##
  #sort: published


  # -----------------------------
  #  Miscellaneous
  # -----------------------------

  ##
  ## Proxy videos through instance by default.
  ##
  ## Warning: As most users won't change this setting in their
  ## preferences, defaulting  to true will significantly
  ## increase the instance's network usage, so make sure that
  ## your server's connection can handle it.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #local: false

  ##
  ## Show the connected user's nick at the top right.
  ##
  ## Accepted values: true, false
  ## Default: true
  ##
  #show_nick: true

  ##
  ## Automatically redirect to a random instance when the user uses
  ## any "switch invidious instance" link (For videos, it's the plane
  ## icon, next to "watch on youtube" and "listen"). When set to false,
  ## the user is sent to https://redirect.invidious.io instead, where
  ## they can manually select an instance.
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #automatic_instance_redirect: false

  ##
  ## Show the entire video description by default (when set to 'false',
  ## only the first few lines of the description are shown and a
  ## "show more" button allows to expand it).
  ##
  ## Accepted values: true, false
  ## Default: false
  ##
  #extend_desc: false
